X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fetm.c;h=7384764aa1f4f1ed9b46077f898743420fbdd131;hp=61ee99a0403453ed90b0d92d73b8b0745a0e594f;hb=89fa8ce2d8c58707f3dfda397138f8ee336e1a47;hpb=d944a0bed73c63fe52cf546a7121823318e8b593 diff --git a/src/target/etm.c b/src/target/etm.c index 61ee99a040..7384764aa1 100644 --- a/src/target/etm.c +++ b/src/target/etm.c @@ -496,6 +496,7 @@ static int etm_read_reg_w_check(struct reg *reg, const struct etm_reg_info *r = etm_reg->reg_info; uint8_t reg_addr = r->addr & 0x7f; struct scan_field fields[3]; + int retval; if (etm_reg->reg_info->mode == WO) { LOG_ERROR("BUG: can't read write-only register %s", r->name); @@ -504,8 +505,12 @@ static int etm_read_reg_w_check(struct reg *reg, LOG_DEBUG("%s (%u)", r->name, reg_addr); - arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE); - arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE); + retval = arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE); + if (retval != ERROR_OK) + return retval; + retval = arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE); + if (retval != ERROR_OK) + return retval; fields[0].num_bits = 32; fields[0].out_value = reg->value; @@ -577,6 +582,7 @@ static int etm_write_reg(struct reg *reg, uint32_t value) const struct etm_reg_info *r = etm_reg->reg_info; uint8_t reg_addr = r->addr & 0x7f; struct scan_field fields[3]; + int retval; if (etm_reg->reg_info->mode == RO) { LOG_ERROR("BUG: can't write read--only register %s", r->name); @@ -585,8 +591,12 @@ static int etm_write_reg(struct reg *reg, uint32_t value) LOG_DEBUG("%s (%u): 0x%8.8" PRIx32 "", r->name, reg_addr, value); - arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE); - arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE); + retval = arm_jtag_scann(etm_reg->jtag_info, 0x6, TAP_IDLE); + if (retval != ERROR_OK) + return retval; + retval = arm_jtag_set_instr(etm_reg->jtag_info, etm_reg->jtag_info->intest_instr, NULL, TAP_IDLE); + if (retval != ERROR_OK) + return retval; fields[0].num_bits = 32; uint8_t tmp1[4]; @@ -659,7 +669,7 @@ static int etm_read_instruction(struct etm_context *ctx, struct arm_instruction ctx->current_pc - ctx->image->sections[section].base_address, 4, buf, &size_read)) != ERROR_OK) { - LOG_ERROR("error while reading instruction: %i", retval); + LOG_ERROR("error while reading instruction"); return ERROR_TRACE_INSTRUCTION_UNAVAILABLE; } opcode = target_buffer_get_u32(ctx->target, buf); @@ -672,7 +682,7 @@ static int etm_read_instruction(struct etm_context *ctx, struct arm_instruction ctx->current_pc - ctx->image->sections[section].base_address, 2, buf, &size_read)) != ERROR_OK) { - LOG_ERROR("error while reading instruction: %i", retval); + LOG_ERROR("error while reading instruction"); return ERROR_TRACE_INSTRUCTION_UNAVAILABLE; } opcode = target_buffer_get_u16(ctx->target, buf); @@ -1887,7 +1897,15 @@ COMMAND_HANDLER(handle_etm_load_command) return ERROR_FAIL; } - if (file.size % 4) + int filesize; + int retval = fileio_size(&file, &filesize); + if (retval != ERROR_OK) + { + fileio_close(&file); + return retval; + } + + if (filesize % 4) { command_print(CMD_CTX, "size isn't a multiple of 4, no valid trace data"); fileio_close(&file); @@ -2091,6 +2109,7 @@ COMMAND_HANDLER(handle_etm_analyze_command) if ((retval = etmv1_analyze_trace(etm_ctx, CMD_CTX)) != ERROR_OK) { + /* FIX! error should be reported inside etmv1_analyze_trace() */ switch (retval) { case ERROR_ETM_ANALYSIS_FAILED: @@ -2103,7 +2122,7 @@ COMMAND_HANDLER(handle_etm_analyze_command) command_print(CMD_CTX, "no image available for trace analysis"); break; default: - command_print(CMD_CTX, "unknown error: %i", retval); + command_print(CMD_CTX, "unknown error"); } }