public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: 杨已彪 <yangyibiao@hust.edu.cn>, gdb@sourceware.org
Subject: Re: Wrong debug info for argc at -O2
Date: Mon, 22 Jun 2020 14:14:10 -0400	[thread overview]
Message-ID: <fde97a82-584f-9655-7c05-3a17dd781975@simark.ca> (raw)
In-Reply-To: <545669ad.7ac1.172612844b0.Coremail.yangyibiao@hust.edu.cn>

On 2020-05-29 11:58 a.m., 杨已彪 wrote:
> 
> 
> Consider test-case:
> ...
> $ cat small.c
> #include <stdio.h>
> 
> int main(int argc, char **argv) {
>   char buf[6];
>   char c[] = "abc";
>   sprintf(buf, (char *)c, 1);
> 
>   return 0;
> }
> ...
> 
> 
> Stepping with step and print the values of arguments:
> ...
> $ gcc -O2 -g small.c; gdb -q a.out
> Reading symbols from a.out...
> (gdb) b main
> Breakpoint 1 at 0x401040: file small.c, line 5.
> (gdb) r
> Starting program: /home/yibiao/Debugger/a.out
> 
> Breakpoint 1, main (argc=1, argv=0x7fffffffdff8) at small.c:5
> 5      char c[] = "abc";
> (gdb) info args argc
> argc = 1
> (gdb) step
> 6      sprintf(buf, (char *)c, 1);
> (gdb) info args argc
> argc = -8454
> (gdb)
> ...
> 
> /**************************************
> We can find that at line 5, the value of argc is 1.
> When stepping to line 6 with step, the value of argc is changed to -8454.
> However, When stepping with stepi, the value of argc is still 1 at line 6.
> 
> I am posting it here as I am not sure whether this is a gcc bug or a gdb bug.
> By the way, I found it very difficult to determine whether a problem is caused by gdb or gcc?
> Is there any suggestions?
> ***************************************/
> 
> $ gcc --version
> gcc (GCC) 10.0.1 20200419 (experimental)
> Copyright (C) 2020 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> $ gdb --version
> GNU gdb (GDB) 10.0.50.20200517-git
> Copyright (C) 2020 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.

Hi,

The only way to know is to inspect the DWARF information manually and see if it accurately
describe the program.  If not, it's a gcc bug.  It if does, it's a gdb bug.

To inspect the DWARF information, you can use `readelf --debug-dump` or `llvm-dwarfdump`
(although I am a big fan of GNU tools, I find the output of llvm-dwarfdump a bit more
readable).

In this particular case, you'd find the DIE (Debug Info Entry) for `argc` and see how the
location of that variable is described.  See the DWARF spec to understand how to interpret
the value.

Simon

  reply	other threads:[~2020-06-22 18:14 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-29 15:58 杨已彪
2020-06-22 18:14 ` Simon Marchi [this message]
2020-06-22 18:53 ` Luis Machado
2020-06-30 15:30   ` 杨已彪

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=fde97a82-584f-9655-7c05-3a17dd781975@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb@sourceware.org \
    --cc=yangyibiao@hust.edu.cn \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).