This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Just forgot about gdb/NEWS.
On Tue, 29 Jan 2013 23:10:19 +0100, Jan Kratochvil wrote:

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>

	* NEWS (set filename-display): Add options
	relative-with-system-absolute and basename-with-system-absolute.
	* 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/NEWS
+++ b/gdb/NEWS
@@ -115,7 +115,8 @@ show print type typedefs
   Control whether typedef definitions are displayed by "ptype".
   The default is to show them.
 
-set filename-display basename|relative|absolute
+set filename-display basename|relative|absolute|relative-with-system-absolute
+                     |basename-with-system-absolute
 show filename-display
   Control the way in which filenames is displayed.
   The default is "relative", which preserves previous behavior.
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -6549,6 +6549,22 @@ 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.
+
+Files having separate debug information file are expected to come from system
+shared libraries.
+
+@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.
+
+Files having separate debug information file are expected to come from system
+shared libraries.
+
 @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,


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]