From cbffd50561f7ce595296bddaf108031e501b2063 Mon Sep 17 00:00:00 2001 From: Anton Kolesov Date: Thu, 31 Jul 2014 17:24:42 +0400 Subject: [PATCH] toolchain: Add config option for atomic intrinsics GCC has several builtin functions that implement atomic operations. Those functions are architecture specific and may not be implemented by the specific toolchain. In case of GCC for ARC those functions rely on LLOCK/SCOND instructions which are optional in ARC CPU's. If ARC CPU doesn't support those instructions but software tries to use them, then application will be aborted with Illegal instruction exception. To avoid confusion user should first specify that their CPU supports atomic extension, which will allow selection of packages that use builtin atomic functions. Signed-off-by: Anton Kolesov Signed-off-by: Thomas Petazzoni --- arch/Config.in.arc | 5 +++++ package/Makefile.in | 4 ++++ toolchain/toolchain-common.in | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/arch/Config.in.arc b/arch/Config.in.arc index 60b59f0319..836cfef638 100644 --- a/arch/Config.in.arc +++ b/arch/Config.in.arc @@ -1,3 +1,8 @@ +# Choise of atomic instructions presence +config BR2_ARC_ATOMIC_EXT + bool "Atomic extension (LLOCK/SCOND instructions)" + select BR2_TOOLCHAIN_HAS_ATOMIC_INTRINSICS + config BR2_ARCH default "arc" if BR2_arcle default "arceb" if BR2_arceb diff --git a/package/Makefile.in b/package/Makefile.in index 02f6e3d62c..106a04cc8d 100644 --- a/package/Makefile.in +++ b/package/Makefile.in @@ -102,6 +102,10 @@ ifeq ($(BR2_xtensa),y) TARGET_ABI += -mlongcalls -mtext-section-literals endif +ifeq ($(BR2_arc)$(BR2_ARC_ATOMIC_EXT),yy) +TARGET_ABI += -matomic +endif + STAGING_SUBDIR = usr/$(GNU_TARGET_NAME)/sysroot STAGING_DIR = $(HOST_DIR)/$(STAGING_SUBDIR) diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in index 2df8ddb637..48ba8400ca 100644 --- a/toolchain/toolchain-common.in +++ b/toolchain/toolchain-common.in @@ -44,6 +44,10 @@ config BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS config BR2_TOOLCHAIN_HAS_SSP bool +config BR2_TOOLCHAIN_HAS_ATOMIC_INTRINSICS + bool + default y if !BR2_arc + config BR2_ENABLE_LOCALE_PURGE bool "Purge unwanted locales" help -- 2.30.2