Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: markus.t.metzger@intel.com
To: jan.kratochvil@redhat.com, palves@redhat.com, tromey@redhat.com,
	       kettenis@gnu.org
Cc: gdb-patches@sourceware.org, markus.t.metzger@gmail.com,
	       Markus Metzger <markus.t.metzger@intel.com>
Subject: [patch v6 00/12] branch tracing support for Atom
Date: Mon, 17 Dec 2012 16:02:00 -0000	[thread overview]
Message-ID: <1355760101-26237-1-git-send-email-markus.t.metzger@intel.com> (raw)

From: Markus Metzger <markus.t.metzger@intel.com>

This version is identical to v5 except that pointers are now explicitly checked
for == NULL and != NULL and that I moved the disable_btrace call from
free_thread to clear_thread_inferior_resources.

I will add documentation shortly.

Is the patch series OK to commit?


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 (11):
  thread, btrace: add generic branch trace support
  cli, btrace: add btrace cli
  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
  btrace, doc: document remote serial protocol
  gdbserver, btrace: add generic btrace support
  gdbserver, linux, btrace: add btrace support for linux-low
  test, btrace: add branch tracing tests
  btrace, x86: disable on some processors

 gdb/Makefile.in                                  |   13 +-
 gdb/amd64-linux-nat.c                            |   42 +
 gdb/btrace.c                                     |  863 ++++++++++++++++++++++
 gdb/btrace.h                                     |   86 +++
 gdb/command.h                                    |    2 +-
 gdb/common/btrace-common.h                       |   62 ++
 gdb/common/linux-btrace.c                        |  468 ++++++++++++
 gdb/common/linux-btrace.h                        |   76 ++
 gdb/config/i386/linux.mh                         |    3 +-
 gdb/config/i386/linux64.mh                       |    2 +-
 gdb/doc/gdb.texinfo                              |  125 ++++
 gdb/features/btrace.dtd                          |   12 +
 gdb/gdbserver/Makefile.in                        |    7 +-
 gdb/gdbserver/config.in                          |    3 +
 gdb/gdbserver/configure                          |    6 +
 gdb/gdbserver/configure.ac                       |    5 +
 gdb/gdbserver/configure.srv                      |    6 +-
 gdb/gdbserver/gdbthread.h                        |    5 +
 gdb/gdbserver/inferiors.c                        |    3 +
 gdb/gdbserver/linux-low.c                        |   57 ++
 gdb/gdbserver/server.c                           |  175 +++++
 gdb/gdbserver/target.h                           |   33 +
 gdb/gdbthread.h                                  |    4 +
 gdb/i386-linux-nat.c                             |   42 +
 gdb/infcmd.c                                     |    2 +
 gdb/remote.c                                     |  171 +++++
 gdb/target.c                                     |   69 ++
 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              |   89 +++
 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                                     |    3 +
 63 files changed, 5856 insertions(+), 15 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
 mode change 100644 => 100755 gdb/remote.c
 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

-- 
1.7.6.5


             reply	other threads:[~2012-12-17 16:02 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-17 16:02 markus.t.metzger [this message]
2012-12-17 16:02 ` [patch v6 01/12] thread, btrace: add generic branch trace support markus.t.metzger
2012-12-17 16:02 ` [patch v6 08/12] gdbserver, btrace: add generic btrace support markus.t.metzger
2012-12-17 20:43   ` Jan Kratochvil
2012-12-17 16:02 ` [patch v6 12/12] btrace, x86: disable on some processors markus.t.metzger
2012-12-17 17:11   ` Mark Kettenis
2012-12-19 16:13     ` Metzger, Markus T
2012-12-19 16:36       ` Mark Kettenis
2012-12-21 10:38       ` Jan Kratochvil
2012-12-17 17:37   ` H.J. Lu
2012-12-19 15:58     ` Metzger, Markus T
2012-12-17 20:35   ` Jan Kratochvil
2012-12-17 16:02 ` [patch v6 02/12] cli, btrace: add btrace cli markus.t.metzger
2012-12-17 18:32   ` Jan Kratochvil
2012-12-18  7:36     ` Metzger, Markus T
2012-12-18  8:35       ` Jan Kratochvil
2012-12-18  9:04   ` Jan Kratochvil
2012-12-18  9:11     ` Metzger, Markus T
2012-12-17 16:02 ` [patch v6 06/12] remote, btrace: add branch trace remote ops markus.t.metzger
2012-12-17 19:57   ` Jan Kratochvil
2012-12-17 16:02 ` [patch v6 09/12] gdbserver, linux, btrace: add btrace support for linux-low markus.t.metzger
2012-12-17 16:03 ` [patch v6 07/12] btrace, doc: document remote serial protocol markus.t.metzger
2012-12-17 16:03 ` [patch v6 03/12] linux, btrace: perf_event based branch tracing markus.t.metzger
2012-12-17 16:03 ` [patch v6 11/12] test, btrace: more branch tracing tests markus.t.metzger
2012-12-17 16:03 ` [patch v6 05/12] xml, btrace: define btrace xml document style markus.t.metzger
2012-12-17 19:53   ` Jan Kratochvil
2012-12-18  7:43     ` Metzger, Markus T
2012-12-17 16:03 ` [patch v6 04/12] linux, i386, amd64: enable btrace for 32bit and 64bit linux native markus.t.metzger
2012-12-17 16:03 ` [patch v6 10/12] test, btrace: add branch tracing tests markus.t.metzger
2012-12-17 20:26   ` Jan Kratochvil
2012-12-17 18:45 ` [patch v6 00/12] branch tracing support for Atom Jan Kratochvil
2012-12-17 19:34   ` Tom Tromey
2012-12-18  7:24     ` Metzger, Markus T
2012-12-18  9:20 ` Jan Kratochvil
2012-12-18 10:14   ` Metzger, Markus T
2012-12-18 13:55     ` Jan Kratochvil
2012-12-19  9:59       ` Metzger, Markus T
2012-12-19 12:13         ` Mark Kettenis
2012-12-19 12:37           ` Jan Kratochvil
2012-12-20  7:17         ` Jan Kratochvil
2012-12-20  9:14           ` Metzger, Markus T
2012-12-20 11:43             ` Jan Kratochvil
2012-12-20 15:20               ` Metzger, Markus T
2012-12-21 19:12                 ` Jan Kratochvil
2012-12-22 13:08         ` Jan Kratochvil
2013-01-01 16:35           ` Jan Kratochvil

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=1355760101-26237-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