2.2.7. 이미지 내용 제어

다음 옵션은 이미지 내용에 영향을 미치는 기타 요소를 제어합니다.

--datacompressor on|off

RW 데이터 압축이 기본적으로 활성화되어 ROM 크기를 최소화할 수 있습니다. --datacompressor off 옵션을 사용하여 RW 데이터 압축을 해제하십시오.

--datacompressor list|id

이 옵션을 사용하면 제공된 RW 데이터 압축 알고리즘 중 하나를 지정할 수 있습니다.

  • 명령 행 옵션 --datacompressor list를 사용하여 링커에서 사용 가능한 데이터 압축기 목록을 얻습니다.

  • 데이터 압축 알고리즘을 지정하지 않으면 링커가 사용자에게 가장 적합한 알고리즘을 자동으로 선택합니다. 일반적으로 이 선택을 무시할 필요는 없습니다. 자세한 내용은 RW 데이터 압축을 참조하십시오.

    링커를 무시하려면 --datacompressor id를 사용하여 데이터 압축 알고리즘을 지정하십시오. 압축기를 지정하면 해독기가 코드 영역에 추가됩니다. 최종 이미지에 압축된 데이터가 없으면 해독기는 추가되지 않습니다.

--edit file-list

출력 바이너리에서 심볼 테이블을 편집하는 명령이 들어 있는 조정 파일을 지정할 수 있도록 합니다. 조정 파일의 명령을 지정하여 다음 작업을 수행할 수 있습니다.

  • 전역 심볼을 숨깁니다. 이 옵션을 사용하여 오브젝트 파일의 특정 전역 심볼을 숨깁니다. 숨겨진 심볼은 공개적으로 보이지 않습니다.

  • 전역 심볼의 이름을 바꿉니다. 이 옵션을 사용하여 심볼 명명 충돌을 확인합니다.

조정 파일 구문에 대한 자세한 내용은 전역 심볼 숨기기 및 이름 바꾸기를 참조하십시오.

둘 이상의 조정 파일을 지정하는 경우 다음 중 한 구문을 사용할 수 있습니다.

armlink --edit file1 --edit file2 --edit file3
armlink --edit file1,file2,file3 

쉼표와 파일 이름 사이에 공백을 포함하지 마십시오.

--entry location

이미지의 고유한 초기 엔트리 포인트를 지정합니다. 이미지에는 여러 개의 엔트리 포인트가 있을 수 있지만 이 옵션으로 지정한 초기 엔트리 포인트는 로더에서 사용할 수 있도록 실행 가능 파일 헤더에 저장됩니다. 이 옵션은 명령 행에서 한 번만 사용할 수 있습니다. ARM 디버거 예를 들어, RealView Debugger 또는 AXD는 이미지가 로드될 때 이 엔트리 주소를 사용하여 PC(프로그램 카운터)를 초기화합니다. 초기 엔트리 포인트는 다음과 같은 조건을 충족해야 합니다.

  • 이미지 엔트리 포인트는 실행 영역 안에 있어야 합니다.

  • 실행 영역이 비 오버레이 영역이어야 하며 루트 실행 영역(로드 주소 == 실행 주소)이어야 합니다.

location을 다음 중 하나로 대체하십시오.

entry_address

숫자 값, 예를 들면, 다음과 같습니다.

--entry 0x0
symbol

이미지 엔트리 포인트를 symbol의 주소로 지정합니다. 예를 들면, 다음과 같습니다.

--entry reset_handler
offset+object(section)

이미지 엔트리 포인트를 특정 object 내의 section 내부 offset으로 지정합니다. 예를 들면, 다음과 같습니다.

--entry 8+startup.o(startupseg)

--entry에 대한 인수 안에는 공백이 없어야 합니다. 입력 섹션 및 오브젝트 이름은 대소문자를 구분하지 않고 일치합니다. 다음과 같은 단순화된 표시를 사용할 수 있습니다.

  • offset이 0인 경우 object(section)입력 섹션이 하나만 있는 경우

  • object. object에 입력 섹션이 둘 이상 있는 경우 armlink가 오류 메시지를 생성합니다.

