[v5,0/7] extend branch tracing to use ARM CoreSight traces

Message ID 20210422140921.175221-1-zied.guermazi@trande.de
Headers show
Series
  • extend branch tracing to use ARM CoreSight traces
Related show

Message

Zied Guermazi April 22, 2021, 2:09 p.m.
This patch set adds support for branch tracing in GDB on arm platforms
 using coresight etm traces
 Branch tracing offers instructions and functions histories as well as
 execution record and replay (forwards and reverse debugging)
 this patch set was tested using the gdb.btrace testsuite on ARMv7 and ARMv8
 cortex A processors running linux operating system with coresight drivers.
 
 test results of gdb.btrace testsuite on ARMv8, variation unix
 # of expected passes		595
 # of unexpected failures	1
 # of unsupported tests	1

 test results of gdb.btrace testsuite on ARMv8 variation native-gdbserver
 # of expected passes		582
 # of unexpected failures	4
 # of unsupported tests	2
 
 test results of gdb.btrace testsuite  on ARMv7, variation unix
 # of expected passes		588
 # of unexpected failures	7
 # of untested testcases	1
 # of unsupported tests	1

 
 test results of gdb.btrace testsuite on ARMv7 variation native-gdbserver
 # of expected passes		583
 # of unexpected failures	4
 # of unsupported tests	2

 
 known limitations:
 for arm v7 only
- some registers needed for breakpoint address calculation in forwards
  executions may be missing.
 for arm v7 and arm v8
- sometimes trace buffers are not flushed properly or flushed in
  the buffer of a different thread. this was observed
  in test scripts only.
- sometimes, in non-stop mode, while executing "stepi n" for two threads
  in parallel, a thread is hitting breakpoints intended for stepping
  the other one.
  Gdb recognizes that it is intended for the second thread,
  but decreases the step counter. leading to a stepping less than "n"
  times.
 patches are:

Zied Guermazi (7):
  configure gdb build system for supporting btrace on arm processors
  add btrace coresight related commands
  start/stop btrace with coresight etm and parse etm buffer. nat
    independant
  start/stop btrace with coresight etm and collect etm buffer on linux
    os
  fix issue: gdb hangs in the command following a commad returning with
    TARGET_WAITKIND_NO_HISTORY
  add support for coresight btrace via remote protocol
  adapt btrace testcases for arm target

 gdb/Makefile.in                               |   5 +-
 gdb/NEWS                                      |  27 +
 gdb/aarch64-linux-nat.c                       |  68 ++
 gdb/arch/arm.h                                |  33 +
 gdb/arm-linux-nat.c                           |  68 ++
 gdb/btrace.c                                  | 973 +++++++++++++++++-
 gdb/btrace.h                                  |  16 +-
 gdb/config.in                                 |   3 +
 gdb/configure                                 | 545 ++++++++++
 gdb/configure.nat                             |   4 +-
 gdb/doc/gdb.texinfo                           | 114 +-
 gdb/features/btrace-conf.dtd                  |  10 +-
 gdb/features/btrace.dtd                       |  38 +-
 gdb/infrun.c                                  |   3 +-
 gdb/nat/linux-btrace.c                        | 399 ++++++-
 gdb/nat/linux-btrace.h                        |  19 +
 gdb/record-btrace.c                           | 173 +++-
 gdb/record.c                                  |   2 +
 gdb/remote.c                                  |  66 +-
 .../gdb.btrace/aarch64-instruction_history.S  |  31 +
 .../gdb.btrace/aarch64-record_goto.S          | 399 +++++++
 .../gdb.btrace/aarch64-tailcall-only.S        | 516 ++++++++++
 gdb/testsuite/gdb.btrace/aarch64-tailcall.S   | 408 ++++++++
 .../gdb.btrace/arm-instruction_history.S      |  31 +
 gdb/testsuite/gdb.btrace/arm-record_goto.S    | 432 ++++++++
 gdb/testsuite/gdb.btrace/arm-tailcall-only.S  | 503 +++++++++
 gdb/testsuite/gdb.btrace/arm-tailcall.S       | 390 +++++++
 gdb/testsuite/gdb.btrace/buffer-size.exp      |  15 +-
 .../gdb.btrace/instruction_history.exp        | 106 +-
 gdb/testsuite/gdb.btrace/non-stop.exp         |  60 +-
 gdb/testsuite/gdb.btrace/record_goto.exp      | 253 +++--
 gdb/testsuite/gdb.btrace/stepi.exp            | 107 +-
 gdb/testsuite/gdb.btrace/tailcall-only.exp    |  20 +-
 gdb/testsuite/gdb.btrace/tailcall.exp         |  58 +-
 ...on_history.S => x86-instruction_history.S} |   0
 gdb/testsuite/lib/gdb.exp                     |   2 +-
 gdb/top.c                                     |  10 +-
 gdbserver/config.in                           |   3 +
 gdbserver/configure                           | 545 ++++++++++
 gdbserver/configure.srv                       |   4 +
 gdbserver/linux-low.cc                        | 100 +-
 gdbserver/server.cc                           |  34 +-
 gdbsupport/Makefile.in                        |   3 +
 gdbsupport/btrace-common.cc                   |  43 +
 gdbsupport/btrace-common.h                    | 115 ++-
 gdbsupport/common.m4                          |  39 +
 gdbsupport/config.in                          |   3 +
 gdbsupport/configure                          | 545 ++++++++++
 48 files changed, 7163 insertions(+), 178 deletions(-)
 create mode 100644 gdb/testsuite/gdb.btrace/aarch64-instruction_history.S
 create mode 100644 gdb/testsuite/gdb.btrace/aarch64-record_goto.S
 create mode 100644 gdb/testsuite/gdb.btrace/aarch64-tailcall-only.S
 create mode 100644 gdb/testsuite/gdb.btrace/aarch64-tailcall.S
 create mode 100644 gdb/testsuite/gdb.btrace/arm-instruction_history.S
 create mode 100644 gdb/testsuite/gdb.btrace/arm-record_goto.S
 create mode 100644 gdb/testsuite/gdb.btrace/arm-tailcall-only.S
 create mode 100644 gdb/testsuite/gdb.btrace/arm-tailcall.S
 rename gdb/testsuite/gdb.btrace/{instruction_history.S => x86-instruction_history.S} (100%)

-- 
2.25.1