comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: GNAT 4.4.5 Record Bit_Order Endian issues
Date: Mon, 14 Jan 2013 17:57:20 -0800 (PST)
Date: 2013-01-14T17:57:20-08:00	[thread overview]
Message-ID: <e620505e-6e34-4799-afab-9305c2121df2@googlegroups.com> (raw)
In-Reply-To: <20bda3de-b033-4b4e-8298-2ac47701b814@googlegroups.com>

On Monday, January 14, 2013 9:43:51 AM UTC-8, awdorrin wrote:
> I have a record with specification definition that starts, using big endian notation, with:
> 
> for TRACK_RECORD_TYPE use
>  record
>   TRACK_ID at 0 range 0 .. 11;
>   TRACK_ID_CNT at 1 range 4 .. 9;
>    ...
> 
> 
> The meaning being that the first 12 bits hold a track id and the next 6 bits hold the Count value.
> 
> I have had success in the past, using the gnat 4.4.5 compiler under Debian 6.0.6, to use the directive: for TRACK_RECORD_TYPE'Bit_Order use System.High_Order_First;
> 
> In order to continue using the definition in the big endian notation.
> 
> From the build output, the Bit_Order flag at first appears to be processed correctly, with the built compiler flags displaying to translated little endian definition as:
> 
> 
> 
> for TRACK_RECORD_TYPE use
>  record
>   TRACK_ID at 0 range 4 .. 15;
>   TRACK_ID_CNT at 1 range 11 .. 6;
>    ...
> 
> But the TRACK_ID_CNT range does not provide the proper definition.
> I believe it should be: TRACK_ID_CNT at 1 range 5 .. 0
> 
> Using the following code:
> 
> TRK_REC.TRACK_ID := 1;
> Text_IO.Put_Line("A: TRK_REC.TRACK_ID = " & Int32'Image(TRK_REC.TRACK_ID));
> TRK_REC.TRACK_ID_CNT := 1;
> Text_IO.Put_Line("B: TRK_REC.TRACK_ID = " & Int32'Image(TRK_REC.TRACK_ID));
> 
> The output displayed is:
> 
> A: TRK_REC.TRACK_ID = 1
> B: TRK_REC.TRACK_ID = 1025
> 
> Apparently because the TRACK_ID field is being read as a 16-bit value where:
> 
> "0000 0100 0000 0001" -> "BBBB CCAA AAAA AAAA"
> where the 'A' bits are the TRACK_ID and the B bits are part of the TRACK_ID_CNT field, and the 'C' bits are an overlap of the second variable, due to the improper definition translation.
> 
> Not sure if this 'bug' would be fixed in a newer version of the GNAT compiler or not.

Well, it looks to me like there's definitely a bug in there, unless your record is an Unchecked_Union.  If the fields really do overlap, the program should not compile; the language doesn't allow overlapping fields except in variant record cases (13.5.1(11)).  And if they don't overlap, then of course setting one component should not affect the value of the other one.

                               -- Adam




  parent reply	other threads:[~2013-01-15  1:57 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-14 17:43 GNAT 4.4.5 Record Bit_Order Endian issues awdorrin
2013-01-15  0:38 ` Randy Brukardt
2013-01-15  1:57 ` Adam Beneschan [this message]
2013-01-15 16:57 ` AdaMagica
2013-01-15 22:24 ` Stephen Leake
2013-01-16 10:44   ` Simon Wright
2013-01-16 19:00     ` AdaMagica
2013-01-16 21:34       ` Simon Wright
2013-01-16 23:14     ` Randy Brukardt
2013-01-17  3:49     ` Stephen Leake
2013-01-17 15:32       ` awdorrin
2013-01-18  9:49         ` Stephen Leake
2013-01-18 13:04           ` Robert A Duff
2013-01-19  1:43             ` Stephen Leake
2013-01-19 12:48               ` AdaMagica
2013-01-22  0:14                 ` Randy Brukardt
2013-01-17 17:28       ` Simon Wright
2013-01-18  9:56         ` Stephen Leake
2013-01-17 18:04 ` awdorrin
2013-01-17 19:50   ` awdorrin
2013-01-18  9:58     ` Stephen Leake
2013-01-17 20:58   ` Simon Wright
2013-01-17 21:29     ` awdorrin
2013-01-17 22:16       ` awdorrin
2013-01-18  6:15         ` J-P. Rosen
2013-01-18 15:28           ` Niklas Holsti
2013-01-18  9:37         ` Stephen Leake
2013-01-18 12:24         ` awdorrin
2013-01-18 15:11           ` awdorrin
2013-01-19  1:48             ` Stephen Leake
2013-01-18 17:19           ` Simon Wright
2013-01-22  9:49           ` quinot
2013-01-28 13:39             ` quinot
  -- strict thread matches above, loose matches on Subject: below --
2013-01-22  3:21 Stephen Leake
2013-01-22  5:14 ` Jeffrey Carter
2013-01-23  1:29   ` Stephen Leake
2013-01-22 22:40 ` Randy Brukardt
2013-01-23  1:38   ` Stephen Leake
2013-01-23 10:58     ` Simon Wright
replies disabled

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