comp.lang.ada
 help / color / mirror / Atom feed
From: Lucas Redding <lucas.redding@gmail.com>
Subject: Re: Addressing in Object Ada v/s GNAT (2013)  showing Vast Differences
Date: Thu, 10 Sep 2015 03:47:54 -0700 (PDT)
Date: 2015-09-10T03:47:54-07:00	[thread overview]
Message-ID: <ca55984c-17ca-4295-a43d-46300bf255e4@googlegroups.com> (raw)
In-Reply-To: <d9a8f605-fbcf-43bf-a53f-91c7f7608461@googlegroups.com>

On Monday, September 7, 2015 at 12:39:35 PM UTC+1, Lucas Redding wrote:
> Hi
> 
> I was wondering how the addressing mechanism works in GNAT Ada? Is it so vastly different to Object Ada? Is there a way I can tailor the GNAT addressing mechanism to follow that of Object Ada?
> 
> I have a program that runs perfectly in Object Ada. The program relies heavily on "USE AT" clauses together with 'SIZE on underlying type definition. This is in order to map directly and deterministically to memory with bit precision. The data is independently produced so this is very important.
> 
> I have compiled the program is GNAT Ada but I am getting run time errors such as "misaligned address value". More worryingly, any data read from memory that relies on the addressing mechanisms described above is incoherent.
> 
> I am interested in moving to GNAT Ada because I believe the accompanying toolset is much richer and therefore more productive but I am beginning to wonder whether this is too onerous task?
> 
> Any help is greatly appreciated.
> 
> Lucas

Thanks Everybody.

Although I still have not completely resolved the issue, by analysing the output from -gnatR I can see the issue is with the alignment of underlying type and object specifications. The original code has no alignment clauses at all. 

We know that all the objects (memory input to the application) are mapped to memory so that everything is aligned at 1. 

I deduce that this means that OA by default aligns objects to 1 since the objects are being read without any alignment clauses. 

On the other hand, GNAT aligns each object to a boundary of a power of 2 and adjusts this based on the component size.

Here lies the issue.

I need to change the alignment of each underlying type mapped into memory. I am hoping the combination of explicit alignments and precise rep clauses (size etc.) should make the code portable between compilers.

Fingers crossed while I go and do the work and will report back when I finish (or if I get stuck).

Many thanks for all your help.

Much appreciated.

Lucas


  parent reply	other threads:[~2015-09-10 10:47 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-07 11:39 Addressing in Object Ada v/s GNAT (2013) showing Vast Differences Lucas Redding
2015-09-07 11:54 ` Lucas Redding
2015-09-07 14:04   ` G.B.
2015-09-07 16:02     ` Lucas Redding
2015-09-07 16:28       ` Anh Vo
2015-09-08  7:30         ` Lucas Redding
2015-09-08 15:11           ` Anh Vo
2015-09-08 17:20           ` Jeffrey R. Carter
2015-09-07 17:20   ` Pascal Obry
2015-09-07 17:21   ` Pascal Obry
2015-09-08  7:04     ` Lucas Redding
2015-09-07 21:02   ` Niklas Holsti
2015-09-08  8:00     ` Lucas Redding
2015-09-07 15:48 ` Jeffrey R. Carter
2015-09-08  7:27   ` Lucas Redding
2015-09-08  7:12 ` Markus Schöpflin
2015-09-08  8:05   ` Lucas Redding
2015-09-10 10:47 ` Lucas Redding [this message]
2015-09-10 12:34   ` G.B.
2015-09-21 11:12     ` Lucas Redding
2015-09-21 11:57       ` Jacob Sparre Andersen
2015-09-21 13:22         ` Lucas Redding
2015-09-21 13:47           ` Jacob Sparre Andersen
2015-09-21 13:52           ` Georg Bauhaus
2015-09-21 15:54             ` Lucas Redding
2015-09-22 17:49               ` Jacob Sparre Andersen
2015-09-22 18:45               ` Jacob Sparre Andersen
2015-10-01  6:50                 ` Lucas Redding
2015-09-21 16:48       ` Dmitry A. Kazakov
2015-10-01  7:25         ` Lucas Redding
2015-10-01 20:04           ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox