gcc/libgcc/config/rs6000/aixinitfini.c
David Edelsohn 4417887978 re PR target/33704 (AIX runs c++ constructors in incorrect order)
libgcc:

	PR target/33704
        * config/rs6000/aixinitfini.c: New file.
        * config/rs6000/t-aix-cxa (LIB2ADD_ST): Add aixinitfini.c.
        * config/rs6000/libgcc-aix-cxa.ver (GCC_4.9): Add libgcc initfini
        symbols.

gcc:

	PR target/33704
        * config/rs6000/aix.h (COLLECT_SHARED_INIT_FUNC): Define.
        (COLLECT_SHARED_FINI_FUNC): Define.

        * collect2.c (aix_shared_initname): Declare.
        (aix_shared_fininame): Declare.
        (symkind): Add SYM_AIXI and SYM_AIXD.
        (scanfilter_masks): Add SCAN_AIXI and SCAN_AIXD.
        (struct names special): Add GLOBAL__AIXI_ and GLOBAL__AIXD_.
        (aixlazy_flag): Parse.
        (extract_init_priority): SYM_AIXI and SYM_AIXD have highest priority.
        (scan_prog_file, COFF): Handle SYM_AIXI and SYM_AIXD.

Co-Authored-By: Andrew Dixie <andrewd@gentrack.com>

From-SVN: r205309
2013-11-23 10:38:07 -05:00

34 lines
812 B
C

/* FIXME: rename this file */
/*
Artificially create _GLOBAL_AIX[ID]_shr_o symbols in libgcc.a.
This means that libstdc++.a can invoke these symbols and they are resolved
regardless of whether libstdc++.a is linked against libgcc_s.a or libgcc.a.
The symbols are created in libgcc_s.a by collect2 as there are exception
frames to register for LIB2_DIVMOD_FUNCS.
The symbols are NOT created by collect2 for libgcc.a, because libgcc.a is
a 'real' archive containing objects and collect2 is not invoked.
libstdc++.a is linked against libgcc.a when handling the command line
options '-static-libgcc -static-libstdc++'.
*/
void _GLOBAL__AIXI_shr_o (void);
void _GLOBAL__AIXD_shr_o (void);
void
_GLOBAL__AIXI_shr_o (void)
{
return;
}
void
_GLOBAL__AIXD_shr_o (void)
{
return;
}