* Re: Disassemble branch delay slot instructions automatically [not found] ` <20070613165622.GA1023@caradoc.them.org> @ 2007-06-20 13:56 ` Maciej W. Rozycki 2007-06-20 14:09 ` Daniel Jacobowitz 2007-06-20 18:37 ` Eli Zaretskii 0 siblings, 2 replies; 7+ messages in thread From: Maciej W. Rozycki @ 2007-06-20 13:56 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb-patches, insight, Nigel Stephens, Maciej W. Rozycki On Wed, 13 Jun 2007, Daniel Jacobowitz wrote: > I think the patch is pretty much OK, except for the use of > TARGET_PRINT_INSN. We're trying to eliminate the gdbarch macros now. > I think the best solution would be to add the extra argument to > gdb_print_insn; it's only used here and in the TUI. And also in Insight; I have updated that too. I suppose the plan is to substitute TARGET_PRINT_INSN with gdbarch_print_insn(), but that should be done separately, so that it is not mixed with functional changes. > Why did you need the new function that modified an existing > disassemble_info, instead of using the existing one? Well, I guess Nigel could answer this question, and my feeling is it is not a particularly useful complication, but it is not relevant anymore. > This probably deserves a NEWS entry. Done. Here is my new version, which has been tested natively for mips-unknown-linux-gnu and remotely for mipsisa32-sde-elf, using mips-sim-sde32/-EB, mips-sim-sde32/-mips16/-EB, mips-sim-sde32/-EL and mips-sim-sde32/-mips16/-EL as the targets, with no regressions. gdb/: 2007-06-20 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * 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/gdbtk/: 2007-06-20 Maciej W. Rozycki <macro@mips.com> * generic/gdbtk-cmds.c (gdbtk_load_asm): Update the call to gdb_print_insn(). OK to apply? Maciej 12235.diff Index: binutils-quilt/src/gdb/printcmd.c =================================================================== --- binutils-quilt.orig/src/gdb/printcmd.c 2007-06-19 14:49:26.000000000 +0100 +++ binutils-quilt/src/gdb/printcmd.c 2007-06-19 14:53:12.000000000 +0100 @@ -43,6 +43,7 @@ #include "gdb_assert.h" #include "block.h" #include "disasm.h" +#include "dis-asm.h" #ifdef TUI #include "tui/tui.h" /* For tui_active et.al. */ @@ -70,6 +71,10 @@ static CORE_ADDR next_address; +/* Number of delay instructions following current disassembled insn. */ + +static int branch_delay_insns; + /* Last address examined. */ static CORE_ADDR last_examine_address; @@ -277,8 +282,9 @@ /* We often wrap here if there are long symbolic names. */ wrap_here (" "); - next_address = VALUE_ADDRESS (val) - + gdb_print_insn (VALUE_ADDRESS (val), stream); + next_address = (VALUE_ADDRESS (val) + + gdb_print_insn (VALUE_ADDRESS (val), stream, + &branch_delay_insns)); break; default: @@ -800,6 +806,10 @@ release_value (last_examine_value); print_formatted (last_examine_value, format, size, gdb_stdout); + + /* Display any branch delay slots following the final insn. */ + if (format == 'i' && count == 1) + count += branch_delay_insns; } printf_filtered ("\n"); gdb_flush (gdb_stdout); Index: binutils-quilt/src/gdb/disasm.c =================================================================== --- binutils-quilt.orig/src/gdb/disasm.c 2007-06-19 14:49:26.000000000 +0100 +++ binutils-quilt/src/gdb/disasm.c 2007-06-19 14:53:12.000000000 +0100 @@ -387,11 +387,24 @@ } /* 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 TARGET_PRINT_INSN (memaddr, &di); + struct disassemble_info di; + int length; + + di = gdb_disassemble_info (current_gdbarch, stream); + length = TARGET_PRINT_INSN (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; } Index: binutils-quilt/src/gdb/disasm.h =================================================================== --- binutils-quilt.orig/src/gdb/disasm.h 2007-06-19 14:49:26.000000000 +0100 +++ binutils-quilt/src/gdb/disasm.h 2007-06-19 14:53:12.000000000 +0100 @@ -30,9 +30,12 @@ int mixed_source_and_assembly, int how_many, CORE_ADDR low, CORE_ADDR high); -/* Print the instruction at address MEMADDR in debugged memory, on - STREAM. Returns length of the instruction, in bytes. */ +/* Print the instruction at address MEMADDR in debugged memory, + on STREAM. Returns the length of the instruction, in bytes, + and, if requested, the number of branch delay slot instructions. */ -extern int gdb_print_insn (CORE_ADDR memaddr, struct ui_file *stream); +extern int gdb_print_insn (CORE_ADDR memaddr, + struct ui_file *stream, + int *branch_delay_insns); #endif Index: binutils-quilt/src/gdb/tui/tui-disasm.c =================================================================== --- binutils-quilt.orig/src/gdb/tui/tui-disasm.c 2007-06-19 14:49:26.000000000 +0100 +++ binutils-quilt/src/gdb/tui/tui-disasm.c 2007-06-19 14:53:12.000000000 +0100 @@ -72,7 +72,7 @@ ui_file_rewind (gdb_dis_out); - pc = pc + gdb_print_insn (pc, gdb_dis_out); + pc = pc + gdb_print_insn (pc, gdb_dis_out, NULL); asm_lines->insn = xstrdup (tui_file_get_strbuf (gdb_dis_out)); Index: binutils-quilt/src/gdb/gdbtk/generic/gdbtk-cmds.c =================================================================== --- binutils-quilt.orig/src/gdb/gdbtk/generic/gdbtk-cmds.c 2007-06-19 14:49:26.000000000 +0100 +++ binutils-quilt/src/gdb/gdbtk/generic/gdbtk-cmds.c 2007-06-19 14:53:44.000000000 +0100 @@ -1895,7 +1895,7 @@ result_ptr->obj_ptr = client_data->result_obj[2]; /* FIXME: cagney/2003-09-08: This should use gdb_disassembly. */ - insn = gdb_print_insn (pc, gdb_stdout); + insn = gdb_print_insn (pc, gdb_stdout, NULL); gdb_flush (gdb_stdout); client_data->widget_line_no++; Index: binutils-quilt/src/gdb/NEWS =================================================================== --- binutils-quilt.orig/src/gdb/NEWS 2007-06-19 12:24:32.000000000 +0100 +++ binutils-quilt/src/gdb/NEWS 2007-06-19 15:16:19.000000000 +0100 @@ -41,6 +41,9 @@ layout. It also supports a TextSeg= and DataSeg= response when only segment base addresses (rather than offsets) are available. +* The /i format now outputs any trailing branch delay slot instructions +immediately following the last instruction within the count specified. + * New commands set remoteflow ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Disassemble branch delay slot instructions automatically 2007-06-20 13:56 ` Disassemble branch delay slot instructions automatically Maciej W. Rozycki @ 2007-06-20 14:09 ` Daniel Jacobowitz 2007-06-20 15:25 ` Maciej W. Rozycki 2007-06-20 18:37 ` Eli Zaretskii 1 sibling, 1 reply; 7+ messages in thread From: Daniel Jacobowitz @ 2007-06-20 14:09 UTC (permalink / raw) To: Maciej W. Rozycki Cc: gdb-patches, insight, Nigel Stephens, Maciej W. Rozycki, Eli Zaretskii On Wed, Jun 20, 2007 at 02:56:20PM +0100, Maciej W. Rozycki wrote: > On Wed, 13 Jun 2007, Daniel Jacobowitz wrote: > > > I think the patch is pretty much OK, except for the use of > > TARGET_PRINT_INSN. We're trying to eliminate the gdbarch macros now. > > I think the best solution would be to add the extra argument to > > gdb_print_insn; it's only used here and in the TUI. > > And also in Insight; I have updated that too. I suppose the plan is to > substitute TARGET_PRINT_INSN with gdbarch_print_insn(), but that should be > done separately, so that it is not mixed with functional changes. In fact, it happened yesterday. 2007-06-19 Markus Deuling <deuling@de.ibm.com> * gdbarch.sh (TARGET_PRINT_INSN): Replace by gdbarch_print_insn. * disasm.c (dump_insns, gdb_print_insn): Likewise. * gdbarch.c, gdbarch.h: Regenerate. So I imagine you need to refresh this patch. I was actually suggesting you add the disassemble_info argument to gdb_print_insn, not the number of delay slots; but this way seems fine too. This version is OK, if Eli likes the NEWS entry and you add a Makefile.in update (since you added #include's). Eli, is the below OK? > Index: binutils-quilt/src/gdb/NEWS > =================================================================== > --- binutils-quilt.orig/src/gdb/NEWS 2007-06-19 12:24:32.000000000 +0100 > +++ binutils-quilt/src/gdb/NEWS 2007-06-19 15:16:19.000000000 +0100 > @@ -41,6 +41,9 @@ > layout. It also supports a TextSeg= and DataSeg= response when only > segment base addresses (rather than offsets) are available. > > +* The /i format now outputs any trailing branch delay slot instructions > +immediately following the last instruction within the count specified. > + > * New commands > > set remoteflow > -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Disassemble branch delay slot instructions automatically 2007-06-20 14:09 ` Daniel Jacobowitz @ 2007-06-20 15:25 ` Maciej W. Rozycki 2007-06-20 16:16 ` Keith Seitz 0 siblings, 1 reply; 7+ messages in thread From: Maciej W. Rozycki @ 2007-06-20 15:25 UTC (permalink / raw) To: Daniel Jacobowitz Cc: gdb-patches, insight, Nigel Stephens, Maciej W. Rozycki, Eli Zaretskii On Wed, 20 Jun 2007, Daniel Jacobowitz wrote: > In fact, it happened yesterday. Well, it seems to be always the case that something changes under your feet during a test cycle. ;-) > So I imagine you need to refresh this patch. I was actually > suggesting you add the disassemble_info argument to gdb_print_insn, > not the number of delay slots; but this way seems fine too. I have thought of it at once, but then concluded copying the whole structure again for its just one member would not make much sense and would effectively make gdb_print_insn() of questionable use -- the three callers could use an explicit sequence of gdb_disassemble_info(); gdbarch_print_insn() instead. > This version is OK, if Eli likes the NEWS entry and you add a > Makefile.in update (since you added #include's). Eli, is the below > OK? Sigh... -- I always seem to forget about this bit (even though it has bitten me a couple of times already). But wait! -- it is actually not needed anymore now that "struct disassemble_info" is not used here. For the record -- here's my current version that I am going to commit except for possible NEWS entry adjustments. gdb/: 2007-06-20 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * 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/gdbtk/: 2007-06-20 Maciej W. Rozycki <macro@mips.com> * generic/gdbtk-cmds.c (gdbtk_load_asm): Update the call to gdb_print_insn(). Maciej 12235.diff Index: binutils-quilt/src/gdb/printcmd.c =================================================================== --- binutils-quilt.orig/src/gdb/printcmd.c 2007-06-20 15:03:30.000000000 +0100 +++ binutils-quilt/src/gdb/printcmd.c 2007-06-20 15:45:33.000000000 +0100 @@ -70,6 +70,10 @@ static CORE_ADDR next_address; +/* Number of delay instructions following current disassembled insn. */ + +static int branch_delay_insns; + /* Last address examined. */ static CORE_ADDR last_examine_address; @@ -277,8 +281,9 @@ /* We often wrap here if there are long symbolic names. */ wrap_here (" "); - next_address = VALUE_ADDRESS (val) - + gdb_print_insn (VALUE_ADDRESS (val), stream); + next_address = (VALUE_ADDRESS (val) + + gdb_print_insn (VALUE_ADDRESS (val), stream, + &branch_delay_insns)); break; default: @@ -800,6 +805,10 @@ release_value (last_examine_value); print_formatted (last_examine_value, format, size, gdb_stdout); + + /* Display any branch delay slots following the final insn. */ + if (format == 'i' && count == 1) + count += branch_delay_insns; } printf_filtered ("\n"); gdb_flush (gdb_stdout); Index: binutils-quilt/src/gdb/disasm.c =================================================================== --- binutils-quilt.orig/src/gdb/disasm.c 2007-06-20 15:03:30.000000000 +0100 +++ binutils-quilt/src/gdb/disasm.c 2007-06-20 15:42:24.000000000 +0100 @@ -387,11 +387,24 @@ } /* 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; } Index: binutils-quilt/src/gdb/disasm.h =================================================================== --- binutils-quilt.orig/src/gdb/disasm.h 2007-06-20 15:03:30.000000000 +0100 +++ binutils-quilt/src/gdb/disasm.h 2007-06-20 15:42:24.000000000 +0100 @@ -30,9 +30,12 @@ int mixed_source_and_assembly, int how_many, CORE_ADDR low, CORE_ADDR high); -/* Print the instruction at address MEMADDR in debugged memory, on - STREAM. Returns length of the instruction, in bytes. */ +/* Print the instruction at address MEMADDR in debugged memory, + on STREAM. Returns the length of the instruction, in bytes, + and, if requested, the number of branch delay slot instructions. */ -extern int gdb_print_insn (CORE_ADDR memaddr, struct ui_file *stream); +extern int gdb_print_insn (CORE_ADDR memaddr, + struct ui_file *stream, + int *branch_delay_insns); #endif Index: binutils-quilt/src/gdb/tui/tui-disasm.c =================================================================== --- binutils-quilt.orig/src/gdb/tui/tui-disasm.c 2007-06-20 15:03:30.000000000 +0100 +++ binutils-quilt/src/gdb/tui/tui-disasm.c 2007-06-20 15:42:24.000000000 +0100 @@ -72,7 +72,7 @@ ui_file_rewind (gdb_dis_out); - pc = pc + gdb_print_insn (pc, gdb_dis_out); + pc = pc + gdb_print_insn (pc, gdb_dis_out, NULL); asm_lines->insn = xstrdup (tui_file_get_strbuf (gdb_dis_out)); Index: binutils-quilt/src/gdb/gdbtk/generic/gdbtk-cmds.c =================================================================== --- binutils-quilt.orig/src/gdb/gdbtk/generic/gdbtk-cmds.c 2007-06-20 15:03:30.000000000 +0100 +++ binutils-quilt/src/gdb/gdbtk/generic/gdbtk-cmds.c 2007-06-20 15:42:24.000000000 +0100 @@ -1895,7 +1895,7 @@ result_ptr->obj_ptr = client_data->result_obj[2]; /* FIXME: cagney/2003-09-08: This should use gdb_disassembly. */ - insn = gdb_print_insn (pc, gdb_stdout); + insn = gdb_print_insn (pc, gdb_stdout, NULL); gdb_flush (gdb_stdout); client_data->widget_line_no++; Index: binutils-quilt/src/gdb/NEWS =================================================================== --- binutils-quilt.orig/src/gdb/NEWS 2007-06-20 15:03:30.000000000 +0100 +++ binutils-quilt/src/gdb/NEWS 2007-06-20 15:42:24.000000000 +0100 @@ -41,6 +41,9 @@ layout. It also supports a TextSeg= and DataSeg= response when only segment base addresses (rather than offsets) are available. +* The /i format now outputs any trailing branch delay slot instructions +immediately following the last instruction within the count specified. + * New commands set remoteflow ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Disassemble branch delay slot instructions automatically 2007-06-20 15:25 ` Maciej W. Rozycki @ 2007-06-20 16:16 ` Keith Seitz 0 siblings, 0 replies; 7+ messages in thread From: Keith Seitz @ 2007-06-20 16:16 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: insight, Maciej W. Rozycki Maciej W. Rozycki wrote: > gdb/gdbtk/: > 2007-06-20 Maciej W. Rozycki <macro@mips.com> > > * generic/gdbtk-cmds.c (gdbtk_load_asm): Update the call to > gdb_print_insn(). This part is approved, too, of course. Thank you for the patch. Keith ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Disassemble branch delay slot instructions automatically 2007-06-20 13:56 ` Disassemble branch delay slot instructions automatically Maciej W. Rozycki 2007-06-20 14:09 ` Daniel Jacobowitz @ 2007-06-20 18:37 ` Eli Zaretskii 2007-06-21 15:19 ` Maciej W. Rozycki 1 sibling, 1 reply; 7+ messages in thread From: Eli Zaretskii @ 2007-06-20 18:37 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: drow, gdb-patches, insight, nigel, macro > Date: Wed, 20 Jun 2007 14:56:20 +0100 (BST) > From: "Maciej W. Rozycki" <macro@mips.com> > cc: gdb-patches@sourceware.org, insight@sourceware.org, Nigel Stephens <nigel@mips.com>, "Maciej W. Rozycki" <macro@linux-mips.org> > > Index: binutils-quilt/src/gdb/NEWS > =================================================================== > --- binutils-quilt.orig/src/gdb/NEWS 2007-06-19 12:24:32.000000000 +0100 > +++ binutils-quilt/src/gdb/NEWS 2007-06-19 15:16:19.000000000 +0100 > @@ -41,6 +41,9 @@ > layout. It also supports a TextSeg= and DataSeg= response when only > segment base addresses (rather than offsets) are available. > > +* The /i format now outputs any trailing branch delay slot instructions > +immediately following the last instruction within the count specified. > + This is fine, but I think we should also document this in the user manual. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Disassemble branch delay slot instructions automatically 2007-06-20 18:37 ` Eli Zaretskii @ 2007-06-21 15:19 ` Maciej W. Rozycki 2007-06-21 19:01 ` Eli Zaretskii 0 siblings, 1 reply; 7+ messages in thread From: Maciej W. Rozycki @ 2007-06-21 15:19 UTC (permalink / raw) To: Eli Zaretskii; +Cc: drow, gdb-patches, insight, nigel, Maciej W. Rozycki On Wed, 20 Jun 2007, Eli Zaretskii wrote: > This is fine, but I think we should also document this in the user > manual. Good point -- I hope my note is clear enough -- see below. gdb/: 2007-06-21 Nigel Stephens <nigel@mips.com> Maciej W. Rozycki <macro@mips.com> * 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/: 2007-06-21 Maciej W. Rozycki <macro@mips.com> * gdb.texinfo (Examining Memory): Document the new behaviour. gdb/gdbtk/: 2007-06-21 Maciej W. Rozycki <macro@mips.com> * generic/gdbtk-cmds.c (gdbtk_load_asm): Update the call to gdb_print_insn(). I have checked it in. Maciej 12235.diff Index: binutils-quilt/src/gdb/printcmd.c =================================================================== --- binutils-quilt.orig/src/gdb/printcmd.c 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/printcmd.c 2007-06-21 14:10:21.000000000 +0100 @@ -70,6 +70,10 @@ static CORE_ADDR next_address; +/* Number of delay instructions following current disassembled insn. */ + +static int branch_delay_insns; + /* Last address examined. */ static CORE_ADDR last_examine_address; @@ -277,8 +281,9 @@ /* We often wrap here if there are long symbolic names. */ wrap_here (" "); - next_address = VALUE_ADDRESS (val) - + gdb_print_insn (VALUE_ADDRESS (val), stream); + next_address = (VALUE_ADDRESS (val) + + gdb_print_insn (VALUE_ADDRESS (val), stream, + &branch_delay_insns)); break; default: @@ -800,6 +805,10 @@ release_value (last_examine_value); print_formatted (last_examine_value, format, size, gdb_stdout); + + /* Display any branch delay slots following the final insn. */ + if (format == 'i' && count == 1) + count += branch_delay_insns; } printf_filtered ("\n"); gdb_flush (gdb_stdout); Index: binutils-quilt/src/gdb/disasm.c =================================================================== --- binutils-quilt.orig/src/gdb/disasm.c 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/disasm.c 2007-06-21 14:10:21.000000000 +0100 @@ -387,11 +387,24 @@ } /* 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; } Index: binutils-quilt/src/gdb/disasm.h =================================================================== --- binutils-quilt.orig/src/gdb/disasm.h 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/disasm.h 2007-06-21 14:10:21.000000000 +0100 @@ -30,9 +30,12 @@ int mixed_source_and_assembly, int how_many, CORE_ADDR low, CORE_ADDR high); -/* Print the instruction at address MEMADDR in debugged memory, on - STREAM. Returns length of the instruction, in bytes. */ +/* Print the instruction at address MEMADDR in debugged memory, + on STREAM. Returns the length of the instruction, in bytes, + and, if requested, the number of branch delay slot instructions. */ -extern int gdb_print_insn (CORE_ADDR memaddr, struct ui_file *stream); +extern int gdb_print_insn (CORE_ADDR memaddr, + struct ui_file *stream, + int *branch_delay_insns); #endif Index: binutils-quilt/src/gdb/tui/tui-disasm.c =================================================================== --- binutils-quilt.orig/src/gdb/tui/tui-disasm.c 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/tui/tui-disasm.c 2007-06-21 14:10:21.000000000 +0100 @@ -72,7 +72,7 @@ ui_file_rewind (gdb_dis_out); - pc = pc + gdb_print_insn (pc, gdb_dis_out); + pc = pc + gdb_print_insn (pc, gdb_dis_out, NULL); asm_lines->insn = xstrdup (tui_file_get_strbuf (gdb_dis_out)); Index: binutils-quilt/src/gdb/gdbtk/generic/gdbtk-cmds.c =================================================================== --- binutils-quilt.orig/src/gdb/gdbtk/generic/gdbtk-cmds.c 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/gdbtk/generic/gdbtk-cmds.c 2007-06-21 14:10:21.000000000 +0100 @@ -1895,7 +1895,7 @@ result_ptr->obj_ptr = client_data->result_obj[2]; /* FIXME: cagney/2003-09-08: This should use gdb_disassembly. */ - insn = gdb_print_insn (pc, gdb_stdout); + insn = gdb_print_insn (pc, gdb_stdout, NULL); gdb_flush (gdb_stdout); client_data->widget_line_no++; Index: binutils-quilt/src/gdb/NEWS =================================================================== --- binutils-quilt.orig/src/gdb/NEWS 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/NEWS 2007-06-21 14:10:21.000000000 +0100 @@ -41,6 +41,9 @@ layout. It also supports a TextSeg= and DataSeg= response when only segment base addresses (rather than offsets) are available. +* The /i format now outputs any trailing branch delay slot instructions +immediately following the last instruction within the count specified. + * New commands set remoteflow Index: binutils-quilt/src/gdb/doc/gdb.texinfo =================================================================== --- binutils-quilt.orig/src/gdb/doc/gdb.texinfo 2007-06-21 13:39:03.000000000 +0100 +++ binutils-quilt/src/gdb/doc/gdb.texinfo 2007-06-21 14:19:07.000000000 +0100 @@ -5861,9 +5861,12 @@ Even though the unit size @var{u} is ignored for the formats @samp{s} and @samp{i}, you might still want to use a count @var{n}; for example, @samp{3i} specifies that you want to see three machine instructions, -including any operands. The command @code{disassemble} gives an -alternative way of inspecting machine instructions; see @ref{Machine -Code,,Source and Machine Code}. +including any operands. For convenience, especially when used with +the @code{display} command, the @samp{i} format also prints branch delay +slot instructions, if any, beyond the count specified, which immediately +follow the last instruction that is within the count. The command +@code{disassemble} gives an alternative way of inspecting machine +instructions; see @ref{Machine Code,,Source and Machine Code}. All the defaults for the arguments to @code{x} are designed to make it easy to continue scanning memory with minimal specifications each time ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Disassemble branch delay slot instructions automatically 2007-06-21 15:19 ` Maciej W. Rozycki @ 2007-06-21 19:01 ` Eli Zaretskii 0 siblings, 0 replies; 7+ messages in thread From: Eli Zaretskii @ 2007-06-21 19:01 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: drow, gdb-patches, insight, nigel, macro > Date: Thu, 21 Jun 2007 16:19:03 +0100 (BST) > From: "Maciej W. Rozycki" <macro@mips.com> > cc: drow@false.org, gdb-patches@sourceware.org, insight@sourceware.org, > nigel@mips.com, "Maciej W. Rozycki" <macro@linux-mips.org> > > On Wed, 20 Jun 2007, Eli Zaretskii wrote: > > > This is fine, but I think we should also document this in the user > > manual. > > Good point -- I hope my note is clear enough -- see below. Your patch for the manual is fine with me. Thanks. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-06-21 19:01 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <Pine.LNX.4.61.0705151913050.31736@perivale.mips.com> [not found] ` <20070516153242.GA8062@caradoc.them.org> [not found] ` <Pine.LNX.4.61.0705181625420.28428@perivale.mips.com> [not found] ` <20070613165622.GA1023@caradoc.them.org> 2007-06-20 13:56 ` Disassemble branch delay slot instructions automatically Maciej W. Rozycki 2007-06-20 14:09 ` Daniel Jacobowitz 2007-06-20 15:25 ` Maciej W. Rozycki 2007-06-20 16:16 ` Keith Seitz 2007-06-20 18:37 ` Eli Zaretskii 2007-06-21 15:19 ` Maciej W. Rozycki 2007-06-21 19:01 ` Eli Zaretskii
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).