aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/Kconfig
diff options
context:
space:
mode:
authorDave Martin <dave.martin@linaro.org>2011-03-03 05:41:12 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2011-03-10 11:49:06 -0500
commit6f685c5cdd29649cf8cc8f57c72791159f936e07 (patch)
tree892575c8f378609771752e12e88d4f2699084c70 /arch/arm/Kconfig
parent23bfdacf4eb525ff3404161429cedaa281c23e47 (diff)
ARM: 6781/1: Thumb-2: Work around buggy Thumb-2 short branch relocations in gas
Various binutils versions can resolve Thumb-2 branches to locally-defined, preemptible global symbols as short-range "b.n" branch instructions. This is a problem, because there's no guarantee the final destination of the symbol, or any candidate locations for a trampoline, are within range of the branch. For this reason, the kernel does not support fixing up the R_ARM_THM_JUMP11 (102) relocation in modules at all, and it makes little sense to add support. The symptom is that the kernel fails with an "unsupported relocation" error when loading some modules. Until fixed tools are available, passing -fno-optimize-sibling-calls to gcc should prevent gcc generating code which hits this problem, at the cost of a bit of extra runtime stack usage in some cases. The problem is described in more detail at: https://bugs.launchpad.net/binutils-linaro/+bug/725126 Only Thumb-2 kernels are affected. This patch adds a new CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11 config option which adds -fno-optimize-sibling-calls to CFLAGS_MODULE when building a Thumb-2 kernel. Signed-off-by: Dave Martin <dave.martin@linaro.org> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/Kconfig')
-rw-r--r--arch/arm/Kconfig31
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 2fec7073f687..f871f2e1dd7c 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1379,6 +1379,37 @@ config THUMB2_KERNEL
1379 1379
1380 If unsure, say N. 1380 If unsure, say N.
1381 1381
1382config THUMB2_AVOID_R_ARM_THM_JUMP11
1383 bool "Work around buggy Thumb-2 short branch relocations in gas"
1384 depends on THUMB2_KERNEL && MODULES
1385 default y
1386 help
1387 Various binutils versions can resolve Thumb-2 branches to
1388 locally-defined, preemptible global symbols as short-range "b.n"
1389 branch instructions.
1390
1391 This is a problem, because there's no guarantee the final
1392 destination of the symbol, or any candidate locations for a
1393 trampoline, are within range of the branch. For this reason, the
1394 kernel does not support fixing up the R_ARM_THM_JUMP11 (102)
1395 relocation in modules at all, and it makes little sense to add
1396 support.
1397
1398 The symptom is that the kernel fails with an "unsupported
1399 relocation" error when loading some modules.
1400
1401 Until fixed tools are available, passing
1402 -fno-optimize-sibling-calls to gcc should prevent gcc generating
1403 code which hits this problem, at the cost of a bit of extra runtime
1404 stack usage in some cases.
1405
1406 The problem is described in more detail at:
1407 https://bugs.launchpad.net/binutils-linaro/+bug/725126
1408
1409 Only Thumb-2 kernels are affected.
1410
1411 Unless you are sure your tools don't have this problem, say Y.
1412
1382config ARM_ASM_UNIFIED 1413config ARM_ASM_UNIFIED
1383 bool 1414 bool
1384 1415