Linker가 필요한 정보
- 입력 section들이 어떻게 region으로 그룹화 되었는지 그룹화 정보
- Memory map에서 각 region이 어디에 위치한지 정보
Section name and macro
- .text: __TEXT_START__ / __TEXT_END__
- .bss: __BSS_START__ / __BSS_END__
- .data ..
Linker script를 사용하기 위한 옵션
- ld 옵션에 -T FILE 또는 --script FILE 으로 사용함.
- ex.
LDFLAGS = ~~~ -T linker.ld -Map $(OUTDIR)/$(BIN).map
Linker script 작성
- OUTPUT 형식
- OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm")
- OUTPUT_ARCH(arm)
- entry point
- ENTRY(_start)
- sections
- SECTIONS
{
section-command
section-command
..
}
- ex.
SECTIONS
{
.text __TEXT_START__ :
{
__TEXT_START__ = .;
*startup.o (.text);
*main.o (.text);
*(.text);
. = ALIGN(4);
__TEXT_END__ = .;
}
}
작성 예시OUTPUT_FORMAT("elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
__TEXT_START__ = 0x20000000;
SECTIONS
{
.text __TEXT_START__ :
{
__TEXT_START__ = .;
*startup.o (.text);
*main.o (.text);
*(.text);
. = ALIGN(4);
__TEXT_END__ = .;
}
.rodata :
{
__RODATA_START__ = .;
*startup.o (.rodata);
*main.o (.rodata);
*(.rodata);
__RODATA_END__ = .;
. = ALIGN(4);
}
.bss :
{
__BSS_START__ = .;
*startup.o (.bss);
*main.o (.bss);
*(.bss);
__BSS_END__ = .;
. = ALIGN(4);
}
_end = .;
__end = _end;
PROVIDE(end = .);
}
댓글 없음:
댓글 쓰기