diff mbox

[v2,libatomic] Add RTEMS support

Message ID 1461070590-12172-1-git-send-email-sebastian.huber@embedded-brains.de
State New
Headers show

Commit Message

Sebastian Huber April 19, 2016, 12:56 p.m. UTC
v2: Do not use architecture configuration due to broken ARM libatomic
support.

gcc/

	* config/rtems.h (LIB_SPEC): Add -latomic.

libatomic/

	* configure.tgt (*-*-rtems*): New supported target.
	* config/rtems/host-config.h: New file.
	* config/rtems/lock.c: Likewise.
---
 gcc/config/rtems.h                   |  2 +-
 libatomic/config/rtems/host-config.h | 41 ++++++++++++++++++++++++++++++++++++
 libatomic/config/rtems/lock.c        | 37 ++++++++++++++++++++++++++++++++
 libatomic/configure.tgt              | 10 +++++++++
 4 files changed, 89 insertions(+), 1 deletion(-)
 create mode 100644 libatomic/config/rtems/host-config.h
 create mode 100644 libatomic/config/rtems/lock.c

Comments

Sebastian Huber April 20, 2016, 12:35 p.m. UTC | #1
Hello,

I know that I am pretty late, but is there a chance to get this into the 
GCC 6.1 release?

On 19/04/16 14:56, Sebastian Huber wrote:
> v2: Do not use architecture configuration due to broken ARM libatomic
> support.
>
> gcc/
>
> 	* config/rtems.h (LIB_SPEC): Add -latomic.
>
> libatomic/
>
> 	* configure.tgt (*-*-rtems*): New supported target.
> 	* config/rtems/host-config.h: New file.
> 	* config/rtems/lock.c: Likewise.
Sebastian Huber April 25, 2016, 5:40 a.m. UTC | #2
Ok, what about the GCC trunk?

On 20/04/16 14:35, Sebastian Huber wrote:
> Hello,
>
> I know that I am pretty late, but is there a chance to get this into 
> the GCC 6.1 release?
>
> On 19/04/16 14:56, Sebastian Huber wrote:
>> v2: Do not use architecture configuration due to broken ARM libatomic
>> support.
>>
>> gcc/
>>
>>     * config/rtems.h (LIB_SPEC): Add -latomic.
>>
>> libatomic/
>>
>>     * configure.tgt (*-*-rtems*): New supported target.
>>     * config/rtems/host-config.h: New file.
>>     * config/rtems/lock.c: Likewise.
>
Jeff Law April 27, 2016, 4:06 a.m. UTC | #3
On 04/24/2016 11:40 PM, Sebastian Huber wrote:
> Ok, what about the GCC trunk?
>
> On 20/04/16 14:35, Sebastian Huber wrote:
>> Hello,
>>
>> I know that I am pretty late, but is there a chance to get this into
>> the GCC 6.1 release?
>>
>> On 19/04/16 14:56, Sebastian Huber wrote:
>>> v2: Do not use architecture configuration due to broken ARM libatomic
>>> support.
>>>
>>> gcc/
>>>
>>>     * config/rtems.h (LIB_SPEC): Add -latomic.
>>>
>>> libatomic/
>>>
>>>     * configure.tgt (*-*-rtems*): New supported target.
>>>     * config/rtems/host-config.h: New file.
>>>     * config/rtems/lock.c: Likewise.
As the RTEMS maintainer, this stuff falls within your domain, so you can 
install on the trunk whenever you're ready.

Whether or not to install on the release branch would be up to Jakub, 
Richi & Joseph.

jeff
Sebastian Huber May 2, 2016, 11 a.m. UTC | #4
If nobody objects, I will back port this to GCC 6 next Monday.

