Invalid program counters and unwinding

Florian Weimer fweimer@redhat.com
Tue Jun 26 11:15:00 GMT 2018


On 06/26/2018 12:56 PM, Nathan Sidwell wrote:
> On 06/26/2018 05:26 AM, Florian Weimer wrote:
> 
>> So it looks to me that the caller of _Unwind_Find_FDE needs to ensure 
>> that the PC is a valid element of the call stack.  Is this a correct 
>> assumption?
> 
> I thought this was an (implicit?) requirement. You're unwinding a stack 
> to deliver an exception up it.  Are there use cases where that is not 
> the case?

We have something approaching this scenario.

pthread_cancel in glibc unwinds the stack using DWARF information until 
encounters a frame without unwind information, when it switches to 
longjmp to get past that obstacle.

However, at the point of transition from a valid DWARF frame into the 
wilderness (without unwind data), we should still have accurate 
information on the caller's PC, so _Unwind_Find_FDE will reliably fail 
to find any unwind data for it.  It's not a random pointer somewhere 
else, so I think even the pthread_cancel case is fully supported.

Thanks,
Florian



More information about the Gcc mailing list