On Wed, Feb 22, 2006 at 02:22:40PM -0500, [EMAIL PROTECTED] wrote: > This happens on x86-linux in gas 2.14 and 2.16, and the bug > is still in the source code in the latest CVS version. > > .file directives do not work unless they are emitted in numerical > order. For example, this fails: > > .file 2 "/something_else" > .loc 2 402 1 > .file 1 "/something" > .loc 2 402 1 > > $ as bar.s > bar.s: Assembler messages: > bar.s:4: Error: unassigned file number 2 > > > It looks like a 'get_filenum' bug. 'get_filenum' tries to correctly > handle file numbers being declared out of order, e.g. it understands > there may be "holes" in the numbering space containing NULL > filenames. But it always sets files_in_use to one beyond the latest > number it has seen, effectively forgetting about any higher-numbered > file that was already declared. > > Fortunately, the patch is trivial. > > > --- dwarf2dbg.c.orig 2006-01-11 11:16:47.000000000 -0500 > +++ dwarf2dbg.c 2006-02-22 13:38:53.000000000 -0500 > @@ -415,19 +415,20 @@ > files_allocated = i + 32; > files = (struct file_entry *) > xrealloc (files, (i + 32) * sizeof (struct file_entry)); > > memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry)); > } > > files[i].filename = num ? file : xstrdup (file); > files[i].dir = dir; > - files_in_use = i + 1; > + if (i + 1 > files_in_use) > + files_in_use = i + 1; > last_used = i; > last_used_dir_len = dir_len; > > return i; > } > > /* Handle two forms of .file directive: > - Pass .file "source.c" to s_app_file > - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
Thanks. I've applied this to mainline sources. -- Alan Modra IBM OzLabs - Linux Technology Centre _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils