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

Reply via email to