* _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