ABI: 심볼 맹글링¶
Swift의 안정적 심볼 맹글링 체계. 원본: swift/docs/ABI/Mangling.rst
맹글링 접두사¶
| 접두사 | 버전 |
|---|---|
$s |
Swift stable mangling (현재) |
@__swiftmacro_ |
매크로 파일명 맹글링 |
_T0 |
Swift 4.0 |
$S |
Swift 4.2 |
$e |
Embedded Swift (불안정) |
맹글링 구조¶
Post-fix 순서: 식별자가 먼저 오고, 이후 타입 연산자가 해석 방법을 결정한다.
- 연산자는 단일 문자(중요) 또는 여러 문자+숫자(부가) 형태
- 모듈 이름이 항상 맹글링 시작 부분에 위치 → 공통 접두사 최적화
Symbolic Reference¶
바이너리 내에서 타입 참조를 효율화하기 위해 포인터를 직접 임베딩:
- 제어 문자
\x01~\x17: 상대 참조 (4바이트) - 제어 문자
\x18~\x1F: 절대 참조 (포인터 크기) - 컴파일러가 생성한 메타데이터에만 유효
- 외부 입력의 맹글링 이름에서는 symbolic reference를 거부해야 함
디맹글링¶
swift_stdlib_demangleName 함수가 맹글링된 심볼을 사람이 읽을 수 있는 이름으로 변환.
파일 위치¶
swift/lib/SwiftDemangle/— 디맹글링 라이브러리swift/include/swift/Demangling/— 디맹글러 헤더swift/stdlib/public/runtime/— 런타임 디맹글링 지원
관련 페이지: runtime, abi-type-metadata, abi-type-layout, abi-calling-convention, abi-stability, glossary-compiler