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

Bug#519006: mips/ld: non-dynamic relocations refer to dynamic symbol



Hi all,

I have made some progress on this bug, though it has not progress in the
expected direction. In other words I got some surprises.

First of all it the bug has been introduced in binutils when introducing
the MIPS PLT support [1] (commits around 2008-08-08). I am still
convinced it is actually a binutils bug. Secondly, if the problem is
actually not present in gcc-snapshot in gcc 4.5 we have *in Debian*, it
is not due to the fix linked in the bugzilla entry. It is due to the
fact we default to -mplt on these compilers. It is possible to
workaround the bug on gcc 4.4 using -mplt (like it is possible to 
workaround it by dropping the -g).

Given all of that, the only forseen solution for this fix is to also
default to -mplt on gcc 4.4. It also brings speed improvements, as 
well as some more "standard" binaries with regard to other 
architectures. On the other hand, I understand it is something quite 
risky so close to a release. If we go for this solution, we may want
to trigger a rebuild of part of the archive as it is currently done
on sparc.

Cheers,
Aurelien

[1] http://readlist.com/lists/gcc.gnu.org/gcc/4/22455.html

diff -u gcc-4.4-4.4.4/debian/changelog gcc-4.4-4.4.4/debian/changelog
--- gcc-4.4-4.4.4/debian/changelog
+++ gcc-4.4-4.4.4/debian/changelog
@@ -1,3 +1,10 @@
+gcc-4.4 (4.4.4-11+mipsplt) UNRELEASED; urgency=low
+
+  [ Aurelien Jarno ]
+  * Default to -mplt on mips(el).
+
+ -- Aurelien Jarno <aurel32@debian.org>  Mon, 30 Aug 2010 15:58:29 +0000
+
 gcc-4.4 (4.4.4-11) unstable; urgency=medium
 
   * Update to SVN 20100824 from the gcc-4_4-branch (r163521).
diff -u gcc-4.4-4.4.4/debian/rules2 gcc-4.4-4.4.4/debian/rules2
--- gcc-4.4-4.4.4/debian/rules2
+++ gcc-4.4-4.4.4/debian/rules2
@@ -384,12 +384,14 @@
 endif
 
 ifneq (,$(findstring mips-linux,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-mips-plt
   ifeq ($(biarchn32)-$(biarch64),yes-yes)
     CONFARGS += --enable-targets=all
   endif
 endif
 
 ifneq (,$(findstring mipsel-linux,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-mips-plt
   ifeq ($(biarchn32)-$(biarch64),yes-yes)
     CONFARGS += --enable-targets=all
   endif

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net


Reply to: