On 01/18/17 01:56 PM, Saleem Abdulrasool wrote: > It is possible to have multiple CFA_args_size adjustments for a single > frame. If the CFA_args_size adjustment is immediately following the > return from a function which can raise an exception, it is possible to > incorrectly adjust the stack pointer. Consider the following: > > ... > .cfi_escape 0x2e, 0x00 > call f > .Ltmp: > .cfi_escape 0x2e, 0x10 > lea label@GOTOFF(%ebx), %eax > ... > > Because we process the CFI program up to and *INCLUDING* IP, where the > IP is the RA, we would process the associated DW_CFA_GNU_args_size for > the post-call instruction. The result would be a DW_CFA_GNU_args_size > of 0x10 rather than 0x00, resulting in an incorrect stack adjustment. > Handle this by processing the CFI operation but not adjusting the state > record unless we are below the current IP.
Merged, thanks! _______________________________________________ Libunwind-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/libunwind-devel
