diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | misc/sys/cdefs.h | 15 |
2 files changed, 14 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index c71959c7be..dfd6a3b08a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2011-10-16 Ulrich Drepper <drepper@gmail.com> + * misc/sys/cdefs.h: Use leaf function attribute in __THROW. + * sysdeps/ieee754/dbl-64/s_ceil.c: Avoid alias renamed. * sysdeps/ieee754/dbl-64/s_floor.c: Likewise. * sysdeps/ieee754/dbl-64/s_rint.c: Likewise. diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 165a94a64b..bef8be7f4a 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 |