--exceptions

최종 이미지에 예외 테이블이 포함될 수 있도록 합니다. 이 옵션이 기본 옵션입니다.

자세한 내용은 명령 행 옵션을 사용하여 C++ 예외 처리를 참조하십시오.

--no_exceptions

사용하지 않는 섹션이 제거된 후 이미지에 예외 섹션이 있을 경우 링커에서 오류 메시지를 생성하도록 강제합니다. 코드가 예외의 영향을 받지 않도록 하려면 이 옵션을 사용합니다.

자세한 내용은 명령 행 옵션을 사용하여 C++ 예외 처리를 참조하십시오.

--exceptions_tables=action

예외 테이블이 레거시 오브젝트에 대해 생성되는 방법을 지정합니다. action을 다음 중 하나로 대체하십시오.

nocreate

링커는 레거시 오브젝트에 대해 예외 테이블을 만들지 않습니다. 이것이 기본값입니다.

unwind

링커가 아직 예외 테이블이 없는 이미지의 각 섹션에 대해 해제 테이블을 만듭니다.

cantunwind

링커가 아직 예외 테이블이 없는 이미지의 각 섹션에 대해 해제 없음 테이블을 만듭니다.

자세한 내용은 명령 행 옵션을 사용하여 C++ 예외 처리를 참조하십시오.

--first section-id

선택한 입력 섹션을 해당 실행 영역에서 가장 먼저 배치합니다. 예를 들어 벡터 테이블이 포함된 섹션을 이미지에 가장 먼저 배치할 수 있습니다. section-id를 다음 중 하나로 대체하십시오.

symbol

symbol을 정의하는 섹션을 선택합니다. 한 개 섹션만 가장 먼저 배치될 수 있기 때문에 둘 이상의 정의를 가진 심볼은 지정하면 안 됩니다. 예를 들면 다음과 같습니다.

--first reset
object(section)

object에서 section을 선택합니다. object와 그 뒤에 나오는 여는 괄호 사이에는 공백이 없어야 합니다. 예를 들면 다음과 같습니다.

--first init.o(init)
object

object에서 하나의 입력 섹션을 선택합니다. 이 짧은 형식을 사용하고 입력 섹션이 둘 이상이면 armlink에서 오류 메시지를 생성합니다. 예를 들면 다음과 같습니다.

--first init.o

Note

스캐터 로딩을 사용할 경우 스캐터 로딩 설명 파일의 +FIRST를 대신 사용하십시오.

--first를 사용하면 RO를 가장 먼저, RW를 두 번째로, ZI를 마지막으로 배치하는 영역의 출력 섹션에 대해 기본 특성 정렬 순서를 무시할 수 없습니다. 영역에 RO 섹션이 있으면 RW 또는 ZI 섹션을 맨 먼저 배치할 수 없습니다. 영역에 RO 또는 RW 섹션이 있으면 ZI 섹션을 맨 먼저 배치할 수 없습니다.

두 개의 서로 다른 섹션은 둘 다 동일한 실행 영역의 맨 처음에 배치할 수 없고 따라서 이 옵션의 인스턴스는 하나만 허용됩니다.

--last section-id

선택한 입력 섹션을 해당 실행 영역에서 가장 나중에 배치합니다. 예를 들어 이 옵션은 체크섬이 포함된 입력 섹션을 RW 섹션 영역의 끝에 배치하도록 강제합니다. section-id를 다음 중 하나로 대체하십시오.

symbol

symbol을 정의하는 섹션을 선택합니다. 한 개 섹션만 가장 나중에 배치될 수 있기 때문에 둘 이상의 정의를 가진 심볼은 지정하면 안 됩니다. 예를 들면 다음과 같습니다.

--last checksum
object(section)

object에서 section을 선택합니다. object와 그 뒤에 나오는 여는 괄호 사이에는 공백이 없어야 합니다. 예를 들면 다음과 같습니다.

--last checksum.o(check)
object

