[fpc-pascal] Packed record

Adriaan van Os fpc at microbizz.nl
Thu Oct 20 09:34:59 CEST 2005


Florian Klaempfl wrote:

> Carsten Bager wrote:
>
>> I am using the compiler on an embedded Arm7 platform (no
>> operating system). So fare things are working ok, but now I have
>> discovered a problem when packing records (Vi have to maintain
>> bindery compatibility with older systems)
>> If I have a packed record like this
>>
>> Test_typ= packed record
>>      B:byte;
>>      I:LongInt;
>> end;
>>
>> Var
>>   Test:Test_typ;
>>
>> Begin
>>   Test.i:=1;
>>   Write(test.i);
>> End.
>>
>>
>> The output is wrong.
>
> Usual ARM cores can't handle unaligned memory accesses and on e.g. 
> arm-linux you
> would get a sigbus exception on your code.
>
>> If I remove "Packed" the output is OK.
>
> What can do is:
> - modify your pascal code:
>
> l:longint;
> move(l,Test.i,sizeof(Test.i));  // move can handle unaligned access 
> and that how
> C code usually solves it
>
> - add an exception handler to your OS to catch unaligned access and 
> fix things
> but emulating the memory access

- or fix the compiler to ignore "packed" for ARM. This could be a 
compiler switch, on by default for ARM (gpc has --ignore-packed).

Regards,

Adriaan van Os




More information about the fpc-pascal mailing list