CLIR: Cranelift 컴파일러를 위한 생존성 기반 및 구조 인식 퍼징 (Fuzzing)
요약
Cranelift 컴파일러의 버그 탐지를 위해 SSA 유효성과 연산 밀도를 고려한 차분 테스트 프레임워크 CLIR을 제안합니다. CLIR은 기존 도구들보다 월등한 성능을 보이며 다양한 아키텍처에서 다수의 버그를 성공적으로 발견했습니다.
핵심 포인트
- Cranelift 컴파일러를 위한 생존성 기반 및 구조 인식 퍼징 프레임워크 CLIR 제안
- SSA 유효성 보장 및 연산 밀도 극대화를 위한 계층적 생성 및 명령어 정제 전략 도입
- 기존 베이스라인 대비 압도적인 버그 탐지 성능 입증
- 72시간 내 24개의 버그 발견 및 다수의 버그 수정 기여
현대적인 컴파일러는 고수준 프로그래밍 언어를 다양한 아키텍처에 걸쳐 머신 코드(machine code)로 정확하게 변환해야 하는 복잡한 소프트웨어 시스템입니다. 원래 WebAssembly를 위해 개발되었고 최근 Rust의 실험적 백엔드로 채택된 빠르고 현대적인 컴파일러 백엔드인 Cranelift는, LLVM에 비해 우수한 컴파일 속도와 x86-64, AArch64, s390x, RISCV64를 포함한 포괄적인 멀티 아키텍처 지원 덕분에 중요성이 점점 커지고 있습니다. 그러나 컴파일러 테스트 분야의 수십 년간의 발전에도 불구하고, Cranelift를 테스트하는 것은 여전히 다음과 같은 독특한 과제들을 안겨줍니다: (1) SSA (Static Single Assignment) 형태의 엄격한 강제 하에서 유효한 IR (Intermediate Representation)을 구축하는 것, (2) 백엔드 구성 요소를 압박할 수 있을 만큼 충분한 연산 밀도(computational density)를 가진 시퀀스를 생성하는 것, 그리고 (3) 이기종 아키텍처 전반에서 광범위한 백엔드 커버리지와 효율적인 근본 원인 분석(root cause analysis) 사이의 균형을 맞추는 것입니다. 이러한 과제를 해결하기 위해, 우리는 SSA 유효성을 보장하기 위한 구문 보존 계층적 생성 전략(syntax-preserving hierarchical generation strategy), 연산 밀도를 극대화하기 위한 생존성 가이드형 명령어 정제 메커니즘(liveness-guided instruction refinement mechanism), 그리고 이기종 백엔드 전반에서 효율적인 근본 원인 분석을 용이하게 하기 위한 진단 가이드형 교차 아키텍처 적응 스킴(diagnosis-guided cross-architecture adaptation scheme)을 통합한 차분 테스트(differential testing) 프레임워크인 CLIR을 제안합니다. 우리의 종합적인 평가 결과, CLIR은 기존의 최첨단 베이스라인(state-of-the-art baselines)보다 성능이 현저히 뛰어남을 입증했습니다. CLIR은 cranelift-fuzzgen, wasm-smith, WASMaker보다 각각 8배, 24배, 8배 더 많은 고유 버그를 탐지한 반면, RustSmith는 버그를 발견하지 못했습니다. 결과적으로, 72시간의 테스트 기간 내에 CLIR은 모든 대상 아키텍처에 걸쳐 24개의 버그를 발견했으며, 그 중 21개가 확인되었고 9개가 수정되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기