mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-22 10:21:04 +00:00
libc/riscv: fix link errors with GCC 12
Dynamically linked functions can not be called directly with jump ("j", "jal") and friends. Calls must go through the PLT. issue #4827
This commit is contained in:
parent
ff497bc710
commit
cc5d476fb1
@ -1 +1 @@
|
|||||||
a4d148016cfbc4c494b277e164d67617cf540e31
|
dfcf0321f6f20fb8051954bc3fb4e661467a3434
|
||||||
|
40
repos/libports/src/lib/libc/patches/sigsetjmp_riscv.patch
Normal file
40
repos/libports/src/lib/libc/patches/sigsetjmp_riscv.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
Back port from FreeBSD 13.1. required for GCC 12
|
||||||
|
|
||||||
|
Fixes ld error message: "relocation R_RISCV_JAL against `setjmp' which may bind
|
||||||
|
externally can not be used when making a shared object" which means that there
|
||||||
|
can not be a direct jump ("j", "jal", etc.) to a function is a jump slot (in
|
||||||
|
PLT). So do not use the "j" calls.
|
||||||
|
|
||||||
|
--- src/lib/libc/lib/libc/riscv/gen/sigsetjmp.S
|
||||||
|
+++ src/lib/libc/lib/libc/riscv/gen/sigsetjmp.S
|
||||||
|
@@ -38,20 +38,24 @@ __FBSDID("$FreeBSD: releng/12.0/lib/libc/riscv/gen/sigsetjmp.S 294227 2016-01-17
|
||||||
|
#include <machine/setjmp.h>
|
||||||
|
|
||||||
|
ENTRY(sigsetjmp)
|
||||||
|
- beqz a1, _C_LABEL(_setjmp)
|
||||||
|
- j _C_LABEL(setjmp)
|
||||||
|
+ beqz a1, 1f
|
||||||
|
+tail _C_LABEL(setjmp)
|
||||||
|
+ 1:
|
||||||
|
+ tail _C_LABEL(_setjmp)
|
||||||
|
END(sigsetjmp)
|
||||||
|
|
||||||
|
ENTRY(siglongjmp)
|
||||||
|
/* Load the _setjmp magic */
|
||||||
|
ld a2, .Lmagic
|
||||||
|
- ld a3, 0(a0)
|
||||||
|
+ld a3, 0(a0)
|
||||||
|
|
||||||
|
/* Check the magic */
|
||||||
|
- beq a2, a3, _C_LABEL(_longjmp)
|
||||||
|
- j _C_LABEL(longjmp)
|
||||||
|
+ beq a2, a3, 1f
|
||||||
|
+tail _C_LABEL(longjmp)
|
||||||
|
+ 1:
|
||||||
|
+tail _C_LABEL(_longjmp)
|
||||||
|
|
||||||
|
.align 3
|
||||||
|
-.Lmagic:
|
||||||
|
+ .Lmagic:
|
||||||
|
.quad _JB_MAGIC__SETJMP
|
||||||
|
END(siglongjmp)
|
Loading…
x
Reference in New Issue
Block a user