Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: gdb@sources.redhat.com, Reiner.Steib@gmx.de
Subject: Re: Variable "foo" is not available
Date: Sat, 02 Apr 2005 21:05:00 -0000	[thread overview]
Message-ID: <20050402210541.GA16758@nevyn.them.org> (raw)
In-Reply-To: <01c537c6$Blat.v2.4$427763a0@zahav.net.il>

On Sat, Apr 02, 2005 at 11:54:08PM +0300, Eli Zaretskii wrote:
> > Date: Sat, 2 Apr 2005 13:40:23 -0500
> > From: Daniel Jacobowitz <drow@false.org>
> > Cc: gdb@sources.redhat.com, Reiner.Steib@gmx.de
> > 
> > > 9 different functions were reported with such arguments.  IMHO, that's
> > > too many for a rare situation.
> > 
> > I didn't say it was a rare situation.
> 
> If it isn't rare, we should do something about it, I think.
> 
> > It's easy to not notice the problem with earlier versions of GCC.
> 
> I'm using GCC 3.x since the year 2001, and the DWARF 2 debug info as
> the default since more than a year ago.  I think this is long enough
> not to dismiss my experience.
> 
> Anyway, I don't really understand what is your intent.  Are you saying
> that this is what we should expect from optimized code in GDB, and
> that nothing should or could be done about it?

What are you suggesting we do about it?  There are only two options:
make the argument remain available, which carries a performance
penalty, or politely inform the user that it is unavailable.  The user
asked for no performance penalties.

I'm not trying to dismiss your experience; but I've worked on this code
in the compiler, and it's just not designed to do what you're
expecting.

> > On non-DWARF targets or old versions, the variables will appear to
> > be available - even if their correct values no longer exist in
> > memory.
> 
> We are talking about function call arguments here, not just about any
> local variables.  Can you tell what compiler optimizations could cause
> what Reiner reported: that the first argument is available to GDB, but
> the second is not?

Very easily.  Suppose you have two incoming arguments in registers; GCC
will do this automatically for static functions even on i386, which
normally uses a stack convention.  The first is used after a function
call, so it is preserved by saving it to the stack.  The second is not
used after the function call, so the compiler has no reason to allocate
a save slot for it, and no reason to store it to memory before the
function call.

With stack-based argument passing, GCC may be claiming an argument is
unavailable when the function's local copy is dead, when a copy still
exists on the stack somewhere.  I don't know if it will do that or not.
GDB can not assume that the argument is available in the incoming stack
slot, since it could be reused for other data.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


  reply	other threads:[~2005-04-02 21:05 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-01 16:40 Reiner Steib
2005-04-01 17:19 ` Daniel Jacobowitz
2005-04-02  9:49   ` Eli Zaretskii
2005-04-02 13:53     ` Reiner Steib
2005-04-02 14:27       ` Daniel Jacobowitz
2005-04-06 16:25         ` Reiner Steib
2005-04-02 14:26     ` Daniel Jacobowitz
2005-04-02 18:17       ` Eli Zaretskii
2005-04-02 18:40         ` Daniel Jacobowitz
2005-04-02 20:58           ` Eli Zaretskii
2005-04-02 21:05             ` Daniel Jacobowitz [this message]
2005-04-04  5:14               ` Eli Zaretskii
2005-04-04  6:00                 ` Mark Kettenis
2005-04-04  7:58                 ` Daniel THOMPSON
2005-04-04 19:28                   ` Eli Zaretskii
2005-04-04 13:37                 ` Daniel Jacobowitz
2005-04-04 19:35                   ` Eli Zaretskii
2005-04-04 19:41                     ` Daniel Jacobowitz
2005-04-03 18:16           ` Reiner Steib
2005-04-08 11:05       ` Eli Zaretskii
2005-04-04  9:26     ` Reiner Steib

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=20050402210541.GA16758@nevyn.them.org \
    --to=drow@false.org \
    --cc=Reiner.Steib@gmx.de \
    --cc=eliz@gnu.org \
    --cc=gdb@sources.redhat.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