From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28695 invoked by alias); 3 Jul 2013 09:14:43 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 28527 invoked by uid 89); 3 Jul 2013 09:14:40 -0000 X-Spam-SWARE-Status: No, score=-6.0 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD autolearn=ham version=3.3.1 Received: from mga01.intel.com (HELO mga01.intel.com) (192.55.52.88) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Wed, 03 Jul 2013 09:14:39 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 03 Jul 2013 02:14:36 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 03 Jul 2013 02:14:36 -0700 Received: from ulslx001.iul.intel.com (ulslx001.iul.intel.com [172.28.207.63]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id r639EZXk009785; Wed, 3 Jul 2013 10:14:35 +0100 Received: from ulslx001.iul.intel.com (localhost [127.0.0.1]) by ulslx001.iul.intel.com with ESMTP id r639EZhB029206; Wed, 3 Jul 2013 11:14:35 +0200 Received: (from mmetzger@localhost) by ulslx001.iul.intel.com with id r639EYsJ029202; Wed, 3 Jul 2013 11:14:34 +0200 From: Markus Metzger To: jan.kratochvil@redhat.com Cc: gdb-patches@sourceware.org Subject: [patch v4 00/24] record-btrace: reverse Date: Wed, 03 Jul 2013 09:15:00 -0000 Message-Id: <1372842874-28951-1-git-send-email-markus.t.metzger@intel.com> X-SW-Source: 2013-07/txt/msg00129.txt.bz2 This addresses fails reported by Jan on v3. I also merged in a few fixes for bugs I found. This patch series adds support for the "record goto" command and for reverse execution to the btrace record target. Since btrace only records the control flow, reverse execution is limited to modifying the PC register. It does not support evaluating variables. We do support the "backtrace" command, though. The back trace is computed from the control-flow trace rather than by unwinding stack frames. There are a number of opens wrt unwinding and reverse execution. The opens are listed in the commit messages of the respective patches towards the end of the series. This makes the series more an RFC than a real PATCH series, I suppose. It also changes the existing "record function-call-history" and "record instruction-history" commands slightly and fixes PR/15240. The "record function-call-history" command can now show the call relationship like this: (gdb) record function-call-history /cli 12 fib inst 101,111 at src/fib.c:3,7 13 fib inst 112,124 at src/fib.c:3,8 14 fib inst 125,129 at src/fib.c:7 15 fib inst 130,142 at src/fib.c:3,8 16 fib inst 143,147 at src/fib.c:7,8 17 fib inst 148,152 at src/fib.c:7,8 18 fib inst 153,157 at src/fib.c:7 19 fib inst 158,168 at src/fib.c:3,7 20 fib inst 169,179 at src/fib.c:3,7 21 fib inst 180,185 at src/fib.c:3,4 Markus Metzger (24): gdbarch: add instruction predicate methods record: upcase record_print_flag enumeration constants btrace: change branch trace data structure record-btrace: fix insn range in function call history record-btrace: start counting at one btrace: increase buffer size record-btrace: optionally indent function call history record-btrace: make ranges include begin and end btrace: add replay position to btrace thread info target: add ops parameter to to_prepare_to_store method record-btrace: supply register target methods frame, backtrace: allow targets to supply a frame unwinder record-btrace, frame: supply target-specific unwinder record-btrace: provide xfer_partial target method record-btrace: add to_wait and to_resume target methods. record-btrace: provide target_find_new_threads method record-btrace: add record goto target methods record-btrace: extend unwinder btrace, linux: fix memory leak when reading branch trace btrace, gdbserver: read branch trace incrementally record-btrace: show trace from enable location infrun: reverse stepping from unknown functions record-btrace: add (reverse-)stepping support record-btrace: skip tail calls in back trace gdb/NEWS | 18 + gdb/amd64-tdep.c | 67 + gdb/arch-utils.c | 15 + gdb/arch-utils.h | 4 + gdb/btrace.c | 1373 +++++++++++++++++--- gdb/btrace.h | 262 ++++- gdb/common/btrace-common.h | 6 +- gdb/common/linux-btrace.c | 110 ++- gdb/common/linux-btrace.h | 5 +- gdb/doc/gdb.texinfo | 30 +- gdb/dwarf2-frame.c | 8 +- gdb/frame-unwind.c | 80 +- gdb/frame.c | 47 +- gdb/frame.h | 8 +- gdb/gdbarch.c | 105 ++ gdb/gdbarch.h | 24 + gdb/gdbarch.sh | 9 + gdb/gdbserver/linux-low.c | 18 +- gdb/gdbserver/server.c | 11 +- gdb/gdbserver/target.h | 6 +- gdb/i386-tdep.c | 59 + gdb/inf-child.c | 2 +- gdb/infrun.c | 2 +- gdb/monitor.c | 2 +- gdb/ravenscar-thread.c | 7 +- gdb/record-btrace.c | 1375 +++++++++++++++++--- gdb/record-full.c | 3 +- gdb/record.c | 8 +- gdb/record.h | 7 +- gdb/remote-m32r-sdi.c | 2 +- gdb/remote-mips.c | 5 +- gdb/remote.c | 28 +- gdb/target.c | 51 +- gdb/target.h | 26 +- gdb/testsuite/gdb.btrace/Makefile.in | 3 +- gdb/testsuite/gdb.btrace/delta.exp | 76 ++ gdb/testsuite/gdb.btrace/exception.cc | 56 + gdb/testsuite/gdb.btrace/exception.exp | 67 + gdb/testsuite/gdb.btrace/finish.exp | 70 + gdb/testsuite/gdb.btrace/function_call_history.exp | 328 +++-- gdb/testsuite/gdb.btrace/instruction_history.exp | 72 +- gdb/testsuite/gdb.btrace/multi-thread-step.c | 53 + gdb/testsuite/gdb.btrace/multi-thread-step.exp | 84 ++ gdb/testsuite/gdb.btrace/next.exp | 89 ++ gdb/testsuite/gdb.btrace/nexti.exp | 89 ++ gdb/testsuite/gdb.btrace/record_goto.c | 51 + gdb/testsuite/gdb.btrace/record_goto.exp | 166 +++ gdb/testsuite/gdb.btrace/rn-dl-bind.c | 37 + gdb/testsuite/gdb.btrace/rn-dl-bind.exp | 48 + gdb/testsuite/gdb.btrace/step.exp | 113 ++ gdb/testsuite/gdb.btrace/stepi.exp | 114 ++ gdb/testsuite/gdb.btrace/tailcall.exp | 85 ++ gdb/testsuite/gdb.btrace/unknown_functions.c | 45 + gdb/testsuite/gdb.btrace/unknown_functions.exp | 60 + gdb/testsuite/gdb.btrace/x86-record_goto.S | 332 +++++ gdb/testsuite/gdb.btrace/x86-tailcall.S | 269 ++++ gdb/testsuite/gdb.btrace/x86-tailcall.c | 39 + 57 files changed, 5420 insertions(+), 709 deletions(-) create mode 100644 gdb/testsuite/gdb.btrace/delta.exp create mode 100644 gdb/testsuite/gdb.btrace/exception.cc create mode 100755 gdb/testsuite/gdb.btrace/exception.exp create mode 100644 gdb/testsuite/gdb.btrace/finish.exp create mode 100644 gdb/testsuite/gdb.btrace/multi-thread-step.c create mode 100644 gdb/testsuite/gdb.btrace/multi-thread-step.exp create mode 100644 gdb/testsuite/gdb.btrace/next.exp create mode 100644 gdb/testsuite/gdb.btrace/nexti.exp create mode 100644 gdb/testsuite/gdb.btrace/record_goto.c create mode 100644 gdb/testsuite/gdb.btrace/record_goto.exp create mode 100644 gdb/testsuite/gdb.btrace/rn-dl-bind.c create mode 100644 gdb/testsuite/gdb.btrace/rn-dl-bind.exp create mode 100644 gdb/testsuite/gdb.btrace/step.exp create mode 100644 gdb/testsuite/gdb.btrace/stepi.exp create mode 100644 gdb/testsuite/gdb.btrace/tailcall.exp create mode 100644 gdb/testsuite/gdb.btrace/unknown_functions.c create mode 100644 gdb/testsuite/gdb.btrace/unknown_functions.exp create mode 100644 gdb/testsuite/gdb.btrace/x86-record_goto.S create mode 100644 gdb/testsuite/gdb.btrace/x86-tailcall.S create mode 100644 gdb/testsuite/gdb.btrace/x86-tailcall.c