From: ktietz Date: Tue, 19 Aug 2014 15:22:59 +0000 (+0000) Subject: 2014-08-19 Yaakov Selkowitz X-Git-Tag: upstream/5.3.0~6255 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1db4f54b5b0d78f8de678c099c6bd117ff95d82f;p=platform%2Fupstream%2Flinaro-gcc.git 2014-08-19 Yaakov Selkowitz * config/i386/cygming-crtend.c (register_frame_ctor): Move atexit call from here... * config/i386/cygming-crtbegin.c (__gcc_register_frame): to here. (__dso_handle): Define on Cygwin. * config/i386/t-cygming (crtbeginS.o): New rule. * config.host (*-*-cygwin*): Add crtbeginS.o to extra_parts. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@214162 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index cdca13a..c9f4e12 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,5 +1,12 @@ 2014-08-19 Yaakov Selkowitz + * config/i386/cygming-crtend.c (register_frame_ctor): Move atexit + call from here... + * config/i386/cygming-crtbegin.c (__gcc_register_frame): to here. + (__dso_handle): Define on Cygwin. + * config/i386/t-cygming (crtbeginS.o): New rule. + * config.host (*-*-cygwin*): Add crtbeginS.o to extra_parts. + * config/i386/cygming-crtbegin.c (deregister_frame_fn): Fix declaration syntax. diff --git a/libgcc/config.host b/libgcc/config.host index 54fe538..0550c34 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -614,7 +614,7 @@ i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*) i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae) ;; i[34567]86-*-cygwin*) - extra_parts="crtbegin.o crtend.o crtfastmath.o" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtfastmath.o" # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h if test x$enable_sjlj_exceptions = xyes; then tmake_eh_file="i386/t-sjlj-eh" @@ -630,7 +630,7 @@ i[34567]86-*-cygwin*) tmake_file="${tmake_file} ${tmake_eh_file} ${tmake_dlldir_file} i386/t-slibgcc-cygming i386/t-cygming i386/t-cygwin i386/t-crtfm i386/t-chkstk t-dfprules" ;; x86_64-*-cygwin*) - extra_parts="crtbegin.o crtend.o crtfastmath.o" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtfastmath.o" # This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h if test x$enable_sjlj_exceptions = xyes; then tmake_eh_file="i386/t-sjlj-eh" diff --git a/libgcc/config/i386/cygming-crtbegin.c b/libgcc/config/i386/cygming-crtbegin.c index dde9f2a..3e8ed22 100644 --- a/libgcc/config/i386/cygming-crtbegin.c +++ b/libgcc/config/i386/cygming-crtbegin.c @@ -111,6 +111,23 @@ static void *__JCR_LIST__[] = { }; #endif +#ifdef __CYGWIN__ +/* Declare the __dso_handle variable. It should have a unique value + in every shared-object; in a main program its value is zero. The + object should in any case be protected. This means the instance + in one DSO or the main program is not used in another object. The + dynamic linker takes care of this. */ + +#ifdef CRTSTUFFS_O +extern void *__ImageBase; +void *__dso_handle = &__ImageBase; +#else +void *__dso_handle = 0; +#endif + +#endif /* __CYGWIN__ */ + + /* Pull in references from libgcc.a(unwind-dw2-fde.o) in the startfile. These are referenced by a ctor and dtor in crtend.o. */ extern void __gcc_register_frame (void); @@ -161,6 +178,13 @@ __gcc_register_frame (void) register_class_fn (__JCR_LIST__); } #endif + +#if DEFAULT_USE_CXA_ATEXIT + /* If we use the __cxa_atexit method to register C++ dtors + at object construction, also use atexit to register eh frame + info cleanup. */ + atexit(__gcc_deregister_frame); +#endif /* DEFAULT_USE_CXA_ATEXIT */ } void diff --git a/libgcc/config/i386/cygming-crtend.c b/libgcc/config/i386/cygming-crtend.c index de0d61f..d3beaf9 100644 --- a/libgcc/config/i386/cygming-crtend.c +++ b/libgcc/config/i386/cygming-crtend.c @@ -70,12 +70,6 @@ static void register_frame_ctor (void) { __gcc_register_frame (); -#if DEFAULT_USE_CXA_ATEXIT - /* If we use the __cxa_atexit method to register C++ dtors - at object construction, also use atexit to register eh frame - info cleanup. */ - atexit (__gcc_deregister_frame); -#endif } #if !DEFAULT_USE_CXA_ATEXIT diff --git a/libgcc/config/i386/t-cygming b/libgcc/config/i386/t-cygming index d76004c..4713b7f 100644 --- a/libgcc/config/i386/t-cygming +++ b/libgcc/config/i386/t-cygming @@ -8,6 +8,9 @@ CUSTOM_CRTSTUFF = yes crtbegin.o: $(srcdir)/config/i386/cygming-crtbegin.c $(crt_compile) -fno-omit-frame-pointer -c $< +crtbeginS.o: $(srcdir)/config/i386/cygming-crtbegin.c + $(crt_compile) -fno-omit-frame-pointer -c $< -DCRTSTUFFS_O + # We intentionally use a implementation-reserved init priority of 0, # so allow the warning. crtend.o: $(srcdir)/config/i386/cygming-crtend.c