mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Mark setjmp and ucontext functions as non-leaf
This commit is contained in:
parent
77cdc054e0
commit
edc5984d4d
@ -1,3 +1,10 @@
|
||||
2011-11-11 Andreas Schwab <schwab@redhat.com>
|
||||
|
||||
* 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 <schwab@redhat.com>
|
||||
|
||||
* malloc/arena.c (_int_new_arena): Don't increment narenas.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user