From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Cc: Daniel Jacobowitz <dan@codesourcery.com>,
Ulrich Weigand <uweigand@de.ibm.com>
Subject: Re: [patch] Re: longjmp handling vs. glibc LD_POINTER_GUARD problems
Date: Thu, 22 May 2008 16:17:00 -0000 [thread overview]
Message-ID: <200805212339.50247.pedro@codesourcery.com> (raw)
In-Reply-To: <20080521221548.GA12402@caradoc.them.org>
A Wednesday 21 May 2008 23:15:48, Daniel Jacobowitz wrote:
>> This is the same problem as software watchpoints... I just don't think
> we're going to be able to get it to work. I certainly had to do
> horrible things on powerpc-linux when I wanted to be able to backtrace
> from epilogues without a symbol table.
> Which frame IDs are we comparing here?
I tried comparing the frame id of longjmp itself with with the
current frame first:
- record the longjmp frame when the longjmp breakpoint is hit.
- single-step until that frame is gone from the frame stack
Then (the logs I posted) tried comparing the longjmp's caller with
the the current frame while single stepping.
- record the longjmp's caller frame when the longjmp breakpoint
is hit.
- single-step until that frame is either current, or gone from the
frame stack.
Both gave the same results.
> I think we can assume that longjmp is not going to change
> stacks until it's about to return,
> although the return might be on a different stack entirely.
> I suspect we'll be prone to stopping in the last instruction or two of
> longjmp, instead of returning the compiler.
The point where the stepping stops is exactly the point
where the stacks change on x86_64.
(gdb) up
#1 0x00007fab4b544ee3 in siglongjmp () from /lib/libc.so.6
(gdb)
#2 0x000000000040069f in main ()
at ../../../src/gdb/testsuite/gdb.base/longjmp.c:99
99 longjmp (env, 1); /* patt1 */
(gdb) si
0x00007fab4b544f33 in ?? () from /lib/libc.so.6
(gdb) up
#1 0x000000000040067d in main ()
at ../../../src/gdb/testsuite/gdb.base/longjmp.c:96
96 if (setjmp (env) == 0)
With the patch installed, it's stopping exactly at
0x00007fab4b544f33.
Seeing this, I was thinking of:
- recording the longjmp frame when the longjmp breakpoint is hit
- single-step until the longjmp frame is gone (going to return to setjmp --
SP/FP changing)
- single-step until this new current frame is gone.
But, x86 doesn't show any promise on that... The first time
we stop seeing the longjmp frame on the frame stack is much
earlier than the exit of longjmp:
#0 0xf7e201d8 in ?? () from /lib32/libc.so.6
#1 0x00000001 in ?? ()
#2 0xf7e201c9 in ?? () from /lib32/libc.so.6
#3 0xf7f3fff4 in ?? () from /lib32/libc.so.6
#4 0xfff7bbe8 in ?? ()
#5 0xf7e2013c in siglongjmp () from /lib32/libc.so.6
Backtrace stopped: frame did not save the PC
Looks like a dead end.
--
Pedro Alves
next prev parent reply other threads:[~2008-05-21 22:40 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-14 18:24 Ulrich Weigand
2008-05-14 19:14 ` Daniel Jacobowitz
2008-05-14 22:01 ` Ulrich Weigand
2008-05-14 19:17 ` Pedro Alves
2008-05-17 14:00 ` Pedro Alves
2008-05-21 4:20 ` [patch] " Pedro Alves
2008-05-22 0:11 ` Ulrich Weigand
2008-05-22 0:14 ` Pedro Alves
2008-05-22 15:20 ` Pedro Alves
2008-05-22 15:34 ` Daniel Jacobowitz
2008-05-22 16:17 ` Pedro Alves [this message]
2008-05-22 16:38 ` Ulrich Weigand
2008-05-22 17:03 ` [patch] Re: longjmp handling vs. glibc LD_POINTER_GUARD ?problems Daniel Jacobowitz
2008-05-22 16:29 ` [patch] Re: longjmp handling vs. glibc LD_POINTER_GUARD problems Ulrich Weigand
2008-05-22 3:14 ` Daniel Jacobowitz
2008-05-14 23:03 ` David Miller
2008-05-15 0:39 ` Daniel Jacobowitz
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=200805212339.50247.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=dan@codesourcery.com \
--cc=gdb-patches@sourceware.org \
--cc=uweigand@de.ibm.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