object에서 하나의 입력 섹션을 선택합니다. object에 입력 섹션이 둘 이상 있는 경우 armlink에서 오류 메시지를 생성합니다.

Note

스캐터 로딩을 사용할 경우 스캐터 로딩 설명 파일의 +LAST를 대신 사용하십시오.

--last를 사용하면 RO를 가장 먼저, RW를 두 번째로, ZI를 마지막으로 배치하는 영역의 출력 섹션에 대해 기본 특성 정렬 순서를 무시할 수 없습니다. 영역에 ZI 섹션이 있으면 RW 섹션을 맨 나중에 배치할 수 없습니다. 영역에 RW 또는 ZI 섹션이 있으면 RO 섹션을 맨 나중에 배치할 수 없습니다.

두 개의 서로 다른 섹션은 둘 다 동일한 실행 영역의 맨 끝에 배치할 수 없고 따라서 이 옵션의 인스턴스는 하나만 허용됩니다.

--remove

입력 섹션의 사용하지 않는 섹션을 제거하여 이미지에서 사용하지 않는 섹션이 제거되도록 합니다. 입력 섹션은 이미지 엔트리 포인트를 포함하거나 사용하지 않는 섹션에서 참조되는 경우 사용하는 것으로 간주됩니다. 사용하지 않는 섹션 제거도 참조하십시오.

Note

--remove를 사용할 경우 리셋 코드 또는 예외 처리기가 예기치 않게 제거되지 않도록 하기 위해 주의를 기울여야 합니다. --keep 옵션을 사용하여 예외 처리기를 식별하거나 ENTRY 지시문을 사용하여 예외 처리기를 엔트리 포인트로 레이블링합니다.

--remove (RO/RW/ZI/DBG)

Note

섹션 특성 한정자를 사용하는 --remove에 대한 지원은 향후 제공되지 않을 예정이며 이후 릴리스에서 제거됩니다.

--remove--remove (RO/RW/ZI/DBG)를 사용하는 것과 같습니다.

--no_remove

입력 섹션의 사용하지 않는 섹션 제거를 비활성화합니다. 그러면 사용하지 않는 경우에도 최종 이미지의 모든 입력 섹션이 유지됩니다.

--startup symbol

링커가 시작 심볼이 다른 대체 C 라이브러리를 사용할 수 있도록 합니다. 링커가 main()의 정의를 찾고 symbol에 대한 참조(또는 정의)는 찾지 못하면 링커에서 symbol에 대한 참조를 추가합니다. 기본적으로 symbol__main으로 설정됩니다.

라이브러리 사용에 대한 자세한 내용은 RealView Compilation Tools 버전 3.0 컴파일러 및 라이브러리 설명서에서 C 및 C++ 라이브러리에 대해 설명하는 장을 참조하십시오.

--symver_script file

암시적 심벌 버전 관리를 설정하고 file을 심볼 버전 스크립트로 지정할 수 있도록 합니다.

자세한 내용은 심볼 버전 관리를 참조하십시오.

--symver_soname

암시적 심볼 버전 관리를 설정하고 심볼 버전 관리를 통해 정적 바인딩을 강제로 수행할 수 있도록 합니다. 심볼에 버전이 정의되지 않은 경우 링커에서는 링크되는 파일의 SONAME을 사용합니다.

이 옵션은 BPABI 호환 실행 가능 파일을 생성하지만 --symver_script 옵션을 사용하여 버전 스크립트를 지정하지 않는 경우에 기본값입니다.

자세한 내용은 심볼 버전 관리Base Platform ABI for the ARM Architecture[BPABI]를 참조하십시오.

--soname name

공유 오브젝트에 대해 링크하는 오브젝트가 종속 이름으로 사용하는 공유 오브젝트 런타임 이름을 지정합니다. 이 종속 관계는 링커가 생성하는 실행 가능 파일에 저장됩니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

--force_so_throw

기본적으로 코드에서 예외를 throw하지 않으면 예외 테이블은 폐기됩니다. 이 옵션을 사용하여 이미지가 예외를 throw할 수 있는지 여부에 관계없이 모든 공유 오브젝트가 예외를 throw하여 링커가 예외 테이블을 유지하도록 할 수 있다는 것을 지정합니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

