링커 스크립트에서 사용되는 지시어들은 링커의 작업을 제어하고, 메모리 레이아웃, 섹션 배치, 심볼 할당 등을 정의하는 데 사용됩니다. 다양한 링커가 있으며, GNU ld 링커가 가장 널리 사용되는 하나입니다. 여기서는 GNU ld 링커 스크립트에서 주로 사용되는 지시어들을 소개합니다.
메모리 레이아웃 지시어
- MEMORY: 사용 가능한 메모리 영역과 그 특성(읽기/쓰기/실행 권한)을 정의합니다.
- SECTIONS: 섹션들을 메모리 내에 배치하는 방법을 정의합니다.
- PHDRS: 출력 파일의 프로그램 헤더를 정의합니다. 이는 실행 파일과 공유 라이브러리에 주로 사용됩니다.
섹션 배치 지시어
- .section_name : 특정 섹션의 시작을 나타냅니다. 이후에 나오는 내용은 해당 섹션에 배치됩니다.
- *(wildcard): 특정 패턴과 일치하는 모든 섹션을 선택합니다.
- . = ADDRESS: 현재 위치 카운터를 지정된 주소로 설정합니다.
- . += SIZE: 현재 위치 카운터에 지정된 크기를 더합니다.
- ALIGN: 섹션의 시작 주소를 특정 바이트 경계로 정렬합니다.
- PROVIDE: 심볼에 조건부로 값을 할당합니다. 심볼이 이미 정의되어 있지 않은 경우에만 값이 할당됩니다.
- ASSERT: 조건이 거짓인 경우 링킹을 실패하게 만듭니다.
심볼 관련 지시어
- ENTRY: 프로그램의 시작점(엔트리 포인트)을 지정합니다.
- EXTERN: 외부 심볼을 참조할 때 사용합니다.
- GLOBAL: 심볼을 전역으로 선언하여 다른 파일들에서 접근 가능하게 합니다.
- LOCAL: 심볼을 로컬로 선언하여 현재 파일 내에서만 접근 가능하게 합니다.
기타 지시어
- INCLUDE: 다른 스크립트 파일을 포함합니다.
- GROUP: 여러 파일을 하나의 그룹으로 묶습니다.
- SEARCH_DIR: 링커가 라이브러리를 찾을 디렉토리를 추가합니다.
- OUTPUT_FORMAT: 출력 파일의 포맷을 지정합니다.
- OUTPUT_ARCH: 출력 파일의 아키텍처를 지정합니다.
이 리스트는 GNU ld 링커 스크립트에서 사용할 수 있는 주요 지시어들을 포함하고 있으나, 링커의 버전이나 사용하는 툴체인에 따라 사용 가능한 지시어가 다를 수 있습니다. 링커 스크립트를 작성할 때는 항상 해당 툴체인의 공식 문서를 참조하는 것이 좋습니다.
'링커 스크립트 (Linker Script)' 카테고리의 다른 글
Linker Script (5 - 전역변수를 Flash에서 사용하기) (0) | 2024.02.18 |
---|---|
Linker Script (4 - SECTION) (0) | 2024.02.17 |
Linker Script (3 - MEMORY) (0) | 2024.02.17 |
Linker Script (2 - ENTRY) (0) | 2024.02.17 |
Linker Script 란? (0) | 2024.02.17 |