]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cygming-crtend.c (register_frame_ctor): Move atexit call from here...
authorYaakov Selkowitz <yselkowi@redhat.com>
Tue, 19 Aug 2014 15:22:59 +0000 (15:22 +0000)
committerKai Tietz <ktietz@gcc.gnu.org>
Tue, 19 Aug 2014 15:22:59 +0000 (17:22 +0200)
2014-08-19  Yaakov Selkowitz  <yselkowi@redhat.com>

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

From-SVN: r214162

libgcc/ChangeLog
libgcc/config.host
libgcc/config/i386/cygming-crtbegin.c
libgcc/config/i386/cygming-crtend.c
libgcc/config/i386/t-cygming

index cdca13a30d808f9437e9a5a071fc7ee6d16b74f1..c9f4e12dd492e9006a64b8eab417e5e0ce442df7 100644 (file)
@@ -1,5 +1,12 @@
 2014-08-19  Yaakov Selkowitz  <yselkowi@redhat.com>
 
+       * 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.
 
index 54fe53803d6976bffbfcef86825961adc126b65d..0550c3434452e547a2d1d05bc24d78002f54da7a 100644 (file)
@@ -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"
index dde9f2a52fb46ee29a061c9827ba48bdcecd3d7f..3e8ed2239e4233f01669f7c4c535e113d02d9bc3 100644 (file)
@@ -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
index de0d61face2c575465c1b2e9a6971731f71ff692..d3beaf96635bb05813d8c9f56c5c64fad02a9dfd 100644 (file)
@@ -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
index d76004c48e59b3623ddbae60e82a7fe7ddbd3880..4713b7f696ee0c4a669958d31c6c00b3f6b8e052 100644 (file)
@@ -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