aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Smith <dannysmith@users.sourceforge.net>2008-09-13 22:58:55 +0000
committerDanny Smith <dannysmith@gcc.gnu.org>2008-09-13 22:58:55 +0000
commit78a1f20179d99ef841f86965a1f63c5614b1e0a3 (patch)
tree494deedf5a3eb3c4359ea97b38e32e99bc48e78d
parenta63f29427ba31d65547ee0b78e5ddf0dee1cd876 (diff)
downloadgcc-78a1f20179d99ef841f86965a1f63c5614b1e0a3.zip
gcc-78a1f20179d99ef841f86965a1f63c5614b1e0a3.tar.gz
gcc-78a1f20179d99ef841f86965a1f63c5614b1e0a3.tar.bz2
cygming-crtend.c (register_frame_ctor): If DEFAULT_USE_CXA_ATEXIT, register __gcc_deregister_frame directly with atexit.
* config/i386/cygming-crtend.c (register_frame_ctor): If DEFAULT_USE_CXA_ATEXIT, register __gcc_deregister_frame directly with atexit. (deregister_frame_ctor): Rename to ... (deregister_frame_dtor): Use to call __gcc_deregister_frame if !DEFAULT_USE_CXA_ATEXIT. From-SVN: r140351
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/cygming-crtend.c13
2 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7f6649e..af70b38 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2008-09-14 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * config/i386/cygming-crtend.c (register_frame_ctor): If
+ DEFAULT_USE_CXA_ATEXIT, register __gcc_deregister_frame
+ directly with atexit.
+ (deregister_frame_ctor): Rename to ...
+ (deregister_frame_dtor): Use to call __gcc_deregister_frame
+ if !DEFAULT_USE_CXA_ATEXIT.
+
2008-09-13 Jan Hubicka <jh@suse.cz>
* cgraph.c: Include value-prof.h
diff --git a/gcc/config/i386/cygming-crtend.c b/gcc/config/i386/cygming-crtend.c
index 59fc910..e1f21c0 100644
--- a/gcc/config/i386/cygming-crtend.c
+++ b/gcc/config/i386/cygming-crtend.c
@@ -74,13 +74,20 @@ static void
register_frame_ctor (void)
{
__gcc_register_frame ();
+#if DEFAULT_USE_CXA_ATEXIT
+ /* If we use the __cxa_atexit method to register C++ dtors
+ at object construction, also use atexit to register eh frame
+ info cleanup. */
+ atexit (__gcc_deregister_frame);
+#endif
}
-static void deregister_frame_ctor (void) __attribute__ ((destructor (0)));
+#if !DEFAULT_USE_CXA_ATEXIT
+static void deregister_frame_dtor (void) __attribute__ ((destructor (0)));
static void
-deregister_frame_ctor (void)
+deregister_frame_dtor (void)
{
__gcc_deregister_frame ();
}
-
+#endif