1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 07:07:34 +00:00

LibC: Fix sigsetjmp on x86_64

Registers were clobbered, offset values into __jmp_buf were wrong...
This commit is contained in:
Jean-Baptiste Boric 2021-08-25 17:10:08 +02:00 committed by Andreas Kling
parent c87aa6d908
commit 295e89af04

View file

@ -16,17 +16,20 @@ setjmp:
.global sigsetjmp .global sigsetjmp
sigsetjmp: sigsetjmp:
mov %esi, 60(%rdi) // Store val into did_save_signal_mask mov %esi, 64(%rdi) // Store val into did_save_signal_mask
movl $0, 64(%rdi) // Clear saved_signal_mask movl $0, 68(%rdi) // Clear saved_signal_mask
test %esi, %esi test %esi, %esi
jz .Lsaveregs jz .Lsaveregs
mov %rdi, %r12 // Preserve sigjmp_buf argument push %rbp // Prepare ABI-compliant call to sigprocmask
mov $0, %rdi // Set argument how mov %rsp, %rbp
push %rdi
lea 68(%rdi), %rdx // Set argument oldset
mov $0, %rsi // Set argument set mov $0, %rsi // Set argument set
lea 64(%rdi), %rdx // Set argument oldset mov $0, %rdi // Set argument how
call sigprocmask@plt call sigprocmask@plt
mov %r12, %rdi // Restore sigjmp_buf argument pop %rdi
pop %rbp
.Lsaveregs: .Lsaveregs:
mov %rbx, (0 * 8)(%rdi) // Save registers mov %rbx, (0 * 8)(%rdi) // Save registers