Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jie Zhang <jie@codesourcery.com>
To: gdb-patches@sourceware.org
Subject: [RFC] Fix a bug in source file searching
Date: Mon, 29 Mar 2010 03:22:00 -0000	[thread overview]
Message-ID: <4BB01CC6.3090402@codesourcery.com> (raw)

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

I found this bug when debugging GCC. (Actually I don't know if this is a 
bug in GDB code or documentation.) I prepared a patch so you can easily 
comment.

When I was trying to set a breakpoint on a function in GCC generated 
options.c, like cl_optimization_restore, GDB always thought it's the 
options.c in gcc/fortran/ . The related DWARF looks like:

      <4c5ddc>   DW_AT_name        : (indirect string, offset: 0x58826): 
options.c
      <4c5de0>   DW_AT_comp_dir    : (indirect string, offset: 0x5383): 
/home/jie/sources/gcc/builds/build.svn-trunk/gcc

and

   The File Name Table:
    Entry Dir     Time    Size    Name
    1     0       0       0       options.c

According to DWARF, Dir = 0 means the current directory of the 
compilation, which "is understood to be the zeroth entry and is not 
explicitly represented." So the full name of options.c should be 
"/home/jie/sources/gcc/builds/build.svn-trunk/gcc/options.c".

And .gdbinit file in GCC build directory has

    dir ../../../svn/trunk/gcc/fortran

So it looked GDB searched pathes added by dir command first.

But the GDB documentation says in "9.5 Specifying Source Directories":
[quote]
For example, suppose an executable references the file 
/usr/src/foo-1.0/lib/foo.c, and our source path is /mnt/cross. The file 
is first looked up literally; if this fails, 
/mnt/cross/usr/src/foo-1.0/lib/foo.c is tried; if this fails, 
/mnt/cross/foo.c is opened; if this fails, an error message is printed.
[/quote]

  From this words, it seems the current GDB behavior doesn't conforms to 
the documentation. This patch makes GDB first look up the file 
literally. Only one new FAIL found when doing regression testing on 
i686-pc-linux-gnu:

FAIL: gdb.reverse/i387-env-reverse.exp: record to end of main (timeout)

I think it's not an error caused by the patch.

Currently I have no reduced test case. If the idea is good, I can write 
up a test case.

Any comments?


-- 
Jie Zhang
CodeSourcery
(650) 331-3385 x735


[-- Attachment #2: gdb-fix-find-and-open-source.diff --]
[-- Type: text/x-patch, Size: 1071 bytes --]


	* source.c (find_and_open_source): Search file in compilation
	directory first.

Index: source.c
===================================================================
RCS file: /cvs/src/src/gdb/source.c,v
retrieving revision 1.108
diff -u -p -r1.108 source.c
--- source.c	10 Mar 2010 18:20:06 -0000	1.108
+++ source.c	28 Mar 2010 15:54:07 -0000
@@ -971,6 +971,27 @@ find_and_open_source (const char *filena
 
   if (dirname != NULL)
     {
+      char *name, *rewritten_fullname;
+
+      name = concat (dirname, SLASH_STRING, filename, (char *)NULL);
+      rewritten_fullname = rewrite_source_path (name);
+
+      if (rewritten_fullname != NULL)
+	{
+	  *fullname = rewritten_fullname;
+	  xfree (name);
+	}
+      else
+	*fullname = name;
+      result = open (*fullname, OPEN_MODE);
+      if (result >= 0)
+	return result;
+      xfree (*fullname);
+      *fullname = NULL;
+    }
+
+  if (dirname != NULL)
+    {
       /* If necessary, rewrite the compilation directory name according
          to the source path substitution rules specified by the user.  */
 


             reply	other threads:[~2010-03-29  3:22 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-29  3:22 Jie Zhang [this message]
2010-03-30 22:14 ` Tom Tromey
2010-03-31  6:09   ` Jie Zhang
2010-04-07 20:53     ` Tom Tromey
2010-04-08  0:49       ` Jie Zhang

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=4BB01CC6.3090402@codesourcery.com \
    --to=jie@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /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