"info source" now includes producer string
Commit Message
Hi.
This is something I've wanted for awhile.
bash$ g++ -g -Og hello.cc -o hello
bash$ gdb hello
(gdb) start
(gdb) info source
Current source file is hello.cc
Compilation directory is /home/dje
Located in /home/dje/hello.cc
Contains 8 lines.
Source language is c++.
Producer is GNU C++ 4.8.2 -mtune=generic -march=x86-64 -g -Og -fstack-protector.
Compiled with DWARF 2 debugging format.
Does not include preprocessor macro info.
(gdb)
Regression tested on amd64-linux.
2015-01-05 Doug Evans <dje@google.com>
* NEWS: "info source" command now display producer string if present.
* source.c (source_info): Print producer string if present.
doc/
* gdb.texinfo (Symbols) <info source>: Output now contains producer
string if present.
Comments
> From: Doug Evans <dje@google.com>
> Date: Mon, 05 Jan 2015 12:41:52 -0800
>
> bash$ g++ -g -Og hello.cc -o hello
> bash$ gdb hello
> (gdb) start
> (gdb) info source
> Current source file is hello.cc
> Compilation directory is /home/dje
> Located in /home/dje/hello.cc
> Contains 8 lines.
> Source language is c++.
> Producer is GNU C++ 4.8.2 -mtune=generic -march=x86-64 -g -Og -fstack-protector.
> Compiled with DWARF 2 debugging format.
> Does not include preprocessor macro info.
Thanks.
> * NEWS: "info source" command now display producer string if present.
^^^^^^^
"displays"
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -113,6 +113,9 @@ VAX running Ultrix vax-*-ultrix*
> and "assf"), have been removed. Use the "sharedlibrary" command, or
> its alias "share", instead.
>
> +* The "info source" command now displays the producer string if it was
> + present in the debug info.
I wonder whether we should replace "producer" with something less
abstract. Would "compilation command line" be accurate enough?
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -16279,6 +16279,8 @@ its length, in lines,
> @item
> which programming language it is written in,
> @item
> +if the debug information provides it, the program that compiled the file,
Not just the program, but also its command line, right?
Okay with those fixed.
On Mon, Jan 5, 2015 at 12:50 PM, Eli Zaretskii <eliz@gnu.org> wrote:
>> From: Doug Evans <dje@google.com>
>> Date: Mon, 05 Jan 2015 12:41:52 -0800
>>
>> bash$ g++ -g -Og hello.cc -o hello
>> bash$ gdb hello
>> (gdb) start
>> (gdb) info source
>> Current source file is hello.cc
>> Compilation directory is /home/dje
>> Located in /home/dje/hello.cc
>> Contains 8 lines.
>> Source language is c++.
>> Producer is GNU C++ 4.8.2 -mtune=generic -march=x86-64 -g -Og -fstack-protector.
>> Compiled with DWARF 2 debugging format.
>> Does not include preprocessor macro info.
>
> Thanks.
>
>> * NEWS: "info source" command now display producer string if present.
> ^^^^^^^
> "displays"
>
>> --- a/gdb/NEWS
>> +++ b/gdb/NEWS
>> @@ -113,6 +113,9 @@ VAX running Ultrix vax-*-ultrix*
>> and "assf"), have been removed. Use the "sharedlibrary" command, or
>> its alias "share", instead.
>>
>> +* The "info source" command now displays the producer string if it was
>> + present in the debug info.
>
> I wonder whether we should replace "producer" with something less
> abstract. Would "compilation command line" be accurate enough?
The producer string can be anything, it's whatever the compiler
decides, so I'm really hesitant to be specific here (and "command
line" is too specific for me), because often it will be wrong.
I don't mind introducing users to the term "producer".
It's the term we use, and it's not gdb or even gnu-specific.
>
>> --- a/gdb/doc/gdb.texinfo
>> +++ b/gdb/doc/gdb.texinfo
>> @@ -16279,6 +16279,8 @@ its length, in lines,
>> @item
>> which programming language it is written in,
>> @item
>> +if the debug information provides it, the program that compiled the file,
>
> Not just the program, but also its command line, right?
Again, I don't want to provide too much detail here.
What the compiler decides to put in its producer string is up to the compiler.
>
> Okay with those fixed.
> Date: Mon, 5 Jan 2015 16:28:20 -0800
> From: Doug Evans <dje@google.com>
> Cc: gdb-patches <gdb-patches@sourceware.org>
>
> >> +* The "info source" command now displays the producer string if it was
> >> + present in the debug info.
> >
> > I wonder whether we should replace "producer" with something less
> > abstract. Would "compilation command line" be accurate enough?
>
> The producer string can be anything, it's whatever the compiler
> decides, so I'm really hesitant to be specific here (and "command
> line" is too specific for me), because often it will be wrong.
We can always say "e.g." or "such as". That would at least describe
the most frequent use cases. We don't have to be 110% accurate here,
just clear enough to convey the intent.
@@ -113,6 +113,9 @@ VAX running Ultrix vax-*-ultrix*
and "assf"), have been removed. Use the "sharedlibrary" command, or
its alias "share", instead.
+* The "info source" command now displays the producer string if it was
+ present in the debug info.
+
*** Changes in GDB 7.8
* New command line options
@@ -654,12 +654,15 @@ static void
source_info (char *ignore, int from_tty)
{
struct symtab *s = current_source_symtab;
+ struct compunit_symtab *cust;
if (!s)
{
printf_filtered (_("No current source file.\n"));
return;
}
+
+ cust = SYMTAB_COMPUNIT (s);
printf_filtered (_("Current source file is %s\n"), s->filename);
if (SYMTAB_DIRNAME (s) != NULL)
printf_filtered (_("Compilation directory is %s\n"), SYMTAB_DIRNAME (s));
@@ -670,10 +673,13 @@ source_info (char *ignore, int from_tty)
s->nlines == 1 ? "" : "s");
printf_filtered (_("Source language is %s.\n"), language_str (s->language));
+ printf_filtered (_("Producer is %s.\n"),
+ COMPUNIT_PRODUCER (cust) != NULL
+ ? COMPUNIT_PRODUCER (cust) : _("unknown"));
printf_filtered (_("Compiled with %s debugging format.\n"),
- COMPUNIT_DEBUGFORMAT (SYMTAB_COMPUNIT (s)));
+ COMPUNIT_DEBUGFORMAT (cust));
printf_filtered (_("%s preprocessor macro info.\n"),
- COMPUNIT_MACRO_TABLE (SYMTAB_COMPUNIT (s)) != NULL
+ COMPUNIT_MACRO_TABLE (cust) != NULL
? "Includes" : "Does not include");
}
@@ -16279,6 +16279,8 @@ its length, in lines,
@item
which programming language it is written in,
@item
+if the debug information provides it, the program that compiled the file,
+@item
whether the executable includes debugging information for that file, and
if so, what format the information is in (e.g., STABS, Dwarf 2, etc.), and
@item