From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1646 invoked by alias); 31 May 2012 10:27:55 -0000 Received: (qmail 1637 invoked by uid 22791); 31 May 2012 10:27:54 -0000 X-SWARE-Spam-Status: No, hits=-7.5 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,T_RP_MATCHES_RCVD 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; Thu, 31 May 2012 10:27:38 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q4VARawf028680 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 31 May 2012 06:27:36 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q4VARYDf000808; Thu, 31 May 2012 06:27:35 -0400 Message-ID: <4FC74796.5070504@redhat.com> Date: Thu, 31 May 2012 10:27:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 MIME-Version: 1.0 To: Jonas Zaddach CC: gdb@sourceware.org Subject: Re: How to configure GDB for software single-stepping on an ARM remote stub References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2012-05/txt/msg00152.txt.bz2 On 05/31/2012 11:02 AM, Jonas Zaddach wrote: > Hi, > > I have written a remote stub for some ARM hardware that supports just > memory breakpoints (the device does not have a hardware debugging > unit). I figured out that I need single-stepping to go around > breakpoints, Or more fundamentally, for all stepping, right? > and that there is support for software single-stepping in > the code ... but I have no idea on how to tell GDB that I want > software single-stepping on my target. Can you give me a hint how to > do it or where to look for documentation? Unfortunately, GDB is not smart enough to figure out the target can't single-step, and that it needs to do it itself with software single-stepping. The current way is that GDB hardcodes knowledge of when does the target need it; it depends on architecture, for example, on ARM and MIPS, gdb assumes the target can step, and then knows that if the target is running Linux, it needs software stepping. On other archs, knowing that no chip was or will be built with hardware debugging smarts, GDB always uses software stepping. The simplest is to use a hack like below to force your GDB to assume software stepping is necessary. The best would be to make GDB smarter. gdb/arm-tdep.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index df5dea7..829cb5c 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -10122,6 +10122,8 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) _("arm_gdbarch_init: bad byte order for float format")); } + set_gdbarch_software_single_step (gdbarch, arm_software_single_step); + /* On ARM targets char defaults to unsigned. */ set_gdbarch_char_signed (gdbarch, 0);