Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Nick Roberts <nickrob@snap.net.nz>
Cc: susan@smacchia.net, jimb@codesourcery.com, gdb@sourceware.org
Subject: Re: MI: -file-list-exec-source-files
Date: Sat, 03 Jun 2006 09:46:00 -0000	[thread overview]
Message-ID: <uk67yd12e.fsf@gnu.org> (raw)
In-Reply-To: <17536.58772.420434.491191@kahikatea.snap.net.nz> (message from 	Nick Roberts on Sat, 3 Jun 2006 13:27:48 +1200)

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 5641 bytes --]

> From: Nick Roberts <nickrob@snap.net.nz>
> Date: Sat, 3 Jun 2006 13:27:48 +1200
> Cc: Jim Blandy <jimb@codesourcery.com>, gdb@sourceware.org
> 
> I think it's always best to start with the simplest case:
> 
> mytest.c:
> 
> main ()
> {
>   myproc ();
> }
> 
> 
> myproc.c:
> 
> myproc ()
> {
>   return 0;
> }
> 
> With gcc (GCC) 4.1.0 20060304 (Red Hat 4.1.0-3)
> cc -g -c myproc.c
> cc -g -o mytest mytest.c myproc.o
> 
> With GNU gdb 6.5.50.20060601-cvs, I get:
> 
> (gdb)
> -file-list-exec-source-files
> ^done,files=[{file="myproc.c",fullname="/home/nickrob/myproc.c"},{file="myproc.c",fullname="/home/nickrob/myproc.c"},{file="mytest.c",fullname="/home/nickrob/mytest.c"},{file="mytest.c",fullname="/home/nickrob/mytest.c"}]


With GDB 6.4 and GCC 3.3.5, just stepping through the code of
mi_cmd_file_list_exec_source_files, I clearly see that there are two
psymtab entries for each source file:

    (top-gdb) br mi_cmd_file_list_exec_source_files
    Breakpoint 3 at 0x80bf7c8: file ../gdb/mi/mi-cmd-file.c, line 74.
    (top-gdb) cd ../..
    Working directory /home/e/eliz.
    (top-gdb) r --interpreter=mi ./mytest
    Starting program: /home/e/eliz/gdb-6.4/gdb/gdb --interpreter=mi ./mytest
    ~"GNU gdb 6.4\n"
    ~"Copyright 2005 Free Software Foundation, Inc.\n"
    ~"GDB is free software, covered by the GNU General Public License, and you are\n"
    ~"welcome to change it and/or distribute copies of it under certain conditions.\n"
    ~"Type \"show copying\" to see the conditions.\n"
    ~"There is absolutely no warranty for GDB.  Type \"show warranty\" for details.\n"
    ~"This GDB was configured as \"i686-pc-linux-gnu\"..."
    ~"Using host libthread_db library \"/lib/tls/libthread_db.so.1\".\n"
    ~"\n"
    (gdb)
    -file-list-exec-source-files

    Breakpoint 3, mi_cmd_file_list_exec_source_files (
	command=0x83304b0 "file-list-exec-source-files", argv=
    During symbol reading, incomplete CFI data; unspecified registers (e.g., eax) at 0x80bf7c8.
    0x83304b0, argc=137561264) at ../gdb/mi/mi-cmd-file.c:74
    74        if (!mi_valid_noargs ("mi_cmd_file_list_exec_source_files", argc, argv))
    (top-gdb) n
    78        ui_out_begin (uiout, ui_out_type_list, "files");
    (top-gdb) n
    81        ALL_SYMTABS (objfile, s)
    (top-gdb) n
    97        ALL_PSYMTABS (objfile, ps)
    (top-gdb) p *objfile
    $3 = {next = 0x0, name = 0x8312838 "/home/e/eliz/mytest", flags = 6,
      symtabs = 0x0, psymtabs = 0x8335740, free_psymtabs = 0x0, obfd = 0x8312878,
      mtime = 1149325604, objfile_obstack = {chunk_size = 4072, chunk = 0x83356e0,
      [...]
      stats = {n_minsyms = 36, n_psyms = 109, n_syms = 0, n_stabs = 0,
	n_types = 0, sz_strtab = 0}, cp_namespace_symtab = 0x0}
    (top-gdb) p *objfile->psymtabs
    $4 = {next = 0x83356e8,
      filename = 0x8335788 "/build/buildd/glibc-2.3.2.ds1/build-tree/i386-libc/csu/crtn.S", fullname = 0x0,
      dirname = 0x8330470 "/build/buildd/glibc-2.3.2.ds1/build-tree/glibc-2.3.2/csu", objfile = 0x8326a98, section_offsets = 0x832cd6c, textlow = 0, texthigh = 0,
      dependencies = 0x0, number_of_dependencies = 0, globals_offset = 3,
      n_global_syms = 0, statics_offset = 106, n_static_syms = 0, symtab = 0x0,
      read_symtab = 0x814e870 <dwarf2_psymtab_to_symtab>,
      read_symtab_private = 0x8331e38 "±\n", readin = 0 '\0'}
    (top-gdb) p *objfile->psymtabs->next
    $5 = {next = 0x8332694, filename = 0x8335730 "myproc.c", fullname = 0x0,
      dirname = 0x0, objfile = 0x8326a98, section_offsets = 0x832cd6c,
      textlow = 0, texthigh = 0, dependencies = 0x833573c,
      number_of_dependencies = 1, globals_offset = 0, n_global_syms = 0,
      statics_offset = 0, n_static_syms = 0, symtab = 0x0,
      read_symtab = 0x814e870 <dwarf2_psymtab_to_symtab>,
      read_symtab_private = 0x0, readin = 0 '\0'}
    (top-gdb) p *objfile->psymtabs->next->next
    $6 = {next = 0x833263c, filename = 0x83326dc "myproc.c", fullname = 0x0,
      dirname = 0x8314b70 "/home/e/eliz", objfile = 0x8326a98,
      section_offsets = 0x832cd6c, textlow = 134513516, texthigh = 134513526,
      dependencies = 0x0, number_of_dependencies = 0, globals_offset = 2,
      n_global_syms = 1, statics_offset = 105, n_static_syms = 1, symtab = 0x0,
      read_symtab = 0x814e870 <dwarf2_psymtab_to_symtab>,
      read_symtab_private = 0x8331e24 "9\n", readin = 0 '\0'}
    (top-gdb) p *objfile->psymtabs->next->next->next
    $7 = {next = 0x83325e8, filename = 0x8332684 "mytest.c", fullname = 0x0,
      dirname = 0x0, objfile = 0x8326a98, section_offsets = 0x832cd6c,
      textlow = 0, texthigh = 0, dependencies = 0x8332690,
      number_of_dependencies = 1, globals_offset = 0, n_global_syms = 0,
      statics_offset = 0, n_static_syms = 0, symtab = 0x0,
      read_symtab = 0x814e870 <dwarf2_psymtab_to_symtab>,
      read_symtab_private = 0x0, readin = 0 '\0'}
    (top-gdb) p *objfile->psymtabs->next->next->next->next
    $8 = {next = 0x8332560, filename = 0x8332630 "mytest.c", fullname = 0x0,
      dirname = 0x8314300 "/home/e/eliz", objfile = 0x8326a98,
      section_offsets = 0x832cd6c, textlow = 134513492, texthigh = 134513515,
      dependencies = 0x0, number_of_dependencies = 0, globals_offset = 1,
      n_global_syms = 1, statics_offset = 104, n_static_syms = 1, symtab = 0x0,
      read_symtab = 0x814e870 <dwarf2_psymtab_to_symtab>,
      read_symtab_private = 0x8331e10 "¬\t", readin = 0 '\0'}
    (top-gdb)

As you see, there are two entries for myproc.c and two entries for
mytest.c, one with a NULL dirname, the other with a non-NULL dirname.

Sounds like we should implement duplicate removal from the UI lists?


  reply	other threads:[~2006-06-03  9:46 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1149277048.21408.ezmlm@sourceware.org>
2006-06-02 23:31 ` susan
2006-06-03  0:05   ` Jim Blandy
2006-06-03  0:46     ` Susan Macchia
2006-06-03  1:28       ` Nick Roberts
2006-06-03  9:46         ` Eli Zaretskii [this message]
2006-06-03 22:26           ` Nick Roberts
2006-06-03 22:35             ` Daniel Jacobowitz
2006-06-04  0:04               ` Nick Roberts
2006-06-04  2:50                 ` Daniel Jacobowitz
2006-06-04  3:34               ` Eli Zaretskii
2006-06-06  8:01                 ` Nick Roberts
2006-06-03  1:39       ` Bob Rossi
2006-06-02  0:30 Nick Roberts
2006-06-02 19:37 ` Jim Blandy
2006-06-02 19:38   ` Bob Rossi
2006-06-02 20:24 ` Daniel Jacobowitz

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=uk67yd12e.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=gdb@sourceware.org \
    --cc=jimb@codesourcery.com \
    --cc=nickrob@snap.net.nz \
    --cc=susan@smacchia.net \
    /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