diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1999-09-09 21:36:20 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1999-09-09 17:36:20 -0400 |
commit | 31cf01446d16abdebb2b05bb8183ba487648900c (patch) | |
tree | 723f2802719575de5ff62a84c4285e1397b7da80 /gcc/libgcc2.c | |
parent | a8f73d4b365bbfe9145bfd4ae16159d632ca0c33 (diff) | |
download | gcc-31cf01446d16abdebb2b05bb8183ba487648900c.zip gcc-31cf01446d16abdebb2b05bb8183ba487648900c.tar.gz gcc-31cf01446d16abdebb2b05bb8183ba487648900c.tar.bz2 |
defaults.h (EH_FRAME_SECTION, [...]): Define here.
* defaults.h (EH_FRAME_SECTION, EH_FRAME_SECTION_ASM_OP): Define here.
* crtstuff.c: Not here.
* dwarf2out.c: Or here.
* libgcc2.c (__do_global_ctors, __do_global_dtors): Handle EH frame
info.
From-SVN: r29241
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r-- | gcc/libgcc2.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index 6ac4143..33481b1 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -2836,6 +2836,15 @@ cacheflush (char *beg, int size, int flag) #endif #if !defined (HAS_INIT_SECTION) || !defined (OBJECT_FORMAT_ELF) + +/* Some ELF crosses use crtstuff.c to provide __CTOR_LIST__, but use this + code to run constructors. In that case, we need to handle EH here, too. */ + +#ifdef EH_FRAME_SECTION +#include "frame.h" +extern unsigned char __EH_FRAME_BEGIN__[]; +#endif + /* Run all the global destructors on exit from the program. */ void @@ -2851,6 +2860,9 @@ __do_global_dtors () (*(p-1)) (); } #endif +#ifdef EH_FRAME_SECTION + __deregister_frame_info (__EH_FRAME_BEGIN__); +#endif } #endif @@ -2871,6 +2883,12 @@ int *_exit_dummy_ref = &_exit_dummy_decl; void __do_global_ctors () { +#ifdef EH_FRAME_SECTION + { + static struct object object; + __register_frame_info (__EH_FRAME_BEGIN__, &object); + } +#endif DO_GLOBAL_CTORS_BODY; ON_EXIT (__do_global_dtors, 0); } |