Mold 링커 3.0.0 출시, Rust로 재작성

1 day ago 4

고속 링커 mold 3.0.0은 C++에서 Rust로 재작성한 첫 릴리스이며, 2.42.1이 마지막 C++ 버전임 2.42.1을 그대로 대체하도록 설계해 기존 명령행 옵션과 지원 아키텍처를 유지하며, 버그 수정을 제외한 출력과 링크 성능도 기존 버전과 동등함 손상된 입력 파일에서 발생할 수 있던 범위 밖 메모리 읽기에 경계 검사를 적용해, 세그멘테이션 오류 대신 해당 접근 지점에서 패닉으로 중단함 직접 빌드할 때는 CMake에서 Cargo로 전환해야 하며, Rust 1.95 이상과 C 컴파일러가 필요함 mold 3.x는 특히 링커 스크립트 지원에서 GNU ld와의 호환성 격차를 줄이고, Linux 배포판의 기본 링커로 채택될 기반을 마련하는 것이 목표임 Rust 전환과 기존 버전 호환성 2.42.1 릴리스 노트에서 예고한 Rust 재작성을 완료했으며, C++ 버전의 마지막 릴리스는 2.42.1임 mold 3.0은 기존 명령행 옵션과 대상 아키텍처를 유지하며, 아래 버그 수정에 따른 차이를 제외하면 2.42.1과 같은 출력을 생성함 링크 성능도 기존 버전과 동등한 수준임 호환성 검증은 모든 지원 대상의 테스트 스위트 실행, 다양한 실제 작업과 옵션 조합의 링커 출력 비교, 모든 Gentoo 패키지 빌드로 수행했으며 회귀 문제를 발견하지 못함 손상된 입력에 대한 메모리 접근 안전성이 달라짐 C++ 버전은 범위 밖 메모리를 읽다가 세그멘테이션 오류로 종료될 수 있었음 Rust 버전은 해당 읽기를 경계 검사하므로 잘못된 접근 지점에서 패닉으로 중단함 GNU ld 호환성, 특히 링커 스크립트 지원의 남은 격차를 줄이는 것이 3.x의 목표이며, Linux 배포판의 기본 링커 채택을 위한 기반을 마련하려 함 직접 빌드하거나 패키징할 때의 변경점 빌드 시스템이 Cargo로 바뀌었고 기존 CMake 옵션은 제거됨 Rust 1.95 이상과 C 컴파일러가 필요함 cargo build --release로 빌드하고 ./install-mold.sh로 설치하며, 설치 스크립트는 PREFIX와 DESTDIR를 지원함 기존 MOLD_TARGETS CMake 변수는 Cargo 기능으로 대체됐으며, 배포판은 이전처럼 모든 대상을 지원하도록 빌드해야 함 라이브러리를 $PREFIX/lib 이외의 위치, 예를 들어 /usr/lib64에 설치한다면 빌드와 설치 양쪽에서 MOLD_LIBDIR 를 설정해야 함 mold -run이 mold-wrapper.s...

Read Entire Article