From: Pedro Alves <palves@redhat.com>
To: markus.t.metzger@intel.com
Cc: gdb-patches@sourceware.org, markus.t.metzger@gmail.com,
jan.kratochvil@redhat.com, palves@redhat.com,
tromey@redhat.com, kettenis@gnu.org
Subject: Re: [patch v4 01/13] disas: add precise instructions flag
Date: Tue, 27 Nov 2012 16:49:00 -0000 [thread overview]
Message-ID: <50B4EF0E.8080102@redhat.com> (raw)
In-Reply-To: <1354013351-14791-2-git-send-email-markus.t.metzger@intel.com>
On 11/27/2012 10:48 AM, markus.t.metzger@intel.com wrote:
> From: Markus Metzger <markus.t.metzger@intel.com>
>
> When disassembling an address range with interleaved sources,
What you mean by interleaved? "disasm /m" ?
> the addresses that
> are being disassembled may not exactly match the specified range.
Is this another symptom of the issue that "disasm /m" sorts by
line number, rather than the much more reasonable sort-by-address,
which is IIRC what objdump does too?
> Addresses may be:
> - added after the specified range
> - omitted at the beginning of the specified range
>
> Add a new disassembly flag that fixes the above two cases.
It's much easier to evaluate such patches if we're shown examples of the
behavior you don't want, and of what the patch enables.
> 2012-11-27 Markus Metzger <markus.t.metzger@intel.com>
>
> * disasm.h: Add new flag DISASSEMBLY_PRECISE_INSN.
> * disasm.c (do_mixed_source_and_assembly): Adjust mle boundaries.
>
>
> ---
> gdb/disasm.c | 26 ++++++++++++++++++++++----
> gdb/disasm.h | 9 +++++----
> 2 files changed, 27 insertions(+), 8 deletions(-)
>
> diff --git a/gdb/disasm.c b/gdb/disasm.c
> index 25d87d7..2120add 100644
> --- a/gdb/disasm.c
> +++ b/gdb/disasm.c
> @@ -221,13 +221,22 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch, struct ui_out *uiout,
>
> /* First, skip all the preceding functions. */
>
> - for (i = 0; i < nlines - 1 && le[i].pc < low; i++);
> + /* If we want precise instructions, we only skip the line entries for which
> + the pc range between this and the next entry precedes the requested
> + instruction range. */
> + if (flags & DISASSEMBLY_PRECISE_INSN)
> + for (i = 0; i < nlines - 2 && le[i + 1].pc <= low; i++);
> + else
> + for (i = 0; i < nlines - 1 && le[i].pc < low; i++);
>
> /* Now, copy all entries before the end of this function. */
>
> for (; i < nlines - 1 && le[i].pc < high; i++)
> {
> - if (le[i].line == le[i + 1].line && le[i].pc == le[i + 1].pc)
> + CORE_ADDR start = le[i].pc;
> + CORE_ADDR end = le[i + 1].pc;
> +
> + if (le[i].line == le[i + 1].line && start == end)
> continue; /* Ignore duplicates. */
>
> /* Skip any end-of-function markers. */
> @@ -237,8 +246,17 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch, struct ui_out *uiout,
> mle[newlines].line = le[i].line;
> if (le[i].line > le[i + 1].line)
> out_of_order = 1;
> - mle[newlines].start_pc = le[i].pc;
> - mle[newlines].end_pc = le[i + 1].pc;
> +
> + /* If we want precise instructions, adjust the line ranges to only contain
> + instructions in the requested range. */
> + if (flags & DISASSEMBLY_PRECISE_INSN)
> + {
> + end = min (end, high);
> + start = max (start, low);
> + }
> +
> + mle[newlines].start_pc = start;
> + mle[newlines].end_pc = end;
> newlines++;
> }
>
> diff --git a/gdb/disasm.h b/gdb/disasm.h
> index a254642..a033b72 100644
> --- a/gdb/disasm.h
> +++ b/gdb/disasm.h
> @@ -19,10 +19,11 @@
> #ifndef DISASM_H
> #define DISASM_H
>
> -#define DISASSEMBLY_SOURCE (0x1 << 0)
> -#define DISASSEMBLY_RAW_INSN (0x1 << 1)
> -#define DISASSEMBLY_OMIT_FNAME (0x1 << 2)
> -#define DISASSEMBLY_FILENAME (0x1 << 3)
> +#define DISASSEMBLY_SOURCE (0x1 << 0)
> +#define DISASSEMBLY_RAW_INSN (0x1 << 1)
> +#define DISASSEMBLY_OMIT_FNAME (0x1 << 2)
> +#define DISASSEMBLY_FILENAME (0x1 << 3)
> +#define DISASSEMBLY_PRECISE_INSN (0x1 << 4)
>
> struct ui_out;
> struct ui_file;
>
--
Pedro Alves
next prev parent reply other threads:[~2012-11-27 16:49 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-27 10:50 [patch v4 00/13] branch tracing support for Atom markus.t.metzger
2012-11-27 10:49 ` [patch v4 01/13] disas: add precise instructions flag markus.t.metzger
2012-11-27 16:49 ` Pedro Alves [this message]
2012-11-27 16:52 ` Jan Kratochvil
2012-11-27 16:56 ` Pedro Alves
2012-11-27 17:26 ` Metzger, Markus T
2012-11-27 17:33 ` Pedro Alves
2012-11-28 14:44 ` Metzger, Markus T
2012-11-27 10:49 ` [patch v4 03/13] cli, btrace: add btrace cli markus.t.metzger
2012-11-27 21:53 ` Tom Tromey
2012-11-30 15:09 ` Metzger, Markus T
2012-11-30 15:16 ` Jan Kratochvil
2012-11-30 15:23 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 08/13] remote, btrace: add branch trace remote ops markus.t.metzger
2012-11-28 19:23 ` Pedro Alves
2012-12-04 12:47 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 06/13] linux, i386, amd64: enable btrace for 32bit and 64bit linux native markus.t.metzger
2012-11-28 18:40 ` Pedro Alves
2012-12-03 16:24 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 13/13] btrace, x86: restrict to Atom markus.t.metzger
2012-11-27 11:19 ` Mark Kettenis
2012-11-27 11:49 ` Metzger, Markus T
2012-11-27 14:42 ` Mark Kettenis
2012-11-27 15:14 ` Metzger, Markus T
2012-11-27 15:32 ` Pedro Alves
2012-11-27 13:05 ` Jan Kratochvil
2012-11-27 14:04 ` Metzger, Markus T
2012-11-27 14:29 ` Jan Kratochvil
2012-11-27 15:14 ` Metzger, Markus T
2012-11-27 15:50 ` Pedro Alves
2012-11-27 15:54 ` Metzger, Markus T
2012-12-06 10:15 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 11/13] test, btrace: add branch tracing tests markus.t.metzger
2012-11-27 10:50 ` [patch v4 09/13] gdbserver, btrace: add generic btrace support markus.t.metzger
2012-11-28 20:32 ` Pedro Alves
2012-12-04 14:50 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 05/13] linux, btrace: perf_event based branch tracing markus.t.metzger
2012-11-28 17:31 ` Pedro Alves
2012-12-03 14:38 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 10/13] gdbserver, linux, btrace: add btrace support for linux-low markus.t.metzger
2012-11-28 20:44 ` Pedro Alves
2012-12-05 9:27 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 02/13] thread, btrace: add generic branch trace support markus.t.metzger
2012-11-27 18:32 ` Pedro Alves
2012-11-27 18:38 ` Pedro Alves
2012-11-28 0:41 ` Pedro Alves
2012-11-29 16:39 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 12/13] test, btrace: more branch tracing tests markus.t.metzger
2012-11-27 10:50 ` [patch v4 07/13] xml, btrace: define btrace xml document style markus.t.metzger
2012-11-28 18:53 ` Pedro Alves
2012-12-04 10:35 ` Metzger, Markus T
2012-11-27 10:50 ` [patch v4 04/13] configure: add check for perf_event header markus.t.metzger
2012-11-28 10:11 ` Pedro Alves
2012-11-28 14:52 ` Metzger, Markus T
2012-11-28 14:55 ` Pedro Alves
2012-11-27 13:11 ` [patch v4 00/13] branch tracing support for Atom Jan Kratochvil
2012-11-27 14:26 ` Metzger, Markus T
2012-11-27 14:32 ` Jan Kratochvil
2012-11-27 14:40 ` Metzger, Markus T
2012-11-27 15:36 ` Jan Kratochvil
2012-11-27 16:17 ` Metzger, Markus T
2012-11-27 16:28 ` Jan Kratochvil
2012-11-27 17:30 ` Metzger, Markus T
2012-11-27 18:31 ` Jan Kratochvil
2012-11-27 18:56 ` Markus Metzger
2012-11-28 19:01 ` Jan Kratochvil
2012-11-29 9:13 ` Metzger, Markus T
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=50B4EF0E.8080102@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=jan.kratochvil@redhat.com \
--cc=kettenis@gnu.org \
--cc=markus.t.metzger@gmail.com \
--cc=markus.t.metzger@intel.com \
--cc=tromey@redhat.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