From 4a9214d09d6a526bd029a1f92a01a5f451313c9a Mon Sep 17 00:00:00 2001 From: johannst Date: Wed, 9 Apr 2025 22:28:27 +0000 Subject: deploy: 773d9b46ee3b1b88a94e69f42ea42654c63c48ec --- development/ld/link-nomem.ld | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 development/ld/link-nomem.ld (limited to 'development/ld/link-nomem.ld') diff --git a/development/ld/link-nomem.ld b/development/ld/link-nomem.ld new file mode 100644 index 0000000..32b7f3c --- /dev/null +++ b/development/ld/link-nomem.ld @@ -0,0 +1,43 @@ +OUTPUT_FORMAT(elf64-x86-64) +ENTRY(_entry) + +SECTIONS { + /* Set the initial location counter (vaddr) */ + . = 0x00800000; + + /* Create .text output section at current vaddr */ + .text : { + *(.text*) + } + + ASSERT(. == 0x00800000 + SIZEOF(.text), "inc loc counter automatically") + + /* Create .data section at location counter aligned to the next 0x100 (vaddr) */ + /* Set the load address to 0x00100000 (paddr) */ + .data ALIGN(0x100) : AT(0x00100000) { + HIDDEN(_data_vaddr = .); + HIDDEN(_data_paddr = LOADADDR(.data)); + *(.data*) + } + + /* Create .rodata with explicit vaddr */ + /* Re-adjust the paddr location counter */ + .rodata 0x00804000 : AT(ADDR(.rodata)) { + *(.rodata*) + } + + ASSERT(. == 0x00804000 + SIZEOF(.rodata), "inc loc counter automatically") + + .stack ALIGN (0x1000) : { + . += 0x1000; + HIDDEN(_stack_top = .); + } + + /DISCARD/ : { + *(.*) + } +} + +/* Some example assertions */ +ASSERT(ADDR(.data) != LOADADDR(.data), "DATA vaddr and paddr must be different") +ASSERT(SIZEOF(.stack) == 0x1000, "STACK section must be 0x1000") -- cgit v1.2.3