[PATCH v2] [RTEMS] Always use atomic builtins for libstdc++

Joel Sherrill joel at rtems.org
Thu Sep 22 13:25:36 UTC 2016


/The target pattern in the commit message doesn't look right.
It should be *-*-rtems* I think.

Do all BSPs for m68k build with C++ enabled?

What code is used for atomic operations on say a 68000 or
68020?

Thanks.

--joel

On Thu, Sep 22, 2016 at 3:47 AM, Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> v2: Fix shell script part since shell grouping is expressed by { }.
>
> libstdc++-v3/
>         * config/cpu/m68k/atomicity.h: Adjust comment.
>         * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Honor
>         explicit atomicity_dir setup via configure.host.
>         * configure.host (rtems-*): Set atomicity_dir.
>         * configure: Regenerate.
> ---
>  libstdc++-v3/acinclude.m4                |  5 +++--
>  libstdc++-v3/config/cpu/m68k/atomicity.h |  3 +++
>  libstdc++-v3/configure                   | 11 ++++++-----
>  libstdc++-v3/configure.host              |  4 ++++
>  4 files changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
> index 6d897be..d7db435 100644
> --- a/libstdc++-v3/acinclude.m4
> +++ b/libstdc++-v3/acinclude.m4
> @@ -3490,9 +3490,10 @@ EOF
>    AC_LANG_RESTORE
>
>    # Set atomicity_dir to builtins if all but the long long test above
> passes.
> -  if test "$glibcxx_cv_atomic_bool" = yes \
> +  if { test "$glibcxx_cv_atomic_bool" = yes \
>       && test "$glibcxx_cv_atomic_short" = yes \
> -     && test "$glibcxx_cv_atomic_int" = yes; then
> +     && test "$glibcxx_cv_atomic_int" = yes } \
> +     || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
>      AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
>      [Define if the compiler supports C++11 atomics.])
>      atomicity_dir=cpu/generic/atomicity_builtins
> diff --git a/libstdc++-v3/config/cpu/m68k/atomicity.h
> b/libstdc++-v3/config/cpu/m68k/atomicity.h
> index f421330..a9ddc6b 100644
> --- a/libstdc++-v3/config/cpu/m68k/atomicity.h
> +++ b/libstdc++-v3/config/cpu/m68k/atomicity.h
> @@ -48,6 +48,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>    }
>
>  #elif defined(__rtems__)
> +  // This code is only provided for reference.  RTEMS uses now the atomic
> +  // builtins and libatomic.  See configure.host.
> +  //
>    // TAS/JBNE is unsafe on systems with strict priority-based scheduling.
>    // Disable interrupts, which we can do only from supervisor mode.
>    _Atomic_word
> diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
> index 6332c4d..d09a7e0 100755
> --- a/libstdc++-v3/configure
> +++ b/libstdc++-v3/configure
> @@ -15539,9 +15539,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
>
>
>    # Set atomicity_dir to builtins if all but the long long test above
> passes.
> -  if test "$glibcxx_cv_atomic_bool" = yes \
> +  if { test "$glibcxx_cv_atomic_bool" = yes \
>       && test "$glibcxx_cv_atomic_short" = yes \
> -     && test "$glibcxx_cv_atomic_int" = yes; then
> +     && test "$glibcxx_cv_atomic_int" = yes } \
> +     || test "$atomicity_dir" = "cpu/generic/atomicity_builtins"; then
>
>  $as_echo "#define _GLIBCXX_ATOMIC_BUILTINS 1" >>confdefs.h
>
> @@ -15573,7 +15574,7 @@ $as_echo "$as_me: WARNING: Performance of certain
> classes will degrade as a resu
>    # unnecessary for this test.
>
>      cat > conftest.$ac_ext << EOF
> -#line 15576 "configure"
> +#line 15577 "configure"
>  int main()
>  {
>    _Decimal32 d1;
> @@ -15615,7 +15616,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
>    # unnecessary for this test.
>
>      cat > conftest.$ac_ext << EOF
> -#line 15618 "configure"
> +#line 15619 "configure"
>  template<typename T1, typename T2>
>    struct same
>    { typedef T2 type; };
> @@ -15649,7 +15650,7 @@ $as_echo "$enable_int128" >&6; }
>      rm -f conftest*
>
>      cat > conftest.$ac_ext << EOF
> -#line 15652 "configure"
> +#line 15653 "configure"
>  template<typename T1, typename T2>
>    struct same
>    { typedef T2 type; };
> diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
> index c0cc3ee..eb56ab1 100644
> --- a/libstdc++-v3/configure.host
> +++ b/libstdc++-v3/configure.host
> @@ -296,6 +296,10 @@ case "${host_os}" in
>      os_include_dir="os/qnx/qnx6.1"
>      c_model=c
>      ;;
> +  rtems*)
> +    # Use libatomic if necessary and avoid libstdc++ specific atomicity
> support
> +    atomicity_dir="cpu/generic/atomicity_builtins"
> +    ;;
>    solaris2)
>      # This too-vague configuration does not provide enough information
>      # to select a ctype include, and thus os_include_dir is a crap shoot.
> --
> 1.8.4.5
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160922/60eb5fdb/attachment.html>


More information about the devel mailing list