Executing on host: /test/gnu/gcc/objdir/gcc/xgcc -B/test/gnu/gcc/objdir/gcc/ /te st/gnu/gcc/gcc/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c -O3 -fwhole- program -combine -fipa-type-escape -fprofile-generate -lm -o /test/gnu/gcc/ob jdir/gcc/testsuite/gcc/w_prof_global_array.x01 (timeout = 300) /usr/ccs/bin/ld: Unsatisfied symbols: _GLOBAL__FI_w_prof_global_array_x01 (first referenced in +init option) (code) _GLOBAL__FD_w_prof_global_array_x01 (first referenced in +fini option) (code) collect2: ld returned 1 exit status compiler exited with status 1
With -Wl,-debug, I see ========== output_file = /test/gnu/gcc/objdir/gcc/testsuite/gcc/w_prof_global_ar ray.exe, c_file = /var/tmp//ccVomji2.c write_c_file - output name is /test/gnu/gcc/objdir/gcc/testsuite/gcc/w_prof_glob al_array.exe, prefix is w_prof_global_array_exe static int count; typedef void entry_pt(); extern entry_pt x2 __asm__ ("_GLOBAL__I_65535_0_main"); void _GLOBAL__FI_w_prof_global_array_exe() { static entry_pt *ctors[] = { x2, }; entry_pt **p; if (count++ != 0) return; p = ctors + 1; while (p > ctors) (*--p)(); } void _GLOBAL__FD_w_prof_global_array_exe() { } ========== end of c_file /test/gnu/gcc/objdir/gcc/xgcc -x c -c -o /var/tmp//ccgqCYtU.o -B/test/gnu/gcc/ob jdir/gcc/ -fwhole-program -fipa-type-escape -fprofile-generate -fno-profile-arcs -fno-test-coverage -fno-branch-probabilities -fno-exceptions -w /var/tmp//ccVom ji2.c /test/gnu/gcc/objdir/gcc/collect-ld -z -u main -u __gcc_plt_call -o /test/gnu/gc c/objdir/gcc/testsuite/gcc/w_prof_global_array.exe /usr/ccs/lib/crt0.o /var/tmp/ /ccgqCYtU.o /lib/unix98.o -L/test/gnu/gcc/objdir/gcc -L/usr/ccs/lib -L/opt/langt ools/lib /var/tmp//ccQX5WvC.o -lm -lgcov -lgcc -lgcc_eh -lc -lgcc -lgcc_eh +init _GLOBAL__FI_w_prof_global_array_exe +fini _GLOBAL__FD_w_prof_global_array_exe /usr/ccs/bin/ld: Unsatisfied symbols: _GLOBAL__FI_w_prof_global_array_exe (first referenced in +init option) (code) _GLOBAL__FD_w_prof_global_array_exe (first referenced in +fini option) (code) This is the .s file for the collect2 c file: .LEVEL 1.1 .SPACE $PRIVATE$ .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 .SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82 .SPACE $TEXT$ .SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44 .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY .IMPORT $global$,DATA .IMPORT $$dyncall,MILLICODE .SPACE $PRIVATE$ .SUBSPA $BSS$ .align 4 count: .block 4 .SPACE $PRIVATE$ .SUBSPA $DATA$ .align 4 ctors.1225: .word P%_GLOBAL__I_65535_0_main .IMPORT _GLOBAL__I_65535_0_main,CODE Without the -fwhole-program option, the constructors are retained. -- Summary: -fwhole-program option breaks collect2-generated global constructors Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: driver AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: danglin at gcc dot gnu dot org GCC build triplet: hppa2.0w-hp-hpux11.11 GCC host triplet: hppa2.0w-hp-hpux11.11 GCC target triplet: hppa2.0w-hp-hpux11.11 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37409