On 20/04/16 14:40, Joel Sherrill wrote:
>
> As the other RTEMS target maintainer. I second the request.
>
> --joel
>
> On Apr 20, 2016 7:35 AM, "Sebastian Huber" 
> <sebastian.huber@embedded-brains.de 
> <mailto:sebastian.huber@embedded-brains.de>> wrote:
>
>     Hello,
>
>     I know that I am pretty late, but is there a chance to get this
>     into the GCC 6.1 release?
>
>     On 19/04/16 14:56, Sebastian Huber wrote:
>
>         v2: Do not use architecture configuration due to broken ARM
>         libatomic
>         support.
>
>         gcc/
>
>                 * config/rtems.h (LIB_SPEC): Add -latomic.
>
>         libatomic/
>
>                 * configure.tgt (*-*-rtems*): New supported target.
>                 * config/rtems/host-config.h: New file.
>                 * config/rtems/lock.c: Likewise.
>
>
>     -- 
>     Sebastian Huber, embedded brains GmbH
>
>     Address : Dornierstr. 4, D-82178 Puchheim, Germany
>     Phone   : +49 89 189 47 41-16 <tel:%2B49%2089%20189%2047%2041-16>
>     Fax     : +49 89 189 47 41-09 <tel:%2B49%2089%20189%2047%2041-09>
>     E-Mail  : sebastian.huber@embedded-brains.de
>     <mailto:sebastian.huber@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 <mailto:devel@rtems.org>
>     http://lists.rtems.org/mailman/listinfo/devel
>
diff mbox

Patch

diff --git a/gcc/config/rtems.h b/gcc/config/rtems.h
index f13f72f..e005547 100644
--- a/gcc/config/rtems.h
+++ b/gcc/config/rtems.h
@@ -45,6 +45,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define LIB_SPEC "%{!qrtems: " STD_LIB_SPEC "} " \
 "%{!nostdlib: %{qrtems: --start-group \
  -lrtemsbsp -lrtemscpu \
- -lc -lgcc --end-group %{!qnolinkcmds: -T linkcmds%s}}}"
+ -latomic -lc -lgcc --end-group %{!qnolinkcmds: -T linkcmds%s}}}"
 
 #define TARGET_POSIX_IO
diff --git a/libatomic/config/rtems/host-config.h b/libatomic/config/rtems/host-config.h
new file mode 100644
index 0000000..d11e9ef
--- /dev/null
+++ b/libatomic/config/rtems/host-config.h
@@ -0,0 +1,41 @@ 
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+   Contributed by Sebastian Huber <sebastian.huber@embedded-brains.de>.
+
+   This file is part of the GNU Atomic Library (libatomic).
+
+   Libatomic is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Included after all more target-specific host-config.h.  */
+
+#include <machine/_libatomic.h>
+
+static inline UWORD
+protect_start (void *ptr)
+{
+  return _Libatomic_Protect_start (ptr);
+}
+
+static inline void
+protect_end (void *ptr, UWORD isr_level)
+{
+  _Libatomic_Protect_end (ptr, isr_level);
+}
+
+#include_next <host-config.h>
diff --git a/libatomic/config/rtems/lock.c b/libatomic/config/rtems/lock.c
new file mode 100644
index 0000000..f999f9b
--- /dev/null
+++ b/libatomic/config/rtems/lock.c
@@ -0,0 +1,37 @@ 
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+   Contributed by Sebastian Huber <sebastian.huber@embedded-brains.de>.
+
+   This file is part of the GNU Atomic Library (libatomic).
+
+   Libatomic is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "libatomic_i.h"
+
+void
+libat_lock_n (void *ptr, size_t n)
+{
+  _Libatomic_Lock_n (ptr, n);
+}
+
+void
+libat_unlock_n (void *ptr, size_t n)
+{
+  _Libatomic_Unlock_n (ptr, n);
+}
diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt
index c5470d7..eab2765 100644
--- a/libatomic/configure.tgt
+++ b/libatomic/configure.tgt
@@ -26,6 +26,10 @@ 
 # Map the target cpu to an ARCH sub-directory.  At the same time,
 # work out any special compilation flags as necessary.
 
+# Give operating systems the opportunity to discard XCFLAGS modifications based
+# on ${target_cpu}.  For example to allow proper use of multilibs.
+configure_tgt_pre_target_cpu_XCFLAGS="${XCFLAGS}"
+
 case "${target_cpu}" in
   alpha*)
 	# fenv.c needs this option to generate inexact exceptions.
@@ -128,6 +132,12 @@  case "${target}" in
             ;;
         esac
 	;;
+
+  *-*-rtems*)
+	XCFLAGS="${configure_tgt_pre_target_cpu_XCFLAGS}"
+	config_path="rtems"
+	;;
+
   *-*-elf*)
 	# ??? No target OS.  We could be targeting bare-metal kernel-mode,
 	# or user-mode for some custom OS.  If the target supports TAS,