Re: [rfa:NetBSD/ppc] Implement signal trampoline unwinder

Andrew Cagney
2004-03-03T00:18:58Z

>
> On Mar 1, 2004, at 1:33 AM, Mark Kettenis wrote:
>
>> The problem is that the location of the signal trampoline depends on
>> the VM layout, which can be changed. And on OpenBSD (which is very
>> similar to NetBSD in many respects) the signal trampoline is mapped at
>> a random location. So checking for the address isn't the most robust
>> way. That's why NetBSD/i386 doesn't do this anymore, but instead
>> looks for a specific instruction sequence (the instruction sequence
>> for the sigreturn(2) system call).
>
>
> Yes, other NetBSD targets do this as well, Alpha and MIPS, for example.
>
>> NetBSD is moving away from using kernel-provided signal trampolines.
>> NetBSD 2.0 will use signal trampolines provided by libc. These
>> tramplones can be recognized by their name: they start with
>> __sigtramp. See nbsd-tdep.c:nbsd_pc_in_sigtramp() and its usage in
>> amd64nbsd-tdep.c.
>
>
> Right. They've been provided by libc for quite some time in -current, and 2.0 will ship with them when it ships.

So something like:

if (have symbol)
{
return (symbol matches __sigtramp.*);
}
else
{
return (mem[pc] == magic && mem[pc+1] == magic && ...);
}

Is it possible to add an extra guard to the else clause so that memory
is only examined when there's a reasonable likelyhood of it being a
sigtramp?

Andrew