ARM64: PC/IP not saved in signal frame
    John Marino 
    freebsdml at marino.st
       
    Wed Feb  8 01:42:40 UTC 2017
    
    
  
On 2/7/2017 13:06, Andrew Turner wrote:
> On Tue, 7 Feb 2017 12:55:51 -0600
> John Marino <freebsdml at marino.st> wrote:
>
>> On 2/7/2017 12:47, John Marino wrote:
>>> Hi guys,
>>> I've been struggling to provide unwind support on the
>>> aarch64-*-freebsd* target of FreeBSD.  The only working example on
>>> this arch is aarch64-linux (attached).  I think I'm 99% done with
>>> the freebsd version (attached) but the last value that needs to be
>>> pass to the _Unwind_FrameState is the program counter offset.
>>>
>>> I know the PC is not register-based on aarch64.  Linux still saves
>>> the value in the signal context, but AFAICT FreeBSD does not.
>>>
>>> Can somebody
>>> A) confirm that the program counter is missing from the saved signal
>>> context
>>> B) confirm that it needs to be added for proper signal frame
>>> unwinding?
>>>
>>> Alternatively, maybe somebody can figure out a solution given the
>>> current freebsd structures, but I'm losing hope on that one. (line
>>> 99)
>>
>> Apparently attachments are stripped out on this mail list.
>> You can see the headers here:
>> https://leaf.dragonflybsd.org/~marino/linux-unwind.h
>> https://leaf.dragonflybsd.org/~marino/freebsd-unwind.h
>
> You want sc->REG_NAME(elr).
>
Hi Andrew,
After changing the .how field to REG_SAVED_OFFSET (from the original
  REG_SAVED_VAL_OFFSET) on the retaddr column, it worked!  I didn't 
expect that though.
Is linux just using a misnomer?  That is, is it referring to the 
Exception Link Register as the PC? I'm just trying to understand what 
happened and how you knew the correct answer. :)
John
    
    
More information about the freebsd-arm
mailing list