[PATCH v2] [RTEMS] Always use atomic builtins for libstdc++
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Sep 22 13:32:19 UTC 2016
On 22/09/16 15:25, Joel Sherrill wrote:
> /The target pattern in the commit message doesn't look right.
> It should be *-*-rtems* I think.
It should be ok since host_os is used:
# It uses the following shell variables as set by config.guess:
# host The configuration host (full CPU-vendor-OS triplet)
# host_cpu The configuration host CPU
# host_os The configuration host OS
>
> Do all BSPs for m68k build with C++ enabled?
Yes, but I face currently some other problems with GCC 7:
https://gcc.gnu.org/ml/gcc/2016-09/msg00114.html
There is also a NULL pointer access in wctob() with the latest Newlib.
>
> What code is used for atomic operations on say a 68000 or
> 68020?
They use the libatomic if the atomic operations are not supported by
hardware. libatomic uses _Libatomic_Protect_start() and
_Libatomic_Protect_end() on RTEMS.
>
> Thanks.
>
> --joel
>
> On Thu, Sep 22, 2016 at 3:47 AM, Sebastian Huber
> <sebastian.huber at embedded-brains.de
> <mailto: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 <mailto:devel at rtems.org>
> http://lists.rtems.org/mailman/listinfo/devel
> <http://lists.rtems.org/mailman/listinfo/devel>
>
>
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list