--pt_arm_exidx

이 옵션을 사용하여 PT_ARM_EXIDX 프로그램 헤더를 만들어 동적 내용을 가진 오브젝트의 예외 테이블 위치를 설명합니다. 링커는 이 옵션을 사용하여 예외가 throw될 수 있는지 여부에 관계없이 공유 오브젝트가 예외를 throw하여 예외 테이블을 유지할 수 있는지 확인합니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

--dynamiclinker name

런타임에 파일을 로드 및 재배치하는 데 사용하는 동적 링커를 지정합니다. 공유 오브젝트와 링크할 때 동적 링커는 실행 파일에 저장된 종속 관계 정보를 사용하여 로드할 파일을 식별합니다. ARM 리눅스 플랫폼에서 작업 중인 경우 링커는 기본 동적 링커가 /lib/ld-linux.so.2라고 간주합니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

--linux_abitag version-id

빌드하는 실행 가능 파일의 최소 호환 리눅스 커널 버전을 지정할 수 있도록 합니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

--vfemode=mode

VFE(가상 함수 제거)는 링커가 더 많은 사용하지 않는 섹션을 식별할 수 있도록 하는 기술입니다. 이 옵션을 사용하면 사용하지 않는 섹션과 RTTI(런타임 타입 정보) 오브젝트가 링커에서 제거되는 방법을 지정할 수 있습니다. 지정된 모드에 따라 링커는 컴파일러에서 제공하는 가상 함수 및 RTTI 오브젝트에 대한 추가 정보를 사용하여 그러한 함수를 사용하는 방법을 보다 정확하게 분석할 수 있습니다. 그런 다음 사용하지 않는 섹션이 제거됩니다.

mode를 다음 중 하나로 대체하십시오.

on

링커가 VFE를 인식하도록 만듭니다. 이 모드에서 링커는 오브젝트 파일의 내용을 기준으로 force 또는 off 모드를 선택합니다. 이것이 기본값입니다.

이것은 명령 행에서 VFE 옵션을 지정하지 않는 것과 동일합니다.

off

링커가 컴파일러가 제공하는 추가 정보를 무시하도록 합니다. 이 모드에서 최종 이미지는 VFE 인식 없이 컴파일 및 링크하여 생성된 이미지와 동일합니다.

force

링커가 VFE를 인식하도록 만들고 VFE 알고리즘이 적용되도록 합니다. 일부 오브젝트 파일에 VFE 정보가 없으면 링커는 제거를 계속하지만 오류 가능성에 대해 알리는 경고 메시지를 표시합니다.

force_no_rtti

기본 모드에서 작동할 경우(--vfemode=on 사용) 링커는 사용하지 않는 섹션과 RTTI 오브젝트를 모두 제거할 수 있습니다. 이 옵션을 사용하여 링커가 VFE를 인식하도록 만들고 모든 RTTI 오브젝트가 제거되도록 하면서 동시에 모든 가상 섹션을 유지합니다.

자세한 내용은 사용하지 않는 함수 제거도 참조하십시오.

--init symbol

초기화 코드를 정의하는 데 사용되는 심볼 이름을 지정합니다. 동적 링커는 실행 가능 파일이나 공유 오브젝트를 로드할 때 이 코드를 실행합니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

--cppinit symbol

링커가 다른 초기화 심볼을 가진 대체 C++ 라이브러리를 사용할 수 있도록 합니다. 기본적으로 symbol__cpp_initialize__aeabi_로 설정됩니다.

라이브러리 사용에 대한 자세한 내용은 RealView Compilation Tools 버전 3.0 컴파일러 및 라이브러리 설명서에서 C 및 C++ 라이브러리에 대해 설명하는 장을 참조하십시오.

--no_branchnop

링커는 분기를 NOP가 포함된 다음 명령어로 확인되는 재배치로 대체합니다. 이것이 기본값입니다.

이 옵션을 사용하여 이 동작을 비활성화하십시오.

