aboutsummaryrefslogtreecommitdiffhomepage
path: root/development/ld/link-nomem.ld
diff options
context:
space:
mode:
authorjohannst <johannst@users.noreply.github.com>2025-04-09 22:28:27 +0000
committerjohannst <johannst@users.noreply.github.com>2025-04-09 22:28:27 +0000
commit4a9214d09d6a526bd029a1f92a01a5f451313c9a (patch)
tree2a4134ffb9b7f1d4cf6eee7e9305125cc878ce1c /development/ld/link-nomem.ld
parent2cad8341019659a65fc6e94992165b3d7b7a37db (diff)
downloadnotes-4a9214d09d6a526bd029a1f92a01a5f451313c9a.tar.gz
notes-4a9214d09d6a526bd029a1f92a01a5f451313c9a.zip
deploy: 773d9b46ee3b1b88a94e69f42ea42654c63c48ec
Diffstat (limited to 'development/ld/link-nomem.ld')
-rw-r--r--development/ld/link-nomem.ld43
1 files changed, 43 insertions, 0 deletions
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")