This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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



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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]