From 8e1f346462d8c1b238a7c6bb501c45b381a45e4d Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Sun, 12 Jul 2015 14:38:58 -0700 Subject: [PATCH] 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. --- ChangeLog | 7 +++++++ sysdeps/unix/sysv/linux/x86_64/__start_context.S | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index cec13dc871..8a47768e03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +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 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. */