Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Hui Zhu <teawater@gmail.com>
To: markus.t.metzger@intel.com
Cc: gdb-patches@sourceware.org, markus.t.metzger@gmail.com
Subject: Re: [PATCH 00/16] branch tracing support
Date: Fri, 11 May 2012 00:25:00 -0000	[thread overview]
Message-ID: <CANFwon3r+r7BbsPf0krbbMuUL1jy92j=ZntpxzOTCLj+G1F_2Q@mail.gmail.com> (raw)
In-Reply-To: <1336662810-21937-1-git-send-email-markus.t.metzger@intel.com>

Hi Markus,

Thanks for your work.  I think this function is very interesting.

But I didn't find the patch for the doc in your patches list.   I
suggest you add it.

PS, do you have any data about  how much speed decrease when btrace enable.

Thanks,
Hui

On Thu, May 10, 2012 at 11:13 PM,  <markus.t.metzger@intel.com> wrote:
> From: Markus Metzger <markus.t.metzger@intel.com>
>
> IA hardware offers a feature called Branch Trace Store (BTS) that stores a log
> of branches into an OS provided ring buffer.
>
> Linux supports this feature since 2.6.32 as part of the perf_event interface.
>
> 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:
>
>  - "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 (15):
>  disas: add precise instructions flag
>  source: add flags to print_source_lines ()
>  source, disasm: optionally prefix source lines with filename
>  thread, btrace: add generic branch trace support
>  cli, btrace: add btrace cli
>  configure: add check for perf_event header
>  configure: autoreconf
>  linux, btrace: perf_event based branch tracing
>  btrace, linux: add linux native btrace target ops
>  btrace, config: enable btrace for 32bit and 64bit linux native
>  test, btrace: add branch trace tests
>  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
>
>  .gitignore                                       |    2 +
>  gdb/Makefile.in                                  |   14 +-
>  gdb/amd64-linux-nat.c                            |    2 +
>  gdb/btrace.c                                     |  939 ++++++++++++++++++++++
>  gdb/btrace.h                                     |   92 +++
>  gdb/command.h                                    |    2 +-
>  gdb/common/linux-btrace.c                        |  368 +++++++++
>  gdb/common/linux-btrace.h                        |   76 ++
>  gdb/config.in                                    |    3 +
>  gdb/config/i386/linux.mh                         |    3 +-
>  gdb/config/i386/linux64.mh                       |    2 +-
>  gdb/configure                                    |   13 +
>  gdb/configure.ac                                 |    2 +
>  gdb/disasm.c                                     |   40 +-
>  gdb/disasm.h                                     |    8 +-
>  gdb/features/btrace.dtd                          |   12 +
>  gdb/gdbserver/Makefile.in                        |    6 +-
>  gdb/gdbserver/config.in                          |    3 +
>  gdb/gdbserver/configure                          |    2 +-
>  gdb/gdbserver/configure.ac                       |    2 +-
>  gdb/gdbserver/configure.srv                      |   34 +-
>  gdb/gdbserver/gdbthread.h                        |    5 +
>  gdb/gdbserver/inferiors.c                        |    3 +
>  gdb/gdbserver/linux-low.c                        |   42 +
>  gdb/gdbserver/server.c                           |  171 ++++
>  gdb/gdbserver/target.h                           |   38 +
>  gdb/gdbthread.h                                  |    4 +
>  gdb/i386-linux-nat.c                             |    2 +
>  gdb/infcmd.c                                     |    2 +
>  gdb/linux-nat-btrace.c                           |   86 ++
>  gdb/linux-nat-btrace.h                           |   28 +
>  gdb/remote.c                                     |  208 +++++
>  gdb/source.c                                     |   19 +-
>  gdb/symtab.h                                     |    6 +
>  gdb/target.c                                     |   20 +
>  gdb/target.h                                     |   36 +-
>  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                     |   24 +
>  gdb/testsuite/gdb.btrace/allthreads_trace.exp    |  270 +++++++
>  gdb/testsuite/gdb.btrace/b.s                     |   23 +
>  gdb/testsuite/gdb.btrace/dec.c                   |    4 +
>  gdb/testsuite/gdb.btrace/decrement.exp           |  140 ++++
>  gdb/testsuite/gdb.btrace/decrement.s             |   32 +
>  gdb/testsuite/gdb.btrace/disable_all.exp         |  198 +++++
>  gdb/testsuite/gdb.btrace/enable.exp              |   83 ++
>  gdb/testsuite/gdb.btrace/enable_all.exp          |  201 +++++
>  gdb/testsuite/gdb.btrace/enable_range.exp        |  198 +++++
>  gdb/testsuite/gdb.btrace/inc.c                   |    4 +
>  gdb/testsuite/gdb.btrace/list.exp                |  169 ++++
>  gdb/testsuite/gdb.btrace/list.s                  |   68 ++
>  gdb/testsuite/gdb.btrace/list_function.c         |   12 +
>  gdb/testsuite/gdb.btrace/list_function.exp       |   59 ++
>  gdb/testsuite/gdb.btrace/list_options.exp        |  107 +++
>  gdb/testsuite/gdb.btrace/main.s                  |   32 +
>  gdb/testsuite/gdb.btrace/main_asm.exp            |  113 +++
>  gdb/testsuite/gdb.btrace/main_segv.exp           |   84 ++
>  gdb/testsuite/gdb.btrace/main_segv.s             |   28 +
>  gdb/testsuite/gdb.btrace/sanity_crash.exp        |   69 ++
>  gdb/testsuite/gdb.btrace/sanity_crash.s          |   52 ++
>  gdb/testsuite/gdb.btrace/thr_callback_32.s       |  116 +++
>  gdb/testsuite/gdb.btrace/thr_callback_64.s       |  116 +++
>  gdb/testsuite/gdb.btrace/threads.c               |   96 +++
>  gdb/testsuite/gdb.btrace/threads_asm.c           |   78 ++
>  gdb/testsuite/gdb.btrace/threads_auto.exp        |  113 +++
>  gdb/testsuite/gdb.btrace/threads_independent.exp |  119 +++
>  gdb/testsuite/gdb.btrace/threads_nonstop.exp     |  182 +++++
>  gdb/testsuite/gdb.btrace/trace_iteration.exp     |  264 ++++++
>  gdb/testsuite/lib/btrace.exp                     |   72 ++
>  gdb/thread.c                                     |    3 +
>  71 files changed, 5393 insertions(+), 49 deletions(-)
>  create mode 100644 gdb/btrace.c
>  create mode 100644 gdb/btrace.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 100644 gdb/linux-nat-btrace.c
>  create mode 100644 gdb/linux-nat-btrace.h
>  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/b.s
>  create mode 100644 gdb/testsuite/gdb.btrace/dec.c
>  create mode 100755 gdb/testsuite/gdb.btrace/decrement.exp
>  create mode 100755 gdb/testsuite/gdb.btrace/decrement.s
>  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 100644 gdb/testsuite/gdb.btrace/inc.c
>  create mode 100644 gdb/testsuite/gdb.btrace/list.exp
>  create mode 100644 gdb/testsuite/gdb.btrace/list.s
>  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.exp
>  create mode 100755 gdb/testsuite/gdb.btrace/main_segv.s
>  create mode 100755 gdb/testsuite/gdb.btrace/sanity_crash.exp
>  create mode 100755 gdb/testsuite/gdb.btrace/sanity_crash.s
>  create mode 100755 gdb/testsuite/gdb.btrace/thr_callback_32.s
>  create mode 100755 gdb/testsuite/gdb.btrace/thr_callback_64.s
>  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/lib/btrace.exp
>


  parent reply	other threads:[~2012-05-11  0:25 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-10 15:15 markus.t.metzger
2012-05-10 15:16 ` [PATCH 05/16] cli, btrace: add btrace cli markus.t.metzger
2012-05-10 16:44   ` Eli Zaretskii
2012-05-11  8:17     ` Metzger, Markus T
2012-05-10 15:16 ` [PATCH 01/16] disas: add precise instructions flag markus.t.metzger
2012-05-10 15:17 ` [PATCH 07/16] configure: autoreconf markus.t.metzger
2012-05-10 15:17 ` [PATCH 02/16] source: add flags to print_source_lines () markus.t.metzger
2012-05-10 15:17 ` [PATCH 03/16] source, disasm: optionally prefix source lines with filename markus.t.metzger
2012-05-10 15:17 ` [PATCH 14/16] remote, btrace: add branch trace remote ops markus.t.metzger
2012-05-10 15:17 ` [PATCH 16/16] gdbserver, linux, btrace: add btrace support for linux-low markus.t.metzger
2012-05-10 15:17 ` [PATCH 11/16] test, btrace: add branch trace tests markus.t.metzger
2012-05-10 15:17 ` [PATCH 08/16] linux, btrace: perf_event based branch tracing markus.t.metzger
2012-05-10 15:17 ` [PATCH 10/16] btrace, config: enable btrace for 32bit and 64bit linux native markus.t.metzger
2012-05-10 15:17 ` [PATCH 04/16] thread, btrace: add generic branch trace support markus.t.metzger
2012-05-10 15:18 ` [PATCH 12/16] test, btrace: more branch tracing tests markus.t.metzger
2012-05-10 15:18 ` [PATCH 06/16] configure: add check for perf_event header markus.t.metzger
2012-05-10 15:18 ` [PATCH 15/16] gdbserver, btrace: add generic btrace support markus.t.metzger
2012-05-10 15:18 ` [PATCH 13/16] xml, btrace: define btrace xml document style markus.t.metzger
2012-05-10 15:18 ` [PATCH 09/16] btrace, linux: add linux native btrace target ops markus.t.metzger
2012-05-11  0:25 ` Hui Zhu [this message]
2012-05-11  8:17   ` [PATCH 00/16] branch tracing support 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='CANFwon3r+r7BbsPf0krbbMuUL1jy92j=ZntpxzOTCLj+G1F_2Q@mail.gmail.com' \
    --to=teawater@gmail.com \
    --cc=gdb-patches@sourceware.org \
    --cc=markus.t.metzger@gmail.com \
    --cc=markus.t.metzger@intel.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