From 72354ab5e1d61dec7606a8851f0eb1bb016f7af7 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 12 Jul 2015 14:41:20 -0700 Subject: [PATCH] Align stack to 16 bytes when calling __errno_location We should align stack to 16 bytes when calling __errno_location. [BZ #18661] * sysdeps/x86_64/fpu/s_cosf.S (__cosf): Align stack to 16 bytes when calling __errno_location. * sysdeps/x86_64/fpu/s_sincosf.S (__sincosf): Likewise. * sysdeps/x86_64/fpu/s_sinf.S (__sinf): Likewise. --- ChangeLog | 8 ++++++++ NEWS | 2 +- sysdeps/x86_64/fpu/s_cosf.S | 6 ++++++ sysdeps/x86_64/fpu/s_sincosf.S | 6 ++++++ sysdeps/x86_64/fpu/s_sinf.S | 6 ++++++ 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 763771e848..4f985f1591 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,14 @@ 2015-08-05 H.J. Lu [BZ #18661] + * sysdeps/x86_64/fpu/s_cosf.S (__cosf): Align stack to 16 bytes + when calling __errno_location. + * sysdeps/x86_64/fpu/s_sincosf.S (__sincosf): Likewise. + * sysdeps/x86_64/fpu/s_sinf.S (__sinf): Likewise. + +2015-08-05 H.J. Lu + + [BZ #18661] * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S (__lll_timedwait_tid): Align stack to 16 bytes when calling __gettimeofday. diff --git a/NEWS b/NEWS index 0eef93906a..a47687ea25 100644 --- a/NEWS +++ b/NEWS @@ -8,7 +8,7 @@ using `glibc' in the "product" field. Version 2.23 * The following bugs are resolved with this release: - 18265, 18525, 18647. + 18265, 18525, 18647, 18661. Version 2.22 diff --git a/sysdeps/x86_64/fpu/s_cosf.S b/sysdeps/x86_64/fpu/s_cosf.S index b7868ceb20..bea10ef089 100644 --- a/sysdeps/x86_64/fpu/s_cosf.S +++ b/sysdeps/x86_64/fpu/s_cosf.S @@ -310,8 +310,14 @@ L(arg_inf_or_nan): /* Here if |x| is Inf or NAN */ jne L(skip_errno_setting) /* in case of x is NaN */ + /* Align stack to 16 bytes. */ + subq $8, %rsp + cfi_adjust_cfa_offset (8) /* Here if x is Inf. Set errno to EDOM. */ call JUMPTARGET(__errno_location) + addq $8, %rsp + cfi_adjust_cfa_offset (-8) + movl $EDOM, (%rax) .p2align 4 diff --git a/sysdeps/x86_64/fpu/s_sincosf.S b/sysdeps/x86_64/fpu/s_sincosf.S index 21db70a88b..a2f313338f 100644 --- a/sysdeps/x86_64/fpu/s_sincosf.S +++ b/sysdeps/x86_64/fpu/s_sincosf.S @@ -354,8 +354,14 @@ L(arg_inf_or_nan): /* Here if |x| is Inf or NAN */ jne L(skip_errno_setting) /* in case of x is NaN */ + /* Align stack to 16 bytes. */ + subq $8, %rsp + cfi_adjust_cfa_offset (8) /* Here if x is Inf. Set errno to EDOM. */ call JUMPTARGET(__errno_location) + addq $8, %rsp + cfi_adjust_cfa_offset (-8) + movl $EDOM, (%rax) .p2align 4 diff --git a/sysdeps/x86_64/fpu/s_sinf.S b/sysdeps/x86_64/fpu/s_sinf.S index dc921641de..90afbe8e5f 100644 --- a/sysdeps/x86_64/fpu/s_sinf.S +++ b/sysdeps/x86_64/fpu/s_sinf.S @@ -336,8 +336,14 @@ L(arg_inf_or_nan): /* Here if |x| is Inf or NAN */ jne L(skip_errno_setting) /* in case of x is NaN */ + /* Align stack to 16 bytes. */ + subq $8, %rsp + cfi_adjust_cfa_offset (8) /* Here if x is Inf. Set errno to EDOM. */ call JUMPTARGET(__errno_location) + addq $8, %rsp + cfi_adjust_cfa_offset (-8) + movl $EDOM, (%rax) .p2align 4 -- 2.11.4.GIT