Maintain stack alignment in ____longjmp_chk on x86_64
authorAndreas Schwab <schwab@redhat.com>
Thu, 7 Apr 2011 20:23:52 +0000 (16:23 -0400)
committerUlrich Drepper <drepper@gmail.com>
Thu, 7 Apr 2011 20:23:52 +0000 (16:23 -0400)
ChangeLog
sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S

index fe86bc9..7f67fce 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-07  Andreas Schwab  <schwab@redhat.com>
+
+       * sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S (CALL_FAIL):
+       Maintain aligned stack.
+       (CHECK_RSP): Remove unused macro.
+
 2011-04-03  Ulrich Drepper  <drepper@gmail.com>
 
        * sysdeps/x86_64/cacheinfo.c (intel_02_known): Fix typo in table.
index da35115..3881082 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001,2004,2005,2006,2009,2010 Free Software Foundation, Inc.
+/* Copyright (C) 2001,2004,2005,2006,2009,2010,2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -30,19 +30,23 @@ longjmp_msg:
 //#define __longjmp ____longjmp_chk
 
 #ifdef PIC
-# define CALL_FAIL     leaq    longjmp_msg(%rip), %rdi;                      \
-                       call    __GI___fortify_fail
+# define CALL_FAIL     subq    $8, %rsp;                                     \
+                       cfi_remember_state;                                   \
+                       cfi_def_cfa_offset(16);                               \
+                       leaq    longjmp_msg(%rip), %rdi;                      \
+                       call    __GI___fortify_fail;                          \
+                       nop;                                                  \
+                       cfi_restore_state
 #else
-# define CALL_FAIL     movq    $longjmp_msg, %rdi;                           \
-                       call    __fortify_fail
+# define CALL_FAIL     subq    $8, %rsp;                                     \
+                       cfi_remember_state;                                   \
+                       cfi_def_cfa_offset(16);                               \
+                       movq    $longjmp_msg, %rdi;                           \
+                       call    __fortify_fail;                               \
+                       nop;                                                  \
+                       cfi_restore_state
 #endif
 
-#define CHECK_RSP(reg) \
-       cmpq    reg, %rsp;                                                    \
-       jbe     .Lok;                                                         \
-       CALL_FAIL;                                                            \
-.Lok:
-
 /* Jump to the position specified by ENV, causing the
    setjmp call there to return VAL, or 1 if VAL is 0.
    void __longjmp (__jmp_buf env, int val).  */