|
@@ -1379,6 +1379,37 @@ config THUMB2_KERNEL
|
|
|
|
|
|
If unsure, say N.
|
|
|
|
|
|
+config THUMB2_AVOID_R_ARM_THM_JUMP11
|
|
|
+ bool "Work around buggy Thumb-2 short branch relocations in gas"
|
|
|
+ depends on THUMB2_KERNEL && MODULES
|
|
|
+ default y
|
|
|
+ help
|
|
|
+ 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.
|
|
|
+
|
|
|
+ Unless you are sure your tools don't have this problem, say Y.
|
|
|
+
|
|
|
config ARM_ASM_UNIFIED
|
|
|
bool
|
|
|
|