Hi!
Added additional error checks mostly to src/target/target.c and changed some
functions that performed no error checks to return void.
Index: helper/time_support.h
===================================================================
--- helper/time_support.h       (revision 1024)
+++ helper/time_support.h       (working copy)
@@ -49,7 +49,7 @@
        struct timeval duration;
 } duration_t;
 
-extern int duration_start_measure(duration_t *duration);
+extern void duration_start_measure(duration_t *duration);
 extern int duration_stop_measure(duration_t *duration, char **text);
 
 #endif /* TIME_SUPPORT_H */
Index: helper/time_support.c
===================================================================
--- helper/time_support.c       (revision 1024)
+++ helper/time_support.c       (working copy)
@@ -89,11 +89,9 @@
        return 0;
 }
 
-int duration_start_measure(duration_t *duration)
+void duration_start_measure(duration_t *duration)
 {
        gettimeofday(&duration->start, NULL);
-       
-       return ERROR_OK;
 }
 
 int duration_stop_measure(duration_t *duration, char **text)
Index: target/image.c
===================================================================
--- target/image.c      (revision 1037)
+++ target/image.c      (working copy)
@@ -912,7 +912,7 @@
        return ERROR_OK;
 }
 
-int image_close(image_t *image)
+void image_close(image_t *image)
 {
        if (image->type == IMAGE_BINARY)
        {
@@ -994,8 +994,6 @@
                free(image->sections);
                image->sections = NULL;
        }
-
-       return ERROR_OK;
 }
 
 int image_calculate_checksum(u8* buffer, u32 nbytes, u32* checksum)
Index: target/image.h
===================================================================
--- target/image.h      (revision 1037)
+++ target/image.h      (working copy)
@@ -107,7 +107,7 @@
 
 extern int image_open(image_t *image, char *url, char *type_string);
 extern int image_read_section(image_t *image, int section, u32 offset, u32 
size, u8 *buffer, u32 *size_read);
-extern int image_close(image_t *image);
+extern void image_close(image_t *image);
 extern int image_add_section(image_t *image, u32 base, u32 size, int flags, u8 
*data);
 
 extern int image_calculate_checksum(u8* buffer, u32 nbytes, u32* checksum);
Index: target/breakpoints.c
===================================================================
--- target/breakpoints.c        (revision 1037)
+++ target/breakpoints.c        (working copy)
@@ -119,7 +119,7 @@
        free(breakpoint);
 }
 
-int breakpoint_remove(target_t *target, u32 address)
+void breakpoint_remove(target_t *target, u32 address)
 {
        breakpoint_t *breakpoint = target->breakpoints;
        breakpoint_t **breakpoint_p = &target->breakpoints;
@@ -140,8 +140,6 @@
        {
                LOG_ERROR("no breakpoint at address 0x%8.8x found", address);
        }
-       
-       return ERROR_OK;
 }
 
 void breakpoint_clear_target(target_t *target)
@@ -242,7 +240,7 @@
 
 
 
-int watchpoint_remove(target_t *target, u32 address)
+void watchpoint_remove(target_t *target, u32 address)
 {
        watchpoint_t *watchpoint = target->watchpoints;
        watchpoint_t **watchpoint_p = &target->watchpoints;
@@ -263,8 +261,6 @@
        {
                LOG_ERROR("no watchpoint at address 0x%8.8x found", address);
        }
-       
-       return ERROR_OK;
 }
 
 
Index: target/breakpoints.h
===================================================================
--- target/breakpoints.h        (revision 1037)
+++ target/breakpoints.h        (working copy)
@@ -62,10 +62,10 @@
 
 extern void breakpoint_clear_target(struct target_s *target);
 extern int breakpoint_add(struct target_s *target, u32 address, u32 length, 
enum breakpoint_type type);
-extern int breakpoint_remove(struct target_s *target, u32 address);
+extern void breakpoint_remove(struct target_s *target, u32 address);
 extern breakpoint_t* breakpoint_find(struct target_s *target, u32 address);
 extern int watchpoint_add(struct target_s *target, u32 address, u32 length, 
enum watchpoint_rw rw, u32 value, u32 mask);
-extern int watchpoint_remove(struct target_s *target, u32 address);
+extern void watchpoint_remove(struct target_s *target, u32 address);
 extern void watchpoint_clear_target(struct target_s *target);
 
 #endif /* BREAKPOINTS_H */
