tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Request for implementation of KERN_PROC_SIGTRAMP sysctl
For GCC, we've got the return address (context->ra in the unwind
programs in the original post). The "problem" is that we want to
know if that address falls on a signal trampoline frame. If NO,
return "end of stack", otherwise unwind the frame.
The KERN_PROC_SIGTRAMP of FreeBSD and DragonFly has in its return
structure a pair of addresses representing the starting address and
ending address of that process's signal frame, so it's a simple matter
of checking if context->fa falls between them.
How we did it with libc before is shown in the netbsd-unwind.h link in
the original post. This technique looks for __sigtramp_siginfo_2
assembly code but no longer works. I don't know how to do this any
other way. GDB doesn't either, it uses the debug information to match
the function name __sigtramp_siginfo_2 and I am not even sure that's
valid for current NetBSD releases based on what we've learned here.
A sysctl that returns an array of address pairs for all signal
trampolines in the process is what I'm requesting.
If there's another way to determine if an address falls within a
signal trampoline, I'd like to see actual code to see if I can adapt
it.
Of course, the kernel team could just deny the request, but I won't be
able to fix the regression caused when the per-signal trampolines were
introduced.
Thanks,
John
Home |
Main Index |
Thread Index |
Old Index