Hacker News오픈소스 · 도구오늘의 주요

고속 링커 mold, Rust로 완전 재작성해 3.0 출시

원제 Mold Linker Version 3.0.0 Release – Rewritten in Rust

147 포인트댓글 66
Key Point

개발자가 시스템에서 사용 중인 링커를 Rust 기반 고성능 대체품으로 전환할 수 있는 완성도 높은 메이저 릴리스가 나왔으며, 특히 안전성 향상과 광범위한 호환성 수정이 주목할 만하다.

핵심 요약

  • mold 3.0은 C++에서 Rust로 완전히 재작성한 고속 링커의 첫 번째 메이저 릴리스로, 2.42.1이 마지막 C++ 버전이다.
  • 2.42.1과 동일한 커맨드라인 옵션, 지원 아키텍처, 출력 결과를 제공하며 링킹 성능도 동등하게 유지된다.
  • GNU ld와의 호환성 간격 해소, 특히 링커 스크립트 지원 강화와 Linux 배포판 기본 링커로의 채택을 목표로 한다.
  • Rust 재작성으로 손상된 입력 파일에서의 안전성이 개선되어, 메모리 越境 읽기 대신 panic으로 안전하게 중단된다.
  • CMake에서 Cargo로 빌드 시스템 변경되었고, Rust 1.95 이상과 C 컴파일러가 필요하며, oneTBB 의존성이 제거되었다.
  • 정적 링크 실행 파일 생성 시 크래시, 출력 파일이 입력 파일이기도 한 경우의 오류, 버전 스크립트/--default-symver 버그 등 다수의 호환성 문제를 수정했다.
  • --gc-sections이 --init/--fini 함수 제거 중지, 동일한 이름의 공통 심볼이 최대 크기와 최엄격 정렬 채택, --icf 옵션의 공유 라이브러리 함수 폴딩 중지 등으로 동작을 개선했다.
  • 재정의 불가능한 출력, -r 버그(C++ 예외 손상, 심볼 제거, 데이터 손실) 등 여러 경계 케이스를 수정했다.
  • GOT 상대 재배치와 R_ARM_REL32는 공유 라이브러리의 심볼에 대해 올바른 주소 처리 또는 오류 보고, PC 상대 재배치 오류는 원인과 해결법을 설명한다.
  • --defsym 공유 라이브러리 심볼 별칭, 미정의 비약한 숨겨진 심볼, 64비트를 초과하는 --defsym 값 등이 이제 오류를 발생시킨다.
  • 단일 대시 옵션 파싱 수정, --dynamic-list-data 등 옵션이 다음 인자를 소비하지 않게 변경, 버전 스크립트에서 첫 번째 심볼 버전이 우선되도록 통일했다.
  • 8 GiB 가상 주소 공간 예약 제거로 ulimit -v 제약 하에서 작동, AArch64/PPC32/ARM32의 범위 확장 thunk 버그 수정, ARM32 빅 엔디안 -r 출력 수정 등 아키텍처별 개선을 이뤘다.
  • RISC-V와 LoongArch에서 함수 폴딩 이완 시 호출 문제 수정, RISCV_64/LARCH_64 재배치 지원 추가, LoongArch의 TLSDESC 극단 코드 모델 지원 등을 구현했다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