[rfa:NetBSD/ppc] Implement signal trampoline unwinder

Andrew Cagney cagney@gnu.org
Wed Mar 3 00:18:00 GMT 2004


> 
> 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




More information about the Gdb-patches mailing list