Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* Robustify frame_unwind_address_in_block heuristic?
@ 2008-10-01 14:42 Frederic RISS
  2008-10-01 14:48 ` Daniel Jacobowitz
  0 siblings, 1 reply; 5+ messages in thread
From: Frederic RISS @ 2008-10-01 14:42 UTC (permalink / raw)
  To: gdb

Hi,

frame_unwind_address_in_block contains the following code:

  /* If THIS frame is not inner most (i.e., NEXT isn't the sentinel),
     and NEXT is `normal' (i.e., not a sigtramp, dummy, ....) THIS
     frame's PC ends up pointing at the instruction fallowing the
     "call".  Adjust that PC value so that it falls on the call
     instruction (which, hopefully, falls within THIS frame's code
     block).  So far it's proved to be a very good approximation.  See
     get_frame_type() for why ->type can't be used.  */
  if (next_frame->level >= 0
      && get_frame_type (next_frame) == NORMAL_FRAME)
    --pc;

and indeed, this has proved to be a very good and useful approximation. 

However, I'm facing a little issue with this. I've developed a custom
frame unwinder for some project. It unwinds over some asm stubs which do
branch to regular C code, but which also set the link register
(containing the return address) to the entry of some other asm that
finishes the stub's work (let's call that ret_stub).

During a debug session, the dwarf2 unwinder finds the ret_stub return
address and my custom unwinder kicks in to unwind to the following
frame... which all seems right except for one little glitch: when
printing the ret_stub frame, the above heuristic decrements the return
address and points to a symbol that has no other relevance in the
backtrace than being the one that happens to be linked just before
ret_stub. Quite confusing for the user.

I have to admit that the above is a convoluted case which shouldn't show
up in a 'standard' debug session. It's also not the first time I wish
that frame unwinders were more flexible/modular, but it's the first time
that I wasn't able to work around the issue without patching GDB's core
functionality. Would it be acceptable to add a check to the above
function that checks whether pc-1 points into the same function as pc?
Or maybe someone sees another way to prevent that issue?

Thanks,
Fred.




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

end of thread, other threads:[~2008-10-01 15:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-10-01 14:42 Robustify frame_unwind_address_in_block heuristic? Frederic RISS
2008-10-01 14:48 ` Daniel Jacobowitz
2008-10-01 15:26   ` Frederic RISS
2008-10-01 15:29   ` Joel Brobecker
2008-10-01 15:58     ` Frederic RISS

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