Hi Andrew, I've been meaning to make a change like this.  Note that the current 
implementation is not correct, the ABI on i386 for Darwin requires 16-byte 
alignment for stack frames, v.

https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html

If you could make that small fix while you're at it, I'd appreciate it.  Thanks!

(the ABISysV_x86_64 also incorrectly checks for 8-byte alignment - in reality 
Darwin is following the standard SysV x86-64 ABI and requiring 16-byte 
alignment.)

On Aug 20, 2013, at 2:23 PM, Kaylor, Andrew <[email protected]> wrote:

> Currently the MacOSX-i386 ABI plugin gets used for both Darwin and Linux 
> platforms (probably FreeBSD also) when debugging a 32-bit inferior.  This 
> makes sense because in almost all cases the ABI definition is the same across 
> these platforms.
>  
> However, if I’m reading the specs correctly, there is an exception with 
> regard to call frame address alignment.  It appears that call frame addresses 
> must be 8-byte aligned on Darwin, whereas on Linux they can be 4-byte aligned.
>  
> The attached patch modifies the MacOSX-i386 ABI creation mechanism to allow 
> separate ABI instances for Darwin and non-Darwin targets and passes a flag to 
> the constructor that will be used in the case of cfa validation.
>  
> If there’s a better way to handle this, I’m open to guidance.
>  
> Some correction to the cfa validation is necessary to enable correct stack 
> unwinding with 32-bit targets on Linux.
>  
> Thanks,
> Andy
> <call-frame-32.patch>


_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to