summaryrefslogtreecommitdiff
path: root/kernel/linker.lds
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/linker.lds')
-rw-r--r--kernel/linker.lds57
1 files changed, 57 insertions, 0 deletions
diff --git a/kernel/linker.lds b/kernel/linker.lds
new file mode 100644
index 0000000..64ea771
--- /dev/null
+++ b/kernel/linker.lds
@@ -0,0 +1,57 @@
+MEMORY {
+ ram (wxa) : ORIGIN = 0x80000000, LENGTH = 128M
+}
+
+PHDRS {
+ text PT_LOAD;
+ rodata PT_LOAD;
+ data PT_LOAD;
+ bss PT_LOAD;
+}
+
+SECTIONS {
+ .text : ALIGN(4K) {
+ PROVIDE(_text_start = .);
+ *(.text.init);
+ *(.text .text.*);
+ . = ALIGN(4K);
+ PROVIDE(_text_end = .);
+ } >ram AT>ram :text
+
+ PROVIDE(_global_pointer = .);
+
+ .rodata : ALIGN(4K) {
+ PROVIDE(_rodata_start = .);
+ *(.rodata .rodata.*);
+ . = ALIGN(4K);
+ PROVIDE(_rodata_end = .);
+ } >ram AT>ram :rodata
+
+ .data : ALIGN(4K) {
+ PROVIDE(_data_start = .);
+ *(.data .data.*);
+ . = ALIGN(4K);
+ PROVIDE(_data_end = .);
+ } >ram AT>ram :data
+
+ .bss : ALIGN(4K) {
+ PROVIDE(_bss_start = .);
+ *(.sbss .sbss.*);
+ *(.bss .bss.*);
+ . = ALIGN(4K);
+ PROVIDE(_bss_end = .);
+ } >ram AT>ram :bss
+
+ . = ALIGN(4K);
+ PROVIDE(_stack_start = .);
+
+ PROVIDE(_stack_top = _stack_start + 0x100000);
+ PROVIDE(_stack_end = _stack_top);
+
+ PROVIDE(_ram_start = ORIGIN(ram));
+ PROVIDE(_ram_end = _ram_start + LENGTH(ram));
+
+ PROVIDE(_heap_start = _stack_end);
+ PROVIDE(_heap_size = ORIGIN(ram) + LENGTH(ram) - _heap_start);
+ PROVIDE(_heap_end = _heap_start + _heap_size);
+}