Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libc/riscv/gen/setjmp.S
Show First 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | #endif | ||||
li a0, 0 | li a0, 0 | ||||
ret | ret | ||||
.align 3 | .align 3 | ||||
.Lmagic: | .Lmagic: | ||||
.quad _JB_MAGIC_SETJMP | .quad _JB_MAGIC_SETJMP | ||||
END(setjmp) | END(setjmp) | ||||
ENTRY(longjmp) | ENTRY(longjmp) | ||||
/* Check the magic value */ | |||||
ld t0, 0(a0) | |||||
ld t1, .Lmagic | |||||
bne t0, t1, botch | |||||
addi sp, sp, -(4 * 8) | addi sp, sp, -(4 * 8) | ||||
sd a0, (0 * 8)(sp) | sd a0, (0 * 8)(sp) | ||||
sd ra, (1 * 8)(sp) | sd ra, (1 * 8)(sp) | ||||
sd a1, (2 * 8)(sp) | sd a1, (2 * 8)(sp) | ||||
/* Restore the signal mask */ | /* Restore the signal mask */ | ||||
li a2, 0 /* oset */ | li a2, 0 /* oset */ | ||||
addi a1, a0, (_JB_SIGMASK * 8) /* set */ | addi a1, a0, (_JB_SIGMASK * 8) /* set */ | ||||
li a0, 3 /* SIG_BLOCK */ | li a0, 3 /* SIG_BLOCK */ | ||||
call _C_LABEL(sigprocmask) | call _C_LABEL(sigprocmask) | ||||
ld a1, (2 * 8)(sp) | ld a1, (2 * 8)(sp) | ||||
ld ra, (1 * 8)(sp) | ld ra, (1 * 8)(sp) | ||||
ld a0, (0 * 8)(sp) | ld a0, (0 * 8)(sp) | ||||
addi sp, sp, (4 * 8) | addi sp, sp, (4 * 8) | ||||
/* Check the magic value */ | |||||
ld t0, 0(a0) | |||||
ld t1, .Lmagic | |||||
bne t0, t1, botch | |||||
/* Restore the stack pointer */ | /* Restore the stack pointer */ | ||||
ld t0, 8(a0) | ld t0, 8(a0) | ||||
mv sp, t0 | mv sp, t0 | ||||
addi a0, a0, (2 * 8) | addi a0, a0, (2 * 8) | ||||
/* Restore the general purpose registers and ra */ | /* Restore the general purpose registers and ra */ | ||||
ld s0, (0 * 8)(a0) | ld s0, (0 * 8)(a0) | ||||
Show All 39 Lines |