Index: gdb/buildsym.c =================================================================== RCS file: /cvs/src/src/gdb/buildsym.c,v retrieving revision 1.59 diff -u -3 -p -r1.59 buildsym.c --- gdb/buildsym.c 1 Jan 2008 22:53:09 -0000 1.59 +++ gdb/buildsym.c 4 Jan 2008 14:41:44 -0000 @@ -583,6 +583,13 @@ void start_subfile (char *name, char *dirname) { struct subfile *subfile; + char *absname; /* Absolute NAME. */ + + if (!IS_ABSOLUTE_PATH (name) + && dirname != NULL) + absname = concat (dirname, SLASH_STRING, name, NULL); + else + absname = name; /* See if this subfile is already known as a subfile of the current main source file. */ @@ -590,6 +597,7 @@ start_subfile (char *name, char *dirname for (subfile = subfiles; subfile; subfile = subfile->next) { char *subfile_name; + char *aname; /* If NAME is an absolute path, and this subfile is not, then attempt to create an absolute path to compare. */ @@ -601,7 +609,13 @@ start_subfile (char *name, char *dirname else subfile_name = subfile->name; - if (FILENAME_CMP (subfile_name, name) == 0) + if (!IS_ABSOLUTE_PATH (name) + && IS_ABSOLUTE_PATH (subfile->name)) + aname = absname; + else + aname = name; + + if (FILENAME_CMP (subfile_name, aname) == 0) { current_subfile = subfile; if (subfile_name != subfile->name) @@ -612,6 +626,9 @@ start_subfile (char *name, char *dirname xfree (subfile_name); } + if (absname != name) + xfree (absname); + /* This subfile is not known. Add an entry for it. Make an entry for this subfile in the list of all subfiles of the current main source file. */