Index: target/target.c
===================================================================
--- target/target.c     (revision 1037)
+++ target/target.c     (working copy)
@@ -425,6 +425,7 @@
 static int NEW_target_process_reset(struct command_context_s *cmd_ctx, enum 
target_reset_mode reset_mode)
 {
        char buf[100];
+       int retval;
        Jim_Nvp *n;
        n = Jim_Nvp_value2name_simple( nvp_reset_modes, reset_mode );
        if( n->name == NULL ){
@@ -433,12 +434,16 @@
        }
 
        sprintf( buf, "ocd_process_reset %s", n->name );
-       Jim_Eval( interp, buf );
+       retval = Jim_Eval( interp, buf );
 
+       if(retval != JIM_ERR){
+               return ERROR_FAIL;
+       }
+
        /* We want any events to be processed before the prompt */
-       target_call_timer_callbacks_now();
+       retval = target_call_timer_callbacks_now();
 
-       return ERROR_OK;
+       return retval;
 }
 
 // Next patch - this turns into TCL...
@@ -499,7 +504,8 @@
                if (target->reset_halt)
                {
                        /* wait up to 1 second for halt. */
-                       target_wait_state(target, TARGET_HALTED, 1000);
+                       if ((retval = target_wait_state(target, TARGET_HALTED, 
1000)) != ERROR_OK)
+                               return retval;
                        if (target->state != TARGET_HALTED)
                        {
                                LOG_WARNING("Failed to reset target into halted 
mode - issuing halt");
@@ -532,7 +538,8 @@
        }
 
        /* We want any events to be processed before the prompt */
-       target_call_timer_callbacks_now();
+       if ((retval = target_call_timer_callbacks_now()) != ERROR_OK)
+               return retval;
 
        return retval;
 }
@@ -627,6 +634,7 @@
 int target_init(struct command_context_s *cmd_ctx)
 {
        target_t *target = all_targets;
+       int retval;
 
        while (target)
        {
@@ -670,8 +678,10 @@
 
        if (all_targets)
        {
-               target_register_user_commands(cmd_ctx);
-               target_register_timer_callback(handle_target, 100, 1, NULL);
+               if((retval = target_register_user_commands(cmd_ctx)) != 
ERROR_OK)
+                       return retval;
+               if((retval = target_register_timer_callback(handle_target, 100, 
1, NULL)) != ERROR_OK)
+                       return retval;
        }
 
        return ERROR_OK;
@@ -855,7 +865,11 @@
                                        }
                                }
                                else
-                                       
target_unregister_timer_callback(callback->callback, callback->priv);
+                               {
+                                       int retval;
+                                       if((retval = 
target_unregister_timer_callback(callback->callback, callback->priv)) != 
ERROR_OK)
+                                               return retval;
+                               }
                        }
                }
 
@@ -950,8 +964,10 @@
 
                if (target->backup_working_area)
                {
+                       int retval;
                        new_wa->backup = malloc(new_wa->size);
-                       target->type->read_memory(target, new_wa->address, 4, 
new_wa->size / 4, new_wa->backup);
+                       if((retval = target->type->read_memory(target, 
new_wa->address, 4, new_wa->size / 4, new_wa->backup)) != ERROR_OK)
+                               return retval;
                }
                else
                {
@@ -978,7 +994,11 @@
                return ERROR_OK;
 
        if (restore&&target->backup_working_area)
-               target->type->write_memory(target, area->address, 4, area->size 
/ 4, area->backup);
+       {
+               int retval;
+               if((retval = target->type->write_memory(target, area->address, 
4, area->size / 4, area->backup)) != ERROR_OK)
+                       return retval;
+       }
 
        area->free = 1;
 
@@ -994,7 +1014,10 @@
        return target_free_working_area_restore(target, area, 1);
 }
 
