Re: Cross-compiler builds but results fail in crt1.o ...?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Hi all; no responses to this so far.  Is it just too old a release to
bother with, and/or does no one have any thoughts about it or ideas of
where to look?  Cheers!

On Tue, 2012-04-17 at 16:42 -0400, Paul Smith wrote:
> Anyone have any thoughts for me about where to start poking to try to
> resolve (or at least get more details about) this issue?
> 
> Thanks!
> 
> On Thu, 2012-04-12 at 19:05 -0400, Paul Smith wrote:
> > Hi all.
> > 
> > I've created a cross-compiler environment that appears to work well for
> > the most part, but clearly there's something not right with it.  I've
> > poked and prodded it for a while but I can't come up with anything.
> > 
> > I'm running the compiler on GNU/Linux Intel and my cross-environment is
> > also GNU/Linux Intel, but a different version.  I have built the
> > compiler using a Canadian cross procedure, where the host is GNU/Linux
> > RHEL5 Intel 32bit and the target is a generic GNU/Linux Intel system,
> > supporting both 32 and 64bit output.
> > 
> > The bad news is I'm using GCC 4.2.4 and binutils 2.18.  Unfortunately
> > it's not practical for me to upgrade right now (next release...).  I
> > know that it's possible to use these versions because I was using them
> > before, with an incorrect compiler build procedure that didn't have the
> > problem below (unfortunately it ALSO didn't create libstdc++.so with
> > version information, due to not detecting GNU ld etc., which meant that
> > I couldn't link some 3rdparty C++ shared libraries... hence this attempt
> > to rebuild the compiler "correctly").
> > 
> > When I run the compiler I'm using --sysroot pointing at a Red Hat EL 6
> > sysroot containing both 32bit and 64bit libraries in typical multilib
> > config.
> > 
> > I can give lots of gory details, but I'm hoping someone can help me
> > narrow down my search before I get too deep.  See if the behavior below
> > creates any suspicions:
> > 
> > Here's a simple program:
> > 
> >         struct foo { char app[128]; };
> >         int main(void) { struct foo x = {0}; return 0; }
> > 
> > The trick here is the struct needs to contain an array; simple integers
> > don't cause any problems; you'll see why below.  If I build this as a
> > 64bit program (the default) then it works (FWIW I'm building this on
> > RHEL 6.2):
> > 
> >         $ x86_64-generic-linux-gnu-gcc --sysroot=/cc/sysroot -o foo /tmp/foo.c
> >         $ LD_LIBRARY_PATH=/cc/sysroot/lib64 ./foo
> > 
> > But, if I build it as a 32bit application, then it dumps core
> > immediately in some internal code:
> > 
> >         $ x86_64-generic-linux-gnu-gcc --sysroot=/cc/sysroot -m32 -o foo /tmp/foo.c
> >         $ LD_LIBRARY_PATH=/cc/sysroot/lib ./foo
> >         Segmentation fault
> >         
> >         $ LD_LIBRARY_PATH=/cc/sysroot/lib gdb ./foo
> >             ...
> >         Program received signal SIGSEGV, Segmentation fault.
> >         0x080496e0 in ?? ()
> >         (gdb) bt
> >         #0  0x080496e0 in ?? ()
> >         #1  0x00127cc6 in __libc_start_main () from /cc/sysroot/lib/libc.so.6
> >         #2  0x08048301 in _start ()
> > 
> > It also works if I build it 32bit using c++ with static libstdc++... but
> > not dynamic C++!  Weird!
> > 
> > If I change the code to this:
> > 
> >         struct foo { char app[128]; };
> >         int main(void) { struct foo x; strcpy(x.app, "foo"); return 0; }
> > 
> > then it still dumps core but the backtrace is slightly more interesting:
> > 
> > (gdb) bt
> > #0  0x07f364ef in ?? ()
> > #1  0x0804964f in memcpy@@GLIBC_2.0 ()
> > #2  0x08048396 in main ()
> > 
> > If I generate a linker map looking for memcpy() I see this:
> > 
> >         .dynbss        0x0000000008049620       0x46 /cc/sysroot/usr/lib/../lib/crt1.o
> >                        0x0000000008049620                memcpy@@GLIBC_2.0
> > 
> > And crt1.o looks OK:
> > 
> >         $ file /cc/sysroot/usr/lib/crt1.o
> >         /cc/sysroot/usr/lib/crt1.o: ELF 32-bit LSB relocatable, Intel 80386,
> >           version 1 (SYSV), for GNU/Linux 2.6.18, not stripped
> > 
> > Looking at the rest of the linker map I don't see any references to any
> > objects or libraries that aren't either (a) in my compiler's directory,
> > like crtbegin.o etc., or (b) in the sysroot directories.  Sooo, I'm a
> > bit stumped.  Seems like something is mismatched somewhere...
> > 
> > Any idea where to look?



[Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

Add to Google