To all,

I tried to used OpenOCD on my board with Atmel AT91SAM9263 with Amontec  jtagkey
and it works great, only I had to *slow* it down to 5 kHz while
initialization. Even after PLL
setup, I still have to use slower clock, around 4MHz.

I couldn't make it to work with GDB. I was always getting this in GDB:
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Malformed response to offset query, timeout
(gdb)


And on a OpenOCD side (run with -d 3):
Warn : 727 600505 gdb_server.c:630 gdb_get_packet_inner():
acknowledgment received, but no packet pending
Warn : 728 601506 log.c:417 keep_alive(): keep_alive() was not invoked
in the 1000ms timelimit. GDB alive packet not sent! (1001).
Workaround: increase "set remotetimeout" in GDB
Debug: 730 602507 gdb_server.c:2670 gdb_input_inner(): received packet: '?'
Warn : 731 602507 gdb_server.c:630 gdb_get_packet_inner():
acknowledgment received, but no packet pending
Warn : 732 603509 log.c:417 keep_alive(): keep_alive() was not invoked
in the 1000ms timelimit. GDB alive packet not sent! (1001).
Workaround: increase "set remotetimeout" in GDB
Debug: 734 604509 gdb_server.c:2670 gdb_input_inner(): received packet: '?'
Warn : 735 604509 gdb_server.c:630 gdb_get_packet_inner():
acknowledgment received, but no packet pending
Warn : 736 605510 log.c:417 keep_alive(): keep_alive() was not invoked
in the 1000ms timelimit. GDB alive packet not sent! (1001).
Workaround: increase "set remotetimeout" in GDB
Debug: 738 606511 gdb_server.c:2670 gdb_input_inner(): received packet: '?'
Warn : 739 606511 gdb_server.c:630 gdb_get_packet_inner():
acknowledgment received, but no packet pending


After reading some documents about GDB protocol and studying the code
I believe I
have found the problem. My gdb is:
$ arm-linux-gdb -v
GNU gdb 6.8

While looking in the remote log file, i have seen that gdb responds with:
w ++$?#3f

