From: markus.t.metzger@intel.com
To: gdb-patches@sourceware.org
Cc: markus.t.metzger@gmail.com, jan.kratochvil@redhat.com,
palves@redhat.com, tromey@redhat.com, kettenis@gnu.org,
Markus Metzger <markus.t.metzger@intel.com>
Subject: [patch v4 00/13] branch tracing support for Atom
Date: Tue, 27 Nov 2012 10:50:00 -0000 [thread overview]
Message-ID: <1354013351-14791-1-git-send-email-markus.t.metzger@intel.com> (raw)
From: Markus Metzger <markus.t.metzger@intel.com>
I incorporated review comments from Jan, Tom, Mark, and Joel.
I committed 3 patches that had been approved by Tom.
This is version 4. It is identical to version 3 for most of its patches. I
rebased it onto the current head.
Documentation is still missing. I will add it once the cli has been approved.
Here's an overview of the feature:
Branch tracing is very useful to debug problems that do not immediatly result in
a crash. It is particularly useful for bugs that make other debugger features
fail, e.g. a corrupted stack that breaks unwinding.
In comparison with reverse debugging, branch tracing is less powerful but
faster. In addition, the list view (see below) provides a quick overview of
where you are, comparable with the backtrace command.
This series adds commands to enable/disable branch tracing as well as to display
the recorded trace. I do expect some discussion around the commands and their
exact spelling and would therefore postpone documentation.
- "btrace enable/disable" perform the obvious operation
They accept an optional range argument specifying the range of threads to
enable/disable branch tracing for. If no argument is given, they target the
current thread.
They further accept the following arguments:
all targets all threads
auto turns automatic enabling for new threads on/off
- "btrace list" prints the blocks that have been traced; one line per block.
The output may be configured using modifiers (default: /fl). It prints:
the block number
/a the begin and end code address of that block
/f the function containing the block
/l the source lines contained in the block
It accepts an optional range argument specifying the range of blocks to be
listed. If no argument is given, all blocks are listed.
Blocks are ordered from newest to oldest; block 1 always contains the
current location.
(gdb) btrace list 24-34
24 in stdio_file_flush () at ../../../git/gdb/ui-file.c:525-529
25 in ui_file_data () at ../../../git/gdb/ui-file.c:175-180
26 in stdio_file_flush () at ../../../git/gdb/ui-file.c:522-523
27 in gdb_flush () at ../../../git/gdb/ui-file.c:185
28 in gdb_wait_for_event () at ../../../git/gdb/event-loop.c:840-847
29 in gdb_do_one_event () at ../../../git/gdb/event-loop.c:461
30 in gdb_do_one_event () at ../../../git/gdb/event-loop.c:453
31 in process_event () at ../../../git/gdb/event-loop.c:407
32 in process_event () at ../../../git/gdb/event-loop.c:361-367
33 in process_event () at ../../../git/gdb/event-loop.c:1041-1043
34 in process_event () at ../../../git/gdb/event-loop.c:1041-1045
- "btrace" prints the branch trace disassembly
Branch trace is printed block-by-block. Typically, one block at a time is
printed. Repeated commands will iterate over all blocks similar to the list
command.
It supports the /m and /r modifiers accepted by the disassemble command.
It accepts an optional range argument specifying the range of blocks to be
printed. If more than one block is given, blocks are printed in reverse
order to preserve the original control flow.
(gdb) btrace /m 25
../../../git/gdb/ui-file.c:175 {
0x0000000000635410 <ui_file_data+0>: sub $0x8,%rsp
../../../git/gdb/ui-file.c:176 if (file->magic != &ui_file_magic)
0x0000000000635414 <ui_file_data+4>: cmpq $0xb33b94,(%rdi)
0x000000000063541b <ui_file_data+11>: jne 0x635426 <ui_file_data+22>
../../../git/gdb/ui-file.c:177 internal_error (__FILE__, __LINE__,
0x000000000063541d <ui_file_data+13>: mov 0x50(%rdi),%rax
../../../git/gdb/ui-file.c:178 _("ui_file_data: bad magic number"));
../../../git/gdb/ui-file.c:179 return file->to_data;
../../../git/gdb/ui-file.c:180 }
0x0000000000635421 <ui_file_data+17>: add $0x8,%rsp
0x0000000000635425 <ui_file_data+21>: retq
Mixed source and disassembly does not work very well for inlined functions,
a problem that it shares with the disassemble command.
Barkha Ahuja (1):
test, btrace: more branch tracing tests
Markus Metzger (12):
disas: add precise instructions flag
thread, btrace: add generic branch trace support
cli, btrace: add btrace cli
configure: add check for perf_event header
linux, btrace: perf_event based branch tracing
linux, i386, amd64: enable btrace for 32bit and 64bit linux native
xml, btrace: define btrace xml document style
remote, btrace: add branch trace remote ops
gdbserver, btrace: add generic btrace support
gdbserver, linux, btrace: add btrace support for linux-low
test, btrace: add branch tracing tests
btrace, x86: restrict to Atom
gdb/Makefile.in | 13 +-
gdb/amd64-linux-nat.c | 85 +++
gdb/btrace.c | 866 ++++++++++++++++++++++
gdb/btrace.h | 77 ++
gdb/command.h | 2 +-
gdb/common/btrace-common.h | 56 ++
gdb/common/linux-btrace.c | 382 ++++++++++
gdb/common/linux-btrace.h | 76 ++
gdb/config.in | 3 +
gdb/config/i386/linux.mh | 3 +-
gdb/config/i386/linux64.mh | 2 +-
gdb/configure | 2 +-
gdb/configure.ac | 2 +-
gdb/disasm.c | 26 +-
gdb/disasm.h | 9 +-
gdb/features/btrace.dtd | 12 +
gdb/gdbserver/Makefile.in | 6 +-
gdb/gdbserver/config.in | 3 +
gdb/gdbserver/configure | 2 +-
gdb/gdbserver/configure.ac | 3 +-
gdb/gdbserver/configure.srv | 34 +-
gdb/gdbserver/gdbthread.h | 5 +
gdb/gdbserver/inferiors.c | 3 +
gdb/gdbserver/linux-low.c | 44 ++
gdb/gdbserver/linux-low.h | 2 +
gdb/gdbserver/linux-x86-low.c | 31 +
gdb/gdbserver/server.c | 167 +++++
gdb/gdbserver/target.h | 33 +
gdb/gdbthread.h | 4 +
gdb/i386-linux-nat.c | 85 +++
gdb/infcmd.c | 2 +
gdb/remote.c | 157 ++++
gdb/target.c | 89 +++
gdb/target.h | 39 +-
gdb/testsuite/Makefile.in | 3 +-
gdb/testsuite/configure | 3 +-
gdb/testsuite/configure.ac | 2 +-
gdb/testsuite/gdb.base/page.exp | 3 +-
gdb/testsuite/gdb.btrace/Makefile.in | 13 +
gdb/testsuite/gdb.btrace/a.S | 23 +
gdb/testsuite/gdb.btrace/allthreads_trace.exp | 345 +++++++++
gdb/testsuite/gdb.btrace/amd64-thr-callback.S | 116 +++
gdb/testsuite/gdb.btrace/b.S | 23 +
gdb/testsuite/gdb.btrace/dec.c | 23 +
gdb/testsuite/gdb.btrace/decrement.S | 32 +
gdb/testsuite/gdb.btrace/decrement.exp | 141 ++++
gdb/testsuite/gdb.btrace/disable_all.exp | 279 +++++++
gdb/testsuite/gdb.btrace/enable.exp | 94 +++
gdb/testsuite/gdb.btrace/enable_all.exp | 282 +++++++
gdb/testsuite/gdb.btrace/enable_range.exp | 281 +++++++
gdb/testsuite/gdb.btrace/i386-thr-callback.S | 116 +++
gdb/testsuite/gdb.btrace/inc.c | 23 +
gdb/testsuite/gdb.btrace/list.exp | 175 +++++
gdb/testsuite/gdb.btrace/list_function.c | 31 +
gdb/testsuite/gdb.btrace/list_function.exp | 50 ++
gdb/testsuite/gdb.btrace/list_options.exp | 107 +++
gdb/testsuite/gdb.btrace/main.S | 36 +
gdb/testsuite/gdb.btrace/main_asm.exp | 109 +++
gdb/testsuite/gdb.btrace/main_segv.S | 32 +
gdb/testsuite/gdb.btrace/main_segv.exp | 84 +++
gdb/testsuite/gdb.btrace/threads.c | 96 +++
gdb/testsuite/gdb.btrace/threads_asm.c | 78 ++
gdb/testsuite/gdb.btrace/threads_auto.exp | 123 +++
gdb/testsuite/gdb.btrace/threads_independent.exp | 125 ++++
gdb/testsuite/gdb.btrace/threads_nonstop.exp | 231 ++++++
gdb/testsuite/gdb.btrace/trace_iteration.exp | 265 +++++++
gdb/testsuite/gdb.btrace/x86-list.S | 70 ++
gdb/testsuite/lib/btrace.exp | 78 ++
gdb/thread.c | 4 +
69 files changed, 5779 insertions(+), 42 deletions(-)
create mode 100644 gdb/btrace.c
create mode 100644 gdb/btrace.h
create mode 100644 gdb/common/btrace-common.h
create mode 100644 gdb/common/linux-btrace.c
create mode 100644 gdb/common/linux-btrace.h
create mode 100644 gdb/features/btrace.dtd
create mode 100755 gdb/testsuite/gdb.btrace/Makefile.in
create mode 100755 gdb/testsuite/gdb.btrace/a.S
create mode 100755 gdb/testsuite/gdb.btrace/allthreads_trace.exp
create mode 100755 gdb/testsuite/gdb.btrace/amd64-thr-callback.S
create mode 100755 gdb/testsuite/gdb.btrace/b.S
create mode 100644 gdb/testsuite/gdb.btrace/dec.c
create mode 100755 gdb/testsuite/gdb.btrace/decrement.S
create mode 100755 gdb/testsuite/gdb.btrace/decrement.exp
create mode 100755 gdb/testsuite/gdb.btrace/disable_all.exp
create mode 100644 gdb/testsuite/gdb.btrace/enable.exp
create mode 100755 gdb/testsuite/gdb.btrace/enable_all.exp
create mode 100755 gdb/testsuite/gdb.btrace/enable_range.exp
create mode 100755 gdb/testsuite/gdb.btrace/i386-thr-callback.S
create mode 100644 gdb/testsuite/gdb.btrace/inc.c
create mode 100644 gdb/testsuite/gdb.btrace/list.exp
create mode 100644 gdb/testsuite/gdb.btrace/list_function.c
create mode 100644 gdb/testsuite/gdb.btrace/list_function.exp
create mode 100755 gdb/testsuite/gdb.btrace/list_options.exp
create mode 100755 gdb/testsuite/gdb.btrace/main.S
create mode 100755 gdb/testsuite/gdb.btrace/main_asm.exp
create mode 100755 gdb/testsuite/gdb.btrace/main_segv.S
create mode 100755 gdb/testsuite/gdb.btrace/main_segv.exp
create mode 100755 gdb/testsuite/gdb.btrace/threads.c
create mode 100755 gdb/testsuite/gdb.btrace/threads_asm.c
create mode 100755 gdb/testsuite/gdb.btrace/threads_auto.exp
create mode 100755 gdb/testsuite/gdb.btrace/threads_independent.exp
create mode 100755 gdb/testsuite/gdb.btrace/threads_nonstop.exp
create mode 100755 gdb/testsuite/gdb.btrace/trace_iteration.exp
create mode 100644 gdb/testsuite/gdb.btrace/x86-list.S
create mode 100644 gdb/testsuite/lib/btrace.exp
next reply other threads:[~2012-11-27 10:50 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-27 10:50 markus.t.metzger [this message]
2012-11-27 10:49 ` [patch v4 01/13] disas: add precise instructions flag markus.t.metzger
2012-11-27 16:49 ` Pedro Alves
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 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 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 11/13] test, btrace: add branch tracing tests markus.t.metzger
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 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 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 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 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 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 12/13] test, btrace: more branch tracing tests markus.t.metzger
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=1354013351-14791-1-git-send-email-markus.t.metzger@intel.com \
--to=markus.t.metzger@intel.com \
--cc=gdb-patches@sourceware.org \
--cc=jan.kratochvil@redhat.com \
--cc=kettenis@gnu.org \
--cc=markus.t.metzger@gmail.com \
--cc=palves@redhat.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