This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

mips with binutils 2.17 works (was RE: mips & binutils 2.15, gcc 3.4.5, glibc 2.3.6)


> > David Daney wrote:
> > 
> > There are many problems with the binutils ld in version 2.15 
> > under mips.
> > 
> > I would recommend either the CVS HEAD version or 2.17 with 
> this patch 
> > applied:
> > 
> > http://sources.redhat.com/ml/binutils/2006-11/msg00059.html
> > 
> > Specifically, I think the problem you are seeing mignt be 
> > fixed by said 
> > patch.
> > 
> > I am running GCC-3.4.3/binutils-2.17 with the patch/glibc 
> 2.3.3 with 
> > good results.

> Chris MacGregor wrote:
>
> Thanks very much for that.  Now, however, with binutils 2.17 (under
> crosstool 0.42, with that patch plus the crosstool binutils-2.16.1
> bfd-hash-tweak.patch and cross-gprof.patch manually copied to a new
> binutils-2.17 patch dir), glibc 2.3.6, and either gcc 3.4.5 
> or 3.4.6, I
> now get the dreaded:
> 
> /tmp/cccIYnFh.s: Assembler messages:
> /tmp/cccIYnFh.s:905: Error: symbol definition loop encountered at
> `__divdi3_internal'
> /tmp/cccIYnFh.s:905: Error: symbol definition loop encountered at
> `__udivdi3_internal'
> /tmp/cccIYnFh.s:905: Error: symbol definition loop encountered at
> `__moddi3_internal'
> /tmp/cccIYnFh.s:905: Error: symbol definition loop encountered at
> `__umoddi3_internal'
> 
> when compiling glibc's divdi3.c.

I solved the symbol loop problem with the following patch, essentially backported from glibc 2.4:

--- glibc-2.3.6/sysdeps/wordsize-32/Makefile	2002-09-18 23:47:56.000000000 -0700
+++ glibc-2.4/sysdeps/wordsize-32/Makefile	2005-11-16 11:19:03.000000000 -0800
@@ -2,5 +2,6 @@ ifeq ($(subdir),csu)
 ifeq (yes,$(build-shared))
 sysdep_routines += divdi3
 shared-only-routines += divdi3
+CPPFLAGS-divdi3.c = -Din_divdi3_c
 endif
 endif
--- glibc-2.3.6/sysdeps/wordsize-32/symbol-hacks.h~     2004-03-08 12:59:34.000000000 -0800
+++ glibc-2.3.6/sysdeps/wordsize-32/symbol-hacks.h      2007-01-22 16:02:30.000000000 -0800
@@ -22,7 +22,7 @@
    therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
    task which might not be worth it so we play tricks with the
    assembler.  */
-#if !defined __ASSEMBLER__ && !defined NOT_IN_libc && defined SHARED
+#if !defined __ASSEMBLER__ && !defined NOT_IN_libc && defined SHARED && !defined in_divdi3_c
 asm ("__divdi3 = __divdi3_internal");
 asm ("__udivdi3 = __udivdi3_internal");
 asm ("__moddi3 = __moddi3_internal");

so, adding that to crosstool-*/patches/glibc-2.3.6, adding the patch pointed out by David Daney to
crosstool-*/patches/binutils-2.17 along with the bfd-hash-tweak.patch and cross-gprof.patch from the
binutils-2.16.1 patches, I can build a toolchain (mipsel for soft-float) which seems to work.

I recommend adding a binutils-2.17 patches dir with those patches, and adding the symbol-loop patch
to the glibc-2.3.6 (and perhaps 2.3.x) patches dirs.  I can submit a crosstool patch to do that, if
desired.


--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]