Magellan Linux

Contents of /trunk/gdb/patches/gdb-6.4-relative-paths.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (show annotations) (download)
Tue May 8 20:06:05 2007 UTC (17 years ago) by niro
File size: 3147 byte(s)
-import

1 --- gdb-6.4/gdb/dwarf2read.c
2 +++ gdb-6.4/gdb/dwarf2read.c
3 @@ -838,7 +838,7 @@ static struct line_header *(dwarf_decode
4 static void dwarf_decode_lines (struct line_header *, char *, bfd *,
5 struct dwarf2_cu *, struct partial_symtab *);
6
7 -static void dwarf2_start_subfile (char *, char *);
8 +static void dwarf2_start_subfile (char *, char *, char *);
9
10 static struct symbol *new_symbol (struct die_info *, struct type *,
11 struct dwarf2_cu *);
12 @@ -6474,13 +6474,11 @@ dwarf_decode_lines (struct line_header *
13 directory and file name numbers in the statement program
14 are 1-based. */
15 struct file_entry *fe = &lh->file_names[file - 1];
16 - char *dir;
17 + char *dir = NULL;
18
19 if (fe->dir_index)
20 dir = lh->include_dirs[fe->dir_index - 1];
21 - else
22 - dir = comp_dir;
23 - dwarf2_start_subfile (fe->name, dir);
24 + dwarf2_start_subfile (fe->name, dir, comp_dir);
25 }
26
27 /* Decode the table. */
28 @@ -6582,7 +6580,7 @@ dwarf_decode_lines (struct line_header *
29 else
30 dir = comp_dir;
31 if (!decode_for_pst_p)
32 - dwarf2_start_subfile (fe->name, dir);
33 + dwarf2_start_subfile (fe->name, dir, comp_dir);
34 }
35 break;
36 case DW_LNS_set_column:
37 @@ -6662,7 +6660,8 @@ dwarf_decode_lines (struct line_header *
38
39 /* Start a subfile for DWARF. FILENAME is the name of the file and
40 DIRNAME the name of the source directory which contains FILENAME
41 - or NULL if not known.
42 + or NULL if not known. COMP_DIR is the value of DW_AT_comp_dir. If
43 + DIRNAME specifies a relative path, it is appended to COMP_DIR.
44 This routine tries to keep line numbers from identical absolute and
45 relative file names in a common subfile.
46
47 @@ -6681,8 +6680,19 @@ dwarf_decode_lines (struct line_header *
48 subfile, so that `break /srcdir/list0.c:1' works as expected. */
49
50 static void
51 -dwarf2_start_subfile (char *filename, char *dirname)
52 +dwarf2_start_subfile (char *filename, char *dirname, char *comp_dir)
53 {
54 + struct cleanup *back_to = make_cleanup (null_cleanup, 0);
55 +
56 + /* If we have a relative dirname, append it to comp_dir. */
57 + if (dirname != NULL && !IS_ABSOLUTE_PATH (dirname) && comp_dir != NULL)
58 + {
59 + dirname = concat (comp_dir, "/", dirname, NULL);
60 + make_cleanup (xfree, dirname);
61 + }
62 + else if (dirname == NULL)
63 + dirname = comp_dir;
64 +
65 /* If the filename isn't absolute, try to match an existing subfile
66 with the full pathname. */
67
68 @@ -6690,19 +6700,20 @@ dwarf2_start_subfile (char *filename, ch
69 {
70 struct subfile *subfile;
71 char *fullname = concat (dirname, "/", filename, (char *)NULL);
72 + make_cleanup (xfree, fullname);
73
74 for (subfile = subfiles; subfile; subfile = subfile->next)
75 {
76 if (FILENAME_CMP (subfile->name, fullname) == 0)
77 {
78 current_subfile = subfile;
79 - xfree (fullname);
80 + do_cleanups (back_to);
81 return;
82 }
83 }
84 - xfree (fullname);
85 }
86 start_subfile (filename, dirname);
87 + do_cleanups (back_to);
88 }
89
90 static void