From patchwork Fri Sep 12 02:46:47 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Edjunior Barbosa Machado X-Patchwork-Id: 2778 Received: (qmail 30463 invoked by alias); 12 Sep 2014 02:47:29 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 30445 invoked by uid 89); 12 Sep 2014 02:47:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, UNSUBSCRIBE_BODY autolearn=ham version=3.3.2 X-HELO: e24smtp04.br.ibm.com Received: from e24smtp04.br.ibm.com (HELO e24smtp04.br.ibm.com) (32.104.18.25) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Fri, 12 Sep 2014 02:47:22 +0000 Received: from /spool/local by e24smtp04.br.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 11 Sep 2014 23:47:18 -0300 Received: from d24dlp02.br.ibm.com (9.18.248.206) by e24smtp04.br.ibm.com (10.172.0.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 11 Sep 2014 23:47:15 -0300 Received: from d24relay03.br.ibm.com (d24relay03.br.ibm.com [9.13.184.25]) by d24dlp02.br.ibm.com (Postfix) with ESMTP id 4A86D1DC005C for ; Thu, 11 Sep 2014 22:47:14 -0400 (EDT) Received: from d24av01.br.ibm.com (d24av01.br.ibm.com [9.8.31.91]) by d24relay03.br.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id s8C2kKjJ30605384 for ; Thu, 11 Sep 2014 23:46:20 -0300 Received: from d24av01.br.ibm.com (localhost [127.0.0.1]) by d24av01.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s8C2lEe2009518 for ; Thu, 11 Sep 2014 23:47:14 -0300 Received: from grandaddy.ibm.com ([9.18.199.8]) by d24av01.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id s8C2lDkX009515; Thu, 11 Sep 2014 23:47:14 -0300 From: Edjunior Barbosa Machado To: gdb-patches@sourceware.org Cc: Ulrich Weigand , Sergio Durigan Junior Subject: =?UTF-8?q?Re=3A=20=5BPATCH=5D=20=5BPR=20tdep/17379=5D=20Fix=20internal-error=20when=20stack=20pointer=20is=20invalid?= Date: Thu, 11 Sep 2014 23:46:47 -0300 Message-Id: <1410490007-19756-1-git-send-email-emachado@linux.vnet.ibm.com> In-Reply-To: <87lhpp68xf.fsf@redhat.com> MIME-Version: 1.0 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 14091202-1820-0000-0000-0000017CA079 X-IsSubscribed: yes Thanks Sergio for your feedback. I'm resending the patch with an additional testcase as you suggested. --- Edjunior gdb/ChangeLog 2014-09-11 Edjunior Barbosa Machado Ulrich Weigand  PR tdep/17379 * rs6000-tdep.c (rs6000_frame_cache): Use safe_read_memory_integer instead of read_memory_unsigned_integer. gdb/testcase/ChangeLog 2014-09-11 Edjunior Barbosa Machado PR tdep/17379 * gdb.arch/powerpc-stackless.S: New file. * gdb.arch/powerpc-stackless.exp: New file. --- gdb/rs6000-tdep.c | 11 ++++-- gdb/testsuite/gdb.arch/powerpc-stackless.S | 24 +++++++++++++ gdb/testsuite/gdb.arch/powerpc-stackless.exp | 48 ++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 gdb/testsuite/gdb.arch/powerpc-stackless.S create mode 100644 gdb/testsuite/gdb.arch/powerpc-stackless.exp diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 730afe7..dabf448 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -3190,9 +3190,14 @@ rs6000_frame_cache (struct frame_info *this_frame, void **this_cache) } if (!fdata.frameless) - /* Frameless really means stackless. */ - cache->base - = read_memory_unsigned_integer (cache->base, wordsize, byte_order); + { + /* Frameless really means stackless. */ + LONGEST backchain; + + if (safe_read_memory_integer (cache->base, wordsize, + byte_order, &backchain)) + cache->base = (CORE_ADDR) backchain; + } trad_frame_set_value (cache->saved_regs, gdbarch_sp_regnum (gdbarch), cache->base); diff --git a/gdb/testsuite/gdb.arch/powerpc-stackless.S b/gdb/testsuite/gdb.arch/powerpc-stackless.S new file mode 100644 index 0000000..bbf92bb --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-stackless.S @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 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 + +FUNC_START(main) + li sp,0 + mtlr sp + blr +FUNC_END(main) diff --git a/gdb/testsuite/gdb.arch/powerpc-stackless.exp b/gdb/testsuite/gdb.arch/powerpc-stackless.exp new file mode 100644 index 0000000..f4b2a90 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-stackless.exp @@ -0,0 +1,48 @@ +# Copyright 2014 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Testcase for PR tdep/17379. + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping powerpc-stackless.exp" + return +} + +standard_testfile powerpc-stackless.S + +if { [prepare_for_testing $testfile.exp $testfile $srcfile] } { + untested powerpc-stackless.exp + return -1 +} + +# Run until SIGSEGV. +gdb_run_cmd + +gdb_expect { + -re "Program received signal SIGSEGV.*$gdb_prompt $" { + pass "run until SIGSEGV" + } + -re ".*$gdb_prompt $" { + fail "run until SIGSEGV" + } + timeout { + fail "run until SIGSEGV (timeout)" + } +} + +# Ensure that 'info registers' works properly and does not generate +# an internal-error. +gdb_test "info registers" "r0.*" "info registers"