From patchwork Fri Sep 12 12:31:25 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: 2786 Received: (qmail 2386 invoked by alias); 12 Sep 2014 12:31:48 -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 2373 invoked by uid 89); 12 Sep 2014 12:31:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.5 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD 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 12:31:47 +0000 Received: from /spool/local by e24smtp04.br.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 12 Sep 2014 09:31:43 -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; Fri, 12 Sep 2014 09:31:40 -0300 Received: from d24relay02.br.ibm.com (d24relay02.br.ibm.com [9.13.184.26]) by d24dlp02.br.ibm.com (Postfix) with ESMTP id 1E9F41DC005C for ; Fri, 12 Sep 2014 08:31:39 -0400 (EDT) Received: from d24av03.br.ibm.com (d24av03.br.ibm.com [9.8.31.95]) by d24relay02.br.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id s8CCUWBD35127316 for ; Fri, 12 Sep 2014 09:30:32 -0300 Received: from d24av03.br.ibm.com (localhost [127.0.0.1]) by d24av03.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s8CCVd4q002924 for ; Fri, 12 Sep 2014 09:31:39 -0300 Received: from grandaddy.ibm.com ([9.8.14.96]) by d24av03.br.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id s8CCVcXK002916; Fri, 12 Sep 2014 09:31:39 -0300 From: Edjunior Barbosa Machado To: gdb-patches@sourceware.org Cc: Ulrich Weigand , Sergio Durigan Junior , Pedro Alves Subject: =?UTF-8?q?Re=3A=20=5BPATCH=5D=20=5BPR=20tdep/17379=5D=20Fix=20internal-error=20when=20stack=20pointer=20is=20invalid?= Date: Fri, 12 Sep 2014 09:31:25 -0300 Message-Id: <1410525085-29172-1-git-send-email-emachado@linux.vnet.ibm.com> In-Reply-To: <5412C3F0.9000703@redhat.com> MIME-Version: 1.0 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 14091212-1820-0000-0000-0000017D5996 X-IsSubscribed: yes Thank you all for the review. I've just pushed the following patch with the suggested additional fixes. https://sourceware.org/ml/gdb-cvs/2014-09/msg00055.html Thanks and regards, --- Edjunior gdb/ChangeLog 2014-09-12 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-12 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 | 42 ++++++++++++++++++++++++++ 3 files changed, 74 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..420bcbc --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-stackless.exp @@ -0,0 +1,42 @@ +# 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, see . + +# Testcase for PR tdep/17379. + +if {![istarget "powerpc*-*-*"]} then { + verbose "Skipping powerpc-stackless.exp" + return +} + +standard_testfile .S + +if { [prepare_for_testing $testfile.exp $testfile $srcfile] } { + untested powerpc-stackless.exp + return -1 +} + +# Run until SIGSEGV. +gdb_run_cmd + +set test "run until SIGSEGV" +gdb_test_multiple "" $test { + -re "Program received signal SIGSEGV.*$gdb_prompt $" { + pass $test + } +} + +# Ensure that 'info registers' works properly and does not generate +# an internal-error. +gdb_test "info registers" "r0.*" "info registers"