From: Andrew Cagney <cagney@gnu.org>
To: Jason Thorpe <thorpej@wasabisystems.com>
Cc: Mark Kettenis <kettenis@chello.nl>,
drow@false.org, gdb-patches@sources.redhat.com
Subject: Re: [rfa:NetBSD/ppc] Implement signal trampoline unwinder
Date: Fri, 19 Mar 2004 00:09:00 -0000 [thread overview]
Message-ID: <4045246C.5000702@gnu.org> (raw)
In-Reply-To: <6FDEB6FE-6CA1-11D8-BE41-000A957650EC@wasabisystems.com>
>
> 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
WARNING: multiple messages have this Message-ID
From: Andrew Cagney <cagney@gnu.org>
To: Jason Thorpe <thorpej@wasabisystems.com>
Cc: Mark Kettenis <kettenis@chello.nl>,
drow@false.org, gdb-patches@sources.redhat.com
Subject: Re: [rfa:NetBSD/ppc] Implement signal trampoline unwinder
Date: Wed, 03 Mar 2004 00:18:00 -0000 [thread overview]
Message-ID: <4045246C.5000702@gnu.org> (raw)
Message-ID: <20040303001800.Il-6s8uzdMjeTaVN8qYQBFGnw4HarSILDri6Q1j_zJ4@z> (raw)
In-Reply-To: <6FDEB6FE-6CA1-11D8-BE41-000A957650EC@wasabisystems.com>
>
> 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
next prev parent reply other threads:[~2004-03-03 0:18 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-19 0:09 Andrew Cagney
2004-03-01 1:05 ` Andrew Cagney
2004-03-01 1:26 ` Daniel Jacobowitz
2004-03-19 0:09 ` Daniel Jacobowitz
2004-03-19 0:09 ` Andrew Cagney
2004-03-01 1:33 ` Andrew Cagney
2004-03-01 2:47 ` Daniel Jacobowitz
2004-03-01 9:34 ` Mark Kettenis
2004-03-19 0:09 ` Jason Thorpe
2004-03-02 23:29 ` Jason Thorpe
2004-03-03 20:43 ` Andrew Cagney
2004-03-03 20:46 ` Jason Thorpe
2004-03-03 21:20 ` Mark Kettenis
2004-03-19 0:09 ` Mark Kettenis
2004-03-19 0:09 ` Jason Thorpe
2004-03-19 0:09 ` Andrew Cagney
2004-03-19 0:09 ` Andrew Cagney [this message]
2004-03-03 0:18 ` Andrew Cagney
2004-03-03 15:17 ` Andrew Cagney
2004-03-19 0:09 ` Andrew Cagney
2004-03-19 0:09 ` Mark Kettenis
2004-03-19 0:09 ` Daniel Jacobowitz
2004-03-19 0:09 ` Kevin Buettner
2004-03-02 22:21 ` Kevin Buettner
2004-03-19 0:09 ` Andrew Cagney
2004-03-02 22:48 ` Andrew Cagney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4045246C.5000702@gnu.org \
--to=cagney@gnu.org \
--cc=drow@false.org \
--cc=gdb-patches@sources.redhat.com \
--cc=kettenis@chello.nl \
--cc=thorpej@wasabisystems.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox