mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-07 10:00:07 +00:00
15eab1e3e8
On i386, since EAX, ECX and EDX are caller-saved, there are no need to save and restore EAX, ECX and EDX in getcontext, setcontext and swapcontext. They just need to clear EAX on success. The extra scratch registers are needed to enable CET. Tested on i386. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
28 lines
574 B
Plaintext
28 lines
574 B
Plaintext
#include <stddef.h>
|
|
#include <signal.h>
|
|
#include <sys/ucontext.h>
|
|
|
|
--
|
|
|
|
SIG_BLOCK
|
|
SIG_SETMASK
|
|
|
|
#define ucontext(member) offsetof (ucontext_t, member)
|
|
#define mcontext(member) ucontext (uc_mcontext.member)
|
|
#define mreg(reg) mcontext (gregs[REG_##reg])
|
|
|
|
oLINK ucontext (uc_link)
|
|
oSS_SP ucontext (uc_stack.ss_sp)
|
|
oSS_SIZE ucontext (uc_stack.ss_size)
|
|
oGS mreg (GS)
|
|
oFS mreg (FS)
|
|
oEDI mreg (EDI)
|
|
oESI mreg (ESI)
|
|
oEBP mreg (EBP)
|
|
oESP mreg (ESP)
|
|
oEBX mreg (EBX)
|
|
oEIP mreg (EIP)
|
|
oFPREGS mcontext (fpregs)
|
|
oSIGMASK ucontext (uc_sigmask)
|
|
oFPREGSMEM ucontext (__fpregs_mem)
|