libusb_helper: fix memory leak when no adapter is found
[openocd.git] / src / jtag / core.c
index 6239573d105ebf881cbefa3b1d7e059a6c235f85..1d424b2e423fd1b47c179830afcaa124285c5dd1 100644 (file)
@@ -842,6 +842,7 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
        if (trst_with_tlr) {
                LOG_DEBUG("JTAG reset with TLR instead of TRST");
                jtag_add_tlr();
+               jtag_execute_queue();
 
        } else if (jtag_trst != new_trst) {
                jtag_trst = new_trst;
@@ -1232,7 +1233,7 @@ static int jtag_examine_chain(void)
        /* Add room for end-of-chain marker. */
        max_taps++;
 
-       uint8_t *idcode_buffer = malloc(max_taps * 4);
+       uint8_t *idcode_buffer = calloc(4, max_taps);
        if (idcode_buffer == NULL)
                return ERROR_JTAG_INIT_FAILED;
 
@@ -1268,7 +1269,7 @@ static int jtag_examine_chain(void)
                         * REVISIT create a jtag_alloc(chip, tap) routine, and
                         * share it with jim_newtap_cmd().
                         */
-                       tap = calloc(1, sizeof *tap);
+                       tap = calloc(1, sizeof(*tap));
                        if (!tap) {
                                retval = ERROR_FAIL;
                                goto out;
@@ -1405,7 +1406,7 @@ static int jtag_validate_ircapture(void)
                                        && tap->ir_length < JTAG_IRLEN_MAX) {
                                tap->ir_length++;
                        }
-                       LOG_WARNING("AUTO %s - use \"jtag newtap " "%s %s -irlen %d "
+                       LOG_WARNING("AUTO %s - use \"jtag newtap %s %s -irlen %d "
                                        "-expected-id 0x%08" PRIx32 "\"",
                                        tap->dotted_name, tap->chip, tap->tapname, tap->ir_length, tap->idcode);
                }
@@ -1519,9 +1520,9 @@ int adapter_init(struct command_context *cmd_ctx)
                return ERROR_OK;
 
        if (!adapter_driver) {
-               /* nothing was previously specified by "interface" command */
+               /* nothing was previously specified by "adapter driver" command */
                LOG_ERROR("Debug Adapter has to be specified, "
-                       "see \"interface\" command");
+                       "see \"adapter driver\" command");
                return ERROR_JTAG_INVALID_INTERFACE;
        }
 
@@ -1538,7 +1539,7 @@ int adapter_init(struct command_context *cmd_ctx)
 
        if (CLOCK_MODE_UNSELECTED == clock_mode) {
                LOG_ERROR("An adapter speed is not selected in the init script."
-                       " Insert a call to adapter_khz or jtag_rclk to proceed.");
+                       " Insert a call to \"adapter speed\" or \"jtag_rclk\" to proceed.");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -1871,7 +1872,7 @@ void jtag_set_verify(bool enable)
        jtag_verify = enable;
 }
 
-bool jtag_will_verify()
+bool jtag_will_verify(void)
 {
        return jtag_verify;
 }
@@ -1881,7 +1882,7 @@ void jtag_set_verify_capture_ir(bool enable)
        jtag_verify_capture_ir = enable;
 }
 
-bool jtag_will_verify_capture_ir()
+bool jtag_will_verify_capture_ir(void)
 {
        return jtag_verify_capture_ir;
 }
@@ -2019,8 +2020,15 @@ int adapter_resets(int trst, int srst)
 
                /* adapters without trst signal will eventually use tlr sequence */
                jtag_add_reset(trst, srst);
+               /*
+                * The jtag queue is still used for reset by some adapter. Flush it!
+                * FIXME: To be removed when all adapter drivers will be updated!
+                */
+               jtag_execute_queue();
                return ERROR_OK;
-       } else if (transport_is_swd() || transport_is_hla()) {
+       } else if (transport_is_swd() || transport_is_hla() ||
+                          transport_is_dapdirect_swd() || transport_is_dapdirect_jtag() ||
+                          transport_is_swim()) {
                if (trst == TRST_ASSERT) {
                        LOG_ERROR("transport %s has no trst signal",
                                get_current_transport()->name);
@@ -2052,7 +2060,9 @@ int adapter_assert_reset(void)
                else
                        jtag_add_reset(0, 1);
                return ERROR_OK;
-       } else if (transport_is_swd() || transport_is_hla())
+       } else if (transport_is_swd() || transport_is_hla() ||
+                          transport_is_dapdirect_jtag() || transport_is_dapdirect_swd() ||
+                          transport_is_swim())
                return adapter_system_reset(1);
        else if (get_current_transport() != NULL)
                LOG_ERROR("reset is not supported on %s",
@@ -2067,7 +2077,9 @@ int adapter_deassert_reset(void)
        if (transport_is_jtag()) {
                jtag_add_reset(0, 0);
                return ERROR_OK;
-       } else if (transport_is_swd() || transport_is_hla())
+       } else if (transport_is_swd() || transport_is_hla() ||
+                          transport_is_dapdirect_jtag() || transport_is_dapdirect_swd() ||
+                          transport_is_swim())
                return adapter_system_reset(0);
        else if (get_current_transport() != NULL)
                LOG_ERROR("reset is not supported on %s",

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)