On Tue, Oct 7, 2014 at 12:18 PM, C Bergström <[email protected]>
wrote:

>
> On Mon, Oct 6, 2014 at 3:45 PM, Yvan Roux <[email protected]> wrote:
>
>> Hi,
>>
>> > I'd try to use ia64 and x86_64 as reference code on this topic.
>> > src/ia64/Gresume.c has some relevant comments on preserved vs scratch.
>> >
>> > My understanding of the aarch64 code is:
>> >
>> > (c->sigcontext_format == AARCH64_SCF_NONE) {
>> >   // normal path
>> > } else {
>> >   // exception handling path
>> >   // eh_valid_mask is being looked at
>> > }
>> >
>> > What I'm not understanding is: how does the exception handling path
>> > end up with AARCH64_SCF_NONE?
>>
>> what I did here is to use the same pattern as on the arm and sh port, to
>> handle cases without signals (when AARCH64_SCF_NONE is true) and with
>> signals, but I've handle exception argument passing only when signal are
>> involved which is an error.  What I don't understand in the ia64 code
>> (which
>> have almost the same structure) is: why in the non-signal path exception
>> arguments registers are always restored and not guarded by the test on
>> eh_valid_mask ?
>>
>> Regarding the proposed patch, I think that it should handle registers
>> x0,x1,x2 and x3 and not only x0 and x1.
>>
>> Yvan
>>
>
> We don't need restore EH registers in the non-signal path if eh_valid_mask
> is not set (i. e. register values are undefined). But checking
> eh_valid_mask is slower than restoring register, so we just always restore
> EH registers.
>
> And yes, it seems we need to restore x0, x1, x2, x3, not only x0 and x1.
>
> Let me know if there's more questions or if it's more or less acceptable
>
>
reping - I have more patches coming. Hopefully the patch passes review and
can be pushed soon.

Thanks
_______________________________________________
Libunwind-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/libunwind-devel

Reply via email to