summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-09-13 17:46:26 -0500
committerNathan Lee <me@nwlee.tech>2026-09-13 17:46:26 -0500
commit09be8ace254a7f8bb69542d09a6b2013636123a2 (patch)
tree928011aa958624369cefeb46f9e206093a55e0a2 /kernel
parent11501f6f0c82712ea5f172f9177f2375c87d06e9 (diff)
EFI boot header support
Diffstat (limited to 'kernel')
-rw-r--r--kernel/riscv/header.S23
-rw-r--r--kernel/riscv/linker.ld13
2 files changed, 36 insertions, 0 deletions
diff --git a/kernel/riscv/header.S b/kernel/riscv/header.S
new file mode 100644
index 0000000..cca2594
--- /dev/null
+++ b/kernel/riscv/header.S
@@ -0,0 +1,23 @@
+.section .header, "a", @progbits
+.extern _start
+#define CODE0 0x4d, 0x5a, 0, 0
+#define FLAGS 0
+#define TEXT_OFFSET 0
+#define HEADER_VERSION 0x00000002
+#define RES1 0
+#define RES2 0
+#define RES3 0
+#define MAGIC 0x5643534952
+#define MAGIC2 0x05435352
+header:
+ .byte CODE0
+ j _start
+ .quad TEXT_OFFSET
+ .quad 0 # image_size
+ .quad FLAGS
+ .int HEADER_VERSION
+ .int RES1
+ .quad RES2
+ .quad MAGIC
+ .int MAGIC2
+ .int RES3
diff --git a/kernel/riscv/linker.ld b/kernel/riscv/linker.ld
index ec51176..6689dce 100644
--- a/kernel/riscv/linker.ld
+++ b/kernel/riscv/linker.ld
@@ -10,6 +10,11 @@ MEMORY
SECTIONS
{
+ .header : {
+ KEEP(*(.header))
+ *(.header)
+ } > ROM
+
.text : {
KEEP(*(.text._start))
KEEP(*(.text.start))
@@ -60,6 +65,11 @@ SECTIONS
__ringbuf_end = .;
} > LOGRAM
+ .image_end (NOLOAD) : {
+ . = ALIGN(4);
+ __image_end = .;
+ } > ROM
+
/DISCARD/ : {
*(.eh_frame)
*(.eh_frame.*)
@@ -71,4 +81,7 @@ SECTIONS
*(.llvm_*)
*(.rela.*)
}
+
+ __image_start = ORIGIN(ROM);
+ __image_size = __image_end - __image_start;
}