Ada and x86_64

David Brown gcc@davidb.org
Mon Aug 26 17:35:00 GMT 2002


On Mon, Aug 26, 2002 at 03:18:36PM -0400, David Edelsohn wrote:

> While knowing nothing about Ada,
> 
> 	private
> 	   type sigset_t is array (0 .. 31) of unsigned_long;
> 	   pragma Convention (C, sigset_t);
> 	   for sigset_t'Size use 1024;
> 
> implies that it is setting the size of sigset_t to 1024.  I don't know
> whether this can be changed in the file based on __x86_64__ flag or
> whether one needs a separate file for x64-64 configuration.

Hmm.  I don't know of the history of this construct, but perhaps

        pragma Pack (sigset_t);

would give the intent better.

I'm not sure why the constant would depend on the size of unsigned_long,
but if you want to do if with the for .. Size expression:

        for sigset_t'Size use 32 * unsigned_long'Size;

but that would really ever be different than the pragma Pack.

If, what was really intended was that the structure should at least be
1024 bytes long, this would work:

        for sigset_t'Size use Natural'Max (1024, unsigned_long'Size * 32);

Dave Brown



More information about the Gcc mailing list