Skip to content

Commit

Permalink
cygming-crtend.c (register_frame_ctor): Move atexit call from here...
Browse files Browse the repository at this point in the history
2014-08-19  Yaakov Selkowitz  <[email protected]>

	* 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
  • Loading branch information
yselkowitz authored and Kai Tietz committed Aug 19, 2014
1 parent 301f440 commit 25efdb9
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 8 deletions.
7 changes: 7 additions & 0 deletions libgcc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
2014-08-19 Yaakov Selkowitz <[email protected]>

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

Expand Down
4 changes: 2 additions & 2 deletions libgcc/config.host
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
24 changes: 24 additions & 0 deletions libgcc/config/i386/cygming-crtbegin.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
6 changes: 0 additions & 6 deletions libgcc/config/i386/cygming-crtend.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions libgcc/config/i386/t-cygming
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 25efdb9

Please sign in to comment.