[patchv2 12/11] New options {relative,basename}-with-system-absolute

Jan Kratochvil jan.kratochvil@redhat.com
Tue Jan 29 22:10:00 GMT 2013


Hi,

to make {this,a} patchset practically useful it needs to be enabled by default.

But making "set filename-display absolute" the default is probably not great:

#8  0x0000000000735ed2 in captured_main (data=0x7fffffffdaa0) at main.c:1033
#9  0x00000000007324ef in catch_errors (func=0x734cae <captured_main>, func_args=0x7fffffffdaa0, errstring=0xfa2e54 "", mask=6) at exceptions.c:546
#10 0x0000000000735f1e in gdb_main (args=0x7fffffffdaa0) at main.c:1042
#11 0x000000000048cd66 in main (argc=1, argv=0x7fffffffdba8) at gdb.c:34
->
#8  0x0000000000735ed2 in captured_main (data=0x7fffffffdaa0) at /home/jkratoch/redhat/archer-jankratochvil-absdir/gdb/main.c:1033
#9  0x00000000007324ef in catch_errors (func=0x734cae <captured_main>, func_args=0x7fffffffdaa0, errstring=0xfa2e54 "", mask=6)
    at /home/jkratoch/redhat/archer-jankratochvil-absdir/gdb/exceptions.c:546
#10 0x0000000000735f1e in gdb_main (args=0x7fffffffdaa0) at /home/jkratoch/redhat/archer-jankratochvil-absdir/gdb/main.c:1042
#11 0x000000000048cd66 in main (argc=1, argv=0x7fffffffdba8) at /home/jkratoch/redhat/archer-jankratochvil-absdir/gdb/gdb.c:34

OTOH this output I find wrong and the "absolute" change is a win for it:

#0  0x00007ffff63773d0 in __poll_nocancel () at ../sysdeps/unix/syscall-template.S:81
->
#0  0x00007ffff63773d0 in __poll_nocancel () at /usr/src/debug/glibc-2.17-c758a686/sysdeps/unix/syscall-template.S:81

So a combination of absolute filenames for system component and relative
filenames for user binaries should be the best of both choices.

This applies then also for the main executable, if it comes from system:

#3  0x00000000004016e4 in main (argc=<optimized out>, argv=<optimized out>) at src/sleep.c:145
->
#3  0x00000000004016e4 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/coreutils-8.20/src/sleep.c:145

All these patches are unrelated if *-debuginfo.rpm (or equivalent) is not
installed for the system component as in such case GDB has always displayed:

#0  0x00007ffff63773d0 in __poll_nocancel () from /lib64/libc.so.6


In fact I would personally prefer "basename" instead of "relative" for user
binaries when we have "ambiguous linespec" already implemented.  But I do not
find there a big difference so it would be mostly a needless user interface
change.  Such relative* -> basename* change is in fact unrelated to this
proposal and it can be still made in the future.

This patch does not yet make the change of the default.


Thanks,
Jan


gdb/
2013-01-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* source.c (filename_display_relative_with_system_absolute)
	(filename_display_basename_with_system_absolute): New.
	(filename_display_kind_names): Add them.
	(symtab_to_filename): Use them.
	(_initialize_source): Describe them for "set filename-display".

gdb/doc/
2013-01-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.texinfo (Backtrace): Add new set filename-display options
	relative-with-system-absolute and basename-with-system-absolute.

--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -6549,6 +6549,16 @@ Display only basename of a filename.
 @item set filename-display absolute
 Display an absolute filename.
 
+@item set filename-display relative-with-system-absolute
+Determine whether a source filename comes from file having separate debug
+information file.  In such case display the source filename as absolute one.
+Otherwise display it relative to the compilation directory.
+
+@item set filename-display basename-with-system-absolute
+Determine whether a source filename comes from file having separate debug
+information file.  In such case display the source filename as absolute one.
+Otherwise display only basename of the filename.
+
 @item show filename-display
 Show the current way to display filenames.
 @end table
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -113,11 +113,17 @@ show_lines_to_list (struct ui_file *file, int from_tty,
 static const char filename_display_basename[] = "basename";
 static const char filename_display_relative[] = "relative";
 static const char filename_display_absolute[] = "absolute";
+static const char filename_display_relative_with_system_absolute[] =
+						"relative-with-system-absolute";
+static const char filename_display_basename_with_system_absolute[] =
+						"basename-with-system-absolute";
 
 static const char *const filename_display_kind_names[] = {
   filename_display_basename,
   filename_display_relative,
   filename_display_absolute,
+  filename_display_relative_with_system_absolute,
+  filename_display_basename_with_system_absolute,
   NULL
 };
 
@@ -1144,8 +1150,16 @@ symtab_to_filename (struct symtab *symtab)
     return symtab_to_fullname (symtab);
   else if (filename_display_string == filename_display_relative)
     return symtab->filename;
-  else
-    internal_error (__FILE__, __LINE__, _("invalid filename_display_string"));
+
+  if (symtab->objfile->separate_debug_objfile != NULL
+      || symtab->objfile->separate_debug_objfile_backlink != NULL)
+    return symtab_to_fullname (symtab);
+
+  if (filename_display_string == filename_display_relative_with_system_absolute)
+    return symtab->filename;
+  if (filename_display_string == filename_display_basename_with_system_absolute)
+    return lbasename (symtab->filename);
+  internal_error (__FILE__, __LINE__, _("invalid filename_display_string"));
 }
 
 /* Create and initialize the table S->line_charpos that records
@@ -2065,6 +2079,13 @@ filename-display can be:\n\
   basename - display only basename of a filename\n\
   relative - display a filename relative to the compilation directory\n\
   absolute - display an absolute filename\n\
+  relative-with-system-absolute - display filenames from files with separate\n\
+                                  debug info files as absolute, other files\n\
+                                  display relative to the compilation directory\
+\n\
+  basename-with-system-absolute - display filenames from files with separate\n\
+                                  debug info files as absolute, other files\n\
+                                  display only with basename of the filename\n\
 By default, relative filenames are displayed."),
 			NULL,
 			show_filename_display_string,



More information about the Gdb-patches mailing list