Cortex-M3: don't exit()
[fw/openocd] / src / target / etm.c
index 43158b5667cffdb06913ff3d86497c839154b77b..fa7a71b2c4972c76d587d756aa3d22841128682b 100644 (file)
 #endif
 
 #include "armv4_5.h"
+#include "etm.h"
 #include "etb.h"
 #include "image.h"
 #include "arm_disassembler.h"
+#include "register.h"
 
 
 /*
@@ -49,8 +51,6 @@
  *  ARM IHI 0014O ... Embedded Trace Macrocell, Architecture Specification
  */
 
-#define ARRAY_SIZE(x)  ((int)(sizeof(x)/sizeof((x)[0])))
-
 enum {
        RO,                             /* read/only */
        WO,                             /* write/only */
@@ -349,10 +349,7 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
                        break;
                default:
                        LOG_WARNING("Bad ETMv1 protocol %d", config >> 28);
-                       free(reg_cache);
-                       free(reg_list);
-                       free(arch_info);
-                       return ERROR_OK;
+                       goto fail;
                }
        }
        etm_ctx->bcd_vers = bcd_vers;
@@ -396,10 +393,7 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
                if (!etb)
                {
                        LOG_ERROR("etb selected as etm capture driver, but no ETB configured");
-                       free(reg_cache);
-                       free(reg_list);
-                       free(arch_info);
-                       return ERROR_OK;
+                       goto fail;
                }
 
                reg_cache->next = etb_build_reg_cache(etb);
@@ -409,6 +403,12 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
 
        etm_ctx->reg_cache = reg_cache;
        return reg_cache;
+
+fail:
+       free(reg_cache);
+       free(reg_list);
+       free(arch_info);
+       return NULL;
 }
 
 static int etm_read_reg(struct reg *reg)
@@ -640,7 +640,7 @@ static int etm_read_instruction(struct etm_context *ctx, struct arm_instruction
 {
        int i;
        int section = -1;
-       uint32_t size_read;
+       size_t size_read;
        uint32_t opcode;
        int retval;