From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28459 invoked by alias); 22 Mar 2013 09:51:39 -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 27052 invoked by uid 89); 22 Mar 2013 09:50:18 -0000 X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.1 Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Fri, 22 Mar 2013 09:50:14 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1UIybz-0001A1-5l from Yao_Qi@mentor.com ; Fri, 22 Mar 2013 02:50:11 -0700 Received: from SVR-ORW-FEM-03.mgc.mentorg.com ([147.34.97.39]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Fri, 22 Mar 2013 02:50:08 -0700 Received: from qiyao.dyndns.org (147.34.91.1) by svr-orw-fem-03.mgc.mentorg.com (147.34.97.39) with Microsoft SMTP Server id 14.1.289.1; Fri, 22 Mar 2013 02:50:06 -0700 Message-ID: <514C291B.7010201@codesourcery.com> Date: Fri, 22 Mar 2013 11:13:00 -0000 From: Yao Qi User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130110 Thunderbird/17.0.2 MIME-Version: 1.0 To: Pedro Alves CC: Subject: Re: [PATCH] Rely on beneath to do partial xfer from tfile target References: <1363774156-31949-1-git-send-email-yao@codesourcery.com> <5149A022.7070302@redhat.com> In-Reply-To: <5149A022.7070302@redhat.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-SW-Source: 2013-03/txt/msg00834.txt.bz2 On 03/20/2013 07:40 PM, Pedro Alves wrote: > But the patch has another related change in behavior which > it didn't look like was considered. If we load the tfile target, > but we're not yet looking at any trace frame, we currently get: > > (gdb) p testglob > Cannot access memory at address 0x60131c > > With your patch, we now get: > > (gdb) p testglob > $1 = 31415 > > So we're left discussing whether that is a desirable change. > I can see arguments for error, or printing > the value of the variable in the executable. The latter seems > to me the least desirable, with perhaps being > the best one? I agree that is the best choice. The "non-const- not-collected data" should be also, right? If so, I'll post a patch to change "Cannot access memory at address" to "". > > Meanwhile, I've applied this testsuite patch that covers > the behavior that the patch doesn't change, WRT to non-const > globals, and your disassembly bit. Thanks. Inspired by your patch, I also add a new test to cover more, which checks printing four variables {collected, not collected} x {const, non-const} in different situations. It shows the change you gave above, and it is also easy to be extended to test ctf. -- Yao (齐尧) gdb/testsuite: * gdb.trace/read-memory.c: New. * gdb.trace/read-memory.exp: New. --- gdb/testsuite/gdb.trace/read-memory.c | 46 +++++++++ gdb/testsuite/gdb.trace/read-memory.exp | 163 +++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+), 0 deletions(-) create mode 100644 gdb/testsuite/gdb.trace/read-memory.c create mode 100644 gdb/testsuite/gdb.trace/read-memory.exp diff --git a/gdb/testsuite/gdb.trace/read-memory.c b/gdb/testsuite/gdb.trace/read-memory.c new file mode 100644 index 0000000..bc423b9 --- /dev/null +++ b/gdb/testsuite/gdb.trace/read-memory.c @@ -0,0 +1,46 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +int testglob = 0; + +int testglob_not_collected = 10; + +const int constglob = 10000; + +const int constglob_not_collected = 100; + +static void +start (void) +{} + +static void +end (void) +{} + +int +main (void) +{ + testglob++; + testglob_not_collected++; + + start (); + + testglob++; + testglob_not_collected++; + end (); + return 0; +} diff --git a/gdb/testsuite/gdb.trace/read-memory.exp b/gdb/testsuite/gdb.trace/read-memory.exp new file mode 100644 index 0000000..e7c0af3 --- /dev/null +++ b/gdb/testsuite/gdb.trace/read-memory.exp @@ -0,0 +1,163 @@ +# Copyright 2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib "trace-support.exp" + +standard_testfile + +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ + executable {debug nowarnings}] != "" } { + untested read-memory.exp + return -1 +} +clean_restart $testfile +if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 +} + +if ![gdb_target_supports_trace] { + unsupported "target does not support trace" + return -1 +} + +# Set tracepoints, start tracing and collect data. + +proc set_tracepoint_and_collect { } { + global testfile srcfile + + # Start with a fresh gdb. + clean_restart ${testfile} + if ![runto_main] { + fail "Can't run to main" + return -1 + } + gdb_test "break end" "Breakpoint \[0-9\] at .*" + gdb_test "trace start" "Tracepoint \[0-9\] at .*" + gdb_trace_setactions "set action for tracepoint" "" \ + "collect testglob" "^$" \ + "collect constglob" "^$" + + gdb_test_no_output "tstart" + gdb_test "continue" ".*Breakpoint.* end .*at.*$srcfile.*" \ + "continue to end" + gdb_test_no_output "tstop" +} + +with_test_prefix "live" { + set_tracepoint_and_collect + + gdb_test "print testglob" " = 2" + gdb_test "print testglob_not_collected" " = 12" + gdb_test "print constglob" " = 10000" + gdb_test "print constglob_not_collected" " = 100" +} + +with_test_prefix "live target tfind" { + gdb_test "tfind 0" "Found trace frame 0, tracepoint \[0-9\]+.*" \ + "tfind 0" + gdb_test "print testglob" " = 1" + gdb_test "print testglob_not_collected" " = " + gdb_test "print constglob" " = 10000" + gdb_test "print constglob_not_collected" " = 100" + gdb_test "tfind" "Target failed to find requested trace frame." \ + "tfind does not find a second frame" +} + +# Save trace frames to trace file. +set tracefile [standard_output_file ${testfile}] +gdb_test "tsave ${tracefile}.tfile" \ + "Trace data saved to file '${tracefile}.tfile'.*" \ + "save tfile trace" + +# Test read memory when changing target from remote to ${target}. + +proc test_from_remote { target } { + global gdb_prompt testfile + global tracefile + + with_test_prefix "remote to ${target}" { + set_tracepoint_and_collect + + # Change target to ${target}. + set test "change target" + gdb_test_multiple "target ${target} ${tracefile}.${target}" "$test" { + -re "A program is being debugged already. Kill it. .y or n. " { + send_gdb "y\n" + exp_continue + } + -re "$gdb_prompt $" { + pass "$test" + } + } + + with_test_prefix "/wo setting traceframe" { + gdb_test "print testglob" "Cannot access memory at address.*" + gdb_test "print testglob_not_collected" \ + "Cannot access memory at address.*" + gdb_test "print constglob" " = 10000" + gdb_test "print constglob_not_collected" " = 100" + } + with_test_prefix "/w setting traceframe" { + gdb_test "tfind 0" "Found trace frame 0, tracepoint \[0-9\]+.*" \ + "tfind 0" + gdb_test "print testglob" " = 1" + gdb_test "print testglob_not_collected" " = " + gdb_test "print constglob" " = 10000" + gdb_test "print constglob_not_collected" " = 100" + gdb_test "tfind" "Target failed to find requested trace frame." \ + "tfind does not find a second frame" + } + } +} + +test_from_remote "tfile" + +# Test read memory when changing target from exec to ${target} + +proc teset_from_exec { target } { + global srcdir subdir binfile testfile + global tracefile + + # Restart GDB and read the trace data in ${target} target. + gdb_exit + gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_file_cmd $binfile + + gdb_test "target ${target} ${tracefile}.${target}" ".*" \ + "change to ${target} target" + + with_test_prefix "exec to ${target} /wo setting traceframe" { + gdb_test "print testglob" "Cannot access memory at address.*" + gdb_test "print testglob_not_collected" \ + "Cannot access memory at address.*" + gdb_test "print constglob" " = 10000" + gdb_test "print constglob_not_collected" " = 100" + } + + with_test_prefix "exec to ${target} /w setting traceframe" { + gdb_test "tfind 0" "Found trace frame 0, tracepoint \[0-9\]+.*" \ + "tfind 0" + gdb_test "print testglob" " = 1" + gdb_test "print testglob_not_collected" " = " + gdb_test "print constglob" " = 10000" + gdb_test "print constglob_not_collected" " = 100" + gdb_test "tfind" "Target failed to find requested trace frame." \ + "tfind does not find a second frame" + } +} + +teset_from_exec "tfile" -- 1.7.7.6