diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-07-12 14:38:58 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-08-05 08:36:12 -0700 |
commit | 8e1f346462d8c1b238a7c6bb501c45b381a45e4d (patch) | |
tree | 9bb295abee3821601b7f076aec181c3f29ad570f | |
parent | 3b8d2eb7f8435c73692f55f95e9a0ef27015b6c3 (diff) | |
download | glibc-8e1f346462d8c1b238a7c6bb501c45b381a45e4d.tar glibc-8e1f346462d8c1b238a7c6bb501c45b381a45e4d.tar.gz glibc-8e1f346462d8c1b238a7c6bb501c45b381a45e4d.tar.bz2 glibc-8e1f346462d8c1b238a7c6bb501c45b381a45e4d.zip |
Align stack to 16 bytes when calling __setcontext
Don't use pop to restore %rdi so that stack is aligned to 16 bytes
when calling __setcontext.
[BZ #18661]
* sysdeps/unix/sysv/linux/x86_64/__start_context.S
(__start_context): Don't use pop to restore %rdi so that stack
is aligned to 16 bytes when calling __setcontext.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/__start_context.S | 4 |
2 files changed, 9 insertions, 2 deletions
@@ -1,5 +1,12 @@ 2015-08-05 H.J. Lu <hongjiu.lu@intel.com> + [BZ #18661] + * sysdeps/unix/sysv/linux/x86_64/__start_context.S + (__start_context): Don't use pop to restore %rdi so that stack + is aligned to 16 bytes when calling __setcontext. + +2015-08-05 H.J. Lu <hongjiu.lu@intel.com> + * sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S: Compile only for libc. * sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S: Likewise. diff --git a/sysdeps/unix/sysv/linux/x86_64/__start_context.S b/sysdeps/unix/sysv/linux/x86_64/__start_context.S index 52a5afa9a6..96366e0536 100644 --- a/sysdeps/unix/sysv/linux/x86_64/__start_context.S +++ b/sysdeps/unix/sysv/linux/x86_64/__start_context.S @@ -31,8 +31,8 @@ ENTRY(__start_context) on the stack pointer for the next context. */ movq %rbx, %rsp - popq %rdi /* This is the next context. */ - cfi_adjust_cfa_offset(-8) + /* Don't use pop here so that stack is aligned to 16 bytes. */ + movq (%rsp), %rdi /* This is the next context. */ testq %rdi, %rdi je 2f /* If it is zero exit. */ |