From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22573 invoked by alias); 4 Apr 2014 08:56:41 -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 22561 invoked by uid 89); 4 Apr 2014 08:56:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mga02.intel.com Received: from mga02.intel.com (HELO mga02.intel.com) (134.134.136.20) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 04 Apr 2014 08:56:39 +0000 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 04 Apr 2014 01:56:38 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga002.jf.intel.com with ESMTP; 04 Apr 2014 01:56:23 -0700 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id s348uM6t017254; Fri, 4 Apr 2014 09:56:22 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id s348uMiu025281; Fri, 4 Apr 2014 10:56:22 +0200 Received: (from mmetzger@localhost) by ulvlx001.iul.intel.com with œ id s348uLdP025277; Fri, 4 Apr 2014 10:56:21 +0200 From: Markus Metzger To: palves@redhat.com, jan.kratochvil@redhat.com Cc: gdb-patches@sourceware.org, Eli Zaretskii Subject: [rfc] btrace: control memory access during replay Date: Fri, 04 Apr 2014 08:56:00 -0000 Message-Id: <1396601781-25010-1-git-send-email-markus.t.metzger@intel.com> X-IsSubscribed: yes X-SW-Source: 2014-04/txt/msg00056.txt.bz2 The btrace record target does not trace data. We therefore do not allow accessing read-write memory during replay. In some cases, this might be useful to advanced users, though, who we assume to know what they are doing. Add a set|show command pair to turn this memory access restriction off. CC: Eli Zaretskii 2014-04-04 Markus Metzger * record-btrace.c (set_record_btrace_cmdlist) (show_record_btrace_cmdlist, cmd_set_record_btrace) (cmd_show_record_btrace): New. (_initialize_record_btrace): Add commands. * NEWS: Announce it. testsuite/ * gdb.btrace/data.exp: Test it. doc/ * gdb.texinfo: Document it. --- gdb/NEWS | 4 ++++ gdb/doc/gdb.texinfo | 13 ++++++++++++ gdb/record-btrace.c | 43 +++++++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.btrace/data.exp | 8 ++++++++ 4 files changed, 68 insertions(+) diff --git a/gdb/NEWS b/gdb/NEWS index df233fc..dbd6889 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -50,6 +50,10 @@ maint ada show ignore-descriptive-types the user manual for more details on descriptive types and the intended usage of this option. +set record btrace allow-memory-access (on|off) +show record btrace allow-memory-access + Control access to read-write memory during replay. + * New features in the GDB remote stub, GDBserver ** New option --debug-format=option1[,option2,...] allows one to add diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index b218769..08ebb74 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -6398,6 +6398,19 @@ results. @item show record full memory-query Show the current setting of @code{memory-query}. +@kindex set record btrace +@item set record btrace allow-memory-access +Control the behavior of the @code{btrace} recording method when +accessing memory during replay. If ON, @value{GDBN} will allow +arbitrary memory accesses. The accessed memory corresponds to the end +of the recorded execution trace. It does not necessarily correspond +to the current replay position. If OFF (the default), @value{GDBN} +will only allow accesses to read-only memory. + +@kindex show record btrace +@item show record btrace allow-memory-access +Show the current setting of @code{allow-memory-access}. + @kindex info record @item info record Show various statistics about the recording depending on the recording diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index bcac165..9cf1ff8 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -45,6 +45,10 @@ static struct observer *record_btrace_thread_observer; /* Temporarily allow memory accesses. */ static int record_btrace_allow_memory_access; +/* Command lists for "set/show record btrace". */ +static struct cmd_list_element *set_record_btrace_cmdlist; +static struct cmd_list_element *show_record_btrace_cmdlist; + /* Print a record-btrace debug message. Use do ... while (0) to avoid ambiguities when used in if statements. */ @@ -1934,6 +1938,22 @@ cmd_record_btrace_start (char *args, int from_tty) execute_command ("target record-btrace", from_tty); } +/* The "set record btrace" command. */ + +static void +cmd_set_record_btrace (char *args, int from_tty) +{ + cmd_show_list (set_record_btrace_cmdlist, from_tty, ""); +} + +/* The "show record btrace" command. */ + +static void +cmd_show_record_btrace (char *args, int from_tty) +{ + cmd_show_list (show_record_btrace_cmdlist, from_tty, ""); +} + void _initialize_record_btrace (void); /* Initialize btrace commands. */ @@ -1946,6 +1966,29 @@ _initialize_record_btrace (void) &record_cmdlist); add_alias_cmd ("b", "btrace", class_obscure, 1, &record_cmdlist); + add_prefix_cmd ("btrace", class_support, cmd_set_record_btrace, + _("Set record options"), &set_record_btrace_cmdlist, + "set record btrace ", 0, &set_record_cmdlist); + + add_prefix_cmd ("btrace", class_support, cmd_show_record_btrace, + _("Show record options"), &show_record_btrace_cmdlist, + "show record btrace ", 0, &show_record_cmdlist); + + /* Record instructions number limit command. */ + add_setshow_boolean_cmd ("allow-memory-access", no_class, + &record_btrace_allow_memory_access, _("\ +Set whether memory accesses are allowed during replay."), _("\ +Show whether memory accesses are allowed during replay."), + _("Default is OFF.\n\n\ +The btrace record target does not trace data.\n\ +The memory therefore corresponds to the end of the trace and not \ +to the current replay position.\n\n\ +When ON, allow accesses to arbitrary memory during replay.\n\ +When OFF, only allow accesses to read-only memory during replay."), + NULL, NULL, + &set_record_btrace_cmdlist, + &show_record_btrace_cmdlist); + init_record_btrace_ops (); add_target (&record_btrace_ops); diff --git a/gdb/testsuite/gdb.btrace/data.exp b/gdb/testsuite/gdb.btrace/data.exp index 64c5443..cfb1395 100644 --- a/gdb/testsuite/gdb.btrace/data.exp +++ b/gdb/testsuite/gdb.btrace/data.exp @@ -40,6 +40,14 @@ gdb_test "reverse-step" ".*test\.4.*" gdb_test "print glob" "unavailable\[^\\\r\\\n\]*" gdb_test "print loc" "unavailable\[^\\\r\\\n\]*" +# we can read memory if we explicitly allow it. +gdb_test_no_output "set record btrace allow-memory-access on" +gdb_test "print glob" "1" + +# we can't if we don't explicitly allow it. +gdb_test_no_output "set record btrace allow-memory-access off" +gdb_test "print glob" "unavailable\[^\\\r\\\n\]*" + # stop replaying and try again gdb_test "record goto end" gdb_test "print glob" "1" -- 1.8.3.1