Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: iam ahal <hal9000ed2k@gmail.com>
To: Tom Tromey <tromey@redhat.com>
Cc: gdb-patches@sourceware.org, eliz@gnu.org, pmuldoon@redhat.com,
		brobecker@adacore.com, pedro@codesourcery.com, drow@false.org,
		jan.kratochvil@redhat.com
Subject: Re: [patch] GDB 7.2: new feature for "backtrace" that cuts path to file (remain filename)
Date: Sun, 30 Oct 2011 19:52:00 -0000	[thread overview]
Message-ID: <CAA18ubL9TG7we7bi3U_0DQw8KLXNaYCfGa91KQrvC2jM=6DsBw@mail.gmail.com> (raw)
In-Reply-To: <m3vcue1jal.fsf@fleche.redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3022 bytes --]

Copyright assignment by [gnu.org #703515] is completed.
I've corrected some pieces of the patch by your notes.
Also, I've attached the change log.

Please, check it.

Thank you.

~Eldar.

On Wed, Aug 3, 2011 at 9:44 PM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Eldar" == iam ahal <hal9000ed2k@gmail.com> writes:
>
> Tom> I forget (I never keep records of this, I think perhaps I should) -- did
> Tom> we get you started on the copyright assignment paperwork?
>
> Eldar> Not yet, because my previous patches is very different. I mean the
> Eldar> different files was changed and I don't know which files I need to
> Eldar> change in the next patch.
> Eldar> I hope some people here can accept implementation in this last patch.
> Eldar> After I can start the copyright assignment.
>
> It is best to start early.  Sometimes it can take quite a while, and in
> the meantime your patch will not go in.
>
> The list of files does not really matter, since the assignment is for
> past and future changes.  You can ask the copyright clerk for
> clarification on this point if you need it.
>
> I think the patch is basically fine, just a few nits.
>
> Eldar> +static int backtrace_skip_compile;
> Eldar> +static void
>
> Tom> Newline between these two lines.
>
> Eldar> I'm not sure that's right because I see that there's no newline in
> Eldar> this case (if you look at other places related 'set backtrace ...').
>
> Yeah, I think a newline is better, though.
>
> Eldar> +char *
> Eldar> +get_display_filename_from_sal (struct symtab_and_line *sal)
> Tom>
> Tom> Should have an introductory comment before this function.
>
> Eldar> Comment was added in 'frame.h'
>
> Ok, thanks.
> Add a comment saying to see the documentation in frame.h.
>
> Eldar> +static const char filename_display_without_comp_dir[] = "without-compile-dir";
>
> I think spelling out "directory" would be better.
>
> Eldar> +  const char *filename = sal->symtab->filename;
> Eldar> +  const char *dirname = sal->symtab->dirname;
> Eldar> +  size_t flen = strlen (filename);
> Eldar> +  size_t dlen = strlen (dirname);
>
> This will crash if filename==NULL or dirname==NULL.
>
> Eldar> +  if (filename_display_string == filename_display_without_comp_dir
> Eldar> +      && filename && dirname && dlen <= flen
> Eldar> +      && !FILENAME_NCMP (filename, dirname, dlen))
>
> This test is not correct, in that it will match "/tmp/x" with "/tmp/xaaa".
> I think it needs an additional check for a separator.
>
> Eldar> diff -rup gdb-7.2-orig/include/filenames.h gdb-7.2/include/filenames.h
>
> Changes to libiberty have to go to gcc-patches.
> I don't think you actually need this change, though, so it would be
> simpler and quicker if you left it out.
>
> Eldar> +extern int filename_ncmp (const char *s1, const char *s2, size_t n);
>
> This is already declared in the trunk filenames.h.
> Be sure to always write patches against the trunk, not something older.
>
> Tom
>

[-- Attachment #2: gdb-7.3.1-filename-display-v1.patch --]
[-- Type: text/x-patch, Size: 6012 bytes --]

diff -rup gdb-7.3.1-orig/gdb/doc/gdb.texinfo gdb-7.3.1/gdb/doc/gdb.texinfo
--- gdb-7.3.1-orig/gdb/doc/gdb.texinfo	2011-09-04 21:10:37.000000000 +0400
+++ gdb-7.3.1/gdb/doc/gdb.texinfo	2011-10-30 21:26:34.450274962 +0400
@@ -6052,6 +6052,19 @@ unlimited.
 
 @item show backtrace limit
 Display the current limit on backtrace levels.
+
+@item set backtrace filename-display
+@itemx set backtrace filename-display full
+Display a full filename.  This is the default.
+
+@item set backtrace filename-display basename
+Display only basename of a filename.
+
+@item set backtrace filename-display basename
+Display a filename without the compile directory part.
+
+@item show backtrace filename-display
+Display the current way to display a filename.
 @end table
 
 @node Selection
diff -rup gdb-7.3.1-orig/gdb/frame.c gdb-7.3.1/gdb/frame.c
--- gdb-7.3.1-orig/gdb/frame.c	2011-03-18 21:52:30.000000000 +0300
+++ gdb-7.3.1/gdb/frame.c	2011-10-30 21:28:45.170271140 +0400
@@ -45,6 +45,7 @@
 #include "block.h"
 #include "inline-frame.h"
 #include  "tracepoint.h"
+#include "filenames.h"
 
 static struct frame_info *get_prev_frame_1 (struct frame_info *this_frame);
 static struct frame_info *get_prev_frame_raw (struct frame_info *this_frame);
@@ -136,6 +137,18 @@ struct frame_info
    sufficient for now.  */
 static struct frame_info *frame_stash = NULL;
 
+/* Possible values of 'set backtrace filename-display'.  */
+static const char filename_display_full[] = "full";
+static const char filename_display_basename[] = "basename";
+static const char filename_display_without_comp_directory[] = "without-compile-directory";
+
+static const char *filename_display_kind_names[] = {
+  filename_display_full,
+  filename_display_basename,
+  filename_display_without_comp_directory,
+  NULL
+};
+
 /* Add the following FRAME to the frame stash.  */
 
 static void
@@ -208,6 +221,16 @@ show_backtrace_limit (struct ui_file *fi
 		    value);
 }
 
+static const char *filename_display_string = filename_display_full;
+
+static void
+show_filename_display_string (struct ui_file *file, int from_tty,
+			      struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("A filename is displayed in backtrace as \"%s\".\n"),
+		    value);
+}
 
 static void
 fprint_field (struct ui_file *file, const char *name, int p, CORE_ADDR addr)
