* _mingw.h.in (__MINGW_GCC_VERSION): New macro.
* setjmp.h (setjmp): Use mingw_getsp() with gcc < 4.7.2.
merge from trunk r5162:
2012-07-04 Kai Tietz <ktietz@redhat.com>
Tristan Gingold <gingold@adacore.com>
* setjmp.h (setjmp): Use frame-address builtin.
git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/stable/v2.x@5164 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/revstamp.h b/mingw-w64-crt/revstamp.h
index 6776e4d..9253394 100644
--- a/mingw-w64-crt/revstamp.h
+++ b/mingw-w64-crt/revstamp.h
@@ -1,4 +1,4 @@
/* Do not edit. Autogenerated. */
-#define __MINGW_W64_REV "5158"
-#define __MINGW_W64_REV_STAMP "2012-06-29"
+#define __MINGW_W64_REV "5164"
+#define __MINGW_W64_REV_STAMP "2012-07-04"
diff --git a/mingw-w64-headers/crt/ChangeLog b/mingw-w64-headers/crt/ChangeLog
index 70745f8..851e0ba 100644
--- a/mingw-w64-headers/crt/ChangeLog
+++ b/mingw-w64-headers/crt/ChangeLog
@@ -1,3 +1,13 @@
+2012-07-04 Ozkan Sezer <sezeroz@gmail.com>
+
+ * _mingw.h.in (__MINGW_GCC_VERSION): New macro.
+ * setjmp.h (setjmp): Use mingw_getsp() with gcc < 4.7.2.
+
+2012-07-04 Kai Tietz <ktietz@redhat.com>
+ Tristan Gingold <gingold@adacore.com>
+
+ * setjmp.h (setjmp): Use frame-address builtin.
+
2012-04-03 Ozkan Sezer <sezeroz@gmail.com>
Merge from trunk rev. 4927:
diff --git a/mingw-w64-headers/crt/_mingw.h.in b/mingw-w64-headers/crt/_mingw.h.in
index a04ca88..6968ffa 100644
--- a/mingw-w64-headers/crt/_mingw.h.in
+++ b/mingw-w64-headers/crt/_mingw.h.in
@@ -54,6 +54,14 @@
# endif /* __declspec */
#endif /* __GNUC__ */
+#if __GNUC__
+#define __MINGW_GCC_VERSION (__GNUC__ * 10000 + \
+ __GNUC_MINOR__ * 100 + \
+ __GNUC_PATCHLEVEL__)
+#else
+#define __MINGW_GCC_VERSION 0
+#endif
+
#if defined (__GNUC__) && defined (__GNUC_MINOR__)
#define __MINGW_GNUC_PREREQ(major, minor) \
(__GNUC__ > (major) \
diff --git a/mingw-w64-headers/crt/setjmp.h b/mingw-w64-headers/crt/setjmp.h
index 2a68097..131bbfc 100644
--- a/mingw-w64-headers/crt/setjmp.h
+++ b/mingw-w64-headers/crt/setjmp.h
@@ -1,6 +1,6 @@
/**
* This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the w64 mingw-runtime package.
+ * This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef _INC_SETJMP
@@ -148,34 +148,43 @@
#define _JMP_BUF_DEFINED
#endif
- void * __cdecl __attribute__ ((__nothrow__)) mingw_getsp(void);
+void * __cdecl __attribute__ ((__nothrow__)) mingw_getsp (void);
#ifndef USE_NO_MINGW_SETJMP_TWO_ARGS
-#ifndef _INC_SETJMPEX
-#ifdef _WIN64
-#define setjmp(BUF) _setjmp((BUF), mingw_getsp())
-#else
-#define setjmp(BUF) _setjmp3((BUF), NULL)
-#endif
+# ifndef _INC_SETJMPEX
+# ifdef _WIN64
+# if (__MINGW_GCC_VERSION < 40702)
+# define setjmp(BUF) _setjmp((BUF), mingw_getsp())
+# else
+# define setjmp(BUF) _setjmp((BUF), __builtin_frame_address (0))
+# endif
+# else
+# define setjmp(BUF) _setjmp3((BUF), NULL)
+# endif
int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp(jmp_buf _Buf, void *_Ctx);
int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp3(jmp_buf _Buf, void *_Ctx);
-#else
-#undef setjmp
-#ifdef _WIN64
-#define setjmp(BUF) _setjmpex((BUF), mingw_getsp())
-#define setjmpex(BUF) _setjmpex((BUF), mingw_getsp())
-#else
-#define setjmp(BUF) _setjmpex((BUF), NULL)
-#define setjmpex(BUF) _setjmpex((BUF), NULL)
-#endif
+# else
+# undef setjmp
+# ifdef _WIN64
+# if (__MINGW_GCC_VERSION < 40702)
+# define setjmp(BUF) _setjmpex((BUF), mingw_getsp())
+# define setjmpex(BUF) _setjmpex((BUF), mingw_getsp())
+# else
+# define setjmp(BUF) _setjmpex((BUF), __builtin_frame_address (0))
+# define setjmpex(BUF) _setjmpex((BUF), __builtin_frame_address (0))
+# endif
+# else
+# define setjmp(BUF) _setjmpex((BUF), NULL)
+# define setjmpex(BUF) _setjmpex((BUF), NULL)
+# endif
int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmpex(jmp_buf _Buf,void *_Ctx);
-#endif
+# endif
#else
-#ifndef _INC_SETJMPEX
-#define setjmp _setjmp
-#endif
+# ifndef _INC_SETJMPEX
+# define setjmp _setjmp
+# endif
int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) setjmp(jmp_buf _Buf);
#endif