aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64/conf
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv64/conf')
-rw-r--r--arch/riscv64/conf/init-link.S41
-rw-r--r--arch/riscv64/conf/kernel-link.S9
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*);