분기 인라이닝 제어에 대한 자세한 내용은 분기 인라이닝을 참조하십시오.

--inline

분기 인라이닝이 이미지의 작은 함수 호출을 최적화할 수 있도록 합니다.

Note

이 분기 최적화를 활성화하면 디버그 정보가 부정확할 수 있도록 이미지가 변경되므로 기본적으로 해제됩니다. 활성화되면 경우 링커는 디버그 정보를 수정하려 하지 않습니다

분기 인라이닝 제어에 대한 자세한 내용은 분기 인라이닝을 참조하십시오.

--tailreorder

가능한 경우 해당 타겟 바로 앞으로 마무리 호출 섹션을 이동하여 섹션 끝에 있는 분기 명령어를 최적화합니다. 마무리 호출 섹션은 섹션의 맨 끝에 분기 명령어가 있는 섹션입니다. 분기는 섹션의 맨 처음 부분에서 함수를 타겟팅하는 재배치를 가져야 합니다. 이 옵션에는 일부 제한이 있습니다. 링커는 다음과 같은 특징이 있습니다.

  • 각각의 마무리 호출 타겟에 대해 하나의 마무리 호출 섹션만 이동할 수 있습니다.

  • 마무리 호출 섹션을 실행 영역 밖으로 이동할 수 없습니다.

  • 인라인 비니어 앞으로 마무리 호출 섹션을 이동하지 않습니다.

마무리 호출 섹션 처리에 대한 자세한 내용은 분기 인라이닝을 참조하십시오.

--keep section-id

사용하지 않는 섹션 제거로 제거하면 안 되는 입력 섹션을 지정합니다. 자세한 내용은 이미지 메모리 맵 지정을 참조하십시오.

모든 형식의 section-id 인수에는 *? 와일드카드가 포함될 수 있습니다. 명령 행에서 여러 --keep 옵션을 지정할 수 있습니다.

section-id를 다음 중 하나로 대체하십시오.

symbol

symbol을 정의하는 섹션이 사용하지 않는 섹션 제거 동안 유지되도록 지정합니다. symbol의 정의가 여러 개 있는 경우 armlink에서 오류 메시지를 생성합니다.

예를 들어, --keep int_handler를 사용할 수 있습니다.

_handler로 끝나는 심볼을 정의하는 모든 섹션을 유지하려면 --keep *_handler를 사용하십시오.

object(section)

objectsection이 사용하지 않는 섹션의 제거 동안 유지되도록 지정합니다. 예를 들어, vectors.o 오브젝트의 vect 섹션을 유지하려면 다음을 사용합니다.

--keep vectors.o(vect)

섹션 이름의 처음 세 개 문자가 vecvectors.o 오브젝트에서 모든 섹션을 유지하려면 다음을 사용합니다.

--keep vectors.o(vec*)
object

object의 한 개 입력 섹션이 사용하지 않는 섹션의 제거 동안 유지되도록 지정합니다. 이 짧은 형식을 사용하고 object에 입력 섹션이 둘 이상 있으면 armlink에서 오류 메시지를 생성합니다.

예를 들어, --keep dspdata.o를 사용할 수 있습니다.

dsp로 시작하는 이름을 가진 각 오브젝트에서 한 개의 입력 섹션을 유지하려면 --keep dsp*.o를 사용합니다.

--locals

실행 가능 이미지를 생성할 때 출력 심볼 테이블에 지역 심볼을 추가하도록 링커에 지시합니다. 이것이 기본값입니다.

--no_locals

실행 가능 이미지를 생성할 때 출력 심볼 테이블에 지역 심볼을 추가하지 않도록 링커에 지시합니다. 이것은 출력 심볼 테이블의 크기를 줄이려는 경우 유용한 최적화입니다.

--fini symbol

종료 코드의 엔트리 포인트를 정의하는 데 사용하는 심볼 이름을 지정합니다. 동적 링커는 실행 가능 파일이나 공유 오브젝트를 언로드할 때 이 코드를 실행합니다.

자세한 내용은 Chapter 6 System V 공유 라이브러리를 참조하십시오.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential