From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18754 invoked by alias); 17 Sep 2013 04:14:11 -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 18742 invoked by uid 89); 17 Sep 2013 04:14:11 -0000 Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 17 Sep 2013 04:14:11 +0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,RDNS_NONE,SPF_HELO_FAIL autolearn=no version=3.3.2 X-HELO: relay1.mentorg.com Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1VLmft-00028F-Dy from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Mon, 16 Sep 2013 21:14:05 -0700 Received: from SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Mon, 16 Sep 2013 21:14:05 -0700 Received: from qiyao.dyndns.org (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.2.247.3; Mon, 16 Sep 2013 21:14:04 -0700 From: Yao Qi To: Subject: [PATCH] Fix PR server/15959 Date: Tue, 17 Sep 2013 04:14:00 -0000 Message-ID: <1379391203-14928-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2013-09/txt/msg00484.txt.bz2 When I start gdbserver with option --wrapper, it hangs there. After some analysis, it is caused by accessing two fields of 'struct thread_resume' which are uninitialized. In server.c:start_inferior, struct thread_resume resume_info; resume_info.thread = pid_to_ptid (signal_pid); resume_info.kind = resume_continue; resume_info.sig = 0; fields 'step_range_start' and 'step_range_end' are not initialized, but they are used in linux-low.c:lwp_in_step_range. This patch is to fix it by set zero to 'resume_info'. I find we don't have a test case for option '--wrapper', so I add one. Even without the fix to server.c, gdb.server/wrapper.exp can pass on my machine, because the uninitialized contents on stack are undetermined. However, fire gdbserver with 'valgrind --track-origins=yes' can report this problem as: ==13596== Uninitialised value was created by a stack allocation ==13596== at 0x8050D88: start_inferior (server.c:203) with this patch applied, this message goes away. gdb/gdbserver: 2013-09-17 Yao Qi PR server/15959 * server.c (start_inferior): Clear 'resume_info'. gdb/testsuite/ 2013-09-17 Yao Qi * gdb.server/wrapper.c: New. * gdb.server/wrapper.exp: New. --- gdb/gdbserver/server.c | 1 + gdb/testsuite/gdb.server/wrapper.c | 35 ++++++++++++++++++++++++ gdb/testsuite/gdb.server/wrapper.exp | 48 ++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 0 deletions(-) create mode 100644 gdb/testsuite/gdb.server/wrapper.c create mode 100644 gdb/testsuite/gdb.server/wrapper.exp diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index f4e1525..4de20d5 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -256,6 +256,7 @@ start_inferior (char **argv) { struct thread_resume resume_info; + memset (&resume_info, 0, sizeof (resume_info)); resume_info.thread = pid_to_ptid (signal_pid); resume_info.kind = resume_continue; resume_info.sig = 0; diff --git a/gdb/testsuite/gdb.server/wrapper.c b/gdb/testsuite/gdb.server/wrapper.c new file mode 100644 index 0000000..75e8c1d --- /dev/null +++ b/gdb/testsuite/gdb.server/wrapper.c @@ -0,0 +1,35 @@ +/* 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 . */ + +#include +#include + +static char *d = NULL; + +static void +marker (void) +{} + +int +main(void) +{ + d = getenv("TEST"); + + marker (); + + return 0; +} diff --git a/gdb/testsuite/gdb.server/wrapper.exp b/gdb/testsuite/gdb.server/wrapper.exp new file mode 100644 index 0000000..ee2e430 --- /dev/null +++ b/gdb/testsuite/gdb.server/wrapper.exp @@ -0,0 +1,48 @@ +# 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 . + +# Test --wrapper option of GDBserver. + +load_lib gdbserver-support.exp + +standard_testfile + +if { [skip_gdbserver_tests] } { + return 0 +} + +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { + return -1 +} + +# Make sure we're disconnected, in case we're testing with an +# extended-remote board, therefore already connected. +gdb_test "disconnect" ".*" + +set target_exec [gdbserver_download_current_prog] +# Start GDBserver with option '--wrapper'. +set res [gdbserver_start "--wrapper env TEST=1 --" $target_exec] + +set gdbserver_protocol [lindex $res 0] +set gdbserver_gdbport [lindex $res 1] +gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport + +gdb_breakpoint marker +gdb_test "continue" "Breakpoint.* marker .*" "continue to marker" +# Test env var TEST is correctly passed to the program through +# --wrapper. +gdb_test "p d" "\\$${decimal} = ${hex} \"1\".*" -- 1.7.7.6