gcc < 4.0.
* include/grub/*/setjmp.h: USe RETURNS_TWICE.
+2013-10-18 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * include/grub/setjmp.h: Define RETURNS_TWICE. Keep it empty for
+ gcc < 4.0.
+ * include/grub/*/setjmp.h: USe RETURNS_TWICE.
+
2013-10-18 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/disk/dmraid_nvidia.c: Fix potentially uninited "layout".
typedef unsigned long grub_jmp_buf[10];
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE;
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
#endif /* ! GRUB_SETJMP_CPU_HEADER */
typedef unsigned long grub_jmp_buf[6];
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice, cdecl,
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE __attribute__ ((cdecl,
regparm (3)));
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn, cdecl,
regparm (3)));
/* the __jmp_buf element type should be __float80 per ABI... */
typedef long grub_jmp_buf[_JBLEN] __attribute__ ((aligned (16))); /* guarantees 128-bit alignment! */
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE;
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
typedef unsigned long grub_jmp_buf[11];
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE;
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
#endif /* ! GRUB_SETJMP_CPU_HEADER */
typedef unsigned long grub_jmp_buf[20];
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE;
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
#endif /* ! GRUB_SETJMP_CPU_HEADER */
#define grub_setjmp setjmp
#define grub_longjmp longjmp
#else
+
+#include <grub/misc.h>
+
+#if GNUC_PREREQ(4,0)
+#define RETURNS_TWICE __attribute__ ((returns_twice))
+#else
+#define RETURNS_TWICE
+#endif
+
/* This must define grub_jmp_buf, and declare grub_setjmp and
grub_longjmp. */
# include <grub/cpu/setjmp.h>
typedef grub_uint64_t grub_jmp_buf[3];
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE;
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
#endif /* ! GRUB_SETJMP_CPU_HEADER */
typedef unsigned long grub_jmp_buf[8];
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
+int grub_setjmp (grub_jmp_buf env) RETURNS_TWICE;
void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
#endif /* ! GRUB_SETJMP_CPU_HEADER */