aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChris Demetriou <cgd@broadcom.com>2001-01-24 03:03:12 +0000
committerChris Demetriou <cgd@gcc.gnu.org>2001-01-23 19:03:12 -0800
commit8a1894ac7ba96fb629e676300ca2a870ddfc6dba (patch)
tree7748d2470518ba26fbea30b07df94dd62b366e29 /gcc
parent0006091ec2f5039501b60be2c1c014ea6e11906f (diff)
downloadgcc-8a1894ac7ba96fb629e676300ca2a870ddfc6dba.zip
gcc-8a1894ac7ba96fb629e676300ca2a870ddfc6dba.tar.gz
gcc-8a1894ac7ba96fb629e676300ca2a870ddfc6dba.tar.bz2
libgcc-std.ver (GCC_3.0): Add __terminate_func_set to list of EH symbols.
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. From-SVN: r39224
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/libgcc-std.ver1
-rw-r--r--gcc/libgcc2.c11
-rw-r--r--gcc/libgcc2.h3
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a1ca492..04136c9 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 9dc81fa..87aac0d 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 cf6822b..5e5d7c0 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 a64eb8f..c31a146 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);