diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-09 21:36:20 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-09 21:36:20 +0000 |
commit | a6881cf34e63f36838e5ebe2ca70f9f1d23dbff0 (patch) | |
tree | 723f2802719575de5ff62a84c4285e1397b7da80 /gcc/libgcc2.c | |
parent | d119628bf83b31aa17d83329dc80074e63786de9 (diff) | |
download | gcc-a6881cf34e63f36838e5ebe2ca70f9f1d23dbff0.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29241 138bc75d-0d04-0410-961f-82ee72b054a4
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 6ac41438ecb..33481b14128 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); } |