Use leaf function attribute in __THROW

This commit is contained in:
Ulrich Drepper 2011-10-16 21:29:11 -04:00
parent ad0f5cad15
commit aa78043a4a
2 changed files with 14 additions and 3 deletions

View File

@ -1,5 +1,7 @@
2011-10-16 Ulrich Drepper <drepper@gmail.com> 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_ceil.c: Avoid alias renamed.
* sysdeps/ieee754/dbl-64/s_floor.c: Likewise. * sysdeps/ieee754/dbl-64/s_floor.c: Likewise.
* sysdeps/ieee754/dbl-64/s_rint.c: Likewise. * sysdeps/ieee754/dbl-64/s_rint.c: Likewise.

View File

@ -38,18 +38,27 @@
#ifdef __GNUC__ #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() /* GCC can always grok prototypes. For C++ programs we add throw()
to help it optimize the function calls. But this works only with 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 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 as non-throwing using a function attribute since programs can use
the -fexceptions options for C code as well. */ the -fexceptions options for C code as well. */
# if !defined __cplusplus && __GNUC_PREREQ (3, 3) # if !defined __cplusplus && __GNUC_PREREQ (3, 3)
# define __THROW __attribute__ ((__nothrow__)) # define __THROW __attribute__ ((__nothrow__ __LEAF_ATTR))
# define __NTH(fct) __attribute__ ((__nothrow__)) fct # define __NTH(fct) __attribute__ ((__nothrow__ __LEAF_ATTR)) fct
# else # else
# if defined __cplusplus && __GNUC_PREREQ (2,8) # if defined __cplusplus && __GNUC_PREREQ (2,8)
# define __THROW throw () # define __THROW throw ()
# define __NTH(fct) fct throw () # define __NTH(fct) __LEAF_ATTR fct throw ()
# else # else
# define __THROW # define __THROW
# define __NTH(fct) fct # define __NTH(fct) fct