From aa78043a4aafe5db1a1a76d544a833b63b4c5f5c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 16 Oct 2011 21:29:11 -0400 Subject: Use leaf function attribute in __THROW --- misc/sys/cdefs.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'misc') diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 165a94a..bef8be7 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -38,18 +38,27 @@ #ifdef __GNUC__ +/* All functions, except those with callbacks, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + /* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this works only with gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions as non-throwing using a function attribute since programs can use the -fexceptions options for C code as well. */ # if !defined __cplusplus && __GNUC_PREREQ (3, 3) -# define __THROW __attribute__ ((__nothrow__)) -# define __NTH(fct) __attribute__ ((__nothrow__)) fct +# define __THROW __attribute__ ((__nothrow__ __LEAF_ATTR)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF_ATTR)) fct # else # if defined __cplusplus && __GNUC_PREREQ (2,8) # define __THROW throw () -# define __NTH(fct) fct throw () +# define __NTH(fct) __LEAF_ATTR fct throw () # else # define __THROW # define __NTH(fct) fct -- cgit v1.1