@@ -2113,6 +2136,39 @@ find_frame_sal (struct frame_info *frame
   (*sal) = find_pc_line (pc, notcurrent);
 }
 
+/* See commentary in frame.h.  */
+
+const char *
+get_filename_display_from_sal (struct symtab_and_line *sal)
+{
+  const char *filename = sal->symtab->filename;
+  const char *dirname = sal->symtab->dirname;
+  size_t dlen = dirname ? strlen (dirname) : 0;
+
+  if (filename_display_string == filename_display_basename
+      && filename)
+    {
+      return lbasename (filename);
+    }
+  else
+  if (filename_display_string == filename_display_without_comp_directory
+      && filename && dirname && dlen && dlen <= strlen (filename)
+      && !filename_ncmp (filename, dirname, dlen))
+    {
+      const char *start = filename + dlen;
+      const char *result = start;
+      while (IS_DIR_SEPARATOR (*result))
+	result++;
+
+      if (IS_DIR_SEPARATOR (dirname[dlen - 1]))
+	return result;
+      else
+	return result == start ? filename : result;
+    }
+
+  return filename;
+}
+
 /* Per "frame.h", return the ``address'' of the frame.  Code should
    really be using get_frame_id().  */
 CORE_ADDR
@@ -2484,6 +2540,21 @@ Zero is unlimited."),
 			   &set_backtrace_cmdlist,
 			   &show_backtrace_cmdlist);
 
