ARM: VDSO: fix regression with toolchains lacking ld.bfd executable
PATCH 1/1 ARM: VDSO: fix regression with toolchains lacking ld.bfd executable
The Sourcery CodeBench Lite 2014.05 toolchain (gcc 4.8.3, binutils 2.24.51) has a GCC which implements -fuse-ld, and it doesn't include the gold linker, but it lacks an ld.bfd executable in its installation. This means that passing -fuse-ld=bfd fails with:
VDSO arch/arm/vdso/vdso.so.raw
collect2: fatal error: cannot find 'ld'
Arguably this is a deficiency in the toolchain, but I suspect it's commonly used enough that it's worth accommodating: just use cc-ldoption (to cause a link attempt) instead of cc-option to test whether we can use -fuse-ld. So -fuse-ld=bfd won't be used with this toolchain, but the build will rightly succeed, just as it does for toolchains which don't implement -fuse-ld (and don't use gold as the default linker).
Note: this will change the failure mode for a corner case I was trying to handle in d2b30cd4b722, where the toolchain defaults to the gold linker and the BFD linker is not found in PATH, from:
VDSO arch/arm/vdso/vdso.so.raw
collect2: fatal error: cannot find 'ld'
i.e. the BFD linker is not found, to:
OBJCOPY arch/arm/vdso/vdso.so
BFD: arch/arm/vdso/vdso.so: Not enough room for program headers, try linking with -N
that is, we fail to prevent gold from being used as the linker, and it produces an object that objcopy can't digest.
--- arch/arm/vdso/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/vdso/Makefile +1 -1
@@ -14,7 +14,7 @@ VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 VDSO_LDFLAGS += -nostdlib -shared VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id) -VDSO_LDFLAGS += $(call cc-option, -fuse-ld=bfd) +VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd) obj-$(CONFIG_VDSO) += vdso.o extra-$(CONFIG_VDSO) += vdso.lds
Signature · 1 line
2.1.0
PATCH 1/1 ARM: VDSO: fix regression with toolchains lacking ld.bfd executable
Hi Nathan,
I just tested it right now and it works, you can add my:
2015-07-15 6:34 GMT+02:00 Nathan Lynch <[email protected]>:
Quoted 62 lines
The Sourcery CodeBench Lite 2014.05 toolchain (gcc 4.8.3, binutils 2.24.51) has a GCC which implements -fuse-ld, and it doesn't include the gold linker, but it lacks an ld.bfd executable in its installation. This means that passing -fuse-ld=bfd fails with:
VDSO
arch/arm/vdso/vdso.so.raw
collect2: fatal error: cannot find 'ld'Arguably this is a deficiency in the toolchain, but I suspect it's commonly used enough that it's worth accommodating: just use cc-ldoption (to cause a link attempt) instead of cc-option to test whether we can use -fuse-ld. So -fuse-ld=bfd won't be used with this toolchain, but the build will rightly succeed, just as it does for toolchains which don't implement -fuse-ld (and don't use gold as the default linker).
Note: this will change the failure mode for a corner case I was trying to handle in
d2b30cd4b722, where the toolchain defaults to the gold linker and the BFD linker is not found in PATH, from:VDSO
arch/arm/vdso/vdso.so.raw
collect2: fatal error: cannot find 'ld'i.e. the BFD linker is not found, to:
OBJCOPY
arch/arm/vdso/vdso.so
BFD:arch/arm/vdso/vdso.so: Not enough room for program headers, try linking with -Nthat is, we fail to prevent gold from being used as the linker, and it produces an object that objcopy can't digest.
Reported-by Baruch Siach <[email protected]>Tested-by Baruch Siach <[email protected]>Fixes d2b30cd4b722 ("ARM: 8384/1: VDSO: force use of BFD linker")Cc stable at vger.kernel.orgSigned-off-by Nathan Lynch <[email protected]>--- arch/arm/vdso/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/arm/vdso/Makefile +1
-2@@ -14,7 +14,7 @@ VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 VDSO_LDFLAGS += -nostdlib -shared VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id) -VDSO_LDFLAGS += $(call cc-option, -fuse-ld=bfd) +VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd) obj-$(CONFIG_VDSO) += vdso.o extra-$(CONFIG_VDSO) += vdso.lds --2.1.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 1/1 ARM: VDSO: fix regression with toolchains lacking ld.bfd executable
Quoted 5 lines · Rapha?l Poggi
Hi Nathan,
I just tested it right now and it works, you can add my:
Tested-by Rapha?l Poggi <[email protected]>
Thanks. Are you also using a CodeBench toolchain, or something else?
PATCH 1/1 ARM: VDSO: fix regression with toolchains lacking ld.bfd executable
Yes, I use the CodeBench Lite 2014.05 with gcc 4.8.3
2015-07-17 0:17 GMT+02:00 Nathan Lynch <[email protected]>:
Quoted 14 lines · Rapha?l Poggi
Quoted 5 lines
Hi Nathan,
I just tested it right now and it works, you can add my:
Tested-by Rapha?l Poggi <[email protected]>Thanks. Are you also using a CodeBench toolchain, or something else?
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel