[fpc-devel] register / ABI for constructor and destroy

Martin fpc at mfriebe.de
Sat Oct 14 14:36:50 CEST 2017


I am trying to update pascal script.

It seems that at some time there where changes in the register usage for 
calling constructors.

At least I found the following code:
>               {$IF DEFINED (fpc) and (fpc_version < 3)}
>                 if IsConstructor or IsVirtualCons then
>                   tbtu32(res.dta^) := RealCall_Register(Address, EDX, 
> EAX, ECX,
>                   @Stack[Length(Stack) - 3], Length(Stack) div 4, 4, nil)
>                 else
>              {$IFEND}
>                   tbtu32(res.dta^) := RealCall_Register(Address, EAX, 
> EDX, ECX,
>                   @Stack[Length(Stack) - 3], Length(Stack) div 4, 4, nil);

Also which versions are affected?

My testing indicates that this may apply for 3.1 (trunk).
But 3.0.x  seems to use the same as 2.x ?


And are other calls (maybe destructor) affected?

Or does destructor (or maybe virtual methods?) generally take a 
different order than other methods.



More information about the fpc-devel mailing list