target/image: Use proper data types
[openocd.git] / src / target / xscale.c
index a090c4b3910666f4d8b0c6515d62cbb3001aa942..aaaed0ebb2d0cfc0b7fd8987bbf26c617df66c8d 100644 (file)
@@ -129,7 +129,7 @@ static const struct xscale_reg xscale_reg_arch_info[] = {
 /* convenience wrapper to access XScale specific registers */
 static int xscale_set_reg_u32(struct reg *reg, uint32_t value)
 {
-       uint8_t buf[4];
+       uint8_t buf[4] = { 0 };
 
        buf_set_u32(buf, 0, 32, value);
 
@@ -142,7 +142,7 @@ static int xscale_verify_pointer(struct command_invocation *cmd,
        struct xscale_common *xscale)
 {
        if (xscale->common_magic != XSCALE_COMMON_MAGIC) {
-               command_print(cmd->ctx, xscale_not);
+               command_print(cmd, xscale_not);
                return ERROR_TARGET_INVALID;
        }
        return ERROR_OK;
@@ -154,9 +154,9 @@ static int xscale_jtag_set_instr(struct jtag_tap *tap, uint32_t new_instr, tap_s
 
        if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != new_instr) {
                struct scan_field field;
-               uint8_t scratch[4];
+               uint8_t scratch[4] = { 0 };
 
-               memset(&field, 0, sizeof field);
+               memset(&field, 0, sizeof(field));
                field.num_bits = tap->ir_length;
                field.out_value = scratch;
                buf_set_u32(scratch, 0, field.num_bits, new_instr);
@@ -186,7 +186,7 @@ static int xscale_read_dcsr(struct target *target)
        buf_set_u32(&field0, 1, 1, xscale->hold_rst);
        buf_set_u32(&field0, 2, 1, xscale->external_debug_break);
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 3;
        fields[0].out_value = &field0;
@@ -259,7 +259,7 @@ static int xscale_receive(struct target *target, uint32_t *buffer, int num_words
        path[1] = TAP_DRCAPTURE;
        path[2] = TAP_DRSHIFT;
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 3;
        uint8_t tmp;
@@ -367,7 +367,7 @@ static int xscale_read_tx(struct target *target, int consume)
        noconsume_path[4] = TAP_DREXIT2;
        noconsume_path[5] = TAP_DRSHIFT;
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 3;
        fields[0].in_value = &field0_in;
@@ -442,7 +442,7 @@ static int xscale_write_rx(struct target *target)
                XSCALE_DBGRX << xscale->xscale_variant,
                TAP_IDLE);
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 3;
        fields[0].out_value = &field0_out;
@@ -514,7 +514,7 @@ static int xscale_send(struct target *target, const uint8_t *buffer, int count,
                TAP_IDLE);
 
        static const uint8_t t0;
-       uint8_t t1[4];
+       uint8_t t1[4] = { 0 };
        static const uint8_t t2 = 1;
        struct scan_field fields[3] = {
                        { .num_bits = 3, .out_value = &t0 },
@@ -598,7 +598,7 @@ static int xscale_write_dcsr(struct target *target, int hold_rst, int ext_dbg_br
        buf_set_u32(&field0, 1, 1, xscale->hold_rst);
        buf_set_u32(&field0, 2, 1, xscale->external_debug_break);
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 3;
        fields[0].out_value = &field0;
@@ -645,8 +645,8 @@ static unsigned int parity(unsigned int v)
 static int xscale_load_ic(struct target *target, uint32_t va, uint32_t buffer[8])
 {
        struct xscale_common *xscale = target_to_xscale(target);
-       uint8_t packet[4];
-       uint8_t cmd;
+       uint8_t packet[4] = { 0 };
+       uint8_t cmd = 0;
        int word;
        struct scan_field fields[2];
 
@@ -666,7 +666,7 @@ static int xscale_load_ic(struct target *target, uint32_t va, uint32_t buffer[8]
        /* virtual address of desired cache line */
        buf_set_u32(packet, 0, 27, va >> 5);
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 6;
        fields[0].out_value = &cmd;
@@ -699,8 +699,8 @@ static int xscale_load_ic(struct target *target, uint32_t va, uint32_t buffer[8]
 static int xscale_invalidate_ic_line(struct target *target, uint32_t va)
 {
        struct xscale_common *xscale = target_to_xscale(target);
-       uint8_t packet[4];
-       uint8_t cmd;
+       uint8_t packet[4] = { 0 };
+       uint8_t cmd = 0;
        struct scan_field fields[2];
 
        xscale_jtag_set_instr(target->tap,
@@ -713,7 +713,7 @@ static int xscale_invalidate_ic_line(struct target *target, uint32_t va)
        /* virtual address of desired cache line */
        buf_set_u32(packet, 0, 27, va >> 5);
 
-       memset(&fields, 0, sizeof fields);
+       memset(&fields, 0, sizeof(fields));
 
        fields[0].num_bits = 6;
        fields[0].out_value = &cmd;
@@ -824,7 +824,7 @@ static int xscale_poll(struct target *target)
                        retval = xscale_debug_entry(target);
                } else if (retval != ERROR_TARGET_RESOURCE_NOT_AVAILABLE) {
                        LOG_USER("error while polling TX register, reset CPU");
-                       /* here we "lie" so GDB won't get stuck and a reset can be perfomed */
+                       /* here we "lie" so GDB won't get stuck and a reset can be performed */
                        target->state = TARGET_HALTED;
                }
 
@@ -955,7 +955,7 @@ static int xscale_debug_entry(struct target *target)
                        xscale->arch_debug_reason = XSCALE_DBG_REASON_GENERIC;
                        pc -= 4;
                        break;
-               case 0x5:       /* Vector trap occured */
+               case 0x5:       /* Vector trap occurred */
                        target->debug_reason = DBG_REASON_BREAKPOINT;
                        xscale->arch_debug_reason = XSCALE_DBG_REASON_GENERIC;
                        pc -= 4;
@@ -1110,8 +1110,7 @@ static void xscale_free_trace_data(struct xscale_common *xscale)
        struct xscale_trace_data *td = xscale->trace.data;
        while (td) {
                struct xscale_trace_data *next_td = td->next;
-               if (td->entries)
-                       free(td->entries);
+               free(td->entries);
                free(td);
                td = next_td;
        }
@@ -1551,7 +1550,7 @@ static int xscale_deassert_reset(struct target *target)
                 * coprocessors, trace data, etc.
                 */
                address = xscale->handler_address;
-               for (unsigned binary_size = sizeof xscale_debug_handler;
+               for (unsigned binary_size = sizeof(xscale_debug_handler);
                        binary_size > 0;
                        binary_size -= buf_cnt, buffer += buf_cnt) {
                        uint32_t cache_line[8];
@@ -2412,7 +2411,7 @@ static int xscale_get_reg(struct reg *reg)
        } else if (strcmp(reg->name, "XSCALE_TXRXCTRL") == 0) {
                /* can't (explicitly) read from TXRXCTRL register */
                return ERROR_OK;
-       } else {/* Other DBG registers have to be transfered by the debug handler
+       } else {/* Other DBG registers have to be transferred by the debug handler
                 * send CP read request (command 0x40) */
                xscale_send_u32(target, 0x40);
 
@@ -2450,7 +2449,7 @@ static int xscale_set_reg(struct reg *reg, uint8_t *buf)
        } else if (strcmp(reg->name, "XSCALE_TXRXCTRL") == 0) {
                /* can't (explicitly) write to TXRXCTRL register */
                return ERROR_OK;
-       } else {/* Other DBG registers have to be transfered by the debug handler
+       } else {/* Other DBG registers have to be transferred by the debug handler
                 * send CP write request (command 0x41) */
                xscale_send_u32(target, 0x41);
 
@@ -2583,7 +2582,6 @@ static int xscale_read_instruction(struct target *target, uint32_t pc,
        struct arm_instruction *instruction)
 {
        struct xscale_common *const xscale = target_to_xscale(target);
-       int i;
        int section = -1;
        size_t size_read;
        uint32_t opcode;
@@ -2593,7 +2591,7 @@ static int xscale_read_instruction(struct target *target, uint32_t pc,
                return ERROR_TRACE_IMAGE_UNAVAILABLE;
 
        /* search for the section the current instruction belongs to */
-       for (i = 0; i < xscale->trace.image->num_sections; i++) {
+       for (unsigned int i = 0; i < xscale->trace.image->num_sections; i++) {
                if ((xscale->trace.image->sections[i].base_address <= pc) &&
                        (xscale->trace.image->sections[i].base_address +
                        xscale->trace.image->sections[i].size > pc)) {
@@ -2658,9 +2656,9 @@ static inline void xscale_display_instruction(struct target *target, uint32_t pc
 {
        int retval = xscale_read_instruction(target, pc, instruction);
        if (retval == ERROR_OK)
-               command_print(cmd->ctx, "%s", instruction->text);
+               command_print(cmd, "%s", instruction->text);
        else
-               command_print(cmd->ctx, "0x%8.8" PRIx32 "\t<not found in image>", pc);
+               command_print(cmd, "0x%8.8" PRIx32 "\t<not found in image>", pc);
 }
 
 static int xscale_analyze_trace(struct target *target, struct command_invocation *cmd)
@@ -2787,7 +2785,7 @@ static int xscale_analyze_trace(struct target *target, struct command_invocation
                                continue;
 
                        if (exception) {
-                               command_print(cmd->ctx, "--- exception %i ---", exception);
+                               command_print(cmd, "--- exception %i ---", exception);
                                continue;
                        }
 
@@ -2809,11 +2807,11 @@ static int xscale_analyze_trace(struct target *target, struct command_invocation
                                                current_pc = chkpt_reg;
                                        else if (current_pc != chkpt_reg)       /* sanity check */
                                                LOG_WARNING("trace is suspect: checkpoint register "
-                                                       "inconsistent with adddress from image");
+                                                       "inconsistent with address from image");
                                }
 
                                if (current_pc == 0)
-                                       command_print(cmd->ctx, "address unknown");
+                                       command_print(cmd, "address unknown");
 
                                continue;
                        }
@@ -2895,6 +2893,7 @@ static void xscale_build_reg_cache(struct target *target)
                (*cache_p)->reg_list[i].size = 32;
                (*cache_p)->reg_list[i].arch_info = &arch_info[i];
                (*cache_p)->reg_list[i].type = &xscale_reg_type;
+               (*cache_p)->reg_list[i].exist = true;
                arch_info[i] = xscale_reg_arch_info[i];
                arch_info[i].target = target;
        }
@@ -2902,6 +2901,21 @@ static void xscale_build_reg_cache(struct target *target)
        xscale->reg_cache = (*cache_p);
 }
 
+static void xscale_free_reg_cache(struct target *target)
+{
+       struct xscale_common *xscale = target_to_xscale(target);
+       struct reg_cache *cache = xscale->reg_cache;
+
+       for (unsigned int i = 0; i < ARRAY_SIZE(xscale_reg_arch_info); i++)
+               free(cache->reg_list[i].value);
+
+       free(cache->reg_list[0].arch_info);
+       free(cache->reg_list);
+       free(cache);
+
+       arm_free_reg_cache(&xscale->arm);
+}
+
 static int xscale_init_target(struct command_context *cmd_ctx,
        struct target *target)
 {
@@ -2909,6 +2923,14 @@ static int xscale_init_target(struct command_context *cmd_ctx,
        return ERROR_OK;
 }
 
+static void xscale_deinit_target(struct target *target)
+{
+       struct xscale_common *xscale = target_to_xscale(target);
+
+       xscale_free_reg_cache(target);
+       free(xscale);
+}
+
 static int xscale_init_arch_info(struct target *target,
        struct xscale_common *xscale, struct jtag_tap *tap)
 {
@@ -2918,7 +2940,7 @@ static int xscale_init_arch_info(struct target *target,
 
        arm = &xscale->arm;
 
-       /* store architecture specfic data */
+       /* store architecture specific data */
        xscale->common_magic = XSCALE_COMMON_MAGIC;
 
        /* PXA3xx with 11 bit IR shifts the JTAG instructions */
@@ -2980,7 +3002,7 @@ static int xscale_init_arch_info(struct target *target,
 
        /* prepare ARMv4/5 specific information */
        arm->arch_info = xscale;
-       arm->core_type = ARM_MODE_ANY;
+       arm->core_type = ARM_CORE_TYPE_STD;
        arm->read_core_reg = xscale_read_core_reg;
        arm->write_core_reg = xscale_write_core_reg;
        arm->full_context = xscale_full_context;
@@ -3003,7 +3025,7 @@ static int xscale_target_create(struct target *target, Jim_Interp *interp)
 {
        struct xscale_common *xscale;
 
-       if (sizeof xscale_debug_handler > 0x800) {
+       if (sizeof(xscale_debug_handler) > 0x800) {
                LOG_ERROR("debug_handler.bin: larger than 2kb");
                return ERROR_FAIL;
        }
@@ -3136,7 +3158,7 @@ COMMAND_HANDLER(xscale_handle_mmu_command)
                return retval;
 
        if (target->state != TARGET_HALTED) {
-               command_print(CMD_CTX, "target must be stopped for \"%s\" command", CMD_NAME);
+               command_print(CMD, "target must be stopped for \"%s\" command", CMD_NAME);
                return ERROR_OK;
        }
 
@@ -3150,7 +3172,7 @@ COMMAND_HANDLER(xscale_handle_mmu_command)
                xscale->armv4_5_mmu.mmu_enabled = enable;
        }
 
-       command_print(CMD_CTX, "mmu %s",
+       command_print(CMD, "mmu %s",
                (xscale->armv4_5_mmu.mmu_enabled) ? "enabled" : "disabled");
 
        return ERROR_OK;
@@ -3166,7 +3188,7 @@ COMMAND_HANDLER(xscale_handle_idcache_command)
                return retval;
 
        if (target->state != TARGET_HALTED) {
-               command_print(CMD_CTX, "target must be stopped for \"%s\" command", CMD_NAME);
+               command_print(CMD, "target must be stopped for \"%s\" command", CMD_NAME);
                return ERROR_OK;
        }
 
@@ -3195,7 +3217,7 @@ COMMAND_HANDLER(xscale_handle_idcache_command)
                xscale->armv4_5_mmu.armv4_5_cache.i_cache_enabled :
                xscale->armv4_5_mmu.armv4_5_cache.d_u_cache_enabled;
        const char *msg = enabled ? "enabled" : "disabled";
-       command_print(CMD_CTX, "%s %s", CMD_NAME, msg);
+       command_print(CMD, "%s %s", CMD_NAME, msg);
 
        return ERROR_OK;
 }
@@ -3226,7 +3248,6 @@ COMMAND_HANDLER(xscale_handle_vector_catch_command)
        if (retval != ERROR_OK)
                return retval;
 
-       dcsr_value = buf_get_u32(dcsr_reg->value, 0, 32);
        if (CMD_ARGC > 0) {
                if (CMD_ARGC == 1) {
                        if (strcmp(CMD_ARGV[0], "all") == 0) {
@@ -3257,7 +3278,7 @@ COMMAND_HANDLER(xscale_handle_vector_catch_command)
 
        dcsr_value = buf_get_u32(dcsr_reg->value, 0, 32);
        for (unsigned i = 0; i < ARRAY_SIZE(vec_ids); i++) {
-               command_print(CMD_CTX, "%15s: %s", vec_ids[i].name,
+               command_print(CMD, "%15s: %s", vec_ids[i].name,
                        (dcsr_value & vec_ids[i].mask) ? "catch" : "ignore");
        }
 
@@ -3279,16 +3300,16 @@ COMMAND_HANDLER(xscale_handle_vector_table_command)
        if (CMD_ARGC == 0) {    /* print current settings */
                int idx;
 
-               command_print(CMD_CTX, "active user-set static vectors:");
+               command_print(CMD, "active user-set static vectors:");
                for (idx = 1; idx < 8; idx++)
                        if (xscale->static_low_vectors_set & (1 << idx))
-                               command_print(CMD_CTX,
+                               command_print(CMD,
                                        "low  %d: 0x%" PRIx32,
                                        idx,
                                        xscale->static_low_vectors[idx]);
                for (idx = 1; idx < 8; idx++)
                        if (xscale->static_high_vectors_set & (1 << idx))
-                               command_print(CMD_CTX,
+                               command_print(CMD,
                                        "high %d: 0x%" PRIx32,
                                        idx,
                                        xscale->static_high_vectors[idx]);
@@ -3335,7 +3356,7 @@ COMMAND_HANDLER(xscale_handle_trace_buffer_command)
                return retval;
 
        if (target->state != TARGET_HALTED) {
-               command_print(CMD_CTX, "target must be stopped for \"%s\" command", CMD_NAME);
+               command_print(CMD, "target must be stopped for \"%s\" command", CMD_NAME);
                return ERROR_OK;
        }
 
@@ -3354,7 +3375,7 @@ COMMAND_HANDLER(xscale_handle_trace_buffer_command)
                        if (CMD_ARGC >= 3)
                                COMMAND_PARSE_NUMBER(int, CMD_ARGV[2], buffcount);
                        if (buffcount < 1) {            /* invalid */
-                               command_print(CMD_CTX, "fill buffer count must be > 0");
+                               command_print(CMD, "fill buffer count must be > 0");
                                xscale->trace.mode = XSCALE_TRACE_DISABLED;
                                return ERROR_COMMAND_SYNTAX_ERROR;
                        }
@@ -3371,11 +3392,11 @@ COMMAND_HANDLER(xscale_handle_trace_buffer_command)
        if (xscale->trace.mode != XSCALE_TRACE_DISABLED) {
                char fill_string[12];
                sprintf(fill_string, "fill %d", xscale->trace.buffer_fill);
-               command_print(CMD_CTX, "trace buffer enabled (%s)",
+               command_print(CMD, "trace buffer enabled (%s)",
                        (xscale->trace.mode == XSCALE_TRACE_FILL)
                        ? fill_string : "wrap");
        } else
-               command_print(CMD_CTX, "trace buffer disabled");
+               command_print(CMD, "trace buffer disabled");
 
        dcsr_value = buf_get_u32(xscale->reg_cache->reg_list[XSCALE_DCSR].value, 0, 32);
        if (xscale->trace.mode == XSCALE_TRACE_FILL)
@@ -3402,19 +3423,19 @@ COMMAND_HANDLER(xscale_handle_trace_image_command)
        if (xscale->trace.image) {
                image_close(xscale->trace.image);
                free(xscale->trace.image);
-               command_print(CMD_CTX, "previously loaded image found and closed");
+               command_print(CMD, "previously loaded image found and closed");
        }
 
        xscale->trace.image = malloc(sizeof(struct image));
-       xscale->trace.image->base_address_set = 0;
-       xscale->trace.image->start_address_set = 0;
+       xscale->trace.image->base_address_set = false;
+       xscale->trace.image->start_address_set = false;
 
        /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
        if (CMD_ARGC >= 2) {
-               xscale->trace.image->base_address_set = 1;
+               xscale->trace.image->base_address_set = true;
                COMMAND_PARSE_NUMBER(llong, CMD_ARGV[1], xscale->trace.image->base_address);
        } else
-               xscale->trace.image->base_address_set = 0;
+               xscale->trace.image->base_address_set = false;
 
        if (image_open(xscale->trace.image, CMD_ARGV[0],
                (CMD_ARGC >= 3) ? CMD_ARGV[2] : NULL) != ERROR_OK) {
@@ -3439,7 +3460,7 @@ COMMAND_HANDLER(xscale_handle_dump_trace_command)
                return retval;
 
        if (target->state != TARGET_HALTED) {
-               command_print(CMD_CTX, "target must be stopped for \"%s\" command", CMD_NAME);
+               command_print(CMD, "target must be stopped for \"%s\" command", CMD_NAME);
                return ERROR_OK;
        }
 
@@ -3449,7 +3470,7 @@ COMMAND_HANDLER(xscale_handle_dump_trace_command)
        trace_data = xscale->trace.data;
 
        if (!trace_data) {
-               command_print(CMD_CTX, "no trace data collected");
+               command_print(CMD, "no trace data collected");
                return ERROR_OK;
        }
 
@@ -3502,7 +3523,7 @@ COMMAND_HANDLER(xscale_handle_cp15)
                return retval;
 
        if (target->state != TARGET_HALTED) {
-               command_print(CMD_CTX, "target must be stopped for \"%s\" command", CMD_NAME);
+               command_print(CMD, "target must be stopped for \"%s\" command", CMD_NAME);
                return ERROR_OK;
        }
        uint32_t reg_no = 0;
@@ -3536,7 +3557,7 @@ COMMAND_HANDLER(xscale_handle_cp15)
                                reg_no = XSCALE_CPACCESS;
                                break;
                        default:
-                               command_print(CMD_CTX, "invalid register number");
+                               command_print(CMD, "invalid register number");
                                return ERROR_COMMAND_SYNTAX_ERROR;
                }
                reg = &xscale->reg_cache->reg_list[reg_no];
@@ -3548,7 +3569,7 @@ COMMAND_HANDLER(xscale_handle_cp15)
                /* read cp15 control register */
                xscale_get_reg(reg);
                value = buf_get_u32(reg->value, 0, 32);
-               command_print(CMD_CTX, "%s (/%i): 0x%" PRIx32 "", reg->name, (int)(reg->size),
+               command_print(CMD, "%s (/%i): 0x%" PRIx32 "", reg->name, (int)(reg->size),
                        value);
        } else if (CMD_ARGC == 2) {
                uint32_t value;
@@ -3725,6 +3746,7 @@ struct target_type xscale_target = {
        .commands = xscale_command_handlers,
        .target_create = xscale_target_create,
        .init_target = xscale_init_target,
+       .deinit_target = xscale_deinit_target,
 
        .virt2phys = xscale_virt2phys,
        .mmu = xscale_mmu

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)