From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 69939 invoked by alias); 1 Mar 2019 21:54:22 -0000 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 Received: (qmail 69436 invoked by uid 89); 1 Mar 2019 21:54:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-6.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=Results, Hx-languages-length:2406, 40000000 X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 01 Mar 2019 21:54:20 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id x21LsDW6023235 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 1 Mar 2019 16:54:18 -0500 Received: by simark.ca (Postfix, from userid 112) id D98F41E64E; Fri, 1 Mar 2019 16:54:13 -0500 (EST) Received: from simark.ca (localhost [127.0.0.1]) by simark.ca (Postfix) with ESMTP id 382881E475; Fri, 1 Mar 2019 16:54:13 -0500 (EST) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Fri, 01 Mar 2019 21:54:00 -0000 From: Simon Marchi To: Jeff Wandling Cc: gdb@sourceware.org Subject: Re: Debugging big-endian ARM target from little-endian host In-Reply-To: <672b1bfc87164c27a6a3e655eec6d813@MAIL01.blueorigin.com> References: <0338ed2b221c8a9e40d41037a66d847e@polymtl.ca> <672b1bfc87164c27a6a3e655eec6d813@MAIL01.blueorigin.com> Message-ID: <1222341d5bd82992b2cc14a451d5904a@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.3.6 X-IsSubscribed: yes X-SW-Source: 2019-03/txt/msg00004.txt.bz2 On 2019-03-01 14:45, Jeff Wandling wrote: > -----Original Message----- > From: Simon Marchi > Sent: Thursday, February 28, 2019 6:02 AM > To: Jeff Wandling > Cc: gdb@sourceware.org > Subject: Re: Debugging big-endian ARM target from little-endian host > > > Do "set debug remote 1" and then "continue" so that you hit your > breakpoint. Towards the end of the debug output, you should see a > vCont;c packet, with a "stop reply" packet (assuming JLink supports > the vCont packet, and you use the all-stop mode). Here's an example > with > x86-64: > > Sending packet: $vCont;c:p209a.-1#da...Packet received: > T05swbreak:;06:10ddffffff7f0000;07:10ddffffff7f0000;10:0c46555555550000;thread:p209a.209a;core:0; > > In the response, you can see a few pairs of register number/register > values. Since you know the PC you expect your program to stop at, it > should be fairly easy to spot the PC register. The value should be in > big endian, in your case. In my case, 10:0c46555555550000 corresponds > to the PC value in little endian: > > (gdb) p $pc > $1 = (void (*)()) 0x55555555460c > > If you have trouble interpreting the debug remote output, pastebin it > and send the link. > > > Results: > > https://gist.github.com/jwandblue/e1ede3f41a4e7effa7e80d5066c96724 > > The interesting result was the JLinkGDBServer doesn't emit the "vCont" > packet unless I am misreading the result. > > I'm boxed into a corner since I have a SEGGER JLink dongol and so > choosing to use JLinkGDBServer is not arbitrary. Ok, so it just seems that this "gdbserver" implementation doesn't support vCont, so GDB uses the older 'c' packet. It should not change anything for your endianness problem. The registers are read using the 'g' packet, just after the 'c'. I don't know the exact register layout for your architecture, but let's just split the result in groups of 4 bytes: 40000000 48ffffff 00000000 01000000 00000000 00000000 00000000 3f010008 314d8952 c1444c00 516c228d 16acb100 917c4ca8 00010180 08000000 b0120000 <--- Probably PC 9b030000 db030000 db030000 ... So it looks like jlinkgdbserver sends you the registers in the wrong endianness, if I understand correctly. Googling around, there seems to be an -endian flag to pass to jlinkgdbserver. Are you using it? Simon