Thread (1 message) 1 message, 1 author, 2015-05-05

support status of gold (was: Bulid regression with VDSO enabled)

From: Ard Biesheuvel <hidden>
Date: 2015-05-05 17:28:03

On 5 May 2015 at 18:42, Nathan Lynch [off-list ref] wrote:
(following up with a wider audience, with lots of investigation
back-and-forth elided)
quoted
quoted
quoted
quoted
quoted
On 04/30/2015 06:44 AM, Stefan Agner wrote:
quoted
  OBJCOPY arch/arm/vdso/vdso.so
BFD: arch/arm/vdso/vdso.so: Not enough room for program headers, try
linking with -N
arm-angstrom-linux-gnueabi-objcopy:arch/arm/vdso/vdso.so[.hash]: Bad
value
BFD: arch/arm/vdso/vdso.so: Not enough room for program headers, try
linking with -N
arm-angstrom-linux-gnueabi-objcopy:arch/arm/vdso/vdso.so: Bad value
make[2]: *** [arch/arm/vdso/vdso.so] Error 1
make[1]: *** [arch/arm/vdso] Error 2
make[1]: *** Waiting for unfinished jobs....

I'm using GCC 4.8.3 (Linaro GCC 4.8-2014.04) on Fedora 21. Any specific
new requirements to the toolchain or a bug?
[...]

On 05/01/2015 10:22 AM, Nathan Lynch wrote:
quoted
A relevant difference would seem to be that ld defaults to gold for this
toolchain:

$ arm-angstrom-linux-gnueabi-ld --version
GNU gold (GNU Binutils 2.24) 1.11
...

I've not been explicitly testing the vdso code with gold until now,
sorry.  Is gold a "supported" linker for the ARM kernel these days?
To reiterate - is gold currently considered a suitable linker for the
ARM kernel?

I'm able to build a 4.0/multi_v7_defconfig kernel with gold and boot it
successfully in qemu, but 4.1-rc1 introduced a couple of issues:

- arch/arm/Makefile adds --pic-veneer to LDFLAGS, which ld.gold does not
implement:
    LD      init/built-in.o
  arm-angstrom-linux-gnueabi-ld: --pic-veneer: unknown option
We could replace --pic-veneer with $(call ld-option,--pic-veneer) to
ensure that it is only passed if the linker supports it, but the
problem here is that the option was added for a reason, i.e., to
ensure that if the linker needs to insert veneers, they will be
position independent even if the binary we are building is not. This
specifically applies to the ARM kernel, since it is not compiled and
linked with -fpic but may still execute at another offset than it was
linked at (while running with the MMU off)
- The VDSO linker script is interpreted differently by ld.gold,
resulting in build errors (see original report above).  I've made some
progress on resolving this, but I still don't have a working VDSO at
runtime.

Even when I successfully build the rest of the kernel with gold (4.0 or
4.1-rc), I see many warnings like this:

  arm-angstrom-linux-gnueabi-ld: warning: unwinding may not work because
  EXIDX input section 41 of arch/arm/mach-omap2/built-in.o is not in
  EXIDX output section

But I'm unsure of their significance.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help