diff options
Diffstat (limited to 'contrib/gcc/crtstuff.c')
-rw-r--r-- | contrib/gcc/crtstuff.c | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/contrib/gcc/crtstuff.c b/contrib/gcc/crtstuff.c index cdc447d..b9a29a0 100644 --- a/contrib/gcc/crtstuff.c +++ b/contrib/gcc/crtstuff.c @@ -1,7 +1,7 @@ /* Specialized bits of code needed to support construction and destruction of file-scope objects in C++ code. Copyright (C) 1991, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@monkeys.com). This file is part of GCC. @@ -60,6 +60,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "auto-host.h" #include "tconfig.h" #include "tsystem.h" +#include "coretypes.h" +#include "tm.h" #include "unwind-dw2-fde.h" #ifndef FORCE_CODE_SECTION_ALIGN @@ -118,15 +120,16 @@ call_ ## FUNC (void) \ /* References to __register_frame_info and __deregister_frame_info should be weak in this file if at all possible. */ -extern void __register_frame_info (void *, struct object *) +extern void __register_frame_info (const void *, struct object *) TARGET_ATTRIBUTE_WEAK; -extern void __register_frame_info_bases (void *, struct object *, +extern void __register_frame_info_bases (const void *, struct object *, void *, void *) TARGET_ATTRIBUTE_WEAK; -extern void *__deregister_frame_info (void *) +extern void *__deregister_frame_info (const void *) TARGET_ATTRIBUTE_WEAK; -extern void *__deregister_frame_info_bases (void *) +extern void *__deregister_frame_info_bases (const void *) TARGET_ATTRIBUTE_WEAK; +extern void __do_global_ctors_1 (void); /* Likewise for _Jv_RegisterClasses. */ extern void _Jv_RegisterClasses (void *) TARGET_ATTRIBUTE_WEAK; @@ -270,7 +273,7 @@ __do_global_dtors_aux (void) } #ifdef USE_EH_FRAME_REGISTRY -#if defined(CRT_GET_RFIB_TEXT) || defined(CRT_GET_RFIB_DATA) +#ifdef CRT_GET_RFIB_DATA /* If we used the new __register_frame_info_bases interface, make sure that we deregister from the same place. */ if (__deregister_frame_info_bases) @@ -297,24 +300,16 @@ frame_dummy (void) { #ifdef USE_EH_FRAME_REGISTRY static struct object object; -#if defined(CRT_GET_RFIB_TEXT) || defined(CRT_GET_RFIB_DATA) +#ifdef CRT_GET_RFIB_DATA void *tbase, *dbase; -#ifdef CRT_GET_RFIB_TEXT - CRT_GET_RFIB_TEXT (tbase); -#else tbase = 0; -#endif -#ifdef CRT_GET_RFIB_DATA CRT_GET_RFIB_DATA (dbase); -#else - dbase = 0; -#endif if (__register_frame_info_bases) __register_frame_info_bases (__EH_FRAME_BEGIN__, &object, tbase, dbase); #else if (__register_frame_info) __register_frame_info (__EH_FRAME_BEGIN__, &object); -#endif +#endif /* CRT_GET_RFIB_DATA */ #endif /* USE_EH_FRAME_REGISTRY */ #ifdef JCR_SECTION_NAME if (__JCR_LIST__[0] && _Jv_RegisterClasses) @@ -349,16 +344,6 @@ __do_global_ctors (void) asm (INIT_SECTION_ASM_OP); /* cc1 doesn't know that we are switching! */ -/* On some svr4 systems, the initial .init section preamble code provided in - crti.o may do something, such as bump the stack, which we have to - undo before we reach the function prologue code for __do_global_ctors - (directly below). For such systems, define the macro INIT_SECTION_PREAMBLE - to expand into the code needed to undo the actions of the crti.o file. */ - -#ifdef INIT_SECTION_PREAMBLE - INIT_SECTION_PREAMBLE; -#endif - /* A routine to invoke all of the global constructors upon entry to the program. We put this into the .init section (for systems that have such a thing) so that we can properly perform the construction of @@ -377,6 +362,8 @@ __do_global_ctors_aux (void) /* prologue goes in .init section */ #elif defined(HAS_INIT_SECTION) /* ! INIT_SECTION_ASM_OP */ +extern void __do_global_dtors (void); + /* This case is used by the Irix 6 port, which supports named sections but not an SVR4-style .fini section. __do_global_dtors can be non-static in this case because we protect it with -hidden_symbol. */ @@ -523,10 +510,11 @@ asm (TEXT_SECTION_ASM_OP); #elif defined(HAS_INIT_SECTION) /* ! INIT_SECTION_ASM_OP */ +extern void __do_global_ctors (void); + /* This case is used by the Irix 6 port, which supports named sections but not an SVR4-style .init section. __do_global_ctors can be non-static in this case because we protect it with -hidden_symbol. */ -extern void __do_global_ctors_1(void); void __do_global_ctors (void) { |