Line number bug fix patch from David Mosberger.

* config/tc-ia64.c (md): Add member "loc_directive_seen".
(dot_loc): New function.
(md_pseudo_table): Add entry to map .loc to dot_loc().
(emit_one_bundle): Only call dwarf2_gen_line_info() if we have
seen a .loc directive or we're generating DWARF2 debug info for
assembly source.
This commit is contained in:
Jim Wilson 2005-01-04 05:42:42 +00:00
parent 54e7231f9e
commit 196e804018
2 changed files with 29 additions and 6 deletions

View file

@ -1,3 +1,12 @@
2005-01-03 David Mosberger <davidm@hpl.hp.com>
* config/tc-ia64.c (md): Add member "loc_directive_seen".
(dot_loc): New function.
(md_pseudo_table): Add entry to map .loc to dot_loc().
(emit_one_bundle): Only call dwarf2_gen_line_info() if we have
seen a .loc directive or we're generating DWARF2 debug info for
assembly source.
2004-12-29 Alan Modra <amodra@bigpond.net.au>
PR gas/619

View file

@ -241,7 +241,8 @@ static struct
unsigned int
end_of_insn_group : 1,
manual_bundling_on : 1,
manual_bundling_off : 1;
manual_bundling_off : 1,
loc_directive_seen : 1;
signed char user_template; /* user-selected template, if any */
unsigned char qp_regno; /* qualifying predicate */
/* This duplicates a good fraction of "struct fix" but we
@ -3041,6 +3042,17 @@ dot_radix (dummy)
}
}
/* Helper function for .loc directives. If the assembler is not generating
line number info, then we need to remember which instructions have a .loc
directive, and only call dwarf2_gen_line_info for those instructions. */
static void
dot_loc (int x)
{
CURR_SLOT.loc_directive_seen = 1;
dwarf2_directive_loc (x);
}
/* .sbss, .bss etc. are macros that expand into ".section SECNAME". */
static void
dot_special_section (which)
@ -4972,6 +4984,7 @@ const pseudo_typeS md_pseudo_table[] =
{
{ "radix", dot_radix, 0 },
{ "lcomm", s_lcomm_bytes, 1 },
{ "loc", dot_loc, 0 },
{ "bss", dot_special_section, SPECIAL_SECTION_BSS },
{ "sbss", dot_special_section, SPECIAL_SECTION_SBSS },
{ "sdata", dot_special_section, SPECIAL_SECTION_SDATA },
@ -6419,12 +6432,13 @@ emit_one_bundle ()
continue; /* try next slot */
}
{
bfd_vma addr;
if (debug_type == DEBUG_DWARF2 || md.slot[curr].loc_directive_seen)
{
bfd_vma addr = frag_now->fr_address + frag_now_fix () - 16 + i;
addr = frag_now->fr_address + frag_now_fix () - 16 + i;
dwarf2_gen_line_info (addr, &md.slot[curr].debug_line);
}
md.slot[curr].loc_directive_seen = 0;
dwarf2_gen_line_info (addr, &md.slot[curr].debug_line);
}
if (errata_nop_necessary_p (md.slot + curr, insn_unit))
as_warn (_("Additional NOP may be necessary to workaround Itanium processor A/B step errata"));