target: rename CamelCase symbols
[openocd.git] / src / target / target.c
index dbc99b41cfcd7eb5dffb39851160b21deed51f87..4d2c6465ddc419b3bc224329f43b024b4f06992d 100644 (file)
@@ -1546,7 +1546,7 @@ static int target_init_one(struct command_context *cmd_ctx,
        assert(type->init_target != NULL);
 
        int retval = type->init_target(cmd_ctx, target);
-       if (ERROR_OK != retval) {
+       if (retval != ERROR_OK) {
                LOG_ERROR("target '%s' init failed", target_name(target));
                return retval;
        }
@@ -1598,7 +1598,7 @@ static int target_init(struct command_context *cmd_ctx)
 
        for (target = all_targets; target; target = target->next) {
                retval = target_init_one(cmd_ctx, target);
-               if (ERROR_OK != retval)
+               if (retval != ERROR_OK)
                        return retval;
        }
 
@@ -1606,12 +1606,12 @@ static int target_init(struct command_context *cmd_ctx)
                return ERROR_OK;
 
        retval = target_register_user_commands(cmd_ctx);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        retval = target_register_timer_callback(&handle_target,
                        polling_interval, TARGET_TIMER_TYPE_PERIODIC, cmd_ctx->interp);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        return ERROR_OK;
@@ -1632,15 +1632,15 @@ COMMAND_HANDLER(handle_target_init_command)
        target_initialized = true;
 
        retval = command_run_line(CMD_CTX, "init_targets");
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        retval = command_run_line(CMD_CTX, "init_target_events");
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        retval = command_run_line(CMD_CTX, "init_board");
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        LOG_DEBUG("Initializing targets...");
@@ -2884,57 +2884,57 @@ COMMAND_HANDLER(handle_targets_command)
 
 /* every 300ms we check for reset & powerdropout and issue a "reset halt" if so. */
 
-static int powerDropout;
-static int srstAsserted;
+static int power_dropout;
+static int srst_asserted;
 
-static int runPowerRestore;
-static int runPowerDropout;
-static int runSrstAsserted;
-static int runSrstDeasserted;
+static int run_power_restore;
+static int run_power_dropout;
+static int run_srst_asserted;
+static int run_srst_deasserted;
 
 static int sense_handler(void)
 {
-       static int prevSrstAsserted;
-       static int prevPowerdropout;
+       static int prev_srst_asserted;
+       static int prev_power_dropout;
 
-       int retval = jtag_power_dropout(&powerDropout);
+       int retval = jtag_power_dropout(&power_dropout);
        if (retval != ERROR_OK)
                return retval;
 
-       int powerRestored;
-       powerRestored = prevPowerdropout && !powerDropout;
-       if (powerRestored)
-               runPowerRestore = 1;
+       int power_restored;
+       power_restored = prev_power_dropout && !power_dropout;
+       if (power_restored)
+               run_power_restore = 1;
 
        int64_t current = timeval_ms();
-       static int64_t lastPower;
-       bool waitMore = lastPower + 2000 > current;
-       if (powerDropout && !waitMore) {
-               runPowerDropout = 1;
-               lastPower = current;
+       static int64_t last_power;
+       bool wait_more = last_power + 2000 > current;
+       if (power_dropout && !wait_more) {
+               run_power_dropout = 1;
+               last_power = current;
        }
 
-       retval = jtag_srst_asserted(&srstAsserted);
+       retval = jtag_srst_asserted(&srst_asserted);
        if (retval != ERROR_OK)
                return retval;
 
-       int srstDeasserted;
-       srstDeasserted = prevSrstAsserted && !srstAsserted;
+       int srst_deasserted;
+       srst_deasserted = prev_srst_asserted && !srst_asserted;
 
-       static int64_t lastSrst;
-       waitMore = lastSrst + 2000 > current;
-       if (srstDeasserted && !waitMore) {
-               runSrstDeasserted = 1;
-               lastSrst = current;
+       static int64_t last_srst;
+       wait_more = last_srst + 2000 > current;
+       if (srst_deasserted && !wait_more) {
+               run_srst_deasserted = 1;
+               last_srst = current;
        }
 
-       if (!prevSrstAsserted && srstAsserted)
-               runSrstAsserted = 1;
+       if (!prev_srst_asserted && srst_asserted)
+               run_srst_asserted = 1;
 
-       prevSrstAsserted = srstAsserted;
-       prevPowerdropout = powerDropout;
+       prev_srst_asserted = srst_asserted;
+       prev_power_dropout = power_dropout;
 
-       if (srstDeasserted || powerRestored) {
+       if (srst_deasserted || power_restored) {
                /* Other than logging the event we can't do anything here.
                 * Issuing a reset is a particularly bad idea as we might
                 * be inside a reset already.
@@ -2965,21 +2965,21 @@ static int handle_target(void *priv)
                 * clearing the flags after running these events.
                 */
                int did_something = 0;
-               if (runSrstAsserted) {
+               if (run_srst_asserted) {
                        LOG_INFO("srst asserted detected, running srst_asserted proc.");
                        Jim_Eval(interp, "srst_asserted");
                        did_something = 1;
                }
-               if (runSrstDeasserted) {
+               if (run_srst_deasserted) {
                        Jim_Eval(interp, "srst_deasserted");
                        did_something = 1;
                }
-               if (runPowerDropout) {
+               if (run_power_dropout) {
                        LOG_INFO("Power dropout detected, running power_dropout proc.");
                        Jim_Eval(interp, "power_dropout");
                        did_something = 1;
                }
-               if (runPowerRestore) {
+               if (run_power_restore) {
                        Jim_Eval(interp, "power_restore");
                        did_something = 1;
                }
@@ -2991,10 +2991,10 @@ static int handle_target(void *priv)
 
                /* clear action flags */
 
-               runSrstAsserted = 0;
-               runSrstDeasserted = 0;
-               runPowerRestore = 0;
-               runPowerDropout = 0;
+               run_srst_asserted = 0;
+               run_srst_deasserted = 0;
+               run_power_restore = 0;
+               run_power_dropout = 0;
 
                recursive = 0;
        }
@@ -3020,7 +3020,7 @@ static int handle_target(void *priv)
                target->backoff.count = 0;
 
                /* only poll target if we've got power and srst isn't asserted */
-               if (!powerDropout && !srstAsserted) {
+               if (!power_dropout && !srst_asserted) {
                        /* polling may fail silently until the target has been examined */
                        retval = target_poll(target);
                        if (retval != ERROR_OK) {
@@ -3059,20 +3059,16 @@ static int handle_target(void *priv)
 
 COMMAND_HANDLER(handle_reg_command)
 {
-       struct target *target;
-       struct reg *reg = NULL;
-       unsigned count = 0;
-       char *value;
-
        LOG_DEBUG("-");
 
-       target = get_current_target(CMD_CTX);
+       struct target *target = get_current_target(CMD_CTX);
+       struct reg *reg = NULL;
 
        /* list all available registers for the current target */
        if (CMD_ARGC == 0) {
                struct reg_cache *cache = target->reg_cache;
 
-               count = 0;
+               unsigned int count = 0;
                while (cache) {
                        unsigned i;
 
@@ -3085,7 +3081,7 @@ COMMAND_HANDLER(handle_reg_command)
                                        continue;
                                /* only print cached values if they are valid */
                                if (reg->valid) {
-                                       value = buf_to_hex_str(reg->value,
+                                       char *value = buf_to_hex_str(reg->value,
                                                        reg->size);
                                        command_print(CMD,
                                                        "(%i) %s (/%" PRIu32 "): 0x%s%s",
@@ -3113,7 +3109,7 @@ COMMAND_HANDLER(handle_reg_command)
                COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], num);
 
                struct reg_cache *cache = target->reg_cache;
-               count = 0;
+               unsigned int count = 0;
                while (cache) {
                        unsigned i;
                        for (i = 0; i < cache->num_regs; i++) {
@@ -3151,9 +3147,14 @@ COMMAND_HANDLER(handle_reg_command)
                if ((CMD_ARGC == 2) && (strcmp(CMD_ARGV[1], "force") == 0))
                        reg->valid = 0;
 
-               if (reg->valid == 0)
-                       reg->type->get(reg);
-               value = buf_to_hex_str(reg->value, reg->size);
+               if (reg->valid == 0) {
+                       int retval = reg->type->get(reg);
+                       if (retval != ERROR_OK) {
+                               LOG_ERROR("Could not read register '%s'", reg->name);
+                               return retval;
+                       }
+               }
+               char *value = buf_to_hex_str(reg->value, reg->size);
                command_print(CMD, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
                free(value);
                return ERROR_OK;
@@ -3166,15 +3167,18 @@ COMMAND_HANDLER(handle_reg_command)
                        return ERROR_FAIL;
                str_to_buf(CMD_ARGV[1], strlen(CMD_ARGV[1]), buf, reg->size, 0);
 
-               reg->type->set(reg, buf);
-
-               value = buf_to_hex_str(reg->value, reg->size);
-               command_print(CMD, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
-               free(value);
+               int retval = reg->type->set(reg, buf);
+               if (retval != ERROR_OK) {
+                       LOG_ERROR("Could not write to register '%s'", reg->name);
+               } else {
+                       char *value = buf_to_hex_str(reg->value, reg->size);
+                       command_print(CMD, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
+                       free(value);
+               }
 
                free(buf);
 
-               return ERROR_OK;
+               return retval;
        }
 
        return ERROR_COMMAND_SYNTAX_ERROR;
@@ -3221,7 +3225,7 @@ COMMAND_HANDLER(handle_wait_halt_command)
        unsigned ms = DEFAULT_HALT_TIMEOUT;
        if (1 == CMD_ARGC) {
                int retval = parse_uint(CMD_ARGV[0], &ms);
-               if (ERROR_OK != retval)
+               if (retval != ERROR_OK)
                        return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
@@ -3277,13 +3281,13 @@ COMMAND_HANDLER(handle_halt_command)
        target->verbose_halt_msg = true;
 
        int retval = target_halt(target);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        if (CMD_ARGC == 1) {
                unsigned wait_local;
                retval = parse_uint(CMD_ARGV[0], &wait_local);
-               if (ERROR_OK != retval)
+               if (retval != ERROR_OK)
                        return ERROR_COMMAND_SYNTAX_ERROR;
                if (!wait_local)
                        return ERROR_OK;
@@ -3478,7 +3482,7 @@ COMMAND_HANDLER(handle_md_command)
 
        struct target *target = get_current_target(CMD_CTX);
        int retval = fn(target, address, size, count, buffer);
-       if (ERROR_OK == retval)
+       if (retval == ERROR_OK)
                target_handle_md_output(CMD, target, address, size, count, buffer);
 
        free(buffer);
@@ -3592,7 +3596,7 @@ COMMAND_HANDLER(handle_mw_command)
        return target_fill_mem(target, address, fn, wordsize, value, count);
 }
 
-static COMMAND_HELPER(parse_load_image_command_CMD_ARGV, struct image *image,
+static COMMAND_HELPER(parse_load_image_command, struct image *image,
                target_addr_t *min_address, target_addr_t *max_address)
 {
        if (CMD_ARGC < 1 || CMD_ARGC > 5)
@@ -3633,9 +3637,9 @@ COMMAND_HANDLER(handle_load_image_command)
        target_addr_t max_address = -1;
        struct image image;
 
-       int retval = CALL_COMMAND_HANDLER(parse_load_image_command_CMD_ARGV,
+       int retval = CALL_COMMAND_HANDLER(parse_load_image_command,
                        &image, &min_address, &max_address);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        struct target *target = get_current_target(CMD_CTX);
@@ -3696,7 +3700,7 @@ COMMAND_HANDLER(handle_load_image_command)
                free(buffer);
        }
 
-       if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) {
+       if ((retval == ERROR_OK) && (duration_measure(&bench) == ERROR_OK)) {
                command_print(CMD, "downloaded %" PRIu32 " bytes "
                                "in %fs (%0.3f KiB/s)", image_size,
                                duration_elapsed(&bench), duration_kbps(&bench, image_size));
@@ -3753,7 +3757,7 @@ COMMAND_HANDLER(handle_dump_image_command)
 
        free(buffer);
 
-       if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) {
+       if ((retval == ERROR_OK) && (duration_measure(&bench) == ERROR_OK)) {
                size_t filesize;
                retval = fileio_size(fileio, &filesize);
                if (retval != ERROR_OK)
@@ -3898,7 +3902,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, enum verify_mode ver
 done:
        if (diffs > 0)
                retval = ERROR_FAIL;
-       if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) {
+       if ((retval == ERROR_OK) && (duration_measure(&bench) == ERROR_OK)) {
                command_print(CMD, "verified %" PRIu32 " bytes "
                                "in %fs (%0.3f KiB/s)", image_size,
                                duration_elapsed(&bench), duration_kbps(&bench, image_size));
@@ -3968,7 +3972,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
        if (asid == 0) {
                retval = breakpoint_add(target, addr, length, hw);
                /* error is always logged in breakpoint_add(), do not print it again */
-               if (ERROR_OK == retval)
+               if (retval == ERROR_OK)
                        command_print(cmd, "breakpoint set at " TARGET_ADDR_FMT "", addr);
 
        } else if (addr == 0) {
@@ -3978,7 +3982,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
                }
                retval = context_breakpoint_add(target, asid, length, hw);
                /* error is always logged in context_breakpoint_add(), do not print it again */
-               if (ERROR_OK == retval)
+               if (retval == ERROR_OK)
                        command_print(cmd, "Context breakpoint set at 0x%8.8" PRIx32 "", asid);
 
        } else {
@@ -3988,7 +3992,7 @@ static int handle_bp_command_set(struct command_invocation *cmd,
                }
                retval = hybrid_breakpoint_add(target, addr, asid, length, hw);
                /* error is always logged in hybrid_breakpoint_add(), do not print it again */
-               if (ERROR_OK == retval)
+               if (retval == ERROR_OK)
                        command_print(cmd, "Hybrid breakpoint set at 0x%8.8" PRIx32 "", asid);
        }
        return retval;
@@ -4119,7 +4123,7 @@ COMMAND_HANDLER(handle_wp_command)
 
        int retval = watchpoint_add(target, addr, length, type,
                        data_value, data_mask);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                LOG_ERROR("Failure setting watchpoints");
 
        return retval;
@@ -4162,44 +4166,44 @@ COMMAND_HANDLER(handle_virt2phys_command)
        return retval;
 }
 
-static void writeData(FILE *f, const void *data, size_t len)
+static void write_data(FILE *f, const void *data, size_t len)
 {
        size_t written = fwrite(data, 1, len, f);
        if (written != len)
                LOG_ERROR("failed to write %zu bytes: %s", len, strerror(errno));
 }
 
-static void writeLong(FILE *f, int l, struct target *target)
+static void write_long(FILE *f, int l, struct target *target)
 {
        uint8_t val[4];
 
        target_buffer_set_u32(target, val, l);
-       writeData(f, val, 4);
+       write_data(f, val, 4);
 }
 
-static void writeString(FILE *f, char *s)
+static void write_string(FILE *f, char *s)
 {
-       writeData(f, s, strlen(s));
+       write_data(f, s, strlen(s));
 }
 
 typedef unsigned char UNIT[2];  /* unit of profiling */
 
 /* Dump a gmon.out histogram file. */
-static void write_gmon(uint32_t *samples, uint32_t sampleNum, const char *filename, bool with_range,
+static void write_gmon(uint32_t *samples, uint32_t sample_num, const char *filename, bool with_range,
                        uint32_t start_address, uint32_t end_address, struct target *target, uint32_t duration_ms)
 {
        uint32_t i;
        FILE *f = fopen(filename, "w");
        if (f == NULL)
                return;
-       writeString(f, "gmon");
-       writeLong(f, 0x00000001, target); /* Version */
-       writeLong(f, 0, target); /* padding */
-       writeLong(f, 0, target); /* padding */
-       writeLong(f, 0, target); /* padding */
+       write_string(f, "gmon");
+       write_long(f, 0x00000001, target); /* Version */
+       write_long(f, 0, target); /* padding */
+       write_long(f, 0, target); /* padding */
+       write_long(f, 0, target); /* padding */
 
        uint8_t zero = 0;  /* GMON_TAG_TIME_HIST */
-       writeData(f, &zero, 1);
+       write_data(f, &zero, 1);
 
        /* figure out bucket size */
        uint32_t min;
@@ -4210,7 +4214,7 @@ static void write_gmon(uint32_t *samples, uint32_t sampleNum, const char *filena
        } else {
                min = samples[0];
                max = samples[0];
-               for (i = 0; i < sampleNum; i++) {
+               for (i = 0; i < sample_num; i++) {
                        if (min > samples[i])
                                min = samples[i];
                        if (max < samples[i])
@@ -4222,50 +4226,50 @@ static void write_gmon(uint32_t *samples, uint32_t sampleNum, const char *filena
                max++;
        }
 
-       int addressSpace = max - min;
-       assert(addressSpace >= 2);
+       int address_space = max - min;
+       assert(address_space >= 2);
 
        /* FIXME: What is the reasonable number of buckets?
         * The profiling result will be more accurate if there are enough buckets. */
-       static const uint32_t maxBuckets = 128 * 1024; /* maximum buckets. */
-       uint32_t numBuckets = addressSpace / sizeof(UNIT);
-       if (numBuckets > maxBuckets)
-               numBuckets = maxBuckets;
-       int *buckets = malloc(sizeof(int) * numBuckets);
+       static const uint32_t max_buckets = 128 * 1024; /* maximum buckets. */
+       uint32_t num_buckets = address_space / sizeof(UNIT);
+       if (num_buckets > max_buckets)
+               num_buckets = max_buckets;
+       int *buckets = malloc(sizeof(int) * num_buckets);
        if (buckets == NULL) {
                fclose(f);
                return;
        }
-       memset(buckets, 0, sizeof(int) * numBuckets);
-       for (i = 0; i < sampleNum; i++) {
+       memset(buckets, 0, sizeof(int) * num_buckets);
+       for (i = 0; i < sample_num; i++) {
                uint32_t address = samples[i];
 
                if ((address < min) || (max <= address))
                        continue;
 
                long long a = address - min;
-               long long b = numBuckets;
-               long long c = addressSpace;
+               long long b = num_buckets;
+               long long c = address_space;
                int index_t = (a * b) / c; /* danger!!!! int32 overflows */
                buckets[index_t]++;
        }
 
        /* append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr)) */
-       writeLong(f, min, target);                      /* low_pc */
-       writeLong(f, max, target);                      /* high_pc */
-       writeLong(f, numBuckets, target);       /* # of buckets */
-       float sample_rate = sampleNum / (duration_ms / 1000.0);
-       writeLong(f, sample_rate, target);
-       writeString(f, "seconds");
+       write_long(f, min, target);                     /* low_pc */
+       write_long(f, max, target);                     /* high_pc */
+       write_long(f, num_buckets, target);     /* # of buckets */
+       float sample_rate = sample_num / (duration_ms / 1000.0);
+       write_long(f, sample_rate, target);
+       write_string(f, "seconds");
        for (i = 0; i < (15-strlen("seconds")); i++)
-               writeData(f, &zero, 1);
-       writeString(f, "s");
+               write_data(f, &zero, 1);
+       write_string(f, "s");
 
        /*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */
 
-       char *data = malloc(2 * numBuckets);
+       char *data = malloc(2 * num_buckets);
        if (data != NULL) {
-               for (i = 0; i < numBuckets; i++) {
+               for (i = 0; i < num_buckets; i++) {
                        int val;
                        val = buckets[i];
                        if (val > 65535)
@@ -4274,7 +4278,7 @@ static void write_gmon(uint32_t *samples, uint32_t sampleNum, const char *filena
                        data[i * 2 + 1] = (val >> 8) & 0xff;
                }
                free(buckets);
-               writeData(f, data, numBuckets * 2);
+               write_data(f, data, num_buckets * 2);
                free(data);
        } else
                free(buckets);
@@ -4368,28 +4372,29 @@ COMMAND_HANDLER(handle_profile_command)
        return retval;
 }
 
-static int new_int_array_element(Jim_Interp *interp, const char *varname, int idx, uint32_t val)
+static int new_u64_array_element(Jim_Interp *interp, const char *varname, int idx, uint64_t val)
 {
        char *namebuf;
-       Jim_Obj *nameObjPtr, *valObjPtr;
+       Jim_Obj *obj_name, *obj_val;
        int result;
 
        namebuf = alloc_printf("%s(%d)", varname, idx);
        if (!namebuf)
                return JIM_ERR;
 
-       nameObjPtr = Jim_NewStringObj(interp, namebuf, -1);
-       valObjPtr = Jim_NewIntObj(interp, val);
-       if (!nameObjPtr || !valObjPtr) {
+       obj_name = Jim_NewStringObj(interp, namebuf, -1);
+       jim_wide wide_val = val;
+       obj_val = Jim_NewWideObj(interp, wide_val);
+       if (!obj_name || !obj_val) {
                free(namebuf);
                return JIM_ERR;
        }
 
-       Jim_IncrRefCount(nameObjPtr);
-       Jim_IncrRefCount(valObjPtr);
-       result = Jim_SetVariable(interp, nameObjPtr, valObjPtr);
-       Jim_DecrRefCount(interp, nameObjPtr);
-       Jim_DecrRefCount(interp, valObjPtr);
+       Jim_IncrRefCount(obj_name);
+       Jim_IncrRefCount(obj_val);
+       result = Jim_SetVariable(interp, obj_name, obj_val);
+       Jim_DecrRefCount(interp, obj_name);
+       Jim_DecrRefCount(interp, obj_val);
        free(namebuf);
        /* printf("%s(%d) <= 0%08x\n", varname, idx, val); */
        return result;
@@ -4414,67 +4419,65 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 
 static int target_mem2array(Jim_Interp *interp, struct target *target, int argc, Jim_Obj *const *argv)
 {
-       long l;
-       uint32_t width;
-       int len;
-       uint32_t addr;
-       uint32_t count;
-       uint32_t v;
-       const char *varname;
-       const char *phys;
-       bool is_phys;
-       int  n, e, retval;
-       uint32_t i;
+       int e;
 
-       /* argv[1] = name of array to receive the data
-        * argv[2] = desired width
-        * argv[3] = memory address
-        * argv[4] = count of times to read
+       /* argv[0] = name of array to receive the data
+        * argv[1] = desired element width in bits
+        * argv[2] = memory address
+        * argv[3] = count of times to read
+        * argv[4] = optional "phys"
         */
-
        if (argc < 4 || argc > 5) {
                Jim_WrongNumArgs(interp, 0, argv, "varname width addr nelems [phys]");
                return JIM_ERR;
        }
-       varname = Jim_GetString(argv[0], &len);
-       /* given "foo" get space for worse case "foo(%d)" .. add 20 */
 
+       /* Arg 0: Name of the array variable */
+       const char *varname = Jim_GetString(argv[0], NULL);
+
+       /* Arg 1: Bit width of one element */
+       long l;
        e = Jim_GetLong(interp, argv[1], &l);
-       width = l;
        if (e != JIM_OK)
                return e;
+       const unsigned int width_bits = l;
 
-       e = Jim_GetLong(interp, argv[2], &l);
-       addr = l;
+       if (width_bits != 8 &&
+                       width_bits != 16 &&
+                       width_bits != 32 &&
+                       width_bits != 64) {
+               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
+               Jim_AppendStrings(interp, Jim_GetResult(interp),
+                               "Invalid width param. Must be one of: 8, 16, 32 or 64.", NULL);
+               return JIM_ERR;
+       }
+       const unsigned int width = width_bits / 8;
+
+       /* Arg 2: Memory address */
+       jim_wide wide_addr;
+       e = Jim_GetWide(interp, argv[2], &wide_addr);
        if (e != JIM_OK)
                return e;
+       target_addr_t addr = (target_addr_t)wide_addr;
+
+       /* Arg 3: Number of elements to read */
        e = Jim_GetLong(interp, argv[3], &l);
-       len = l;
        if (e != JIM_OK)
                return e;
-       is_phys = false;
+       size_t len = l;
+
+       /* Arg 4: phys */
+       bool is_phys = false;
        if (argc > 4) {
-               phys = Jim_GetString(argv[4], &n);
-               if (!strncmp(phys, "phys", n))
+               int str_len = 0;
+               const char *phys = Jim_GetString(argv[4], &str_len);
+               if (!strncmp(phys, "phys", str_len))
                        is_phys = true;
                else
                        return JIM_ERR;
        }
-       switch (width) {
-               case 8:
-                       width = 1;
-                       break;
-               case 16:
-                       width = 2;
-                       break;
-               case 32:
-                       width = 4;
-                       break;
-               default:
-                       Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-                       Jim_AppendStrings(interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL);
-                       return JIM_ERR;
-       }
+
+       /* Argument checks */
        if (len == 0) {
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
                Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: zero width read?", NULL);
@@ -4485,21 +4488,22 @@ static int target_mem2array(Jim_Interp *interp, struct target *target, int argc,
                Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: addr + len - wraps to zero?", NULL);
                return JIM_ERR;
        }
-       /* absurd transfer size? */
        if (len > 65536) {
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: absurd > 64K item request", NULL);
+               Jim_AppendStrings(interp, Jim_GetResult(interp),
+                               "mem2array: too large read request, exceeds 64K items", NULL);
                return JIM_ERR;
        }
 
        if ((width == 1) ||
                ((width == 2) && ((addr & 1) == 0)) ||
-               ((width == 4) && ((addr & 3) == 0))) {
-               /* all is well */
+               ((width == 4) && ((addr & 3) == 0)) ||
+               ((width == 8) && ((addr & 7) == 0))) {
+               /* alignment correct */
        } else {
                char buf[100];
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               sprintf(buf, "mem2array address: 0x%08" PRIx32 " is not aligned for %" PRIu32 " byte reads",
+               sprintf(buf, "mem2array address: " TARGET_ADDR_FMT " is not aligned for %" PRIu32 " byte reads",
                                addr,
                                width);
                Jim_AppendStrings(interp, Jim_GetResult(interp), buf, NULL);
@@ -4509,9 +4513,9 @@ static int target_mem2array(Jim_Interp *interp, struct target *target, int argc,
        /* Transfer loop */
 
        /* index counter */
-       n = 0;
+       size_t idx = 0;
 
-       size_t buffersize = 4096;
+       const size_t buffersize = 4096;
        uint8_t *buffer = malloc(buffersize);
        if (buffer == NULL)
                return JIM_ERR;
@@ -4520,29 +4524,31 @@ static int target_mem2array(Jim_Interp *interp, struct target *target, int argc,
        e = JIM_OK;
        while (len) {
                /* Slurp... in buffer size chunks */
+               const unsigned int max_chunk_len = buffersize / width;
+               const size_t chunk_len = MIN(len, max_chunk_len); /* in elements.. */
 
-               count = len; /* in objects.. */
-               if (count > (buffersize / width))
-                       count = (buffersize / width);
-
+               int retval;
                if (is_phys)
-                       retval = target_read_phys_memory(target, addr, width, count, buffer);
+                       retval = target_read_phys_memory(target, addr, width, chunk_len, buffer);
                else
-                       retval = target_read_memory(target, addr, width, count, buffer);
+                       retval = target_read_memory(target, addr, width, chunk_len, buffer);
                if (retval != ERROR_OK) {
                        /* BOO !*/
-                       LOG_ERROR("mem2array: Read @ 0x%08" PRIx32 ", w=%" PRIu32 ", cnt=%" PRIu32 ", failed",
+                       LOG_ERROR("mem2array: Read @ " TARGET_ADDR_FMT ", w=%u, cnt=%zu, failed",
                                          addr,
                                          width,
-                                         count);
+                                         chunk_len);
                        Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
                        Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: cannot read memory", NULL);
                        e = JIM_ERR;
                        break;
                } else {
-                       v = 0; /* shut up gcc */
-                       for (i = 0; i < count ; i++, n++) {
+                       for (size_t i = 0; i < chunk_len ; i++, idx++) {
+                               uint64_t v = 0;
                                switch (width) {
+                                       case 8:
+                                               v = target_buffer_get_u64(target, &buffer[i*width]);
+                                               break;
                                        case 4:
                                                v = target_buffer_get_u32(target, &buffer[i*width]);
                                                break;
@@ -4553,10 +4559,10 @@ static int target_mem2array(Jim_Interp *interp, struct target *target, int argc,
                                                v = buffer[i] & 0x0ff;
                                                break;
                                }
-                               new_int_array_element(interp, varname, n, v);
+                               new_u64_array_element(interp, varname, idx, v);
                        }
-                       len -= count;
-                       addr += count * width;
+                       len -= chunk_len;
+                       addr += chunk_len * width;
                }
        }
 
@@ -4567,33 +4573,28 @@ static int target_mem2array(Jim_Interp *interp, struct target *target, int argc,
        return e;
 }
 
-static int get_int_array_element(Jim_Interp *interp, const char *varname, int idx, uint32_t *val)
+static int get_u64_array_element(Jim_Interp *interp, const char *varname, size_t idx, uint64_t *val)
 {
-       char *namebuf;
-       Jim_Obj *nameObjPtr, *valObjPtr;
-       int result;
-       long l;
-
-       namebuf = alloc_printf("%s(%d)", varname, idx);
+       char *namebuf = alloc_printf("%s(%zu)", varname, idx);
        if (!namebuf)
                return JIM_ERR;
 
-       nameObjPtr = Jim_NewStringObj(interp, namebuf, -1);
-       if (!nameObjPtr) {
+       Jim_Obj *obj_name = Jim_NewStringObj(interp, namebuf, -1);
+       if (!obj_name) {
                free(namebuf);
                return JIM_ERR;
        }
 
-       Jim_IncrRefCount(nameObjPtr);
-       valObjPtr = Jim_GetVariable(interp, nameObjPtr, JIM_ERRMSG);
-       Jim_DecrRefCount(interp, nameObjPtr);
+       Jim_IncrRefCount(obj_name);
+       Jim_Obj *obj_val = Jim_GetVariable(interp, obj_name, JIM_ERRMSG);
+       Jim_DecrRefCount(interp, obj_name);
        free(namebuf);
-       if (valObjPtr == NULL)
+       if (obj_val == NULL)
                return JIM_ERR;
 
-       result = Jim_GetLong(interp, valObjPtr, &l);
-       /* printf("%s(%d) => 0%08x\n", varname, idx, val); */
-       *val = l;
+       jim_wide wide_val;
+       int result = Jim_GetWide(interp, obj_val, &wide_val);
+       *val = wide_val;
        return result;
 }
 
@@ -4617,95 +4618,95 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 static int target_array2mem(Jim_Interp *interp, struct target *target,
                int argc, Jim_Obj *const *argv)
 {
-       long l;
-       uint32_t width;
-       int len;
-       uint32_t addr;
-       uint32_t count;
-       uint32_t v;
-       const char *varname;
-       const char *phys;
-       bool is_phys;
-       int  n, e, retval;
-       uint32_t i;
+       int e;
 
-       /* argv[1] = name of array to get the data
-        * argv[2] = desired width
-        * argv[3] = memory address
-        * argv[4] = count to write
+       /* argv[0] = name of array from which to read the data
+        * argv[1] = desired element width in bits
+        * argv[2] = memory address
+        * argv[3] = number of elements to write
+        * argv[4] = optional "phys"
         */
        if (argc < 4 || argc > 5) {
                Jim_WrongNumArgs(interp, 0, argv, "varname width addr nelems [phys]");
                return JIM_ERR;
        }
-       varname = Jim_GetString(argv[0], &len);
-       /* given "foo" get space for worse case "foo(%d)" .. add 20 */
 
+       /* Arg 0: Name of the array variable */
+       const char *varname = Jim_GetString(argv[0], NULL);
+
+       /* Arg 1: Bit width of one element */
+       long l;
        e = Jim_GetLong(interp, argv[1], &l);
-       width = l;
        if (e != JIM_OK)
                return e;
+       const unsigned int width_bits = l;
+
+       if (width_bits != 8 &&
+                       width_bits != 16 &&
+                       width_bits != 32 &&
+                       width_bits != 64) {
+               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
+               Jim_AppendStrings(interp, Jim_GetResult(interp),
+                               "Invalid width param. Must be one of: 8, 16, 32 or 64.", NULL);
+               return JIM_ERR;
+       }
+       const unsigned int width = width_bits / 8;
 
-       e = Jim_GetLong(interp, argv[2], &l);
-       addr = l;
+       /* Arg 2: Memory address */
+       jim_wide wide_addr;
+       e = Jim_GetWide(interp, argv[2], &wide_addr);
        if (e != JIM_OK)
                return e;
+       target_addr_t addr = (target_addr_t)wide_addr;
+
+       /* Arg 3: Number of elements to write */
        e = Jim_GetLong(interp, argv[3], &l);
-       len = l;
        if (e != JIM_OK)
                return e;
-       is_phys = false;
+       size_t len = l;
+
+       /* Arg 4: Phys */
+       bool is_phys = false;
        if (argc > 4) {
-               phys = Jim_GetString(argv[4], &n);
-               if (!strncmp(phys, "phys", n))
+               int str_len = 0;
+               const char *phys = Jim_GetString(argv[4], &str_len);
+               if (!strncmp(phys, "phys", str_len))
                        is_phys = true;
                else
                        return JIM_ERR;
        }
-       switch (width) {
-               case 8:
-                       width = 1;
-                       break;
-               case 16:
-                       width = 2;
-                       break;
-               case 32:
-                       width = 4;
-                       break;
-               default:
-                       Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-                       Jim_AppendStrings(interp, Jim_GetResult(interp),
-                                       "Invalid width param, must be 8/16/32", NULL);
-                       return JIM_ERR;
-       }
+
+       /* Argument checks */
        if (len == 0) {
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
                Jim_AppendStrings(interp, Jim_GetResult(interp),
                                "array2mem: zero width read?", NULL);
                return JIM_ERR;
        }
+
        if ((addr + (len * width)) < addr) {
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
                Jim_AppendStrings(interp, Jim_GetResult(interp),
                                "array2mem: addr + len - wraps to zero?", NULL);
                return JIM_ERR;
        }
-       /* absurd transfer size? */
+
        if (len > 65536) {
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
                Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "array2mem: absurd > 64K item request", NULL);
+                               "array2mem: too large memory write request, exceeds 64K items", NULL);
                return JIM_ERR;
        }
 
        if ((width == 1) ||
                ((width == 2) && ((addr & 1) == 0)) ||
-               ((width == 4) && ((addr & 3) == 0))) {
-               /* all is well */
+               ((width == 4) && ((addr & 3) == 0)) ||
+               ((width == 8) && ((addr & 7) == 0))) {
+               /* alignment correct */
        } else {
                char buf[100];
                Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               sprintf(buf, "array2mem address: 0x%08" PRIx32 " is not aligned for %" PRIu32 " byte reads",
+               sprintf(buf, "array2mem address: " TARGET_ADDR_FMT " is not aligned for %" PRIu32 " byte reads",
                                addr,
                                width);
                Jim_AppendStrings(interp, Jim_GetResult(interp), buf, NULL);
@@ -4714,27 +4715,34 @@ static int target_array2mem(Jim_Interp *interp, struct target *target,
 
        /* Transfer loop */
 
-       /* index counter */
-       n = 0;
        /* assume ok */
        e = JIM_OK;
 
-       size_t buffersize = 4096;
+       const size_t buffersize = 4096;
        uint8_t *buffer = malloc(buffersize);
        if (buffer == NULL)
                return JIM_ERR;
 
+       /* index counter */
+       size_t idx = 0;
+
        while (len) {
                /* Slurp... in buffer size chunks */
+               const unsigned int max_chunk_len = buffersize / width;
 
-               count = len; /* in objects.. */
-               if (count > (buffersize / width))
-                       count = (buffersize / width);
+               const size_t chunk_len = MIN(len, max_chunk_len); /* in elements.. */
 
-               v = 0; /* shut up gcc */
-               for (i = 0; i < count; i++, n++) {
-                       get_int_array_element(interp, varname, n, &v);
+               /* Fill the buffer */
+               for (size_t i = 0; i < chunk_len; i++, idx++) {
+                       uint64_t v = 0;
+                       if (get_u64_array_element(interp, varname, idx, &v) != JIM_OK) {
+                               free(buffer);
+                               return JIM_ERR;
+                       }
                        switch (width) {
+                       case 8:
+                               target_buffer_set_u64(target, &buffer[i * width], v);
+                               break;
                        case 4:
                                target_buffer_set_u32(target, &buffer[i * width], v);
                                break;
@@ -4746,24 +4754,26 @@ static int target_array2mem(Jim_Interp *interp, struct target *target,
                                break;
                        }
                }
-               len -= count;
+               len -= chunk_len;
 
+               /* Write the buffer to memory */
+               int retval;
                if (is_phys)
-                       retval = target_write_phys_memory(target, addr, width, count, buffer);
+                       retval = target_write_phys_memory(target, addr, width, chunk_len, buffer);
                else
-                       retval = target_write_memory(target, addr, width, count, buffer);
+                       retval = target_write_memory(target, addr, width, chunk_len, buffer);
                if (retval != ERROR_OK) {
                        /* BOO !*/
-                       LOG_ERROR("array2mem: Write @ 0x%08" PRIx32 ", w=%" PRIu32 ", cnt=%" PRIu32 ", failed",
+                       LOG_ERROR("array2mem: Write @ " TARGET_ADDR_FMT ", w=%u, cnt=%zu, failed",
                                          addr,
                                          width,
-                                         count);
+                                         chunk_len);
                        Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
                        Jim_AppendStrings(interp, Jim_GetResult(interp), "array2mem: cannot read memory", NULL);
                        e = JIM_ERR;
                        break;
                }
-               addr += count * width;
+               addr += chunk_len * width;
        }
 
        free(buffer);
@@ -5446,11 +5456,11 @@ static int jim_target_wait_state(Jim_Interp *interp, int argc, Jim_Obj *const *a
 
        e = target_wait_state(target, n->value, a);
        if (e != ERROR_OK) {
-               Jim_Obj *eObj = Jim_NewIntObj(interp, e);
+               Jim_Obj *obj = Jim_NewIntObj(interp, e);
                Jim_SetResultFormatted(goi.interp,
                                "target: %s wait %s fails (%#s) %s",
                                target_name(target), n->name,
-                               eObj, target_strerror_safe(e));
+                               obj, target_strerror_safe(e));
                return JIM_ERR;
        }
        return JIM_OK;
@@ -5861,7 +5871,7 @@ static int target_create(struct jim_getopt_info *goi)
        /* create the target specific commands */
        if (target->type->commands) {
                e = register_commands(cmd_ctx, NULL, target->type->commands);
-               if (ERROR_OK != e)
+               if (e != ERROR_OK)
                        LOG_ERROR("unable to register '%s' commands", cp);
        }
 
@@ -6059,7 +6069,7 @@ static const struct command_registration target_subcommand_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct FastLoad {
+struct fast_load {
        target_addr_t address;
        uint8_t *data;
        int length;
@@ -6067,7 +6077,7 @@ struct FastLoad {
 };
 
 static int fastload_num;
-static struct FastLoad *fastload;
+static struct fast_load *fastload;
 
 static void free_fastload(void)
 {
@@ -6089,9 +6099,9 @@ COMMAND_HANDLER(handle_fast_load_image_command)
 
        struct image image;
 
-       int retval = CALL_COMMAND_HANDLER(parse_load_image_command_CMD_ARGV,
+       int retval = CALL_COMMAND_HANDLER(parse_load_image_command,
                        &image, &min_address, &max_address);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        struct duration bench;
@@ -6104,13 +6114,13 @@ COMMAND_HANDLER(handle_fast_load_image_command)
        image_size = 0x0;
        retval = ERROR_OK;
        fastload_num = image.num_sections;
-       fastload = malloc(sizeof(struct FastLoad)*image.num_sections);
+       fastload = malloc(sizeof(struct fast_load)*image.num_sections);
        if (fastload == NULL) {
                command_print(CMD, "out of memory");
                image_close(&image);
                return ERROR_FAIL;
        }
-       memset(fastload, 0, sizeof(struct FastLoad)*image.num_sections);
+       memset(fastload, 0, sizeof(struct fast_load)*image.num_sections);
        for (unsigned int i = 0; i < image.num_sections; i++) {
                buffer = malloc(image.sections[i].size);
                if (buffer == NULL) {
@@ -6163,7 +6173,7 @@ COMMAND_HANDLER(handle_fast_load_image_command)
                free(buffer);
        }
 
-       if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) {
+       if ((retval == ERROR_OK) && (duration_measure(&bench) == ERROR_OK)) {
                command_print(CMD, "Loaded %" PRIu32 " bytes "
                                "in %fs (%0.3f KiB/s)", image_size,
                                duration_elapsed(&bench), duration_kbps(&bench, image_size));

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)