This is an automated email from Gerrit.

Evan Hunter ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/986

-- gerrit

commit c406d22ebcfb780b4b75d27fc767a162563c0aad
Author: Evan Hunter <[email protected]>
Date:   Tue Nov 20 16:30:47 2012 +1100

    rtos: Fix regression which was preventing use of first RTOS in list
    
    ThreadX support was not working due to it being first in the list of RTOS's
    
    Regression caused by patch which was allowed only 52 minutes for review : 
http://openocd.zylin.com/895
    
    Change-Id: Ib4decb01db595ddb3796837c6d8338ce6b9a91ca
    Signed-off-by: Evan Hunter <[email protected]>

diff --git a/src/rtos/rtos.c b/src/rtos/rtos.c
index 28bbe5e..081e243 100644
--- a/src/rtos/rtos.c
+++ b/src/rtos/rtos.c
@@ -199,13 +199,30 @@ int rtos_qsymbol(struct connection *connection, char 
*packet, int packet_size)
        if (!os)
                goto done;
 
-       if (sscanf(packet, "qSymbol:%" SCNx64 ":", &addr))
-               hex_to_str(cur_sym, strchr(packet + 8, ':') + 1);
-       else if (target->rtos_auto_detect && !rtos_try_next(target))
-               goto done;
+       /* Decode any symbol name in the packet*/
+       hex_to_str(cur_sym, strchr(packet + 8, ':') + 1);
+
+       if ((strcmp(packet, "qSymbol::") != 0) &&               /* GDB is not 
offering symbol lookup for the first time */
+           (!sscanf(packet, "qSymbol:%" SCNx64 ":", &addr))) { /* GDB did not 
found an address for a symbol */
+               /* GDB could not find an address for the previous symbol */
+               if (!target->rtos_auto_detect) {
+                       LOG_OUTPUT("RTOS %s not detected. (GDB could not find 
symbol \'%s\')\r\n", os->type->name, cur_sym);
+                       goto done;
+               } else {
+                       /* Autodetecting RTOS - try next RTOS */
+                       if (!rtos_try_next(target))
+                               goto done;
 
+                       /* Next RTOS selected - invalidate current symbol */
+                       cur_sym[0] = '\x00';
+
+               }
+       }
        next_sym = next_symbol(os, cur_sym, addr);
+
        if (!next_sym) {
+               /* No more symbols need looking up */
+
                if (!target->rtos_auto_detect) {
                        rtos_detected = 1;
                        goto done;
@@ -215,16 +232,10 @@ int rtos_qsymbol(struct connection *connection, char 
*packet, int packet_size)
                        LOG_OUTPUT("Auto-detected RTOS: %s\r\n", 
os->type->name);
                        rtos_detected = 1;
                        goto done;
-               }
-
-               if (!rtos_try_next(target))
-                       goto done;
-
-               os->type->get_symbol_list_to_lookup(&os->symbols);
-
-               next_sym = os->symbols[0].symbol_name;
-               if (!next_sym)
+               } else {
+                       LOG_OUTPUT("No RTOS could be auto-detected!\r\n");
                        goto done;
+               }
        }
 
        if (8 + (strlen(next_sym) * 2) + 1 > sizeof(reply)) {

-- 

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to