[fpc-pascal] Packed record

Florian Klaempfl florian at freepascal.org
Thu Oct 20 08:49:54 CEST 2005

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:

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

> Regards 
> Carsten 
> ---------------------------------- 
> Compiler version 
> Free Pascal Compiler version 2.0.0 [2005/05/15] for arm 
> Copyright (c) 1993-2005 by Florian Klaempfl 
> Target OS: Linux for ARM 

More information about the fpc-pascal mailing list