X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Ftrace.c;h=3d7c35b12088340500b914ad1b17a4d47b167b82;hb=592e080690bf925185f3313280025509c5e7f4db;hp=536e34a5f427cf0149d4b7e4cc57a6b82731fe0a;hpb=29000b204d039bc1123027eba755329ab36a3dde;p=openocd.git diff --git a/src/target/trace.c b/src/target/trace.c index 536e34a5f4..3d7c35b120 100644 --- a/src/target/trace.c +++ b/src/target/trace.c @@ -21,21 +21,15 @@ #include "config.h" #endif -#include "replacements.h" #include "log.h" #include "trace.h" #include "target.h" -#include "command.h" -#include -#include -#include - -int trace_point(target_t *target, int number) +int trace_point(target_t *target, uint32_t number) { trace_t *trace = target->trace_info; - DEBUG("tracepoint: %i", number); + LOG_DEBUG("tracepoint: %i", number); if (number < trace->num_trace_points) trace->trace_points[number].hit_counter++; @@ -53,20 +47,20 @@ int trace_point(target_t *target, int number) return ERROR_OK; } -int handle_trace_point_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +static int handle_trace_point_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { target_t *target = get_current_target(cmd_ctx); trace_t *trace = target->trace_info; if (argc == 0) { - int i; + uint32_t i; for (i = 0; i < trace->num_trace_points; i++) { - command_print(cmd_ctx, "trace point 0x%8.8x (%"PRIi64" times hit)", + command_print(cmd_ctx, "trace point 0x%8.8x (%lld times hit)", trace->trace_points[i].address, - trace->trace_points[i].hit_counter); + (long long)trace->trace_points[i].hit_counter); } return ERROR_OK; @@ -75,7 +69,10 @@ int handle_trace_point_command(struct command_context_s *cmd_ctx, char *cmd, cha if (!strcmp(args[0], "clear")) { if (trace->trace_points) + { free(trace->trace_points); + trace->trace_points = NULL; + } trace->num_trace_points = 0; trace->trace_points_size = 0; @@ -96,7 +93,7 @@ int handle_trace_point_command(struct command_context_s *cmd_ctx, char *cmd, cha return ERROR_OK; } -int handle_trace_history_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +static int handle_trace_history_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { target_t *target = get_current_target(cmd_ctx); trace_t *trace = target->trace_info; @@ -116,16 +113,20 @@ int handle_trace_history_command(struct command_context_s *cmd_ctx, char *cmd, c free(trace->trace_history); trace->trace_history_size = strtoul(args[0], NULL, 0); - trace->trace_history = malloc(sizeof(u32) * trace->trace_history_size); + trace->trace_history = malloc(sizeof(uint32_t) * trace->trace_history_size); command_print(cmd_ctx, "new trace history size: %i", trace->trace_history_size); } else { - int i; - int first = 0; - int last = trace->trace_history_pos; - + uint32_t i; + uint32_t first = 0; + uint32_t last = trace->trace_history_pos; + + if ( !trace->trace_history_size ) { + command_print(cmd_ctx, "trace history buffer is not allocated"); + return ERROR_OK; + } if (trace->trace_history_overflowed) { first = trace->trace_history_pos; @@ -136,7 +137,7 @@ int handle_trace_history_command(struct command_context_s *cmd_ctx, char *cmd, c { if (trace->trace_history[i % trace->trace_history_size] < trace->num_trace_points) { - u32 address; + uint32_t address; address = trace->trace_points[trace->trace_history[i % trace->trace_history_size]].address; command_print(cmd_ctx, "trace point %i: 0x%8.8x", trace->trace_history[i % trace->trace_history_size],