And those two '+' seems to confuse the OpenOCD. I prepared the following patch
and it works for me with it:

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 152a06c..b878826 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -626,11 +626,14 @@ static int gdb_get_packet_inner(struct
connection *connection,
                                         * warning. This code makes
server ignore the first ACK
                                         * that will be received after
going into noack mode,
                                         * warning only about
subsequent ACK's. */
-                                       if (gdb_con->noack_mode > 1) {
-
LOG_WARNING("acknowledgment received, but no packet pending");
-                                       } else {
-                                               LOG_DEBUG("Received
first acknowledgment after entering noack mode.
-                                               gdb_con->noack_mode = 2;
+                                       if(gdb_con->noack_mode)
+                                       {
+                                               if (gdb_con->noack_mode > 1) {
+
LOG_WARNING("acknowledgment received, but no packet pending
+                                               } else {
+
LOG_DEBUG("Received first acknowledgment after entering noa
+                                                       gdb_con->noack_mode = 2;
+                                               }
                                        }
                                        break;
                                case '-':


As you can see, if the parser sees another '+' sign it emits the DEBUG
output and sets the
noack_mode to 2. The problem is that we weren't even IN noack mode,
this was set to 0
and then it explicitly sets it to 2 and thus turning the noack mode on.

In the attachment is the gdb log file.

Please let me know what do you think.

Thank you and Best Regards,
Matej
w $qSupported#37
r ++$PacketSize=3fff;qXfer:memory-map:read+;qXfer:features:read+;QStartNoAckMode+#06
w +$qXfer:features:read:target.xml:0,fff#7d
r +$l<?xml version="1.0"?>\n<!DOCTYPE target SYSTEM "gdb-target.dtd">\n<target version="1.0">\n<feature name="org.gnu.gdb.arm.core">\n<reg name="r0" bitsize="32" regnum="0" save-restore="no" type="uint32" group="general"/>\n<reg name="r1" bitsize="32" regnum="1" save-restore="no" type="uint32" group="general"/>\n<reg name="r2" bitsize="32" regnum="2" save-restore="no" type="uint32" group="general"/>\n<reg name="r3" bitsize="32" regnum="3" save-restore="no" type="uint32" group="general"/>\n<reg name="r4" bitsize="32" regnum="4" save-restore="no" type="uint32" group="general"/>\n<reg name="r5" bitsize="32" regnum="5" save-restore="no" type="uint32" group="general"/>\n<reg name="r6" bitsize="32" regnum="6" save-restore="no" type="uint32" group="general"/>\n<reg name="r7" bitsize="32" regnum="7" save-restore="no" type="uint32" group="general"/>\n<reg name="r8" bitsize="32" regnum="8" save-restore="no" type="uint32" group="general"/>\n<reg name="r9" bitsize="32" regnum="9" save-restore="no" type="uint32" group="general"/>\n<reg name="r10" bitsize="32" regnum="10" save-restore="no" type="uint32" group="general"/>\n<reg name="r11" bitsize="32" regnum="11" save-restore="no" type="uint32" group="general"/>\n<reg name="r12" bitsize="32" regnum="12" save-restore="no" type="uint32" group="general"/>\n<reg name="sp" bitsize="32" regnum="13" save-restore="no" type="data_ptr" group="general"/>\n<reg name="lr" bitsize="32" regnum="14" save-restore="no" type="code_ptr" group="general"/>\n<reg name="pc" bitsize="32" regnum="15" save-restore="no" type="code_ptr" group="general"/>\n<reg name="cpsr" bitsize="32" regnum="25" save-restore="no" type="uint32" group="general"/>\n</feature>\n<feature name="net.sourceforge.openocd.banked">\n<reg name="sp_usr" bitsize="32" regnum="26" save-restore="no" type="data_ptr" group="banked"/>\n<reg name="lr_usr" bitsize="32" regnum="27" save-restore="no" type="code_ptr" group="banked"/>\n<reg name="r8_fiq" bitsize="32" regnum="28" save-restore="no" type="uint32" group="banked"/>\n<reg name="r9_fiq" bitsize="32" regnum="29" save-restore="no" type="uint32" group="banked"/>\n<reg name="r10_fiq" bitsize="32" regnum="30" save-restore="no" type="uint32" group="banked"/>\n<reg name="r11_fiq" bitsize="32" regnum="31" save-restore="no" type="uint32" group="banked"/>\n<reg name="r12_fiq" bitsize="32" regnum="32" save-restore="no" type="uint32" group="banked"/>\n<reg name="sp_fiq" bitsize="32" regnum="33" save-restore="no" type="data_ptr" group="banked"/>\n<reg name="lr_fiq" bitsize="32" regnum="34" save-restore="no" type="code_ptr" group="banked"/>\n<reg name="sp_irq" bitsize="32" regnum="35" save-restore="no" type="data_ptr" group="banked"/>\n<reg name="lr_irq" bitsize="32" regnum="36" save-restore="no" type="code_ptr" group="banked"/>\n<reg name="sp_svc" bitsize="32" regnum="37" save-restore="no" type="data_ptr" group="banked"/>\n<reg name="lr_svc" bitsize="32" regnum="38" save-restore="no" type="code_ptr" group="banked"/>\n<reg name="sp_abt" bitsize="32" regnum="39" save-restore="no" type="data_ptr" group="banked"/>\n<reg name="lr_abt" bitsize="32" regnum="40" save-restore="no" type="code_ptr" group="banked"/>\n<reg name="sp_und" bitsize="32" regnum="41" save-restore="no" type="data_ptr" group="banked"/>\n<reg name="lr_und" bitsize="32" regnum="42" save-restore="no" type="code_ptr" group="banked"/>\n<reg name="spsr_fiq" bitsize="32" regnum="43" save-restore="no" type="uint32" group="banked"/>\n<reg name="spsr_irq" bitsize="32" regnum="44" save-restore="no" type="uint32" group="banked"/>\n<reg name="spsr_svc" bitsize="32" regnum="45" save-restore="no" type="uint32" group="banked"/>\n<reg name="spsr_abt" bitsize="32" regnum="46" save-restore="no" type="uint32" group="banked"/>\n<reg name="spsr_und" bitsize="32" regnum="47" save-restore="no" type="uint32" group="banked"/>\n</feature>\n</target>\n#ee
w ++$?#3f
r $S02#b5
w +
r <Timeout: 2 seconds>
w $?#3f
r $S02#b5
w +
r <Timeout: 2 seconds>
w $?#3f
r $S02#b5
w +
r <Timeout: 2 seconds>
w $?#3f
r $S02#b5
w +
r <Timeout: 2 seconds><Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -+$Hc-1#09
r $OK#9a
w +
r <Timeout: 2 seconds>
w $Hc-1#09
r $OK#9a
w +
r <Timeout: 2 seconds>
w $Hc-1#09
r $OK#9a
w +
r <Timeout: 2 seconds>
w $Hc-1#09
r $OK#9a
w +
r <Timeout: 2 seconds><Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -+$qC#b4
r $QC0#c4
w +
r <Timeout: 2 seconds>
w $qC#b4
r $QC0#c4
w +
r <Timeout: 2 seconds>
w $qC#b4
r $QC0#c4
w +
r <Timeout: 2 seconds>
w $qC#b4
r $QC0#c4
w +
r <Timeout: 2 seconds><Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -+$qOffsets#4b
r $Text=0;Data=0;Bss=0#04
w +
r <Timeout: 2 seconds>
w $qOffsets#4b
r $Text=0;Data=0;Bss=0#04
w +
r <Timeout: 2 seconds>
w $qOffsets#4b
r $Text=0;Data=0;Bss=0#04
w +
r <Timeout: 2 seconds>
w $qOffsets#4b
r $Text=0;Data=0;Bss=0#04
w +
r <Timeout: 2 seconds><Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -
r <Timeout: 2 seconds>
w -+
End of log
------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to