| |||
| Home > 기본 링커 기능 사용 > 베니어 | |||
베니어는 링커가 생성하고 프로그램으로 삽입되는 작은 코드 섹션입니다. armlink는 분기에 현재 상태의 분기 범위를 벗어나는 대상이 포함될 경우 베니어를 생성해야 합니다.
BL 명령어의 범위는 ARM의 경우 32MB이고, Thumb-2의 경우 16MB,
Thumb의 경우 4MB입니다. 따라서 베니어는 명령어의 중간 타겟이 된 다음 PC를 대상 주소로 설정함으로써 분기
범위를 확장할 수 있습니다. ARM 및 Thumb이 혼합되면 베니어가 프로세서 상태도 변경합니다.
armlink는 다음과 같은 베니어 유형을 지원합니다.
ARM 대 ARM
ARM 대 Thumb (인터워킹 베니어)
Thumb 대 ARM (인터워킹 베니어)
Thumb 대 Thumb
armlink는 각 베니어에 대해 Veneer$$Code라고
하는 하나의 입력 섹션을 생성합니다. 베니어는 요구 사항을 충족시킬 수 있는 다른 기존 베니어가 없는 경우에만 생성됩니다.
두 개 입력 섹션에 동일한 대상에 대한 긴 분기가 포함되는 경우에는 한 개 베니어만 생성됩니다. 베니어는 두 섹션
모두가 도달할 수 있는 경우에만 이런 식으로 공유됩니다.
ARMv4T를 사용 중인 경우 armlink는 분기에 ARM과 Thumb 사이의
상태 변화가 포함될 때 베니어를 생성합니다. ARMv5 이상에서는 BLX 명령어가 사용됩니다.