From: "J. Johnston" <jjohnstn@redhat.com>
To: Andrew Cagney <cagney@gnu.org>
Cc: Jason Molenda <jmolenda@apple.com>, gdb-patches@sources.redhat.com
Subject: Re: [RFA]: Fix for do_mixed_source_and_assembly in disasm.c
Date: Tue, 06 Jan 2004 19:11:00 -0000 [thread overview]
Message-ID: <3FFB086D.9020307@redhat.com> (raw)
In-Reply-To: <3FF598BA.1040504@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 2957 bytes --]
Andrew Cagney wrote:
>>> Jason Molenda wrote:
>>> Hi Jeff,
>>>
>>> On Dec 17, 2003, at 1:15 PM, Jeff Johnston wrote:
>>>
>>> There are a few bugs in do_mixed_source_and_assembly() when dealing
>>> with the ia64.
>>>
>>>
>>> I hit one of the two bugs you're fixing last week, namely the double
>>> call to close off the list/tuple. My first fix looked like yours,
>>> but I think a slight reworking of the loop is very desirable here.
>>> Right now this loop looks approximately like this:
>>>
>>>
>>> Set close_list to 1 (the list/tuple will be closed at the end of
>>> this loop)
>>>
>>> First entry of a new source line number:
>>> Start a "src_and_asm_line" tuple, print the source line.
>>> Start a "line_asm_insn" list where instructions will be emitted.
>>> If we're not at the end of the mle array, and the next mle
>>> entry's source line number is not greater than the current source
>>> line entry, DON'T close off the list (close_list = 0)
>>>
>>> Print the assembly instructions for the current address range.
>>>
>>> If close_list is 1, close the tuple/list.
>>>
>>>
>>> Which is a very convoluted way of writing a loop, and more
>>> importantly, this only works correctly for one or two assembly ranges
>>> for a single source line. If you have a third, on the 2nd iter the
>>> tuple/list are closed and then on the 3rd you close them again.
>>>
>>> Instead, this is more clear:
>>>
>>>
>>> First entry of a new source line number:
>>> Start a "src_and_asm_line" tuple, print the source line.
>>> Start a "line_asm_insn" list where instructions will be emitted.
>>>
>>> Print the assembly instructions for the current address range.
>>>
>>> If we're at the end of the mle array or the next entry in the array
>>> is a new source line, close off the list and tuple.
>>>
>>>
>>> I also took the opportunity to combine two conditional statements - I
>>> won't push hard for that part of the change, but the rest is a clear
>>> improvement IMHO.
>>>
>>> We only had this code path executed when we were using a compiler
>>> with a bug in it internally, so it's not too easy for me to
>>> reproduce/test this. I've tried to combine my patch and yours
>>> against the current FSF TOT. What do you think of my suggested
>>> additional change? Can you try it on the IA64 test case you have?
>>>
>>>
>>> Jason
>>>
>
>>
>> Works fine. I like the revision you made. I don't know if the
>> powers-that-be will review this patch before the New Year.
>
>
> Since it works for you Jeff, yes, why not (just a shame that the powers
> that didn't take a holiday didn't think to review it).
>
> Andrew
>
>
Thanks Andrew. I have checked in the accompanying modified patch. The
modification was simply to set the initial values of the cleanups to be
null_cleanup rather than NULL per the discussion we had on the other thread. As
well, I updated the copyright year.
-- Jeff J.
>
[-- Attachment #2: disasm.patch --]
[-- Type: text/plain, Size: 2320 bytes --]
Index: disasm.c
===================================================================
RCS file: /cvs/src/src/gdb/disasm.c,v
retrieving revision 1.17
diff -u -p -r1.17 disasm.c
--- disasm.c 24 Oct 2003 17:37:03 -0000 1.17
+++ disasm.c 6 Jan 2004 19:05:23 -0000
@@ -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_
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_
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_
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);
}
prev parent reply other threads:[~2004-01-06 19:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-17 21:15 Jeff Johnston
2003-12-18 22:12 ` Jason Molenda
2003-12-18 23:07 ` J. Johnston
2004-01-02 16:13 ` Andrew Cagney
2004-01-06 19:11 ` J. Johnston [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3FFB086D.9020307@redhat.com \
--to=jjohnstn@redhat.com \
--cc=cagney@gnu.org \
--cc=gdb-patches@sources.redhat.com \
--cc=jmolenda@apple.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox