cris.h (CRT_CALL_STATIC_FUNCTION): Change to emit atexit call in crtbegin, hooked...
authorHans-Peter Nilsson <hp@axis.com>
Mon, 28 Jan 2002 13:46:05 +0000 (13:46 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Mon, 28 Jan 2002 13:46:05 +0000 (13:46 +0000)
* config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Change to emit
atexit call in crtbegin, hooked in after call to frame_dummy;
register EH before registering __fini__start.

From-SVN: r49281

gcc/ChangeLog
gcc/config/cris/cris.h

index d678e87e634d4cbe0c761114ca45674e59029a08..97b8198472d23299a3370a1eadfa3bcc1c0aa41e 100644 (file)
@@ -1,3 +1,9 @@
+2002-01-28  Hans-Peter Nilsson  <hp@axis.com>
+
+       * config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Change to emit
+       atexit call in crtbegin, hooked in after call to frame_dummy;
+       register EH before registering __fini__start.
+
 2002-01-28  Aldy Hernandez  <aldyh@redhat.com>
 
        * config/rs6000/altivec.h: Remove spurious semicolons.
index f92a3b3971bfcbe8c4db05404804ca77f990cb22..84d0e89742d1af70bcd98cf4a62a6eeb921bf446 100644 (file)
@@ -1450,19 +1450,22 @@ struct cum_args {int regs;};
 
 /* We pull a little trick to register the _fini function with atexit,
    after (presumably) registering the eh frame info, since we don't handle
-   _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF.  */
-#ifdef CRT_END
+   _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF.  If
+   you change this, don't forget that you can't have library function
+   references (e.g. to atexit) in crtend.o, since those won't be resolved
+   to libraries; those are linked in *before* crtend.o.  */
+#ifdef CRT_BEGIN
 # define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)            \
 static void __attribute__((__used__))                          \
 call_ ## FUNC (void)                                           \
 {                                                              \
   asm (SECTION_OP);                                            \
-  if (__builtin_strcmp (#FUNC, "__do_global_ctors_aux") == 0)  \
+  FUNC ();                                                     \
+  if (__builtin_strcmp (#FUNC, "frame_dummy") == 0)            \
    {                                                           \
      extern void __fini__start (void);                         \
      atexit (__fini__start);                                   \
    }                                                           \
-  FUNC ();                                                     \
   asm (TEXT_SECTION_ASM_OP);                                   \
 }
 #endif