diff options
author | cgd <cgd@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-24 03:03:12 +0000 |
---|---|---|
committer | cgd <cgd@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-24 03:03:12 +0000 |
commit | c6deb130aea0909a9de37e228a50f5d9faa0d963 (patch) | |
tree | 7748d2470518ba26fbea30b07df94dd62b366e29 | |
parent | 24f78d1b811627a502fdb2b0082382c764778d9f (diff) | |
download | gcc-c6deb130aea0909a9de37e228a50f5d9faa0d963.tar.gz |
2001-01-23 Chris Demetriou <cgd@broadcom.com>
* libgcc-std.ver (GCC_3.0): Add __terminate_func_set to list
of EH symbols.
* libgcc2.c (__terminate_func): Make variable static.
(__terminate_set_func): New function to set __terminate_func.
* libgcc2.h (__terminate_func_ptr): New typedef.
(__terminate_set_func): New function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39224 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/libgcc-std.ver | 1 | ||||
-rw-r--r-- | gcc/libgcc2.c | 11 | ||||
-rw-r--r-- | gcc/libgcc2.h | 3 |
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a1ca492a17c..04136c92a93 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2001-01-23 Chris Demetriou <cgd@broadcom.com> + + * libgcc-std.ver (GCC_3.0): Add __terminate_func_set to list + of EH symbols. + * libgcc2.c (__terminate_func): Make variable static. + (__terminate_set_func): New function to set __terminate_func. + * libgcc2.h (__terminate_func_ptr): New typedef. + (__terminate_set_func): New function. + 2001-01-23 Richard Henderson <rth@redhat.com> * flow.c (init_propagate_block_info): Don't consider unchanging diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver index 9dc81fa4163..87aac0dfaca 100644 --- a/gcc/libgcc-std.ver +++ b/gcc/libgcc-std.ver @@ -132,6 +132,7 @@ GCC_3.0 { __sjpopnthrow __sjthrow __terminate + __terminate_set_func __throw __throw_type_match __unwinding_cleanup diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index cf6822bb565..5e5d7c01339 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -3143,7 +3143,7 @@ __default_terminate (void) abort (); } -void (*__terminate_func)(void) __attribute__ ((__noreturn__)) = +static __terminate_func_ptr __terminate_func = __default_terminate; void __attribute__((__noreturn__)) @@ -3152,6 +3152,15 @@ __terminate (void) (*__terminate_func)(); } +__terminate_func_ptr +__terminate_set_func (__terminate_func_ptr newfunc) +{ + __terminate_func_ptr oldfunc = __terminate_func; + + __terminate_func = newfunc; + return (oldfunc); +} + void * __throw_type_match (void *catch_type, void *throw_type, void *obj) { diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index a64eb8f223c..c31a1462598 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -22,12 +22,15 @@ Boston, MA 02111-1307, USA. */ #ifndef __LIBGCC2_H__ #define __LIBGCC2_H__ +typedef void (*__terminate_func_ptr)(void) __attribute__ ((__noreturn__)); + extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t); extern void *__builtin_saveregs (void); extern void __dummy (void); extern void __clear_cache (char *, char *); extern void __pure_virtual (void) __attribute__ ((__noreturn__)); extern void __terminate (void) __attribute__ ((__noreturn__)); +extern __terminate_func_ptr __terminate_set_func (__terminate_func_ptr); extern void __default_terminate (void) __attribute__ ((__noreturn__)); extern void *__throw_type_match (void *, void *, void *); extern void __empty (void); |