diff options
Diffstat (limited to 'kernel/riscv')
| -rw-r--r-- | kernel/riscv/header.S | 23 | ||||
| -rw-r--r-- | kernel/riscv/linker.ld | 13 |
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; } |
