+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.
/* 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