gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / disasm.c
index 7dfbd2fb472101e0243607550c3f089a56b32374..143ba2f59b9534b7f0faad25aa52c291aa4b64f7 100644 (file)
@@ -376,6 +376,12 @@ do_mixed_source_and_assembly_deprecated
       if (le[i].line == le[i + 1].line && le[i].pc == le[i + 1].pc)
        continue;               /* Ignore duplicates.  */
 
+      /* Ignore non-statement line table entries.  This means we print the
+        source line at the place where GDB would insert a breakpoint for
+        that line, which seems more intuitive.  */
+      if (le[i].is_stmt == 0)
+       continue;
+
       /* Skip any end-of-function markers.  */
       if (le[i].line == 0)
        continue;
@@ -781,6 +787,11 @@ gdb_disassembler::gdb_disassembler (struct gdbarch *gdbarch,
   disassemble_init_for_target (&m_di);
 }
 
+gdb_disassembler::~gdb_disassembler ()
+{
+  disassemble_free_target (&m_di);
+}
+
 int
 gdb_disassembler::print_insn (CORE_ADDR memaddr,
                              int *branch_delay_insns)
@@ -908,7 +919,9 @@ gdb_buffered_insn_length (struct gdbarch *gdbarch,
   gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr,
                                     &disassembler_options_holder);
 
-  return gdbarch_print_insn (gdbarch, addr, &di);
+  int result = gdbarch_print_insn (gdbarch, addr, &di);
+  disassemble_free_target (&di);
+  return result;
 }
 
 char *
This page took 0.025165 seconds and 4 git commands to generate.