From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32017 invoked by alias); 23 Dec 2010 07:19:08 -0000 Received: (qmail 32001 invoked by uid 22791); 23 Dec 2010 07:19:06 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 23 Dec 2010 07:19:00 +0000 Received: (qmail 30327 invoked from network); 23 Dec 2010 07:18:58 -0000 Received: from unknown (HELO ?192.168.0.101?) (yao@127.0.0.2) by mail.codesourcery.com with ESMTPA; 23 Dec 2010 07:18:58 -0000 Message-ID: <4D12F7DF.6040900@codesourcery.com> Date: Thu, 23 Dec 2010 09:11:00 -0000 From: Yao Qi User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101208 Thunderbird/3.1.7 MIME-Version: 1.0 To: Joel Brobecker CC: gdb-patches@sourceware.org Subject: Re: New testcase arm-disp-step.exp References: <4D10B005.8020002@codesourcery.com> <20101223041625.GR2596@adacore.com> In-Reply-To: <20101223041625.GR2596@adacore.com> Content-Type: multipart/mixed; boundary="------------050303050202000806070103" 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: 2010-12/txt/msg00430.txt.bz2 This is a multi-part message in MIME format. --------------050303050202000806070103 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-length: 1196 On 12/23/2010 12:16 PM, Joel Brobecker wrote: >> +# Get things started. >> + >> +gdb_exit >> +gdb_start >> +gdb_reinitialize_dir $srcdir/$subdir >> +gdb_load ${binfile} > > Use "clean_restart".... Done. >> +# which is in library might be compiled in Thumb. >> +gdb_test "set displaced-stepping off" "" > > Use gdb_test_no_output. Done. >> +gdb_test "set displaced-stepping on" "" > > Same here. > Done. >> +gdb_test_multiple "continue" "continue to test_call" { >> + -re ".*bl test_call_subr.*" { >> + pass "continue to test_call" >> + } >> + -re "Displaced stepping is only supported in" { >> + xfail $testfile >> + return > > I'm not sure about the xfail. Why did you decide to use it? Because I misunderstood xfail. > I thought we were supposed to use kfail in this case, since this is > a debugger issue? xfail should be used when the failure is caused > by the debugging environment (compiler bug, missing feature in kernel, > etc). Yes, we should use kfail here. Now, run arm-disp-step.exp with with \{-mthumb,-marm\}\{-march=armv5t,-march=armv7-a\}, get result like this, === gdb Summary === # of expected passes 60 # of known failures 2 -- Yao (齐尧) --------------050303050202000806070103 Content-Type: text/x-patch; name="arm_disp_step_test_1223.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="arm_disp_step_test_1223.patch" Content-length: 8086 testsuite/ * gdb.arch/arm-disp-step.exp: New. * gdb.arch/arm-disp-step.S: New. --- /dev/null 2010-12-23 13:09:47.085306261 +0800 +++ gdb/testsuite/gdb.arch/arm-disp-step.exp 2010-12-23 15:07:24.000000000 +0800 @@ -0,0 +1,172 @@ +# Copyright 2010 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 . + +# This file is part of the gdb testsuite. + +# Test arm displaced stepping. + +if $tracelevel { + strace $tracelevel +} + +if {![istarget "arm*-*-*"]} then { + verbose "Skipping arm displaced stepping tests." + return +} + +set testfile "arm-disp-step" +set srcfile ${testfile}.S +set binfile ${objdir}/${subdir}/${testfile} + +set additional_flags "-Wa,-g" + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } { + untested arm-disp-step.exp + return -1 +} + + +######################################### +# Test ldm/stm related to PC. +proc test_ldm_stm_pc {} { + global srcfile + # Try to set breakpoint on test_ldm_stm_pc. If symbol 'test_ldm_stm_pc' + # can't be resolved, test case is compiled in Thumb mode, skip it. + gdb_test_multiple "break *test_ldm_stm_pc" "break test_ldm_stm_pc" { + -re "Breakpoint.*at.* file .*$srcfile, line.*" { + pass "break test_ldm_stm_pc" + } + -re "Function \"test_ldm_stm_pc\" not defined\..*Make breakpoint pending on future shared library load.*y or .n.. $" { + gdb_test "n" "" "Test case is compiled in Thumb mode" + return + } + } + + gdb_test "break *test_ldm_pc" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_ldm_pc" + gdb_test "break *test_ldm_stm_pc_ret" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_ldm_stm_pc_ret" + + gdb_continue_to_breakpoint "continue to test_ldm_stm_pc" \ + ".*stmdb.*sp\!\,.*\{lr\, pc\}.*" + gdb_continue_to_breakpoint "continue to test_ldm_pc" \ + ".*ldmia.*sp\!\,.*\{pc\}.*" + gdb_continue_to_breakpoint "continue to test_ldm_stm_pc_ret" \ + ".*bx lr.*" +} +########################################## +# Test call/ret. +proc test_call_ret {} { + global srcfile + gdb_test "break *test_call_end" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_call_end" + gdb_test "break *test_ret" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_ret" + gdb_test "break *test_ret_end" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_ret_end" + + gdb_continue_to_breakpoint "continue to test_call_end" \ + ".*@ Location test_call_end.*" + gdb_continue_to_breakpoint "continue to test_ret" \ + ".*bx lr.*" + gdb_continue_to_breakpoint "continue to test_ret_end" \ + ".*@ Location test_ret_end.*" +} + + +######################################### +# Test branch +proc test_branch {} { + global srcfile + gdb_test "break *test_branch" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_branch" + gdb_test "break *L_branch" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break Lbranch" + + gdb_continue_to_breakpoint "continue to test_branch" \ + ".*b.*L_branch.*" + gdb_continue_to_breakpoint "continue to Lbranch" \ + ".*bx lr.*" +} + +######################################### + +# Test ldr from pc +proc test_ldr_from_pc {} { + global srcfile + gdb_test "break *test_ldr_pc" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_ldr_pc" + gdb_test "break test_ldr_pc_ret" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_ldr_pc_ret" + + gdb_continue_to_breakpoint "continue to test_ldr_pc" \ + ".*ldr.*r1\,.*\[pc, #0\].*" + gdb_continue_to_breakpoint "continue to Lbranch" \ + ".*bx lr.*" +} + +# Get things started. + +clean_restart ${testfile} + +# Turn displaced stepping off before runto main. When displaced stepping +# is on, and we type 'run', GDB will first try to single step on _dl_debug_state, +# which is in library might be compiled in Thumb. +gdb_test_no_output "set displaced-stepping off" + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +gdb_test_no_output "set displaced-stepping on" +gdb_test "show displaced-stepping" ".* displaced stepping .* is on.*" + +gdb_test "break *test_call" \ + "Breakpoint.*at.* file .*$srcfile, line.*" \ + "break test_call" + +gdb_test_multiple "continue" "continue to test_call" { + -re ".*bl test_call_subr.*" { + pass "continue to test_call" + } + -re "Displaced stepping is only supported in" { + kfail "gdb/NNNN" $testfile + return + } + } + +test_call_ret + +test_branch + +test_ldr_from_pc + +test_ldm_stm_pc + +########################################## + +# Done, run program to exit. + +gdb_continue_to_end "arm-disp-step" --- /dev/null 2010-12-23 13:09:47.085306261 +0800 +++ gdb/testsuite/gdb.arch/arm-disp-step.S 2010-12-23 15:07:20.000000000 +0800 @@ -0,0 +1,120 @@ +/* Copyright 2010 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 . */ + + .syntax unified + .text + .type main,%function +#if defined (__thumb__) || defined (__thumb2__) + .code 16 + .thumb_func +#endif + .globl main +main: + push {r7, lr} + add sp, sp, #4 + mov r7, sp + + + /* Test call and return */ + .global test_call +test_call: + bl test_call_subr + .global test_ret_end +test_ret_end: + nop @ Location test_ret_end + + /* Test branch */ + bl test_branch + + /* Test ldr from pc */ + bl test_ldr_pc + + /* Test ldm/stm only in ARM mode */ +#if !defined (__thumb__) && !defined (__thumb2__) + bl test_ldm_stm_pc +#endif + + /* Return */ + mov sp, r7 + sub sp, sp, #4 + movs r0, #0 + pop {r7, pc} + .size main, .-main + + .global test_call_subr +#if defined (__thumb__) || defined (__thumb2__) + .code 16 + .thumb_func +#endif + .type test_call_subr, %function +test_call_subr: + nop + .global test_call_end +test_call_end: + nop @ Location test_call_end + .global test_ret +test_ret: + bx lr + .size test_call_subr, .-test_call_subr + + + .global test_branch +#if defined (__thumb__) || defined (__thumb2__) + .code 16 + .thumb_func +#endif + .type test_branch, %function +test_branch: + b L_branch + .global +L_branch: + bx lr + .size test_branch, .-test_branch + + .global test_ldr_pc +#if defined (__thumb__) || defined (__thumb2__) + .code 16 + .thumb_func +#endif + .type test_ldr_pc, %function +test_ldr_pc: + ldr r1, [pc, #0] + + .global +test_ldr_pc_ret: + bx lr + .size test_ldr_pc, .-test_ldr_pc + +#if !defined (__thumb__) && !defined (__thumb2__) + .global test_ldm_stm_pc + .type test_ldm_stm_pc, %function +test_ldm_stm_pc: + stmdb sp!, {lr, pc} + ldmia sp!, {r0, r1} + ldr r0, .L1 + stmdb sp!, {r0} + .global +test_ldm_pc: + ldmia sp!, {pc} + .global +test_ldm_stm_pc_ret: + bx lr + .align 2 +.L1: + .word test_ldm_stm_pc_ret + .size test_ldm_stm_pc, .-test_ldm_stm_pc +#endif --------------050303050202000806070103--