Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: "Doug Evans" <dje@google.com>
To: gdb@sourceware.org
Subject: protection from dangling pointers in dwarf info when .so's go away
Date: Thu, 13 Dec 2007 01:58:00 -0000	[thread overview]
Message-ID: <e394668d0712121757q7f0dd552p4d36ee8f035bff30@mail.gmail.com> (raw)

[target = i386-linux]

Hi. I'm debugging a gdb segv where a .so provides
TYPE_VPTR_{BASETYPE,FIELDNO} while gdb is evaluating an expression.

e.g.

$ gdb my-prog
(gdb) b foo
(gdb) run
Breakpoint 1 hit
(gdb) p myclass->bar ()

At this point the "struct type" for myclass has
type->main_type->vptr_basetype pointing into the obstack for the .so.

If I run the program again and do the same thing, i.e.

(gdb) run
Start from the beginning?  y
Breakpoint 1 hit
(gdb) p myclass->bar ()

--> segv because when the program was rerun all the obstacks for the
.so's got freed (by objfile_purge_solibs) leaving a bogus value in
vptr_basetype.

How is this supposed to work?

Is it the case that vptr_basetype for myclass should never have gotten
assigned a value pointing into a .so (or any other obstack)?  Or is
gdb supposed to have cleaned up after itself when the .so data got
freed?  Or something else?  Any guidance on where the fix should go is
appreciated.  I suppose an easy solution is to toss out all info, not
just for .so's, though that will slow down re-runs.

Thanks.


             reply	other threads:[~2007-12-13  1:58 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-13  1:58 Doug Evans [this message]
2007-12-13  3:27 ` Daniel Jacobowitz
2007-12-13  8:16   ` Doug Evans
2007-12-13 13:19     ` Daniel Jacobowitz
2007-12-13 16:56       ` Jim Blandy
2007-12-14  0:04         ` Doug Evans

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=e394668d0712121757q7f0dd552p4d36ee8f035bff30@mail.gmail.com \
    --to=dje@google.com \
    --cc=gdb@sourceware.org \
    /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