From edc5984d4d18296d7aa3d8f4ed8f7336a743170e Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Fri, 11 Nov 2011 10:29:08 +0100 Subject: [PATCH] Mark setjmp and ucontext functions as non-leaf --- ChangeLog | 7 +++++++ misc/sys/cdefs.h | 4 ++++ setjmp/bits/setjmp2.h | 22 +++++++++++----------- setjmp/setjmp.h | 14 +++++++------- stdlib/ucontext.h | 10 +++++----- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index edd7dd8a96..988afe95a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-11-11 Andreas Schwab + + * misc/sys/cdefs.h (__REDIRECT_NTHNL): Define. + * setjmp/setjmp.h: Mark functions as non-leaf. + * setjmp/bits/setjmp2.h: Likewise. + * stdlib/ucontext.h: Likewise. + 2011-11-10 Andreas Schwab * malloc/arena.c (_int_new_arena): Don't increment narenas. diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 16cf557b39..c856e87a07 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -192,9 +192,13 @@ # ifdef __cplusplus # define __REDIRECT_NTH(name, proto, alias) \ name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) # else # define __REDIRECT_NTH(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL # endif # define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) # define __ASMNAME2(prefix, cname) __STRING (prefix) cname diff --git a/setjmp/bits/setjmp2.h b/setjmp/bits/setjmp2.h index b2f8efac4c..ad65d25970 100644 --- a/setjmp/bits/setjmp2.h +++ b/setjmp/bits/setjmp2.h @@ -1,5 +1,5 @@ /* Checking macros for setjmp functions. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,18 +23,18 @@ /* Variant of the longjmp functions which perform some sanity checking. */ #ifdef __REDIRECT_NTH -extern void __REDIRECT_NTH (longjmp, - (struct __jmp_buf_tag __env[1], int __val), - __longjmp_chk) __attribute__ ((__noreturn__)); -extern void __REDIRECT_NTH (_longjmp, - (struct __jmp_buf_tag __env[1], int __val), - __longjmp_chk) __attribute__ ((__noreturn__)); -extern void __REDIRECT_NTH (siglongjmp, - (struct __jmp_buf_tag __env[1], int __val), - __longjmp_chk) __attribute__ ((__noreturn__)); +extern void __REDIRECT_NTHNL (longjmp, + (struct __jmp_buf_tag __env[1], int __val), + __longjmp_chk) __attribute__ ((__noreturn__)); +extern void __REDIRECT_NTHNL (_longjmp, + (struct __jmp_buf_tag __env[1], int __val), + __longjmp_chk) __attribute__ ((__noreturn__)); +extern void __REDIRECT_NTHNL (siglongjmp, + (struct __jmp_buf_tag __env[1], int __val), + __longjmp_chk) __attribute__ ((__noreturn__)); #else extern void __longjmp_chk (struct __jmp_buf_tag __env[1], int __val), - __THROW __attribute__ ((__noreturn__)); + __THROWNL __attribute__ ((__noreturn__)); # define longjmp __longjmp_chk # define _longjmp __longjmp_chk # define siglongjmp __longjmp_chk diff --git a/setjmp/setjmp.h b/setjmp/setjmp.h index 3bc382ff1e..fd57ab645b 100644 --- a/setjmp/setjmp.h +++ b/setjmp/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1999,2001,2002,2007,2009 Free Software Foundation, Inc. +/* Copyright (C) 1991-1999,2001,2002,2007,2009,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -50,19 +50,19 @@ typedef struct __jmp_buf_tag jmp_buf[1]; /* Store the calling environment in ENV, also saving the signal mask. Return 0. */ -extern int setjmp (jmp_buf __env) __THROW; +extern int setjmp (jmp_buf __env) __THROWNL; __END_NAMESPACE_STD /* Store the calling environment in ENV, also saving the signal mask if SAVEMASK is nonzero. Return 0. This is the internal name for `sigsetjmp'. */ -extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) __THROW; +extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) __THROWNL; #ifndef __FAVOR_BSD /* Store the calling environment in ENV, not saving the signal mask. Return 0. */ -extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROW; +extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROWNL; /* Do not save the signal mask. This is equivalent to the `_setjmp' BSD function. */ @@ -80,7 +80,7 @@ __BEGIN_NAMESPACE_STD /* Jump to the environment saved in ENV, making the `setjmp' call there return VAL, or 1 if VAL is 0. */ extern void longjmp (struct __jmp_buf_tag __env[1], int __val) - __THROW __attribute__ ((__noreturn__)); + __THROWNL __attribute__ ((__noreturn__)); __END_NAMESPACE_STD @@ -89,7 +89,7 @@ __END_NAMESPACE_STD the signal mask. But it is how ENV was saved that determines whether `longjmp' restores the mask; `_longjmp' is just an alias. */ extern void _longjmp (struct __jmp_buf_tag __env[1], int __val) - __THROW __attribute__ ((__noreturn__)); + __THROWNL __attribute__ ((__noreturn__)); #endif @@ -108,7 +108,7 @@ typedef struct __jmp_buf_tag sigjmp_buf[1]; Restore the signal mask if that sigsetjmp call saved it. This is just an alias `longjmp'. */ extern void siglongjmp (sigjmp_buf __env, int __val) - __THROW __attribute__ ((__noreturn__)); + __THROWNL __attribute__ ((__noreturn__)); #endif /* Use POSIX. */ diff --git a/stdlib/ucontext.h b/stdlib/ucontext.h index ee6f594f07..498fb5633d 100644 --- a/stdlib/ucontext.h +++ b/stdlib/ucontext.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2000, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -29,15 +29,15 @@ __BEGIN_DECLS /* Get user context and store it in variable pointed to by UCP. */ -extern int getcontext (ucontext_t *__ucp) __THROW; +extern int getcontext (ucontext_t *__ucp) __THROWNL; /* Set user context from information of variable pointed to by UCP. */ -extern int setcontext (__const ucontext_t *__ucp) __THROW; +extern int setcontext (__const ucontext_t *__ucp) __THROWNL; /* Save current context in context variable pointed to by OUCP and set context from variable pointed to by UCP. */ extern int swapcontext (ucontext_t *__restrict __oucp, - __const ucontext_t *__restrict __ucp) __THROW; + __const ucontext_t *__restrict __ucp) __THROWNL; /* Manipulate user context UCP to continue with calling functions FUNC and the ARGC-1 parameters following ARGC when the context is used @@ -46,7 +46,7 @@ extern int swapcontext (ucontext_t *__restrict __oucp, We cannot say anything about the parameters FUNC takes; `void' is as good as any other choice. */ extern void makecontext (ucontext_t *__ucp, void (*__func) (void), - int __argc, ...) __THROW; + int __argc, ...) __THROWNL; __END_DECLS