From: Stephen Rothwell <hidden> Date: 2007-10-23 04:02:40
This was first noted with the -mm tree, but has now migrated into Linus'
tree. An allyesconfig build dies in the link stage like this:
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x80c8): sibling call optimization to `.text.init.refok' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text.init.refok' extern
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x8160): sibling call optimization to `.text.init.refok' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text.init.refok' extern
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x81c4): sibling call optimization to `.text.init.refok' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text.init.refok' extern
/usr/bin/ld: final link failed: Bad value
We already compile with -mminimal-toc and adding
-fno-optimize-sibling-call did not help.
Intuiting the obvious, I changed all the _INIT_STATIC and _INIT_GLOBAL
uses in head_64.S back to _STATIC and _GLOBAL (which just moves the code
from .text.init.refok to .text). Now the linker segfaults instead. :-)
/bin/sh: line 1: 5260 Segmentation fault ld -m elf64ppc -Bstatic --emit-relocs --build-id -o .tmp_vmlinux1 -T arch/powerpc/kernel/vmlinux.lds arch/powerpc/kernel/head_64.o arch/powerpc/kernel/entry_64.o arch/powerpc/kernel/fpu.o init/built-in.o --start-group usr/built-in.o arch/powerpc/kernel/built-in.o arch/powerpc/mm/built-in.o arch/powerpc/lib/built-in.o arch/powerpc/sysdev/built-in.o arch/powerpc/platforms/built-in.o arch/powerpc/xmon/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a lib/built-in.o drivers/built-in.o sound/built-in.o arch/powerpc/oprofile/built-in.o net/built-in.o --end-group
make[1]: *** [.tmp_vmlinux1] Error 139
$ ld --version
GNU ld (GNU Binutils for Debian) 2.18
I take this as an improvement :-)
We link .text.init.refok immediately after .text, but with
allyesconfig, .text ends up very large.
The --emit-relocs is a product of something else I am working on. So I
took that out and now get a whole lot more messages like:
/usr/bin/ld: net/built-in.o(.fixup+0x4): sibling call optimization to `.text' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text' extern
/usr/bin/ld: net/built-in.o(.fixup+0xc): sibling call optimization to `.text' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text' extern
Anyone have any ideas?
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
From: Stephen Rothwell <hidden> Date: 2007-10-23 04:08:03
On Tue, 23 Oct 2007 14:02:31 +1000 Stephen Rothwell [off-list ref] wrote:
We link .text.init.refok immediately after .text, but with
allyesconfig, .text ends up very large.
Just to give you some idea of what "very large" means, this is an
allyesconfig built vmlinux from August:
$ ls -l vmlinux
-rwxr-xr-x 1 sfr sfr 378704409 2007-08-21 13:44 vmlinux
$ size vmlinux
text data bss dec hex filename
41368641 9142448 3491272 54002361 33802b9 vmlinux
:-)
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
From: Andrew Morton <akpm@linux-foundation.org> Date: 2007-10-23 04:18:49
On Tue, 23 Oct 2007 14:02:31 +1000 Stephen Rothwell [off-list ref] wrote:
This was first noted with the -mm tree, but has now migrated into Linus'
tree.
Yeah, sorry, I didn't know what to do about that. I'm not even sure which
patch caused it.
An allyesconfig build dies in the link stage like this:
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x80c8): sibling call optimization to `.text.init.refok' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text.init.refok' extern
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x8160): sibling call optimization to `.text.init.refok' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text.init.refok' extern
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x81c4): sibling call optimization to `.text.init.refok' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text.init.refok' extern
/usr/bin/ld: final link failed: Bad value
We already compile with -mminimal-toc and adding
-fno-optimize-sibling-call did not help.
Intuiting the obvious, I changed all the _INIT_STATIC and _INIT_GLOBAL
uses in head_64.S back to _STATIC and _GLOBAL (which just moves the code
from .text.init.refok to .text). Now the linker segfaults instead. :-)
/bin/sh: line 1: 5260 Segmentation fault ld -m elf64ppc -Bstatic --emit-relocs --build-id -o .tmp_vmlinux1 -T arch/powerpc/kernel/vmlinux.lds arch/powerpc/kernel/head_64.o arch/powerpc/kernel/entry_64.o arch/powerpc/kernel/fpu.o init/built-in.o --start-group usr/built-in.o arch/powerpc/kernel/built-in.o arch/powerpc/mm/built-in.o arch/powerpc/lib/built-in.o arch/powerpc/sysdev/built-in.o arch/powerpc/platforms/built-in.o arch/powerpc/xmon/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o lib/lib.a lib/built-in.o drivers/built-in.o sound/built-in.o arch/powerpc/oprofile/built-in.o net/built-in.o --end-group
make[1]: *** [.tmp_vmlinux1] Error 139
$ ld --version
GNU ld (GNU Binutils for Debian) 2.18
I take this as an improvement :-)
We link .text.init.refok immediately after .text, but with
allyesconfig, .text ends up very large.
The --emit-relocs is a product of something else I am working on. So I
took that out and now get a whole lot more messages like:
/usr/bin/ld: net/built-in.o(.fixup+0x4): sibling call optimization to `.text' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text' extern
/usr/bin/ld: net/built-in.o(.fixup+0xc): sibling call optimization to `.text' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `.text' extern
Anyone have any ideas?
I still don't know ;)
What did we do which caused all this to start happening?
This was first noted with the -mm tree, but has now migrated into
Linus'
tree. An allyesconfig build dies in the link stage like this:
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x80c8): sibling call
optimization to `.text.init.refok' does not allow automatic multiple
TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or
make `.text.init.refok' extern
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x8160): sibling call
optimization to `.text.init.refok' does not allow automatic multiple
TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or
make `.text.init.refok' extern
/usr/bin/ld: arch/powerpc/kernel/head_64.o(.text+0x81c4): sibling call
optimization to `.text.init.refok' does not allow automatic multiple
TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or
make `.text.init.refok' extern
/usr/bin/ld: final link failed: Bad value
I just tried, and it works fine for me.
Intuiting the obvious, I changed all the _INIT_STATIC and _INIT_GLOBAL
uses in head_64.S back to _STATIC and _GLOBAL (which just moves the
code
from .text.init.refok to .text). Now the linker segfaults instead.
:-)
Tried that, too, and no segfault, everything happy.
$ ld --version
GNU ld (GNU Binutils for Debian) 2.18
I'm using CVS HEAD of binutils. Could you try that, with the same
GCC version you are currently using? Just to narrow things down...
Segher
From: Alan Modra <hidden> Date: 2007-10-23 10:19:02
On Tue, Oct 23, 2007 at 02:02:31PM +1000, Stephen Rothwell wrote:
Anyone have any ideas?
The segfault with --emit-relocs and complaints about .fixup are linker
bugs. I'm about the commit fixes for both of these problems.
--
Alan Modra
Australia Development Lab, IBM