[PATCH] Export _NCPUWORDS as variable for access from within the gnat-rts

Jan Sommer soja-lists@aries.uberspace.de
Thu Oct 29 15:24:00 GMT 2015

Am Thursday 29 October 2015, 08:45:57 schrieb Joel Sherrill:
> On 10/29/2015 8:14 AM, Jan Sommer wrote:
> > Hi,
> >
> > This patch will make the define _NCPUWORDS accessible for the ada runtime. It is necessary to model the pthread_attr_t implementation for rtems  in Ada.
> > We had a stack corruption because the C an Ada declarations of the type where out of synch.
> > I will send the updated s-osinte-rtems.ads to  gcc if this patch is accepted.
> >
> > I put devel@rtems.org CC for input from the rtems developers.
> >
> Is it possible to define this in the RTEMS Ada glue file?

What is the rtems Ada glue file?

Just to clarify: The problem I had was that pthread_attr_t has a field of 

typedef struct _cpuset {
  cpu_set_word_t __bits[_NCPUWORDS];
} cpu_set_t;

which's length depends on _NCPUWORDS.
In ada I added types like this:

   NUMCPUWORDS : constant size_t;

   pragma Import (
      Convention    => C,
      Entity        => NUMCPUWORDS,
      External_Name => "_ADA_NCPUWORDS"

   type cpu_set_array is array (0 .. NUMCPUWORDS) of
      aliased cpu_set_word_t;

   type cpu_set_t is record
       bits : aliased cpu_set_array;
   end record;

I just put it into newlib, because I thought the export should be close to the original declaration.
If you can point to a better fitting location I am happy to put it there.

Best regards,


> Generally, I like the Ada support to be self-contained and
> have no impact on anything else. This puts an Ada specific
> variable in generic code.
> This is similar to how I had to do the Ada task minimum
> stack size. It could have gone in more common code but
> nothing else uses it so should not be impacted.
> Plus newlib doesn't know anything about our Ada glue layer.
> Best to keep it that way.
> > Best regards,
> >
> >      Jan
> >

More information about the Newlib mailing list