diff options
author | johannst <johannst@users.noreply.github.com> | 2025-04-09 22:28:27 +0000 |
---|---|---|
committer | johannst <johannst@users.noreply.github.com> | 2025-04-09 22:28:27 +0000 |
commit | 4a9214d09d6a526bd029a1f92a01a5f451313c9a (patch) | |
tree | 2a4134ffb9b7f1d4cf6eee7e9305125cc878ce1c /development/ld/link-mem.ld | |
parent | 2cad8341019659a65fc6e94992165b3d7b7a37db (diff) | |
download | notes-4a9214d09d6a526bd029a1f92a01a5f451313c9a.tar.gz notes-4a9214d09d6a526bd029a1f92a01a5f451313c9a.zip |
deploy: 773d9b46ee3b1b88a94e69f42ea42654c63c48ec
Diffstat (limited to 'development/ld/link-mem.ld')
-rw-r--r-- | development/ld/link-mem.ld | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/development/ld/link-mem.ld b/development/ld/link-mem.ld new file mode 100644 index 0000000..b5167a5 --- /dev/null +++ b/development/ld/link-mem.ld @@ -0,0 +1,45 @@ +OUTPUT_FORMAT(elf64-x86-64) +ENTRY(_entry) + +MEMORY { + ROM : ORIGIN = 0x00100000, LENGTH = 0x4000 + RAM : ORIGIN = 0x00800000, LENGTH = 0x4000 +} + +SECTIONS { + /* Create .text output section at ROM (vaddr) */ + .text : { + *(.text*) + } > ROM + + ASSERT(. == ORIGIN(ROM) + SIZEOF(.text), "inc loc counter automatically") + + /* Create .data output section at RAM (vaddr) */ + /* Set load addr to ROM, right after .text (paddr) */ + .data : { + HIDDEN(_data_vaddr = .); + HIDDEN(_data_paddr = LOADADDR(.data)); + *(.data*) + } > RAM AT > ROM + + /* Append .rodata output section at ROM (vaddr) */ + .rodata : { + *(.rodata*) + } > ROM + + /* Append .stack output section at RAM (vaddr) aligned up to next 0x1000 */ + .stack : ALIGN (0x1000) { + . += 0x1000; + HIDDEN(_stack_top = .); + } > RAM + + /DISCARD/ : { + *(.*) + } +} + +/* Some example assertions */ +ASSERT(ADDR(.data) != LOADADDR(.data), "DATA vaddr and paddr must be different") +ASSERT(ADDR(.rodata) == LOADADDR(.rodata), "RODATA vaddr and paddr must be euqal") +ASSERT(ADDR(.stack) == ORIGIN(RAM) + 0x1000, "STACK section must aligned to 0x1000") +ASSERT(SIZEOF(.stack) == 0x1000, "STACK section must be 0x1000") |