summaryrefslogtreecommitdiffstats
path: root/usr/klibc/arch/riscv64/MCONFIG
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/arch/riscv64/MCONFIG')
-rw-r--r--usr/klibc/arch/riscv64/MCONFIG29
1 files changed, 29 insertions, 0 deletions
diff --git a/usr/klibc/arch/riscv64/MCONFIG b/usr/klibc/arch/riscv64/MCONFIG
new file mode 100644
index 0000000..717aeda
--- /dev/null
+++ b/usr/klibc/arch/riscv64/MCONFIG
@@ -0,0 +1,29 @@
+# -*- makefile -*-
+#
+# arch/riscv64/MCONFIG
+#
+# Special rules for this architecture. Note that this is actually
+# included from the main Makefile, and that pathnames should be
+# accordingly.
+#
+
+KLIBCOPTFLAGS += -Os -fomit-frame-pointer
+ifeq ($(DEBUG),y)
+KLIBCOPTFLAGS += -g
+endif
+KLIBCBITSIZE = 64
+
+# Normal binaries start at 64 kiB. Jumps can use either a single
+# instruction with offset of ±1 MiB, or two instructions with offset
+# of ±2 GiB. Putting klibc.so close above the executable can cause
+# breakage, so instead swap them around: klibc.so at 64 kiB and
+# executable at 576 kiB.
+KLIBCLDFLAGS = $(LD_IMAGE_BASE_OPT) 0x90000
+KLIBCSHAREDFLAGS = $(LD_IMAGE_BASE_OPT) 0x10000
+KLIBCSHAREDFLAGS += --defsym '__global_pointer$$=0'
+
+# Kernel has never used stack trampolines
+KLIBCEXECSTACK := n
+
+KLIBCEMAIN := -e _main
+KLIBCCRTSHARED += $(KLIBCOBJ)/arch/riscv64/_main.o