Am Monday 02 November 2015, 12:39:57 schrieb Sebastian Huber: > > On 31/10/15 16:47, Jan Sommer wrote: > > Hi, > > > > This patch changes the Ada-declaration of the pthread-related structs such > > as pthread_attr_t from a field-equivalent declaration to just reserving the > > right amount of memory. > > It is only rtems related and essentially copies the way how the types are > > defined in s-osinte-linux.ads. It makes the declarations independent of a > > particular newlib-version and fixes the bug I filed here: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68169 > > [...] > > > ------------- > > -- 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); > > Why is this structure not changed to an opaque size + alignment type > like the other structures? >
There is no corresponding size constant in s-oscons.ads. The linux version of s-osinte.ads uses a record declaration too. > > > > @@ -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.unsigned_long'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.int'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.int'Alignment; > [...] > > The alignment is sometimes int and sometimes unsigned long. I would > change this to long long or double throughout, e.g. if we change the CPU > mask type to uint64_t, then the alignment specified here is no longer > correct. > Thanks for the tip. I will change that. Best regards, Jan