]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix crash when section ends with a .lloc directive not followed by an insn. users/ccoutant/two-level-line-tables
authorCary Coutant <ccoutant@google.com>
Wed, 25 Mar 2015 22:27:52 +0000 (15:27 -0700)
committerCary Coutant <ccoutant@google.com>
Wed, 25 Mar 2015 22:27:52 +0000 (15:27 -0700)
gas/
* dwarf2dbg.c (emit_logicals): Handle case where e->label is NULL.

gas/dwarf2dbg.c

index dfd3d6350ed6e0b58344595b2f756c3df2911342..35f6df6bc88d81a040c9a20c874693a3827f09d6 100644 (file)
@@ -1630,25 +1630,32 @@ emit_logicals (void)
        out_opcode (DW_LNS_set_epilogue_begin);
 
       line_delta = e->loc.line - line;
-      lab = e->label;
-      frag = symbol_get_frag (lab);
-      frag_ofs = S_GET_VALUE (lab);
-
-      if (last_frag == NULL || e->seg != last_seg)
+      if (e->label == NULL)
        {
-         out_set_addr (lab);
          out_inc_line_addr (line_delta, 0);
        }
-      else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
-       out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
       else
-       relax_inc_line_addr (line_delta, lab, last_lab);
+       {
+         lab = e->label;
+         frag = symbol_get_frag (lab);
+         frag_ofs = S_GET_VALUE (lab);
 
-      line = e->loc.line;
-      last_seg = e->seg;
-      last_lab = lab;
-      last_frag = frag;
-      last_frag_ofs = frag_ofs;
+         if (last_frag == NULL || e->seg != last_seg)
+           {
+             out_set_addr (lab);
+             out_inc_line_addr (line_delta, 0);
+           }
+         else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
+           out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
+         else
+           relax_inc_line_addr (line_delta, lab, last_lab);
+
+         line = e->loc.line;
+         last_seg = e->seg;
+         last_lab = lab;
+         last_frag = frag;
+         last_frag_ofs = frag_ofs;
+       }
     }
 }