From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29637 invoked by alias); 13 Aug 2012 16:31:12 -0000 Received: (qmail 29625 invoked by uid 22791); 13 Aug 2012 16:31:07 -0000 X-SWARE-Spam-Status: No, hits=-4.7 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,TW_BL,TW_XT X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 13 Aug 2012 16:30:52 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1T0xXX-0003vn-WA from joseph_myers@mentor.com for gdb-patches@sourceware.org; Mon, 13 Aug 2012 09:30:52 -0700 Received: from SVR-IES-FEM-02.mgc.mentorg.com ([137.202.0.106]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Mon, 13 Aug 2012 09:30:51 -0700 Received: from digraph.polyomino.org.uk (137.202.0.76) by SVR-IES-FEM-02.mgc.mentorg.com (137.202.0.106) with Microsoft SMTP Server id 14.1.289.1; Mon, 13 Aug 2012 17:30:49 +0100 Received: from jsm28 (helo=localhost) by digraph.polyomino.org.uk with local-esmtp (Exim 4.76) (envelope-from ) id 1T0xXU-0006Ti-JJ; Mon, 13 Aug 2012 16:30:48 +0000 Date: Mon, 13 Aug 2012 16:31:00 -0000 From: "Joseph S. Myers" To: Yao Qi CC: Subject: Re: Fix ARM stepping over Thumb-mode "bx pc" or "blx pc" In-Reply-To: <50260D91.5070000@codesourcery.com> Message-ID: References: <50260D91.5070000@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" 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/msg00368.txt.bz2 On Sat, 11 Aug 2012, Yao Qi wrote: > I don't have any preference on clearing either the last one bit in > address or the last two bits. Looks like two ways coexist in arm-tdep.c > nowadays. As 'pc_val' is set by MAKE_THUMB_ADDR at the beginning, it is > better to revert its change by using UNMAKE_THUMB_ADDR (which only > clears the last one bit of address). This version uses UNMAKE_THUMB_ADDR as requested. Tested with no regressions with cross to arm-none-linux-gnueabi. 2012-08-13 Joseph Myers * arm-tdep.c (thumb_get_next_pc_raw): Mask off low bits for bx pc and blx pc. testsuite: 2012-08-13 Joseph Myers * gdb.arch/thumb-bx-pc.S: New file. * gdb.arch/thumb-bx-pc.exp: New file. Index: gdb/arm-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/arm-tdep.c,v retrieving revision 1.365 diff -u -r1.365 arm-tdep.c --- gdb/arm-tdep.c 25 Jun 2012 12:32:45 -0000 1.365 +++ gdb/arm-tdep.c 13 Aug 2012 13:56:04 -0000 @@ -4541,7 +4541,7 @@ else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */ { if (bits (inst1, 3, 6) == 0x0f) - nextpc = pc_val; + nextpc = UNMAKE_THUMB_ADDR (pc_val); else nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6)); } Index: gdb/testsuite/gdb.arch/thumb-bx-pc.S =================================================================== RCS file: gdb/testsuite/gdb.arch/thumb-bx-pc.S diff -N gdb/testsuite/gdb.arch/thumb-bx-pc.S --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.arch/thumb-bx-pc.S 13 Aug 2012 13:56:05 -0000 @@ -0,0 +1,34 @@ +/* Test PC adjustment from Thumb-mode "bx pc" instruction. + + 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 . */ + + .syntax unified + .thumb + .text + .p2align 2 + .global main + .thumb + .thumb_func + .type main, %function +main: + bx pc + nop +.code 32 + mov r0, #0 + bx lr + .size main, .-main Index: gdb/testsuite/gdb.arch/thumb-bx-pc.exp =================================================================== RCS file: gdb/testsuite/gdb.arch/thumb-bx-pc.exp diff -N gdb/testsuite/gdb.arch/thumb-bx-pc.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.arch/thumb-bx-pc.exp 13 Aug 2012 13:56:05 -0000 @@ -0,0 +1,41 @@ +# 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 . + +# Test PC adjustment from Thumb-mode "bx pc" instruction. + +if {![istarget arm*-*]} then { + verbose "Skipping ARM tests." + return +} + +set testfile "thumb-bx-pc" +set srcfile ${testfile}.S +set opts {} + +if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] { + untested ${testfile}.exp + return -1 +} + +if ![runto_main] then { + untested ${testfile}.exp + return -1 +} + +gdb_test "stepi" "0x\[0-9a-fA-F\]+ in main \\(\\)" "stepi for bx pc" + +gdb_test "x /i \$pc" \ + "0x\[0-9a-fA-F\]+ :\[ \t\]+mov\[ \t\]+r0,\[ \t\]+#0.*" \ + "stepi reached correct instruction" -- Joseph S. Myers joseph@codesourcery.com