--- dwarf2dbg.h.orig 2007-11-13 11:30:26.000000000 -0800 +++ dwarf2dbg.h 2007-11-13 11:30:05.000000000 -0800 @@ -79,6 +79,10 @@ /* Should be called for each code label. */ extern void dwarf2_emit_label (symbolS *); +/* True when we've seen a .loc directive recently. Used to avoid + doing work when there's nothing to do. */ +bfd_boolean dwarf2_loc_directive_seen; + /* True when we're supposed to set the basic block mark whenever a label is seen. Unless the target is doing Something Weird, just call dwarf2_emit_label. */ --- dwarf2dbg.c.orig 2007-11-13 11:31:03.000000000 -0800 +++ dwarf2dbg.c 2007-11-13 11:30:12.000000000 -0800 @@ -173,7 +173,7 @@ /* TRUE when we've seen a .loc directive recently. Used to avoid doing work when there's nothing to do. */ -static bfd_boolean loc_directive_seen; +bfd_boolean dwarf2_loc_directive_seen; /* TRUE when we're supposed to set the basic block mark whenever a label is seen. */ @@ -365,7 +365,7 @@ { struct dwarf2_line_info loc; - if (loc_directive_seen) + if (dwarf2_loc_directive_seen) { /* Use the last location established by a .loc directive, not the value returned by dwarf2_where(). That calls as_where() @@ -394,7 +394,7 @@ /* Unless we generate DWARF2 debugging information for each assembler line, we only emit one line symbol for one LOC. */ if (debug_type != DEBUG_DWARF2) - loc_directive_seen = FALSE; + dwarf2_loc_directive_seen = FALSE; current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK | DWARF2_FLAG_PROLOGUE_END @@ -421,7 +421,7 @@ else { loc = current; - loc_directive_seen = FALSE; + dwarf2_loc_directive_seen = FALSE; } loc.flags |= DWARF2_FLAG_BASIC_BLOCK; @@ -582,7 +582,7 @@ /* If we see two .loc directives in a row, force the first one to be output now. */ - if (loc_directive_seen && debug_type != DEBUG_DWARF2) + if (dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2) dwarf2_emit_insn (0); filenum = get_absolute_expression (); @@ -691,7 +691,7 @@ } demand_empty_rest_of_line (); - loc_directive_seen = TRUE; + dwarf2_loc_directive_seen = TRUE; } void