libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libunwind-devel] [PATCH] restore "x0" and "x1" registers


From: C Bergström
Subject: Re: [Libunwind-devel] [PATCH] restore "x0" and "x1" registers
Date: Thu, 9 Oct 2014 05:13:41 +0700



On Tue, Oct 7, 2014 at 12:18 PM, C Bergström <address@hidden> wrote:

On Mon, Oct 6, 2014 at 3:45 PM, Yvan Roux <address@hidden> 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 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]