summaryrefslogtreecommitdiff
path: root/data.S
diff options
context:
space:
mode:
Diffstat (limited to 'data.S')
-rw-r--r--data.S26
1 files changed, 26 insertions, 0 deletions
diff --git a/data.S b/data.S
new file mode 100644
index 0000000..8b651b4
--- /dev/null
+++ b/data.S
@@ -0,0 +1,26 @@
+// The kernel layout is:
+//
+// text
+// rodata
+// data
+// bss
+//
+// Conventionally, Unix linkers provide pseudo-symbols
+// etext, edata, and end, at the end of the text, data, and bss.
+// For the kernel mapping, we need the address at the beginning
+// of the data section, but that's not one of the conventional
+// symbols, because the convention started before there was a
+// read-only rodata section between text and data.
+//
+// To get the address of the data section, we define a symbol
+// named data and make sure this is the first object passed to
+// the linker, so that it will be the first symbol in the data section.
+//
+// Alternative approaches would be to parse our own ELF header
+// or to write a linker script, but this is simplest.
+
+.data
+.align 4096
+.globl data
+data:
+ .word 1