-int target_free_all_working_areas_restore(struct target_s *target, int restore)
+/* free resources and restore memory, if restoring memory fails,
+ * free up resources anyway
+ */
+void target_free_all_working_areas_restore(struct target_s *target, int 
restore)
 {
        working_area_t *c = target->working_areas;
 
@@ -1012,13 +1035,11 @@
        }
 
        target->working_areas = NULL;
-
-       return ERROR_OK;
 }
 
-int target_free_all_working_areas(struct target_s *target)
+void target_free_all_working_areas(struct target_s *target)
 {
-       return target_free_all_working_areas_restore(target, 1);
+       target_free_all_working_areas_restore(target, 1);
 }
 
 int target_register_commands(struct command_context_s *cmd_ctx)
@@ -1396,6 +1417,7 @@
 
 int target_register_user_commands(struct command_context_s *cmd_ctx)
 {
+       int retval = ERROR_OK;
        register_command(cmd_ctx,  NULL, "reg", handle_reg_command, 
COMMAND_EXEC, NULL);
        register_command(cmd_ctx,  NULL, "poll", handle_poll_command, 
COMMAND_EXEC, "poll target state");
        register_command(cmd_ctx,  NULL, "wait_halt", handle_wait_halt_command, 
COMMAND_EXEC, "wait for target halt [time (s)]");
@@ -1423,10 +1445,13 @@
        register_command(cmd_ctx,  NULL, "dump_image", 
handle_dump_image_command, COMMAND_EXEC, "dump_image <file> <address> <size>");
        register_command(cmd_ctx,  NULL, "verify_image", 
handle_verify_image_command, COMMAND_EXEC, "verify_image <file> [offset] 
[type]");
 
-       target_request_register_commands(cmd_ctx);
-       trace_register_commands(cmd_ctx);
+       if((retval = target_request_register_commands(cmd_ctx)) != ERROR_OK)
+               return retval;
+       if((retval = trace_register_commands(cmd_ctx)) != ERROR_OK)
+               return retval;
 
-       return ERROR_OK;
+
+       return retval;
 }
 
 int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char 
**args, int argc)
@@ -1487,6 +1512,7 @@
 
 int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, 
char **args, int argc)
 {
+       int retval = ERROR_OK;
        target_t *target = NULL;
 
        if ((argc < 4) || (argc > 5))
@@ -1522,13 +1548,14 @@
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       return ERROR_OK;
+       return retval;
 }
 
 
 /* process target state changes */
 int handle_target(void *priv)
 {
+       int retval = ERROR_OK;
        target_t *target = all_targets;
 
        while (target)
@@ -1536,13 +1563,14 @@
                if (target_continous_poll)
                {
                        /* polling may fail silently until the target has been 
examined */
-                       target_poll(target);
+                       if((retval = target_poll(target)) != ERROR_OK)
+                               return retval;
                }
 
                target = target->next;
        }
 
-       return ERROR_OK;
+       return retval;
 }
 
 int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char 
