[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc
Subject:    LTO multiple definition failures
From:       Sandra Loosemore <sandra () codesourcery ! com>
Date:       2011-12-29 21:46:55
Message-ID: 4EFCDFCF.7070606 () codesourcery ! com
[Download RAW message or body]

I've been investigating some LTO-related test failures in a GCC port for 
a DSP target that has not yet been submitted to the FSF.  The bug I've 
hit looks like the same issue with spurious multiple definitions that 
was previously reported on the gcc-help list:

http://gcc.gnu.org/ml/gcc-help/2011-10/msg00201.html

for an ARM EABI target with RTEMS.

I've been trying to duplicate the failure with some other target that 
can be tested "off the shelf".  I haven't found an actual failure yet, 
but I think I see what is causing it.  Here's the analysis I came up 
with using a powerpc-none-eabi target.

I added some instrumentation to ld to make it print out the files it was 
loading from the output of the LTO plugin.  Building

powerpc-none-eabi-gcc 
/scratch/sandra/fsf-mainline/src/gcc-mainline/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1.c \
                
/scratch/sandra/fsf-mainline/src/gcc-mainline/gcc/testsuite/gcc.c-torture/execute/builtins/20010124-1-lib.c \
                
/scratch/sandra/fsf-mainline/src/gcc-mainline/gcc/testsuite/gcc.c-torture/execute/builtins/lib/main.c \
                
-w  -O2 -flto -msim -lm -save-temps -Wl,-Map=foo.map

told me:

Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/ecrti.o 
OPEN_BFD_NORMAL
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/../../../../powerpc-none-eabi/lib/sim-crt0.o \
 OPEN_BFD_NORMAL
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/crtbegin.o \
 OPEN_BFD_NORMAL
Loading 20010124-1.o OPEN_BFD_NORMAL
Loading 20010124-1-lib.o OPEN_BFD_NORMAL
Loading main.o OPEN_BFD_NORMAL
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/../../../../powerpc-none-eabi/lib/libm.a \
 OPEN_BFD_NORMAL
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/libgcc.a 
OPEN_BFD_NORMAL
=start group
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/../../../../powerpc-none-eabi/lib/libsim.a \
 OPEN_BFD_FORCE
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/../../../../powerpc-none-eabi/lib/libc.a \
 OPEN_BFD_FORCE
=end group
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/libgcc.a 
OPEN_BFD_NORMAL
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/crtend.o 
OPEN_BFD_NORMAL
Loading 
/scratch/sandra/fsf-mainline/install/bin/../lib/gcc/powerpc-none-eabi/4.7.0/ecrtn.o 
OPEN_BFD_NORMAL
Loading /tmp/ccxgHMEr.ltrans0.ltrans.o OPEN_BFD_NORMAL

Note that this last file includes a local definition of memcpy, 
originally from 20010124-1-lib.c.  The thing that seems to be leading to 
the multiple definition error is that the startup code for my target, 
and apparently the startup code for the RTEMS target too, includes a 
reference to memcpy, which is resolved to the version from libc.a 
*before* the linker sees the one from the *.ltrans.o file at the end of 
the list.

I'm still finding my way around LTO; can anyone who's more familiar with 
this help narrow down where to look for the cause of this?  I don't even 
know if this is a compiler or ld bug at this point.  I'm not sure I can 
justify spending a lot of time working on this, but I'd at least like to 
get a proper bug report with an easily reproducible test case filed in 
the appropriate Bugzilla.  I looked around and didn't see that the 
previous report of this bug on gcc-help@ ended up recorded anyplace that 
the LTO gurus were likely to remember or do anything about it.  :-S

-Sandra


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic