From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32295 invoked by alias); 17 Aug 2012 18:14:53 -0000 Received: (qmail 32282 invoked by uid 22791); 17 Aug 2012 18:14:51 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 17 Aug 2012 18:14:34 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q7HIEWZO015162 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 17 Aug 2012 14:14:32 -0400 Received: from host2.jankratochvil.net (ovpn-116-37.ams2.redhat.com [10.36.116.37]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q7HIEQAT007229 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Fri, 17 Aug 2012 14:14:29 -0400 Date: Fri, 17 Aug 2012 18:14:00 -0000 From: Jan Kratochvil To: Joel Brobecker Cc: gdb-patches@sourceware.org Subject: [patch] testsuite: Test the unwinder off-by-one [Re: [RFA] DWARF frame unwinder executes one too many rows] Message-ID: <20120817181425.GA19445@host2.jankratochvil.net> References: <1343343082-15401-1-git-send-email-brobecker@adacore.com> <20120804123005.GA30962@host2.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120804123005.GA30962@host2.jankratochvil.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes 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 X-SW-Source: 2012-08/txt/msg00488.txt.bz2 On Sat, 04 Aug 2012 14:30:05 +0200, Jan Kratochvil wrote: > but the Ada testcase does not work for me (it always PASSes for i386 and it > always FAILs for x86_64). Do you have some precompiled binaries so that I can > look at them. Joel has sent them off-list, I found the Ada testcase works for me on i386 with the attached update. I will check it in. Thanks, Jan gdb/testsuite/ 2012-08-17 Jan Kratochvil * gdb.ada/rdv_wait.exp (set debug-file-directory): New command. * gdb.arch/i386-cfi-notcurrent.S: New file. * gdb.arch/i386-cfi-notcurrent.exp: New file. diff --git a/gdb/testsuite/gdb.ada/rdv_wait.exp b/gdb/testsuite/gdb.ada/rdv_wait.exp index 67e0f1e..f2b00b7 100644 --- a/gdb/testsuite/gdb.ada/rdv_wait.exp +++ b/gdb/testsuite/gdb.ada/rdv_wait.exp @@ -23,6 +23,9 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } clean_restart ${testfile} +# This test won't work properly if system debuginfo is installed. +gdb_test_no_output "set debug-file-directory" + runto "break_me" # Switch to task 2, and verify that GDB is able to unwind all the way diff --git a/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S new file mode 100644 index 0000000..eae94b0 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S @@ -0,0 +1,76 @@ +/* Copyright 2012 Free Software Foundation, Inc. + + This file is part of GDB. + + 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 . */ + +/* Testcase compiled by gcc -m32 -S -fasynchronous-unwind-tables -O2: + +static int __attribute__ ((regparm (0), stdcall, noinline, noclone)) +f (int x) +{ + return x; +} +static int __attribute__ ((noinline, noclone)) +g (void) +{ + return f (1) + 1; +} +int +main (void) +{ + return g () + 1; +} + + */ + + .text + .type f, @function +f: +.LFB0: + .cfi_startproc + movl 4(%esp), %eax + ret $4 + .cfi_endproc +.LFE0: + .size f, .-f + .type g, @function +g: +.LFB1: + .cfi_startproc + subl $4, %esp + .cfi_def_cfa_offset 8 + movl $1, (%esp) + call f + .cfi_def_cfa_offset 4 + subl $4, %esp + .cfi_def_cfa_offset 8 + addl $1, %eax + addl $4, %esp + .cfi_def_cfa_offset 4 + ret + .cfi_endproc +.LFE1: + .size g, .-g + .globl main + .type main, @function +main: +.LFB2: + .cfi_startproc + call g + addl $1, %eax + ret + .cfi_endproc +.LFE2: + .size main, .-main diff --git a/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp new file mode 100644 index 0000000..cf41c57 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp @@ -0,0 +1,34 @@ +# Copyright 2012 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 . + +# [RFA] DWARF frame unwinder executes one too many rows +# http://sourceware.org/ml/gdb-patches/2012-07/msg00650.html + +if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } { + return 0 +} + +set testfile "i386-cfi-notcurrent" +set srcfile ${testfile}.S + +if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {nodebug}] { + return -1 +} + +if ![runto f] { + return -1 +} + +gdb_test "backtrace" "#0 \[^\r\n\]* f \[^\r\n\]*\r\n#1 \[^\r\n\]* g \[^\r\n\]*\r\n#2 \[^\r\n\]* main \[^\r\n\]*"