]> git.sur5r.net Git - openocd/blobdiff - src/target/target.c
- fixes issue with reset and arm926ejs core. Thanks Øyvind Harboe
[openocd] / src / target / target.c
index 53022dffd52a85a9ac7b9846ed57ca7891712fb8..25df2a2b85e4048e8f209b90f9c95f881149ca51 100644 (file)
@@ -313,23 +313,6 @@ int target_process_reset(struct command_context_s *cmd_ctx)
        while (target)
        {
                target->type->deassert_reset(target);
-
-               switch (target->reset_mode)
-               {
-                       case RESET_INIT:
-                       case RESET_HALT:
-                               // If we're already halted, then this is harmless(reducing # of execution paths here)
-                               // If nSRST & nTRST are tied together then the halt during reset failed(logged) and
-                               // we use this as fallback(there is no other output to tell the user that reset halt 
-                               // didn't work).
-                               target->type->poll(target);
-                               target->type->halt(target);
-                               break;
-                       default:
-                               break;
-               }
-               
-               
                target = target->next;
        }
        jtag_execute_queue();
@@ -781,6 +764,11 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32*
                size, &checksum)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE)
        {
                buffer = malloc(size);
+               if (buffer == NULL)
+               {
+                       ERROR("error allocating buffer for section (%d bytes)", size);
+                       return ERROR_OK;
+               }
                target_read_buffer(target, address, size, buffer);
 
                /* convert to target endianess */
@@ -1040,6 +1028,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
                                (*last_target_p)->reset_script = NULL;
                                (*last_target_p)->post_halt_script = NULL;
                                (*last_target_p)->pre_resume_script = NULL;
+                               (*last_target_p)->gdb_program_script = NULL;
                                
                                (*last_target_p)->working_area = 0x0;
                                (*last_target_p)->working_area_size = 0x0;
@@ -1064,6 +1053,7 @@ int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **a
                                (*last_target_p)->trace_info->trace_history_overflowed = 0;
                                
                                (*last_target_p)->dbgmsg = NULL;
+                               (*last_target_p)->dbg_msg_enabled = 0;
                                                                
                                (*last_target_p)->type->target_command(cmd_ctx, cmd, args, argc, *last_target_p);
                                
@@ -1120,6 +1110,12 @@ int handle_target_script_command(struct command_context_s *cmd_ctx, char *cmd, c
                        free(target->pre_resume_script);
                target->pre_resume_script = strdup(args[2]);
        }
+       else if (strcmp(args[1], "gdb_program_config") == 0)
+       {
+               if (target->gdb_program_script)
+                       free(target->gdb_program_script);
+               target->gdb_program_script = strdup(args[2]);
+       }
        else
        {
                ERROR("unknown event type: '%s", args[1]);
@@ -1427,10 +1423,10 @@ int handle_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
                                break;
                        case ERROR_TARGET_TIMEOUT:
                                command_print(cmd_ctx, "target timed out... shutting down");
-                               exit(-1);
+                               return retval;
                        default:
                                command_print(cmd_ctx, "unknown error... shutting down");
-                               exit(-1);
+                               return retval;
                }
        }
        
@@ -1577,9 +1573,11 @@ int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
 
 int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
+       const int line_bytecnt = 32;
        int count = 1;
        int size = 4;
        u32 address = 0;
+       int line_modulo;
        int i;
 
        char output[128];
@@ -1602,20 +1600,21 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
        switch (cmd[2])
        {
                case 'w':
-                       size = 4;
+                       size = 4; line_modulo = line_bytecnt / 4;
                        break;
                case 'h':
-                       size = 2;
+                       size = 2; line_modulo = line_bytecnt / 2;
                        break;
                case 'b':
-                       size = 1;
+                       size = 1; line_modulo = line_bytecnt / 1;
                        break;
                default:
                        return ERROR_OK;
        }
 
        buffer = calloc(count, size);
-       if ((retval  = target->type->read_memory(target, address, size, count, buffer)) != ERROR_OK)
+       retval  = target->type->read_memory(target, address, size, count, buffer);
+       if (retval != ERROR_OK)
        {
                switch (retval)
                {
@@ -1639,7 +1638,7 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 
        for (i = 0; i < count; i++)
        {
-               if (i%8 == 0)
+               if (i%line_modulo == 0)
                        output_len += snprintf(output + output_len, 128 - output_len, "0x%8.8x: ", address + (i*size));
                
                switch (size)
@@ -1655,7 +1654,7 @@ int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
                                break;
                }
 
-               if ((i%8 == 7) || (i == count - 1))
+               if ((i%line_modulo == line_modulo-1) || (i == count - 1))
                {
                        command_print(cmd_ctx, output);
                        output_len = 0;
@@ -1767,6 +1766,11 @@ int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char
        for (i = 0; i < image.num_sections; i++)
        {
                buffer = malloc(image.sections[i].size);
+               if (buffer==NULL)
+               {
+                       command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size);
+                       break;
+               }
                if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
                {
                        ERROR("image_read_section failed with error code: %i", retval);
@@ -1904,6 +1908,11 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
        for (i = 0; i < image.num_sections; i++)
        {
                buffer = malloc(image.sections[i].size);
+               if (buffer == NULL)
+               {
+                       command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size);
+                       break;
+               }
                if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
                {
                        ERROR("image_read_section failed with error code: %i", retval);
@@ -2134,3 +2143,4 @@ int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args
 }
 
 
+