summaryrefslogtreecommitdiff
path: root/gdb/disasm.c
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2007-06-21 15:18:51 +0000
committerMaciej W. Rozycki <macro@linux-mips.org>2007-06-21 15:18:51 +0000
commita131cc65aba4bc97c6da3ae6e253678f975feef2 (patch)
tree809dcfb39f3b60191abe35f4848cb53fb3c21b02 /gdb/disasm.c
parentb28da0ad5f4461c8cd028be8183e3fb489a3cb1f (diff)
downloadgdb-a131cc65aba4bc97c6da3ae6e253678f975feef2.tar.gz
gdb/:
* disasm.c (gdb_print_insn): Return the number of branch delay slot instructions too. * disasm.h (gdb_print_insn): Update prototype. * printcmd.c (branch_delay_insns): New variable to record the number of delay slot instructions after disassembling a branch. (print_formatted): Record the number of branch delay slot instructions. (do_examine): When disassembling, if the last instruction disassembled has any branch delay slots, then bump the count so that they get disassembled too. * tui/tui-disasm.c (tui_disassemble): Update the call to gdb_print_insn(). * NEWS: Document the new behaviour. gdb/doc/: * gdb.texinfo (Examining Memory): Document the new behaviour. gdb/gdbtk/: * generic/gdbtk-cmds.c (gdbtk_load_asm): Update the call to gdb_print_insn().
Diffstat (limited to 'gdb/disasm.c')
-rw-r--r--gdb/disasm.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 168d7ee04a1..ed885c6a5b4 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -387,11 +387,24 @@ gdb_disassembly (struct ui_out *uiout,
}
/* Print the instruction at address MEMADDR in debugged memory,
- on STREAM. Returns length of the instruction, in bytes. */
+ on STREAM. Returns the length of the instruction, in bytes,
+ and, if requested, the number of branch delay slot instructions. */
int
-gdb_print_insn (CORE_ADDR memaddr, struct ui_file *stream)
+gdb_print_insn (CORE_ADDR memaddr, struct ui_file *stream,
+ int *branch_delay_insns)
{
- struct disassemble_info di = gdb_disassemble_info (current_gdbarch, stream);
- return gdbarch_print_insn (current_gdbarch, memaddr, &di);
+ struct disassemble_info di;
+ int length;
+
+ di = gdb_disassemble_info (current_gdbarch, stream);
+ length = gdbarch_print_insn (current_gdbarch, memaddr, &di);
+ if (branch_delay_insns)
+ {
+ if (di.insn_info_valid)
+ *branch_delay_insns = di.branch_delay_insns;
+ else
+ *branch_delay_insns = 0;
+ }
+ return length;
}