Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* protection from dangling pointers in dwarf info when .so's go away
@ 2007-12-13  1:58 Doug Evans
  2007-12-13  3:27 ` Daniel Jacobowitz
  0 siblings, 1 reply; 6+ messages in thread
From: Doug Evans @ 2007-12-13  1:58 UTC (permalink / raw)
  To: gdb

[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.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-12-14  0:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-12-13  1:58 protection from dangling pointers in dwarf info when .so's go away Doug Evans
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox