From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10765 invoked by alias); 8 Dec 2002 04:18:46 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 10757 invoked from network); 8 Dec 2002 04:18:45 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by sources.redhat.com with SMTP; 8 Dec 2002 04:18:45 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18KumM-0004U1-00; Sun, 08 Dec 2002 00:19:02 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18KsuW-0003qJ-00; Sat, 07 Dec 2002 23:19:20 -0500 Date: Sat, 07 Dec 2002 20:18:00 -0000 From: Daniel Jacobowitz To: Chris Gniady Cc: gdb@sources.redhat.com Subject: Re: gdbserver on ixp1200 Message-ID: <20021208041920.GA14594@nevyn.them.org> Mail-Followup-To: Chris Gniady , gdb@sources.redhat.com References: <1039308677.1853.ezmlm@sources.redhat.com> <3DF2A06A.7070603@ecn.purdue.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="1yeeQ81UyVL57Vl7" Content-Disposition: inline In-Reply-To: <3DF2A06A.7070603@ecn.purdue.edu> User-Agent: Mutt/1.5.1i X-SW-Source: 2002-12/txt/msg00158.txt.bz2 --1yeeQ81UyVL57Vl7 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 2060 On Sat, Dec 07, 2002 at 08:29:14PM -0500, Chris Gniady wrote: > Hello, > I have searched all over the web and did not find a clear answer. I am > trying to run gdbserver on ixp1200. It is SA1100 with linux 2.3.99. I > have compiled the gdb 5.2.1 and gdbserver from this distribution. Here > is what happens: > 1) FOR GDB configured as "--host=i686-pc-linux-gnu --target=arm-linux" > I when i execute a breakpoint the instruction is simply skipped. My > code is > > while(1); > prinf("done\n"); > > When I set breakpoint at while(1) the printf gets executed. so it is skipped > I am also not able to single step. > > 2) FOR GDB configured as "--host=i686-pc-linux-gnu --target=arm-elf" > I am able to single step but when I set a breakpoint I get on host: > > > Program received signal SIGILL, Illegal instruction. > > 0x02001590 in main (argc=1, argv=0xbffffdc4) at tmmain.c:82 > > 82 while(1) > > AND on remote: > > Treadmartm (280): undefined instruction: pc=02001590 > > Can anyone help me with correct configuration or patches, to handle > breakpoints in this configuration. For 1), I can't tell you anything offhand but it sounds similar to a bug fixed recently (2002-11-17 in CVS). If it was the same as the binary you sent me then it's some new problem, I don't know what. I've attached the patch for the first problem for you to try if you want. In the session you sent me, the breakpoint on the while loop was skipped because the breakpoint went on the beginning of the while loop, and the loop was already running when you sent it. Beyond that, you are configured for "arm-linux". "arm-linux" is a little-endian configuration. The binary you sent me was elf32-bigarm, I.E. you're using a big-endian strongarm. GDB doesn't support that. I have patches for this but I haven't gotten around to submitting them yet.... the patch you should need is attached, and then configure for armeb-linux (I think). Give 'em a try. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer --1yeeQ81UyVL57Vl7 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="gdb-5.2-arm-gdbserver.patch" Content-length: 1340 Source: Community and MontaVista Software, Inc. Description: Return the status register, so that single-stepping over conditional branches works correctly on ARM. 2002-11-17 Stuart Hughes * linux-arm-low.c (arm_num_regs): Increase. (arm_regmap): Include status register. 2002-11-17 Daniel Jacobowitz * linux-low.c (register_addr): Remove incorrect -1 check. diff -ur gdb-5.2.1/gdb/gdbserver.bak/linux-arm-low.c gdb-5.2.1/gdb/gdbserver/linux-arm-low.c --- gdb-5.2.1/gdb/gdbserver.bak/linux-arm-low.c 2002-10-28 17:20:19.000000000 -0500 +++ gdb-5.2.1/gdb/gdbserver/linux-arm-low.c 2002-11-17 19:48:42.000000000 -0500 @@ -26,11 +26,13 @@ #include #endif -#define arm_num_regs 16 +#define arm_num_regs 26 static int arm_regmap[] = { 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + 64 }; static int diff -ur gdb-5.2.1/gdb/gdbserver.bak/linux-low.c gdb-5.2.1/gdb/gdbserver/linux-low.c --- gdb-5.2.1/gdb/gdbserver.bak/linux-low.c 2002-10-28 17:20:20.000000000 -0500 +++ gdb-5.2.1/gdb/gdbserver/linux-low.c 2002-11-17 19:48:42.000000000 -0500 @@ -1120,8 +1120,6 @@ error ("Invalid register number %d.", regnum); addr = the_low_target.regmap[regnum]; - if (addr == -1) - addr = 0; return addr; } --1yeeQ81UyVL57Vl7 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="gdb-5.2-arm-be.patch" Content-length: 788 --- gdb-5.2/gdb/arm-linux-tdep.c.orig Mon Jul 15 20:28:30 2002 +++ gdb-5.2/gdb/arm-linux-tdep.c Mon Jul 15 20:31:24 2002 @@ -45,6 +45,8 @@ static const char arm_linux_arm_le_breakpoint[] = {0x01,0x00,0x9f,0xef}; +static const char arm_linux_arm_be_breakpoint[] = {0xef, 0x9f, 0x00, 0x01}; + /* CALL_DUMMY_WORDS: This sequence of words is the instructions @@ -723,7 +725,10 @@ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->lowest_pc = 0x8000; - tdep->arm_breakpoint = arm_linux_arm_le_breakpoint; + if (info.byte_order == BFD_ENDIAN_BIG) + tdep->arm_breakpoint = arm_linux_arm_be_breakpoint; + else + tdep->arm_breakpoint = arm_linux_arm_le_breakpoint; tdep->arm_breakpoint_size = sizeof (arm_linux_arm_le_breakpoint); tdep->jb_pc = JB_PC; --1yeeQ81UyVL57Vl7--