aboutsummaryrefslogtreecommitdiff
path: root/gdb/disasm.c
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2004-01-06 19:06:39 +0000
committerJeff Johnston <jjohnstn@redhat.com>2004-01-06 19:06:39 +0000
commit0127c0d31cd69e4f6676157f2872fc99b78d33cf (patch)
tree2d88ea2212b5944093116967734747104fa57783 /gdb/disasm.c
parent9b4e0f9493d2bd0227e3587eb4fc5d86814e5f0e (diff)
downloadbinutils-0127c0d31cd69e4f6676157f2872fc99b78d33cf.zip
binutils-0127c0d31cd69e4f6676157f2872fc99b78d33cf.tar.gz
binutils-0127c0d31cd69e4f6676157f2872fc99b78d33cf.tar.bz2
2004-01-06 Jeff Johnston <jjohnstn@redhat.com>
* disasm.c: Update copyright to include 2004. (do_mixed_source_and_assembly): For uiout asm list and tuple cleanups, initialize to null_cleanup instead of NULL and do so prior to loop. Only reset when we close off the tuple/list. Move check for whether to close off the asm tuple/list to after dump_insns call where it will be run on each loop iteration.
Diffstat (limited to 'gdb/disasm.c')
-rw-r--r--gdb/disasm.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 20d0ab3..3cde2ea 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -1,6 +1,6 @@
/* Disassemble support for GDB.
- Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GDB.
@@ -164,6 +164,8 @@ do_mixed_source_and_assembly (struct ui_out *uiout,
CORE_ADDR pc;
int num_displayed = 0;
struct cleanup *ui_out_chain;
+ struct cleanup *ui_out_tuple_chain = make_cleanup (null_cleanup, 0);
+ struct cleanup *ui_out_list_chain = make_cleanup (null_cleanup, 0);
mle = (struct dis_line_entry *) alloca (nlines
* sizeof (struct dis_line_entry));
@@ -221,10 +223,6 @@ do_mixed_source_and_assembly (struct ui_out *uiout,
for (i = 0; i < newlines; i++)
{
- struct cleanup *ui_out_tuple_chain = NULL;
- struct cleanup *ui_out_list_chain = NULL;
- int close_list = 1;
-
/* Print out everything from next_line to the current line. */
if (mle[i].line >= next_line)
{
@@ -275,23 +273,23 @@ do_mixed_source_and_assembly (struct ui_out *uiout,
next_line = mle[i].line + 1;
ui_out_list_chain
= make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn");
- /* Don't close the list if the lines are not in order. */
- if (i < (newlines - 1) && mle[i + 1].line <= mle[i].line)
- close_list = 0;
}
num_displayed += dump_insns (uiout, di, mle[i].start_pc, mle[i].end_pc,
how_many, stb);
- if (close_list)
+
+ /* When we've reached the end of the mle array, or we've seen the last
+ assembly range for this source line, close out the list/tuple. */
+ if (i == (newlines - 1) || mle[i + 1].line > mle[i].line)
{
do_cleanups (ui_out_list_chain);
do_cleanups (ui_out_tuple_chain);
+ ui_out_tuple_chain = make_cleanup (null_cleanup, 0);
+ ui_out_list_chain = make_cleanup (null_cleanup, 0);
ui_out_text (uiout, "\n");
- close_list = 0;
}
- if (how_many >= 0)
- if (num_displayed >= how_many)
- break;
+ if (how_many >= 0 && num_displayed >= how_many)
+ break;
}
do_cleanups (ui_out_chain);
}