GodMode9/arm9/link.ld
Wolfvak 50270a820c
Split up the ARM9 code and data sections (#883)
* Split up the ARM9 code (.text, .vectors) and data (.rodata, .data, .bss) sections into their own ELFs.

This allows us to use more ARM9 WRAM while leaving the 128k BootROM mirror intact.

* use the makefile definition

* Also dump section headers on .dis file
2025-03-15 14:25:23 +01:00

54 lines
1.2 KiB
Plaintext

OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY
{
VECTORS (RX) : ORIGIN = 0x08000000, LENGTH = 64
CODEMEM (RX) : ORIGIN = 0x08000040, LENGTH = 512K - 64
BOOTROM (R) : ORIGIN = 0x08080000, LENGTH = 128K /* BootROM mirrors, don't touch! */
DATAMEM (RW) : ORIGIN = 0x080A0000, LENGTH = 384K
}
SECTIONS
{
.vectors : ALIGN(4) {
__vectors_lma = LOADADDR(.vectors);
__vectors_vma = ABSOLUTE(.);
KEEP(*(.vectors));
. = ALIGN(4);
__vectors_len = ABSOLUTE(.) - __vectors_vma;
} >VECTORS AT>CODEMEM
.text : ALIGN(4) {
__text_s = ABSOLUTE(.);
*(.text.start);
*(.text*);
. = ALIGN(4);
__text_e = ABSOLUTE(.);
} >CODEMEM
.rodata : ALIGN(4) {
*(.rodata*);
. = ALIGN(4);
__exidx_start = .;
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
__exidx_end = .;
. = ALIGN(4);
} >DATAMEM
.data : ALIGN(4) {
*(.data*);
. = ALIGN(4);
} >DATAMEM
.bss (NOLOAD) : ALIGN(4) {
__bss_start = .;
*(.bss*);
. = ALIGN(4);
__bss_end = .;
} >DATAMEM
__end__ = ABSOLUTE(.);
}