+  add_setshow_enum_cmd ("filename-display", class_obscure,
+			filename_display_kind_names,
+			&filename_display_string, _("\
+Set a way how to display filename."), _("\
+Show a way how to display filename."), _("\
+filename-display can be:\n\
+  full                       - display a full filename, this is the default\n\
+  basename                   - display only basename of a filename\n\
+  without-compile-directory  - display a filename without the compile directory part\n\
+By default, full filename is displayed."),
+			NULL,
+			show_filename_display_string,
+			&set_backtrace_cmdlist,
+			&show_backtrace_cmdlist);
+
   /* Debug this files internals.  */
   add_setshow_zinteger_cmd ("frame", class_maintenance, &frame_debug,  _("\
 Set frame debugging."), _("\
diff -rup gdb-7.3.1-orig/gdb/frame.h gdb-7.3.1/gdb/frame.h
--- gdb-7.3.1-orig/gdb/frame.h	2011-03-18 21:52:30.000000000 +0300
+++ gdb-7.3.1/gdb/frame.h	2011-10-30 20:53:23.178333185 +0400
@@ -352,6 +352,12 @@ extern int get_frame_func_if_available (
 extern void find_frame_sal (struct frame_info *frame,
 			    struct symtab_and_line *sal);
 
+/* Returns either full filename or basename or filename
+   without compile directory part.
+   It depends on 'set backtrace filename-display' value.  */
+
+extern const char *get_filename_display_from_sal (struct symtab_and_line *sal);
+
 /* Set the current source and line to the location given by frame
    FRAME, if possible.  When CENTER is true, adjust so the relevant
    line is in the center of the next 'list'.  */
diff -rup gdb-7.3.1-orig/gdb/stack.c gdb-7.3.1/gdb/stack.c
--- gdb-7.3.1-orig/gdb/stack.c	2011-03-18 21:48:56.000000000 +0300
+++ gdb-7.3.1/gdb/stack.c	2011-10-30 20:53:23.182333185 +0400
@@ -835,11 +835,15 @@ print_frame (struct frame_info *frame, i
   ui_out_text (uiout, ")");
   if (sal.symtab && sal.symtab->filename)
     {
+      const char *filename_display = get_filename_display_from_sal (&sal);
+      if (filename_display == NULL)
+	  filename_display = sal.symtab->filename;
+
       annotate_frame_source_begin ();
       ui_out_wrap_hint (uiout, "   ");
       ui_out_text (uiout, " at ");
       annotate_frame_source_file ();
-      ui_out_field_string (uiout, "file", sal.symtab->filename);
+      ui_out_field_string (uiout, "file", filename_display);
       if (ui_out_is_mi_like_p (uiout))
 	{
 	  const char *fullname = symtab_to_fullname (sal.symtab);

[-- Attachment #3: ChangeLog --]
[-- Type: application/octet-stream, Size: 839 bytes --]

2011-10-30  Eldar Gaynetdinov <hal9000ed2k@gmail.com>

	Add a new variable that controls a way in which filenames in
	backtraces is displayed.
	* gdb.texinfo: Added description of 'filename-display' variable in
	'set/show backtrace' section.
	* frame.c: Added including of a header file.  Added definition of
	three global string variables and global array of string variables.
	Added definition of one global string variable.
	(show_filename_display_string): New function.
	(get_filename_display_from_sal): New function with commentary.
	(_initialize_frame): Added initialization of 'filename-display'
	variable.
	* frame.h: Added declaration of a new function with commentary.
	* stack.c (print_frame): Added new variable and calling of a new
	function and condition with this variable. Changed third argument of
	calling of a function.

  reply	other threads:[~2011-10-30 18:16 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-26 20:00 iam ahal
2011-06-26 20:49 ` Phil Muldoon
2011-06-27 16:00   ` Joel Brobecker
2011-06-27 16:18     ` Phil Muldoon
2011-06-28 20:08     ` Tom Tromey
2011-06-28 22:36       ` Phil Muldoon
2011-07-03 18:12         ` iam ahal
2011-07-03 21:13           ` Eli Zaretskii
2011-07-04 11:26             ` iam ahal
2011-07-04 12:05               ` Eli Zaretskii
2011-07-04 21:47                 ` Joel Brobecker
2011-07-05  4:35                   ` Eli Zaretskii
2011-07-19 14:43                     ` Pedro Alves
2011-07-05  8:38                   ` iam ahal
2011-07-19 14:19                   ` Pedro Alves
2011-07-17 19:24                 ` iam ahal
2011-07-19 13:28                   ` iam ahal
2011-07-19 17:04                     ` Eli Zaretskii
2011-07-24 21:12                       ` iam ahal
2011-07-26 14:17                         ` iam ahal
2011-07-28 15:34                         ` Tom Tromey
2011-07-28 15:57                           ` Tom Tromey
2011-07-28 16:36                             ` Joel Brobecker
2011-07-28 17:39                               ` Tom Tromey
2011-07-28 17:51                           ` Tom Tromey
2011-07-29 12:01                             ` Joel Brobecker
2011-07-29 12:36                             ` Eli Zaretskii
2011-08-02 19:41                           ` iam ahal
2011-08-03 17:45                             ` Tom Tromey
2011-10-30 19:52                               ` iam ahal [this message]
2011-11-02 19:06                                 ` Tom Tromey
2011-11-02 22:53                                 ` Doug Evans
2011-12-04 15:52                                   ` iam ahal
2011-12-04 16:55                                     ` Eli Zaretskii
2011-12-04 18:41                                       ` iam ahal
2011-12-04 19:01                                         ` Pedro Alves
2011-12-04 19:56                                           ` Eli Zaretskii
2011-12-04 21:00                                             ` Pedro Alves
2011-12-05  3:54                                               ` Eli Zaretskii
2011-12-05  5:17                                                 ` Eli Zaretskii
2011-12-06 13:03                                                   ` Pedro Alves
2011-12-06 14:04                                                     ` Eli Zaretskii
2011-12-06 18:00                                                       ` Doug Evans
2011-12-06 20:45                                                       ` Tom Tromey
2011-12-07  8:00                                                         ` Eli Zaretskii
2012-03-10 20:15                                                           ` iam ahal
2012-03-11  1:22                                                             ` asmwarrior
2012-03-12 13:10                                                               ` iam ahal
2012-03-14 16:11                                                             ` Tom Tromey
2012-03-14 16:27                                                             ` Jan Kratochvil
2012-03-14 17:40                                                             ` Eli Zaretskii
2012-03-15 22:46                                                             ` Jan Kratochvil
2012-03-18 18:30                                                               ` iam ahal
2012-03-18 18:35                                                                 ` Jan Kratochvil
2012-04-06 14:22                                                                   ` Jan Kratochvil
2012-03-18 20:46                                                                 ` Eli Zaretskii
2012-03-25 19:27                                                                   ` iam ahal
2012-03-25 19:31                                                                     ` Jan Kratochvil
2012-03-25 21:23                                                                     ` Eli Zaretskii
2011-12-06 12:50                                                 ` Pedro Alves
2011-12-06 20:40                                     ` Tom Tromey
2011-12-06 23:02                                     ` Jan Kratochvil
2011-07-29 13:35                         ` Jan Kratochvil
2011-08-01 18:04                           ` Tom Tromey
2011-06-29 10:09       ` Andrew Burgess
2011-06-29 16:06       ` Joel Brobecker
2011-07-03 18:15     ` Daniel Jacobowitz
2011-06-28 20:08   ` Tom Tromey
2012-04-09 15:39 ` Jan Kratochvil

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='CAA18ubL9TG7we7bi3U_0DQw8KLXNaYCfGa91KQrvC2jM=6DsBw@mail.gmail.com' \
    --to=hal9000ed2k@gmail.com \
    --cc=brobecker@adacore.com \
    --cc=drow@false.org \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=pedro@codesourcery.com \
    --cc=pmuldoon@redhat.com \
    --cc=tromey@redhat.com \
    /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