David Brownell <david-b@pacbell.net> Fix segv in jtag_examine_chain(): exit loop...
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 26 Aug 2009 19:06:56 +0000 (19:06 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 26 Aug 2009 19:06:56 +0000 (19:06 +0000)
"next iteration" step with the rest of the loop overhead.

Cleanup:  remove spurious whitespace, and an overlong line;
only assign "tap->hasidcode" once.

git-svn-id: svn://svn.berlios.de/openocd/trunk@2631 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/jtag/core.c

index 3021a10306a5edb62e15061f63799db51fa93b4a..e23cbaa2e19db0f11eaa9730a496b30487e81396 100644 (file)
@@ -975,10 +975,12 @@ int jtag_examine_chain(void)
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       for (unsigned bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;)
+       for (unsigned bit_count = 0;
+                       tap && bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;
+                       tap = jtag_tap_next_enabled(tap))
        {
                uint32_t idcode = buf_get_u32(idcode_buffer, bit_count, 32);
-               tap->hasidcode = true;
+
                if ((idcode & 1) == 0)
                {
                        /* LSB must not be 0, this indicates a device in bypass */
@@ -990,7 +992,9 @@ int jtag_examine_chain(void)
                }
                else
                {
-                       /*
+                       tap->hasidcode = true;
+
+                       /*
                         * End of chain (invalid manufacturer ID) some devices, such
                         * as AVR will output all 1's instead of TDI input value at
                         * end of chain.
@@ -1015,10 +1019,8 @@ int jtag_examine_chain(void)
                tap->idcode = idcode;
 
                // ensure the TAP ID does matches what was expected
-               if (!jtag_examine_chain_match_tap(tap))
+               if (!jtag_examine_chain_match_tap(tap))
                        return ERROR_JTAG_INIT_FAILED;
-
-               tap = jtag_tap_next_enabled(tap);
        }
 
        /* see if number of discovered devices matches configuration */