Applied patch from Jim Wilson to fix several bugs in line table generation.

This commit is contained in:
Nick Clifton 1999-08-26 11:11:43 +00:00
parent 75d74c4827
commit e1c05f12ca
2 changed files with 19 additions and 5 deletions

View File

@ -1,3 +1,11 @@
1999-08-26 Jim Wilson <wilson@cygnus.com>
* dwarf2dbg.c (out_end_sequence): Correct comments. Set last to
ls.last_filename if last is less than zero. Set ls.last_filename
when allocating new entry.
(dwarf2_gen_line_info): Save seg and subseg info before subseg_new
call.
1999-08-20 Alan Modra <alan@spri.levels.unisa.edu.au> 1999-08-20 Alan Modra <alan@spri.levels.unisa.edu.au>
* config/tc-i386.c (i386_index_check): Fix the displacement size * config/tc-i386.c (i386_index_check): Fix the displacement size

View File

@ -359,7 +359,7 @@ out_end_sequence ()
/* Look up a filenumber either by filename or by filenumber. If both /* Look up a filenumber either by filename or by filenumber. If both
a filenumber and a filename are specified, lookup by filename takes a filenumber and a filename are specified, lookup by filename takes
precedence. If the filename cannot be found, it is added to the precedence. If the filename cannot be found, it is added to the
filetable the filenumber for the new entry is returned. */ filetable and the filenumber for the new entry is returned. */
static int static int
get_filenum (filenum, file) get_filenum (filenum, file)
int filenum; int filenum;
@ -368,10 +368,12 @@ get_filenum (filenum, file)
int i, last = filenum - 1; int i, last = filenum - 1;
char char0 = file[0]; char char0 = file[0];
if (last >= ls.num_filenames) /* If filenum is out of range of the filename table, then try using the
table entry returned from the previous call. */
if (last >= ls.num_filenames || last < 0)
last = ls.last_filename; last = ls.last_filename;
/* do a quick check against the previously used filename: */ /* Do a quick check against the specified or previously used filenum. */
if (ls.num_filenames > 0 && ls.file[last].name[0] == char0 if (ls.num_filenames > 0 && ls.file[last].name[0] == char0
&& strcmp (ls.file[last].name + 1, file + 1) == 0) && strcmp (ls.file[last].name + 1, file + 1) == 0)
return last + 1; return last + 1;
@ -395,6 +397,7 @@ get_filenum (filenum, file)
} }
ls.file[ls.num_filenames].dir = 0; ls.file[ls.num_filenames].dir = 0;
ls.file[ls.num_filenames].name = file; ls.file[ls.num_filenames].name = file;
ls.last_filename = ls.num_filenames;
return ++ls.num_filenames; return ++ls.num_filenames;
} }
@ -425,6 +428,11 @@ dwarf2_gen_line_info (addr, l)
else else
return; /* no filename, no filnum => no play */ return; /* no filename, no filnum => no play */
/* Must save these before the subseg_new call, as that call will change
them. */
saved_seg = now_seg;
saved_subseg = now_subseg;
if (!ls.line_seg) if (!ls.line_seg)
{ {
#ifdef BFD_ASSEMBLER #ifdef BFD_ASSEMBLER
@ -445,8 +453,6 @@ dwarf2_gen_line_info (addr, l)
#endif #endif
} }
saved_seg = now_seg;
saved_subseg = now_subseg;
subseg_set (ls.line_seg, DL_BODY); subseg_set (ls.line_seg, DL_BODY);
if (ls.text_seg != saved_seg || ls.text_subseg != saved_subseg) if (ls.text_seg != saved_seg || ls.text_subseg != saved_subseg)