[Buildroot] [PATCH v2 1/9] toolchain: Add config option for atomic intrinsics

Yann E. MORIN yann.morin.1998 at free.fr
Thu Jul 31 17:25:20 UTC 2014


Anton, All,

On 2014-07-31 17:24 +0400, Anton Kolesov spake thusly:
> 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.

I think what Thomas and I discussed, was to have a patch series that
does the following changes:

   1- introduce BR2_TOOLCHAIN_HAS_ATOMIC_INTRINSICS;
   2- have all current architectures, that have atomics, select that new
      symbol (note: i386 does not, i486 and above have, for example);
   3- convert packages (one patch par package) to depend on it;
   4- introduce BR2_ARC_ATOMIC_EXT that selects it, too.

This is more logical: you first add a new option, and then you gradually
start using it, until finally you airrive to what you eventually wanted.

Regards,
Yann E. MORIN.

> Signed-off-by: Anton Kolesov <Anton.Kolesov at synopsys.com>
> ---
>  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 60b59f0..836cfef 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 02f6e3d..106a04c 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 13de9e5..f9cb7cf 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
> -- 
> 1.8.4.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list