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

2016-09-23 Thread Sebastian Huber

I checked in the following:

https://gcc.gnu.org/viewcvs/gcc?view=revision=240387

All m68k BSPs build and link the samples using RTEMS

https://git.rtems.org/rtems/commit/?id=8ace7ee42ff50eee4541fd7151bf8ecc32f82384

--
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.hu...@embedded-brains.de
PGP : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

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

2016-09-22 Thread Sebastian Huber

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:
#   hostThe configuration host (full CPU-vendor-OS triplet)
#   host_cpuThe 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 
> 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
   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
   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"

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

2016-09-22 Thread Joel Sherrill
/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.hu...@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
>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
>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@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

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

2016-09-22 Thread Sebastian Huber
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
   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
   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@rtems.org
http://lists.rtems.org/mailman/listinfo/devel