나빌로스 하면서 링커스크립트를 좀 봐야할거같아서 찾아보니까 이 자료가 적당해보인다.

 

http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_3.html

 

Using LD, the GNU linker - Linker Scripts

Every link is controlled by a linker script. This script is written in the linker command language. 모든 링크 과정은 링커 스크립트가 조정한다. 이 스크립트는 링커 명령 언어로 쓰여진다. The main purpose of the linker script

korea.gnu.org

 

 

링커

- 여러 오브젝트 파일을 합쳐서 실행 파일로 만들며, 각 오브젝트 파일은 섹션들을 갖고 있음.

 

 

SECTION 명령어 개요

- 링커 스크립트의 유일한 명령어로 코드, 초기화된 데이터, 초기화되지 않은 데이터가 있으면 .text, .data, .bss 섹션이 됨

 

 

 

링커 스크립트 예시

- 코드가 0x10000에 로드되고, 데이터는 0x800 0000에서 시작하는 경우'

- 첫째 줄에선 위치 카운터 '.'의 값을 0x1 0000로 설정.(처음에는 0이며, 설정안할시 현재 값)

- 둘째 줄에선 출력섹션으로 .text 정의하면서, ':' 뒤에 있는 *(.text)는 모든 입력 파일의 .text 섹션을 나타냄.

  + 출력 섹션 '.text'를 정의 할 때, 위치 카운터가 '0x1 0000'이므로 출력(실행) 파일의 .text 섹션 주소를 '0x1 0000'이 됨.

- 셋째 줄에선 위치 카운터 값을 '0x800 0000'로 설정

- 나머지 줄에선 .data, .bss 섹션 정의.

  + 출력 섹션 .data의 주소는 0x800 0000으로 설정

  + .bss의 주소는 .data 섹션의 바로 뒤에 위치

SECTIONS
{
  . = 0x10000;
  .text : { *(.text) }
  . = 0x8000000;
  .data : { *(.data) }
  .bss : { *(.data) }
}

 

 

 

 

SECTIONS 명령어

- 입력 섹션의 내용을 어떻게 출력 섹션에 매핑할지. 출력 섹션의 메모리 상 위치를 어떻게 할지 정의

- sections-command whdfb : entry 명령어, 심볼 입력, 출력 섹션 설명

SECTIONS
{
  sections-command
  sections-command
  ...
}

 

 

출력 섹션 형태

section [address] [(type)] : [AT(lma)]
{
  output-section-command
  output-section-command
  ...
}

 

 

 

 

+ Recent posts