[PATCH 2/2] Export _NCPUWORDS for Ada

Jan Sommer soja-lists at aries.uberspace.de
Fri Oct 30 08:53:35 UTC 2015


Am Friday 30 October 2015, 07:50:16 schrieb Sebastian Huber:
> How is this tackled in the glibc/Linux support? Is the exact layout of 
> the structures really interesting for Ada? I guess its sufficient to 
> tell Ada the size and alignment of pthread_attr_t for example.
> 

In Linux they do it like this:
   type pthread_attr_t is record
      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;

That's probably the best solution. The gnat-rts changes values of the fields only using the corresponding pthread_set functions.
If no one objects I would try to change the osinte-rtems.ads in the same manner.


> On 29/10/15 22:10, Jan Sommer wrote:
> > _NCPUWORDS is defined in newlib in newlib/libc/sys/rtems/sys/cpuset.h and used to define the type cpu_set_t there.
> > typedef struct _cpuset {
> >    cpu_set_word_t __bits[_NCPUWORDS];
> > } cpu_set_t;
> > cpu_set_t is used for a field in the struct pthread_attr_t in file newlib/libc/include/types.h
> >
> > The Gnat Ada runtime uses POSIX-threads for tasking, therefore the pthread-types have to be declared in Ada in order to import them.
> > As the fixed size array in cpu_set_t depends on the value of _NCPUWORDS it is exported with the symbol _ada_ncpuwords in order to access it from within the Ada runtime.
> >
> > The Ada declaration of pthread_attr_t is located in gcc/ada/s-osinte-rtems.ads and _ada_ncpuwords is imported there.
> > ---
> >   cpukit/libgnat/adasupp.c | 4 ++++
> >   1 file changed, 4 insertions(+)
> >
> > diff --git a/cpukit/libgnat/adasupp.c b/cpukit/libgnat/adasupp.c
> > index 662b1cc..cde36b6 100644
> > --- a/cpukit/libgnat/adasupp.c
> > +++ b/cpukit/libgnat/adasupp.c
> > @@ -10,6 +10,10 @@
> >   #include <rtems/posix/pthreadimpl.h>
> >   #include <rtems/score/stackimpl.h>
> >   
> > +
> > +/* export _NCPUWORDS for Ada */
> > +const size_t _ada_ncpuwords = _NCPUWORDS - 1;
> > +
> >   /*
> >    *  _ada_pthread_minimum_stack_size
> >    *
> 
> 



More information about the devel mailing list