diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-02-01 05:44:55 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-02-01 05:44:55 -0800 |
commit | 15eab1e3e89129ab3ed03f5bdc3415b26e9caeb9 (patch) | |
tree | fa94bea918c6ce99212161143aa65683560e2e78 /sysdeps/unix/sysv/linux/i386/getcontext.S | |
parent | 635d6fae03257129b4672591b700a495cb6cb6c7 (diff) | |
download | glibc-15eab1e3e89129ab3ed03f5bdc3415b26e9caeb9.tar.gz glibc-15eab1e3e89129ab3ed03f5bdc3415b26e9caeb9.tar.xz glibc-15eab1e3e89129ab3ed03f5bdc3415b26e9caeb9.zip |
i386: Don't unnecessarily save and restore EAX, ECX and EDX [BZ# 25262]
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>
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/getcontext.S')
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/getcontext.S | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/getcontext.S b/sysdeps/unix/sysv/linux/i386/getcontext.S index f86df4d555..9c1df9a2aa 100644 --- a/sysdeps/unix/sysv/linux/i386/getcontext.S +++ b/sysdeps/unix/sysv/linux/i386/getcontext.S @@ -26,13 +26,7 @@ ENTRY(__getcontext) /* Load address of the context data structure. */ movl 4(%esp), %eax - /* Return value of getcontext. EAX is the only register whose - value is not preserved. */ - movl $0, oEAX(%eax) - - /* Save the 32-bit register values and the return address. */ - movl %ecx, oECX(%eax) - movl %edx, oEDX(%eax) + /* Save the preserved register values and the return address. */ movl %edi, oEDI(%eax) movl %esi, oESI(%eax) movl %ebp, oEBP(%eax) |