Move setjmp and sigsetjmp together

This fixes compilation of relibc on arm64. On arm64 the reference from
sigsetjmp to setjmp has a limited range.
This commit is contained in:
bjorn3
2026-03-29 16:18:21 +02:00
parent 18e47cdf5a
commit f8626fd9d0
8 changed files with 37 additions and 76 deletions
@@ -0,0 +1,21 @@
.global sigsetjmp
.global __sigsetjmp
.type sigsetjmp,%function
.type __sigsetjmp,%function
sigsetjmp:
__sigsetjmp:
cbz x1,setjmp
str x30,[x0,#176]
str x19,[x0,#176+8+8]
mov x19,x0
bl setjmp
mov w1,w0
mov x0,x19
ldr x30,[x0,#176]
ldr x19,[x0,#176+8+8]
.hidden __sigsetjmp_tail
b __sigsetjmp_tail
+26
View File
@@ -0,0 +1,26 @@
.global sigsetjmp
.global __sigsetjmp
.type sigsetjmp,@function
.type __sigsetjmp,@function
sigsetjmp:
__sigsetjmp:
mov ecx, dword ptr [esp + 8]
jecxz 1f
mov eax, dword ptr [esp + 4]
pop [eax + 24]
mov dword ptr [eax * 8 + 28], ebx
mov ebx, eax
.hidden ___setjmp
call ___setjmp
push [ebx + 24]
mov dword ptr [esp + 4], ebx
mov dword ptr [esp + 4], eax
mov ebx, dword ptr [ebx * 8 + 28]
.hidden __sigsetjmp_tail
jmp __sigsetjmp_tail
1: jmp ___setjmp
@@ -0,0 +1,23 @@
.global sigsetjmp
.global __sigsetjmp
.type sigsetjmp, %function
.type __sigsetjmp, %function
sigsetjmp:
__sigsetjmp:
bnez a1, 1f
tail setjmp
1:
sd ra, 208(a0)
sd s0, 224(a0)
mv s0, a0
call setjmp
mv a1, a0
mv a0, s0
ld s0, 224(a0)
ld ra, 208(a0)
.hidden __sigsetjmp_tail
tail __sigsetjmp_tail
+24
View File
@@ -0,0 +1,24 @@
.global sigsetjmp
.global __sigsetjmp
.type sigsetjmp,@function
.type __sigsetjmp,@function
sigsetjmp:
__sigsetjmp:
test esi, esi
jz 1f
pop [rdi + 64]
mov qword ptr [rdi * 8 + 72], rbx
mov rbx, rdi
call setjmp
push [rbx + 64]
mov rdi, rbx
mov esi, eax
mov rbx, qword ptr [rbx * 8 + 72]
.hidden __sigsetjmp_tail
jmp __sigsetjmp_tail
1: jmp setjmp