Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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


  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