diff options
Diffstat (limited to 'arch/riscv64/conf')
| -rw-r--r-- | arch/riscv64/conf/init-link.S | 41 | ||||
| -rw-r--r-- | arch/riscv64/conf/kernel-link.S | 9 |
2 files changed, 7 insertions, 43 deletions
diff --git a/arch/riscv64/conf/init-link.S b/arch/riscv64/conf/init-link.S deleted file mode 100644 index 2f48814..0000000 --- a/arch/riscv64/conf/init-link.S +++ /dev/null @@ -1,41 +0,0 @@ -/* SPDX-License-Identifier: copyleft-next-0.3.1 */ -/* Copyright 2021 - 2022, Kim Kuparinen < kimi.h.kuparinen@gmail.com > */ - -OUTPUT_ARCH(riscv) -ENTRY(_start) - -SECTIONS { - /* slight hack, the binary is position independent code but technically - not a PIE, so avoid globals and just add the load address to external - addresses. */ - __init_start = 0; - - /* objcopy only copies these three sections (as far as I'm aware) into the - produced binary, so __init_end should point to the correct location in the - final binary - */ - .text ALIGN(4K) : AT(0) { - *(.init*) - *(.text*); - } - - .rodata : { - *(.rodata*) - } - - .data : { - *(.data*) - } - - .bss : { - *(.sbss*) *(.bss*) *(COMMON) - } - - __kernel = .; - __kernel_size = <KERNEL_SIZE>; - - .garbage : { - *(.note*) - *(.riscv.attributes) - } -} diff --git a/arch/riscv64/conf/kernel-link.S b/arch/riscv64/conf/kernel-link.S index d93b642..1a0d42f 100644 --- a/arch/riscv64/conf/kernel-link.S +++ b/arch/riscv64/conf/kernel-link.S @@ -5,9 +5,14 @@ OUTPUT_ARCH(riscv) ENTRY(main) SECTIONS { - . = ABSOLUTE(VM_KERN); + /* This is apparently necessary. I *think* it is to tell the linker that + * the kernel should be able to run in the bottom half of the address + * space, but I don't know for sure and this feels like a fairly major + * hack. + * @todo look into this further. + */ + . = ABSOLUTE(VM_DMAP); __kernel_start = .; - .text ALIGN(4K) : AT(0) { *(.kernel.start); *(.text*); |
