diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2023-07-16 17:50:57 +0200 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2023-07-16 17:50:57 +0200 |
commit | cb608840b3a93fb7d2409012b8845b4d1c3fa91d (patch) | |
tree | c5ebdc3f0a31b8c8e92faf43cffb82fceb841e20 | |
parent | 78279e5b41c6958882d7e258edf457f74c515f34 (diff) |
[klibc] riscv64: Move shared library below executables
The default base address for riscv64 executables is 64 kiB, and I
originally selected a base address for the shared library of 2 MiB.
This limits the size of executables using it to be < 2 MiB, and it
also interacts with a bug in QEMU's user-mode emulation, causing
executables to immediately crash. It doesn't help code generation,
because single-instruction jumps have a range of only ±1 MiB and
two-instruction jumps have a range of ±2 GiB.
Move the shared library to 64 kiB and executables to 576 kiB, to allow
for generation of single-instruction jumps. (klibc.so is currently
much smaller than the 512 kiB this allows for.)
References: https://bugs.debian.org/1040981
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r-- | usr/klibc/arch/riscv64/MCONFIG | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/usr/klibc/arch/riscv64/MCONFIG b/usr/klibc/arch/riscv64/MCONFIG index 340610861c9e5..717aedaadea81 100644 --- a/usr/klibc/arch/riscv64/MCONFIG +++ b/usr/klibc/arch/riscv64/MCONFIG @@ -13,8 +13,13 @@ KLIBCOPTFLAGS += -g endif KLIBCBITSIZE = 64 -# Normal binaries start at 64 KB, so start the libary at 2 MB. -KLIBCSHAREDFLAGS = $(LD_IMAGE_BASE_OPT) 0x00200000 +# 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 |