**args, int argc)
@@ -1659,14 +1687,18 @@
 
 int handle_poll_command(struct command_context_s *cmd_ctx, char *cmd, char 
**args, int argc)
 {
+       int retval = ERROR_OK;
        target_t *target = get_current_target(cmd_ctx);
 
        if (argc == 0)
        {
-               target_poll(target);
-               target_arch_state(target);
+               if((retval = target_poll(target)) != ERROR_OK)
+                       return retval;
+               if((retval = target_arch_state(target)) != ERROR_OK)
+                       return retval;
+
        }
-       else
+       else if (argc==1)
        {
                if (strcmp(args[0], "on") == 0)
                {
@@ -1680,10 +1712,13 @@
                {
                        command_print(cmd_ctx, "arg is \"on\" or \"off\"");
                }
+       } else
+       {
+               return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
 
-       return ERROR_OK;
+       return retval;
 }
 
 int handle_wait_halt_command(struct command_context_s *cmd_ctx, char *cmd, 
char **args, int argc)
@@ -1989,7 +2024,7 @@
        u32 min_address=0;
        u32 max_address=0xffffffff;
        int i;
-       int retval;
+       int retval, retvaltemp;
 
        image_t image;
 
@@ -2089,7 +2124,9 @@
                free(buffer);
        }
 
-       duration_stop_measure(&duration, &duration_text);
+       if((retvaltemp = duration_stop_measure(&duration, &duration_text)) != 
ERROR_OK)
+                       return retvaltemp;
+
        if (retval==ERROR_OK)
        {
                command_print(cmd_ctx, "downloaded %u byte in %s", image_size, 
duration_text);
@@ -2109,7 +2146,7 @@
        u32 address;
        u32 size;
        u8 buffer[560];
-       int retval=ERROR_OK;
+       int retval=ERROR_OK, retvaltemp;
 
        duration_t duration;
        char *duration_text;
@@ -2159,9 +2196,12 @@
                address += this_run_size;
        }
 
-       fileio_close(&fileio);
+       if((retvaltemp = fileio_close(&fileio)) != ERROR_OK)
+                       return retvaltemp;
 
-       duration_stop_measure(&duration, &duration_text);
+       if((retvaltemp = duration_stop_measure(&duration, &duration_text)) != 
ERROR_OK)
+                               return retvaltemp;
+
        if (retval==ERROR_OK)
        {
                command_print(cmd_ctx, "dumped %"PRIi64" byte in %s", 
fileio.size, duration_text);
@@ -2177,7 +2217,7 @@
        u32 buf_cnt;
        u32 image_size;
        int i;
-       int retval;
+       int retval, retvaltemp;
        u32 checksum = 0;
        u32 mem_checksum = 0;
 
@@ -2290,7 +2330,10 @@
                image_size += buf_cnt;
        }
 done:
-       duration_stop_measure(&duration, &duration_text);
+
+       if((retvaltemp = duration_stop_measure(&duration, &duration_text)) != 
ERROR_OK)
+               return retvaltemp;
+
        if (retval==ERROR_OK)
        {
                command_print(cmd_ctx, "verified %u bytes in %s", image_size, 
duration_text);
@@ -2616,7 +2659,8 @@
                } else if (target->state == TARGET_RUNNING)
                {
                        // We want to quickly sample the PC.
-                       target_halt(target);
+                       if((retval = target_halt(target)) != ERROR_OK)
+                               return retval;
                } else
                {
                        command_print(cmd_ctx, "Target not halted or running");
@@ -2632,12 +2676,14 @@
                if ((numSamples>=maxSample) || ((now.tv_sec >= timeout.tv_sec) 
&& (now.tv_usec >= timeout.tv_usec)))
                {
                        command_print(cmd_ctx, "Profiling completed. %d 
samples.", numSamples);
-                       target_poll(target);
+                       if((retval = target_poll(target)) != ERROR_OK)
+                               return retval;
                        if (target->state == TARGET_HALTED)
                        {
                                target_resume(target, 1, 0, 0, 0); /* current 
pc, addr = 0, do not handle breakpoints, not debugging */
                        }
-                       target_poll(target);
+                       if((retval = target_poll(target)) != ERROR_OK)
+                               return retval;
                        writeGmon(samples, numSamples, args[1]);
                        command_print(cmd_ctx, "Wrote %s", args[1]);
                        break;
Index: target/target.h
===================================================================
--- target/target.h     (revision 1037)
+++ target/target.h     (working copy)
@@ -394,8 +394,8 @@
 extern int target_alloc_working_area(struct target_s *target, u32 size, 
working_area_t **area);
 extern int target_free_working_area(struct target_s *target, working_area_t 
*area);
 extern int target_free_working_area_restore(struct target_s *target, 
working_area_t *area, int restore);
-extern int target_free_all_working_areas(struct target_s *target);
-extern int target_free_all_working_areas_restore(struct target_s *target, int 
restore);
+extern void target_free_all_working_areas(struct target_s *target);
+extern void target_free_all_working_areas_restore(struct target_s *target, int 
restore);
 
 extern target_t *all_targets;
 
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to