Magellan Linux

Annotation of /trunk/gdb/patches/gdb-6.3-relative-paths.patch

Parent Directory Parent Directory | Revision Log Revision Log


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

1 niro 144 diff -Nrup gdb-6.3.orig/gdb/dwarf2read.c gdb-6.3/gdb/dwarf2read.c
2     --- gdb-6.3.orig/gdb/dwarf2read.c 2004-10-15 20:41:00.000000000 -0400
3     +++ gdb-6.3/gdb/dwarf2read.c 2004-11-27 20:35:38.000000000 -0500
4     @@ -840,7 +840,7 @@ static struct line_header *(dwarf_decode
5     static void dwarf_decode_lines (struct line_header *, char *, bfd *,
6     struct dwarf2_cu *, struct partial_symtab *);
7    
8     -static void dwarf2_start_subfile (char *, char *);
9     +static void dwarf2_start_subfile (char *, char *, char *);
10    
11     static struct symbol *new_symbol (struct die_info *, struct type *,
12     struct dwarf2_cu *);
13     @@ -6456,12 +6456,10 @@ dwarf_decode_lines (struct line_header *
14     directory and file name numbers in the statement program
15     are 1-based. */
16     struct file_entry *fe = &lh->file_names[file - 1];
17     - char *dir;
18     + char *dir = NULL;
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     @@ -6561,7 +6559,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     @@ -6619,7 +6617,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     @@ -6638,8 +6637,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     @@ -6647,19 +6657,20 @@ dwarf2_start_subfile (char *filename, ch
69     {
70     struct subfile *subfile;
71     char *fullname = concat (dirname, "/", filename, 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