"info source" now includes producer string

Message ID yjt2h9w52c4v.fsf@ruffy.mtv.corp.google.com
State New, archived
Headers

Commit Message

Doug Evans Jan. 5, 2015, 8:41 p.m. UTC
  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

Eli Zaretskii Jan. 5, 2015, 8:50 p.m. UTC | #1
> 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.
  
Doug Evans Jan. 6, 2015, 12:28 a.m. UTC | #2
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.
  
Eli Zaretskii Jan. 6, 2015, 3:31 a.m. UTC | #3
> 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.
  

Patch

diff --git a/gdb/NEWS b/gdb/NEWS
index 9a668c4..ebcc0e3 100644
--- 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.
+
 *** Changes in GDB 7.8
 
 * New command line options
diff --git a/gdb/source.c b/gdb/source.c
index 574d9fa..49c9d83 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -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");
 }
 
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index f4d7132..b22f644 100644
--- 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,
+@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