]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/x86_64/bits/setjmp.h
(CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4.
[thirdparty/glibc.git] / sysdeps / x86_64 / bits / setjmp.h
index c9b98b2e3b1d1386c9850dd781b0a4274028dcd2..96646efddabb7f39cca71add9c72cfe9a02e2314 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001,2002,2003,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002, 2003 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
 
 #include <bits/wordsize.h>
 
+#if __WORDSIZE == 64
+
+/* We only need to save callee-saved registers plus stackpointer and
+   program counter.  */
+# if defined __USE_MISC || defined _ASM
+#  define JB_RBX       0
+#  define JB_RBP       1
+#  define JB_R12       2
+#  define JB_R13       3
+#  define JB_R14       4
+#  define JB_R15       5
+#  define JB_RSP       6
+#  define JB_PC        7
+#  define JB_SIZE (8*8)
+# endif
+
+#else
+
+# if defined __USE_MISC || defined _ASM
+#  define JB_BX        0
+#  define JB_SI        1
+#  define JB_DI        2
+#  define JB_BP        3
+#  define JB_SP        4
+#  define JB_PC        5
+#  define JB_SIZE 24
+# endif
+
+#endif
+
 #ifndef _ASM
 
 # if __WORDSIZE == 64
@@ -34,6 +64,15 @@ typedef long int __jmp_buf[8];
 typedef int __jmp_buf[6];
 # endif
 
+/* Test if longjmp to JMPBUF would unwind the frame
+   containing a local variable at ADDRESS.  */
+# if __WORDSIZE == 64
+#  define _JMPBUF_UNWINDS(jmpbuf, address) \
+  ((void *) (address) < (void *) (jmpbuf)[JB_RSP])
+# else
+#  define _JMPBUF_UNWINDS(jmpbuf, address) \
+  ((void *) (address) < (void *) (jmpbuf)[JB_SP])
+# endif
 #endif
 
 #endif  /* bits/setjmp.h */