summaryrefslogtreecommitdiffstats
path: root/package/uclibc
diff options
context:
space:
mode:
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>2016-03-31 21:00:07 +0200
committerPeter Korsgaard <peter@korsgaard.com>2016-04-08 10:20:37 +0200
commit696db774843ec02c10c756a39e4aee6c29de7f78 (patch)
tree5fe52e69ca6d4bd55bd2521cffdf6b82e40763b4 /package/uclibc
parentcfb4c03204c5bfc9620c08c7e274721c55e9701e (diff)
downloadbuildroot-696db774843ec02c10c756a39e4aee6c29de7f78.tar.gz
buildroot-696db774843ec02c10c756a39e4aee6c29de7f78.zip
uclibc: context functions are not Thumb-compatible
The context functions in uClibc unconditionally use the classic ARM instruction set. On platforms that do support the ARM instruction set, there is no problem - However, on platforms that only support the Thumb instruction set, the context functions cannot be built since the assembler code is not Thumb-ready. Therefore, these functions must be disabled on such platforms. All Thumb1 platforms support ARM instructions, so this is only relevant for Thumb2-only platforms (i.e., Cortex-M). Note that some packages require the context functions, so these will fail to build on these platforms. It is worth mentioning that musl also doesn't provide the context functions, and those are rarely used. Affected packages will be handled in later patches. [Peter: slightly reworded] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Diffstat (limited to 'package/uclibc')
-rw-r--r--package/uclibc/uclibc.mk11
1 files changed, 11 insertions, 0 deletions
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index e3e45f7bcd..1ccdfbbfc1 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -88,6 +88,16 @@ define UCLIBC_ARM_BINFMT_FLAT
endef
endif
+# context functions are written with ARM instructions. Therefore, if
+# we are using a Thumb2-only platform (i.e, Cortex-M), they must be
+# disabled. Thumb1 platforms are not a problem, since they all also
+# support the ARM instructions.
+ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB2):$(BR2_ARM_CPU_HAS_ARM),y:)
+define UCLIBC_ARM_NO_CONTEXT_FUNCS
+ $(call KCONFIG_DISABLE_OPT,UCLIBC_HAS_CONTEXT_FUNCS,$(@D)/.config)
+endef
+endif
+
endif # arm
#
@@ -361,6 +371,7 @@ define UCLIBC_KCONFIG_FIXUP_CMDS
$(UCLIBC_ARC_PAGE_SIZE_CONFIG)
$(UCLIBC_ARM_ABI_CONFIG)
$(UCLIBC_ARM_BINFMT_FLAT)
+ $(UCLIBC_ARM_NO_CONTEXT_FUNCS)
$(UCLIBC_MIPS_ABI_CONFIG)
$(UCLIBC_MIPS_ISA_CONFIG)
$(UCLIBC_SH_TYPE_CONFIG)
OpenPOWER on IntegriCloud