This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix declaration of pthread-structs in s-osinte-rtems.ads (ada/68169)
- From: Jan Sommer <soja-lists at aries dot uberspace dot de>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Jeff Law <law at redhat dot com>, devel at rtems dot org, sebastian dot huber at embedded-brains dot de, joel dot sherrill at oarcorp dot com
- Date: Tue, 01 Dec 2015 20:56:59 +0100
- Subject: Re: [PATCH] Fix declaration of pthread-structs in s-osinte-rtems.ads (ada/68169)
- Authentication-results: sourceware.org; auth=none
- References: <3667951 dot xxJfb3I2z2 at kubuntu> <4179765 dot TvvTxxOOIv at kubuntu> <565CD982 dot 1020805 at redhat dot com>
Am Monday 30 November 2015, 16:19:30 schrieb Jeff Law:
> On 11/30/2015 03:06 PM, Jan Sommer wrote:
> > Could someone with write access please commit the patch?
> > The paperwork with the FSF has gone through. If something else is missing, please tell me.
> > I won't be available next week.
> I'm not sure what you built your patches again, but I can't apply them
> to the trunk. Can you resend a patch as a diff against the trunk.
>
> Often I can fix things by hand, but this is Ada and I'd be much more
> likely to botch something.
I updated the patches again. They should now fit with the heads of the respective branches again.
Maybe the Changelog will be out of synch again.
The patches are for the following branches:
ada-68169_4.9.diff --> gcc-4_9-branch
ada-68169_5.x.diff --> gcc-5-branch
ada-68169_trunk.diff --> trunk
Let me know if they apply this time. I used svn diff to create them and used patch -p0 to test if they apply locally.
Thank you,
Jan
>
>
> jeff
>
>
Index: gcc/ada/ChangeLog
===================================================================
--- gcc/ada/ChangeLog (Revision 231125)
+++ gcc/ada/ChangeLog (Arbeitskopie)
@@ -1,3 +1,9 @@
+2015-12-01 Jan Sommer <soja-lists@aries.uberspace.de>
+
+ * s-oscons-tmplt.c: Generate pthread constants for RTEMS
+ * s-osinte-rtems.ads: Declare pthread structs as opaque types in Ada
+ Fixes PR ada/68169
+
2015-11-29 Matthias Klose <doko@ubuntu.com>
PR ada/68564
Index: gcc/ada/s-oscons-tmplt.c
===================================================================
--- gcc/ada/s-oscons-tmplt.c (Revision 231125)
+++ gcc/ada/s-oscons-tmplt.c (Arbeitskopie)
@@ -154,7 +154,7 @@ pragma Style_Checks ("M32766");
# include <_types.h>
#endif
-#ifdef __linux__
+#if defined (__linux__) || defined (__rtems__)
# include <pthread.h>
# include <signal.h>
#endif
@@ -1441,7 +1441,8 @@ CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock")
CNS(CLOCK_RT_Ada, "")
#endif
-#if defined (__APPLE__) || defined (__linux__) || defined (DUMMY)
+#if defined (__APPLE__) || defined (__linux__) || defined (__rtems__) || \
+ defined (DUMMY)
/*
-- Sizes of pthread data types
@@ -1484,7 +1485,7 @@ CND(PTHREAD_RWLOCKATTR_SIZE, "pthread_rwlockattr_t
CND(PTHREAD_RWLOCK_SIZE, "pthread_rwlock_t")
CND(PTHREAD_ONCE_SIZE, "pthread_once_t")
-#endif /* __APPLE__ || __linux__ */
+#endif /* __APPLE__ || __linux__ || __rtems__*/
/*
Index: gcc/ada/s-osinte-rtems.ads
===================================================================
--- gcc/ada/s-osinte-rtems.ads (Revision 231125)
+++ gcc/ada/s-osinte-rtems.ads (Arbeitskopie)
@@ -51,6 +51,8 @@
-- It is designed to be a bottom-level (leaf) package.
with Interfaces.C;
+with System.OS_Constants;
+
package System.OS_Interface is
pragma Preelaborate;
@@ -60,6 +62,7 @@ package System.OS_Interface is
subtype rtems_id is Interfaces.C.unsigned;
subtype int is Interfaces.C.int;
+ subtype char is Interfaces.C.char;
subtype short is Interfaces.C.short;
subtype long is Interfaces.C.long;
subtype unsigned is Interfaces.C.unsigned;
@@ -68,7 +71,6 @@ package System.OS_Interface is
subtype unsigned_char is Interfaces.C.unsigned_char;
subtype plain_char is Interfaces.C.plain_char;
subtype size_t is Interfaces.C.size_t;
-
-----------
-- Errno --
-----------
@@ -76,11 +78,11 @@ package System.OS_Interface is
function errno return int;
pragma Import (C, errno, "__get_errno");
- EAGAIN : constant := 11;
- EINTR : constant := 4;
- EINVAL : constant := 22;
- ENOMEM : constant := 12;
- ETIMEDOUT : constant := 116;
+ EAGAIN : constant := System.OS_Constants.EAGAIN;
+ EINTR : constant := System.OS_Constants.EINTR;
+ EINVAL : constant := System.OS_Constants.EINVAL;
+ ENOMEM : constant := System.OS_Constants.ENOMEM;
+ ETIMEDOUT : constant := System.OS_Constants.ETIMEDOUT;
-------------
-- Signals --
@@ -448,6 +450,7 @@ package System.OS_Interface is
ss_low_priority : int;
ss_replenish_period : timespec;
ss_initial_budget : timespec;
+ sched_ss_max_repl : int;
end record;
pragma Convention (C, struct_sched_param);
@@ -621,43 +624,34 @@ private
end record;
pragma Convention (C, timespec);
- CLOCK_REALTIME : constant clockid_t := 1;
- CLOCK_MONOTONIC : constant clockid_t := 4;
+ CLOCK_REALTIME : constant clockid_t := System.OS_Constants.CLOCK_REALTIME;
+ CLOCK_MONOTONIC : constant clockid_t := System.OS_Constants.CLOCK_MONOTONIC;
+ subtype char_array is Interfaces.C.char_array;
+
type pthread_attr_t is record
- is_initialized : int;
- stackaddr : System.Address;
- stacksize : int;
- contentionscope : int;
- inheritsched : int;
- schedpolicy : int;
- schedparam : struct_sched_param;
- cputime_clocked_allowed : int;
- detatchstate : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_ATTR_SIZE);
end record;
pragma Convention (C, pthread_attr_t);
+ for pthread_attr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_condattr_t is record
- flags : int;
- process_shared : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_CONDATTR_SIZE);
end record;
pragma Convention (C, pthread_condattr_t);
+ for pthread_condattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_mutexattr_t is record
- is_initialized : int;
- process_shared : int;
- prio_ceiling : int;
- protocol : int;
- mutex_type : int;
- recursive : int;
- end record;
+ Data : char_array (1 .. OS_Constants.PTHREAD_MUTEXATTR_SIZE);
+ end record;
pragma Convention (C, pthread_mutexattr_t);
+ for pthread_mutexattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_rwlockattr_t is record
- is_initialized : int;
- process_shared : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_RWLOCKATTR_SIZE);
end record;
pragma Convention (C, pthread_rwlockattr_t);
+ for pthread_rwlockattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_t is new rtems_id;
Index: gcc/ada/ChangeLog
===================================================================
--- gcc/ada/ChangeLog (Revision 231125)
+++ gcc/ada/ChangeLog (Arbeitskopie)
@@ -1,3 +1,9 @@
+2015-12-01 Jan Sommer <soja-lists@aries.uberspace.de>
+
+ * s-oscons-tmplt.c: Generate pthread constants for RTEMS
+ * s-osinte-rtems.ads: Declare pthread structs as opaque types in Ada
+ Fixes PR ada/68169
+
2015-11-29 Matthias Klose <doko@ubuntu.com>
PR ada/68564
Index: gcc/ada/s-oscons-tmplt.c
===================================================================
--- gcc/ada/s-oscons-tmplt.c (Revision 231125)
+++ gcc/ada/s-oscons-tmplt.c (Arbeitskopie)
@@ -157,7 +157,7 @@ pragma Style_Checks ("M32766");
# include <_types.h>
#endif
-#ifdef __linux__
+#if defined (__linux__) || defined (__rtems__)
# include <pthread.h>
# include <signal.h>
#endif
@@ -1456,7 +1456,8 @@ CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock")
CNS(CLOCK_RT_Ada, "")
#endif
-#if defined (__APPLE__) || defined (__linux__) || defined (DUMMY)
+#if defined (__APPLE__) || defined (__linux__) || defined (__rtems__) || \
+ defined (DUMMY)
/*
-- Sizes of pthread data types
@@ -1499,7 +1500,7 @@ CND(PTHREAD_RWLOCKATTR_SIZE, "pthread_rwlockattr_t
CND(PTHREAD_RWLOCK_SIZE, "pthread_rwlock_t")
CND(PTHREAD_ONCE_SIZE, "pthread_once_t")
-#endif /* __APPLE__ || __linux__ */
+#endif /* __APPLE__ || __linux__ || __rtems__*/
/*
Index: gcc/ada/s-osinte-rtems.ads
===================================================================
--- gcc/ada/s-osinte-rtems.ads (Revision 231125)
+++ gcc/ada/s-osinte-rtems.ads (Arbeitskopie)
@@ -51,6 +51,8 @@
-- It is designed to be a bottom-level (leaf) package.
with Interfaces.C;
+with System.OS_Constants;
+
package System.OS_Interface is
pragma Preelaborate;
@@ -60,6 +62,7 @@ package System.OS_Interface is
subtype rtems_id is Interfaces.C.unsigned;
subtype int is Interfaces.C.int;
+ subtype char is Interfaces.C.char;
subtype short is Interfaces.C.short;
subtype long is Interfaces.C.long;
subtype unsigned is Interfaces.C.unsigned;
@@ -68,7 +71,6 @@ package System.OS_Interface is
subtype unsigned_char is Interfaces.C.unsigned_char;
subtype plain_char is Interfaces.C.plain_char;
subtype size_t is Interfaces.C.size_t;
-
-----------
-- Errno --
-----------
@@ -76,11 +78,11 @@ package System.OS_Interface is
function errno return int;
pragma Import (C, errno, "__get_errno");
- EAGAIN : constant := 11;
- EINTR : constant := 4;
- EINVAL : constant := 22;
- ENOMEM : constant := 12;
- ETIMEDOUT : constant := 116;
+ EAGAIN : constant := System.OS_Constants.EAGAIN;
+ EINTR : constant := System.OS_Constants.EINTR;
+ EINVAL : constant := System.OS_Constants.EINVAL;
+ ENOMEM : constant := System.OS_Constants.ENOMEM;
+ ETIMEDOUT : constant := System.OS_Constants.ETIMEDOUT;
-------------
-- Signals --
@@ -448,6 +450,7 @@ package System.OS_Interface is
ss_low_priority : int;
ss_replenish_period : timespec;
ss_initial_budget : timespec;
+ sched_ss_max_repl : int;
end record;
pragma Convention (C, struct_sched_param);
@@ -621,43 +624,34 @@ private
end record;
pragma Convention (C, timespec);
- CLOCK_REALTIME : constant clockid_t := 1;
- CLOCK_MONOTONIC : constant clockid_t := 4;
+ CLOCK_REALTIME : constant clockid_t := System.OS_Constants.CLOCK_REALTIME;
+ CLOCK_MONOTONIC : constant clockid_t := System.OS_Constants.CLOCK_MONOTONIC;
+ subtype char_array is Interfaces.C.char_array;
+
type pthread_attr_t is record
- is_initialized : int;
- stackaddr : System.Address;
- stacksize : int;
- contentionscope : int;
- inheritsched : int;
- schedpolicy : int;
- schedparam : struct_sched_param;
- cputime_clocked_allowed : int;
- detatchstate : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_ATTR_SIZE);
end record;
pragma Convention (C, pthread_attr_t);
+ for pthread_attr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_condattr_t is record
- flags : int;
- process_shared : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_CONDATTR_SIZE);
end record;
pragma Convention (C, pthread_condattr_t);
+ for pthread_condattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_mutexattr_t is record
- is_initialized : int;
- process_shared : int;
- prio_ceiling : int;
- protocol : int;
- mutex_type : int;
- recursive : int;
- end record;
+ Data : char_array (1 .. OS_Constants.PTHREAD_MUTEXATTR_SIZE);
+ end record;
pragma Convention (C, pthread_mutexattr_t);
+ for pthread_mutexattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_rwlockattr_t is record
- is_initialized : int;
- process_shared : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_RWLOCKATTR_SIZE);
end record;
pragma Convention (C, pthread_rwlockattr_t);
+ for pthread_rwlockattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_t is new rtems_id;
Index: gcc/ada/ChangeLog
===================================================================
--- gcc/ada/ChangeLog (Revision 231125)
+++ gcc/ada/ChangeLog (Arbeitskopie)
@@ -1,3 +1,9 @@
+2015-11-18 Jan Sommer <soja-lists@aries.uberspace.de>
+
+ * s-oscons-tmplt.c: Generate pthread constants for RTEMS
+ * s-osinte-rtems.ads: Declare pthread structs as opaque types in Ada
+ Fixes PR ada/68169
+
2015-12-01 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/Makefile.in (ADA_EXCLUDE_SRCS): Reorder.
Index: gcc/ada/s-oscons-tmplt.c
===================================================================
--- gcc/ada/s-oscons-tmplt.c (Revision 230563)
+++ gcc/ada/s-oscons-tmplt.c (Arbeitskopie)
@@ -157,7 +157,7 @@ pragma Style_Checks ("M32766");
# include <_types.h>
#endif
-#if defined (__linux__) || defined (__ANDROID__)
+#if defined (__linux__) || defined (__ANDROID__) || defined (__rtems__)
# include <pthread.h>
# include <signal.h>
#endif
@@ -1458,7 +1458,7 @@ CNS(CLOCK_RT_Ada, "")
#endif
#if defined (__APPLE__) || defined (__linux__) || defined (__ANDROID__) \
- || defined (DUMMY)
+ || defined (__rtems__) || defined (DUMMY)
/*
-- Sizes of pthread data types
@@ -1501,7 +1501,7 @@ CND(PTHREAD_RWLOCKATTR_SIZE, "pthread_rwlockattr_t
CND(PTHREAD_RWLOCK_SIZE, "pthread_rwlock_t")
CND(PTHREAD_ONCE_SIZE, "pthread_once_t")
-#endif /* __APPLE__ || __linux__ || __ANDROID__ */
+#endif /* __APPLE__ || __linux__ || __ANDROID__ || __rtems__ */
/*
Index: gcc/ada/s-osinte-rtems.ads
===================================================================
--- gcc/ada/s-osinte-rtems.ads (Revision 231125)
+++ gcc/ada/s-osinte-rtems.ads (Arbeitskopie)
@@ -51,6 +51,8 @@
-- It is designed to be a bottom-level (leaf) package.
with Interfaces.C;
+with System.OS_Constants;
+
package System.OS_Interface is
pragma Preelaborate;
@@ -60,6 +62,7 @@ package System.OS_Interface is
subtype rtems_id is Interfaces.C.unsigned;
subtype int is Interfaces.C.int;
+ subtype char is Interfaces.C.char;
subtype short is Interfaces.C.short;
subtype long is Interfaces.C.long;
subtype unsigned is Interfaces.C.unsigned;
@@ -68,7 +71,6 @@ package System.OS_Interface is
subtype unsigned_char is Interfaces.C.unsigned_char;
subtype plain_char is Interfaces.C.plain_char;
subtype size_t is Interfaces.C.size_t;
-
-----------
-- Errno --
-----------
@@ -76,11 +78,11 @@ package System.OS_Interface is
function errno return int;
pragma Import (C, errno, "__get_errno");
- EAGAIN : constant := 11;
- EINTR : constant := 4;
- EINVAL : constant := 22;
- ENOMEM : constant := 12;
- ETIMEDOUT : constant := 116;
+ EAGAIN : constant := System.OS_Constants.EAGAIN;
+ EINTR : constant := System.OS_Constants.EINTR;
+ EINVAL : constant := System.OS_Constants.EINVAL;
+ ENOMEM : constant := System.OS_Constants.ENOMEM;
+ ETIMEDOUT : constant := System.OS_Constants.ETIMEDOUT;
-------------
-- Signals --
@@ -448,6 +450,7 @@ package System.OS_Interface is
ss_low_priority : int;
ss_replenish_period : timespec;
ss_initial_budget : timespec;
+ sched_ss_max_repl : int;
end record;
pragma Convention (C, struct_sched_param);
@@ -621,43 +624,34 @@ private
end record;
pragma Convention (C, timespec);
- CLOCK_REALTIME : constant clockid_t := 1;
- CLOCK_MONOTONIC : constant clockid_t := 4;
+ CLOCK_REALTIME : constant clockid_t := System.OS_Constants.CLOCK_REALTIME;
+ CLOCK_MONOTONIC : constant clockid_t := System.OS_Constants.CLOCK_MONOTONIC;
+ subtype char_array is Interfaces.C.char_array;
+
type pthread_attr_t is record
- is_initialized : int;
- stackaddr : System.Address;
- stacksize : int;
- contentionscope : int;
- inheritsched : int;
- schedpolicy : int;
- schedparam : struct_sched_param;
- cputime_clocked_allowed : int;
- detatchstate : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_ATTR_SIZE);
end record;
pragma Convention (C, pthread_attr_t);
+ for pthread_attr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_condattr_t is record
- flags : int;
- process_shared : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_CONDATTR_SIZE);
end record;
pragma Convention (C, pthread_condattr_t);
+ for pthread_condattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_mutexattr_t is record
- is_initialized : int;
- process_shared : int;
- prio_ceiling : int;
- protocol : int;
- mutex_type : int;
- recursive : int;
- end record;
+ Data : char_array (1 .. OS_Constants.PTHREAD_MUTEXATTR_SIZE);
+ end record;
pragma Convention (C, pthread_mutexattr_t);
+ for pthread_mutexattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_rwlockattr_t is record
- is_initialized : int;
- process_shared : int;
+ Data : char_array (1 .. OS_Constants.PTHREAD_RWLOCKATTR_SIZE);
end record;
pragma Convention (C, pthread_rwlockattr_t);
+ for pthread_rwlockattr_t'Alignment use Interfaces.C.double'Alignment;
type pthread_t is new rtems_id;