본문 바로가기
링커 스크립트 (Linker Script)

Linker Script (1 - 지시어)

by rlawnsghtest 2024. 2. 17.

링커 스크립트에서 사용되는 지시어들은 링커의 작업을 제어하고, 메모리 레이아웃, 섹션 배치, 심볼 할당 등을 정의하는 데 사용됩니다. 다양한 링커가 있으며, 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 링커 스크립트에서 사용할 수 있는 주요 지시어들을 포함하고 있으나, 링커의 버전이나 사용하는 툴체인에 따라 사용 가능한 지시어가 다를 수 있습니다. 링커 스크립트를 작성할 때는 항상 해당 툴체인의 공식 문서를 참조하는 것이 좋습니다.