1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
24 #include "replacements.h"
26 #include "target_request.h"
29 #include "configuration.h"
30 #include "binarybuffer.h"
37 #include <sys/types.h>
45 #include <time_support.h>
50 int cli_target_callback_event_handler(struct target_s
*target
, enum target_event event
, void *priv
);
52 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
53 int handle_daemon_startup_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
54 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
56 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
57 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
58 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
60 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
61 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
62 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
63 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
64 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
65 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
66 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
67 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
68 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
69 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
70 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
71 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
72 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
73 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
74 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
75 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
76 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
77 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
);
81 extern target_type_t arm7tdmi_target
;
82 extern target_type_t arm720t_target
;
83 extern target_type_t arm9tdmi_target
;
84 extern target_type_t arm920t_target
;
85 extern target_type_t arm966e_target
;
86 extern target_type_t arm926ejs_target
;
87 extern target_type_t feroceon_target
;
88 extern target_type_t xscale_target
;
89 extern target_type_t cortexm3_target
;
91 target_type_t
*target_types
[] =
105 target_t
*targets
= NULL
;
106 target_event_callback_t
*target_event_callbacks
= NULL
;
107 target_timer_callback_t
*target_timer_callbacks
= NULL
;
109 char *target_state_strings
[] =
118 char *target_debug_reason_strings
[] =
120 "debug request", "breakpoint", "watchpoint",
121 "watchpoint and breakpoint", "single step",
125 char *target_endianess_strings
[] =
131 enum daemon_startup_mode startup_mode
= DAEMON_ATTACH
;
133 static int target_continous_poll
= 1;
135 /* read a u32 from a buffer in target memory endianness */
136 u32
target_buffer_get_u32(target_t
*target
, u8
*buffer
)
138 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
139 return le_to_h_u32(buffer
);
141 return be_to_h_u32(buffer
);
144 /* read a u16 from a buffer in target memory endianness */
145 u16
target_buffer_get_u16(target_t
*target
, u8
*buffer
)
147 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
148 return le_to_h_u16(buffer
);
150 return be_to_h_u16(buffer
);
153 /* write a u32 to a buffer in target memory endianness */
154 void target_buffer_set_u32(target_t
*target
, u8
*buffer
, u32 value
)
156 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
157 h_u32_to_le(buffer
, value
);
159 h_u32_to_be(buffer
, value
);
162 /* write a u16 to a buffer in target memory endianness */
163 void target_buffer_set_u16(target_t
*target
, u8
*buffer
, u16 value
)
165 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
166 h_u16_to_le(buffer
, value
);
168 h_u16_to_be(buffer
, value
);
171 /* returns a pointer to the n-th configured target */
172 target_t
* get_target_by_num(int num
)
174 target_t
*target
= targets
;
181 target
= target
->next
;
188 int get_num_by_target(target_t
*query_target
)
190 target_t
*target
= targets
;
195 if (target
== query_target
)
197 target
= target
->next
;
204 target_t
* get_current_target(command_context_t
*cmd_ctx
)
206 target_t
*target
= get_target_by_num(cmd_ctx
->current_target
);
210 ERROR("BUG: current_target out of bounds");
217 /* Process target initialization, when target entered debug out of reset
218 * the handler is unregistered at the end of this function, so it's only called once
220 int target_init_handler(struct target_s
*target
, enum target_event event
, void *priv
)
223 struct command_context_s
*cmd_ctx
= priv
;
225 if ((event
== TARGET_EVENT_HALTED
) && (target
->reset_script
))
227 target_unregister_event_callback(target_init_handler
, priv
);
229 script
= open_file_from_path(cmd_ctx
, target
->reset_script
, "r");
232 ERROR("couldn't open script file %s", target
->reset_script
);
236 INFO("executing reset script '%s'", target
->reset_script
);
237 command_run_file(cmd_ctx
, script
, COMMAND_EXEC
);
240 jtag_execute_queue();
246 int target_run_and_halt_handler(void *priv
)
248 target_t
*target
= priv
;
250 target
->type
->halt(target
);
255 int target_process_reset(struct command_context_s
*cmd_ctx
)
257 int retval
= ERROR_OK
;
259 struct timeval timeout
, now
;
261 /* prepare reset_halt where necessary */
265 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
267 switch (target
->reset_mode
)
270 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to RESET_RUN_AND_HALT");
271 target
->reset_mode
= RESET_RUN_AND_HALT
;
274 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to RESET_RUN_AND_INIT");
275 target
->reset_mode
= RESET_RUN_AND_INIT
;
281 switch (target
->reset_mode
)
285 target
->type
->prepare_reset_halt(target
);
290 target
= target
->next
;
296 target
->type
->assert_reset(target
);
297 target
= target
->next
;
299 jtag_execute_queue();
301 /* request target halt if necessary, and schedule further action */
305 switch (target
->reset_mode
)
308 /* nothing to do if target just wants to be run */
310 case RESET_RUN_AND_HALT
:
312 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
314 case RESET_RUN_AND_INIT
:
316 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
317 target_register_event_callback(target_init_handler
, cmd_ctx
);
320 target
->type
->halt(target
);
323 target
->type
->halt(target
);
324 target_register_event_callback(target_init_handler
, cmd_ctx
);
327 ERROR("BUG: unknown target->reset_mode");
329 target
= target
->next
;
335 target
->type
->deassert_reset(target
);
336 target
= target
->next
;
338 jtag_execute_queue();
340 /* Wait for reset to complete, maximum 5 seconds. */
341 gettimeofday(&timeout
, NULL
);
342 timeval_add_time(&timeout
, 5, 0);
345 gettimeofday(&now
, NULL
);
347 target_call_timer_callbacks();
352 target
->type
->poll(target
);
353 if ((target
->reset_mode
== RESET_RUN_AND_INIT
) || (target
->reset_mode
== RESET_RUN_AND_HALT
))
355 if (target
->state
!= TARGET_HALTED
)
357 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
359 command_print(cmd_ctx
, "Timed out waiting for reset");
362 usleep(100*1000); /* Do not eat all cpu */
366 target
= target
->next
;
368 /* All targets we're waiting for are halted */
376 /* We want any events to be processed before the prompt */
377 target_call_timer_callbacks();
382 static int default_virt2phys(struct target_s
*target
, u32
virtual, u32
*physical
)
388 static int default_mmu(struct target_s
*target
, int *enabled
)
390 USER("No MMU present");
395 int target_init(struct command_context_s
*cmd_ctx
)
397 target_t
*target
= targets
;
401 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
403 ERROR("target '%s' init failed", target
->type
->name
);
407 /* Set up default functions if none are provided by target */
408 if (target
->type
->virt2phys
== NULL
)
410 target
->type
->virt2phys
= default_virt2phys
;
412 if (target
->type
->mmu
== NULL
)
414 target
->type
->mmu
= default_mmu
;
416 target
= target
->next
;
421 target_register_user_commands(cmd_ctx
);
422 target_register_timer_callback(handle_target
, 100, 1, NULL
);
428 int target_init_reset(struct command_context_s
*cmd_ctx
)
430 if (startup_mode
== DAEMON_RESET
)
431 target_process_reset(cmd_ctx
);
436 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
438 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
440 if (callback
== NULL
)
442 return ERROR_INVALID_ARGUMENTS
;
447 while ((*callbacks_p
)->next
)
448 callbacks_p
= &((*callbacks_p
)->next
);
449 callbacks_p
= &((*callbacks_p
)->next
);
452 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
453 (*callbacks_p
)->callback
= callback
;
454 (*callbacks_p
)->priv
= priv
;
455 (*callbacks_p
)->next
= NULL
;
460 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
462 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
465 if (callback
== NULL
)
467 return ERROR_INVALID_ARGUMENTS
;
472 while ((*callbacks_p
)->next
)
473 callbacks_p
= &((*callbacks_p
)->next
);
474 callbacks_p
= &((*callbacks_p
)->next
);
477 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
478 (*callbacks_p
)->callback
= callback
;
479 (*callbacks_p
)->periodic
= periodic
;
480 (*callbacks_p
)->time_ms
= time_ms
;
482 gettimeofday(&now
, NULL
);
483 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
484 time_ms
-= (time_ms
% 1000);
485 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
486 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
488 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
489 (*callbacks_p
)->when
.tv_sec
+= 1;
492 (*callbacks_p
)->priv
= priv
;
493 (*callbacks_p
)->next
= NULL
;
498 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
500 target_event_callback_t
**p
= &target_event_callbacks
;
501 target_event_callback_t
*c
= target_event_callbacks
;
503 if (callback
== NULL
)
505 return ERROR_INVALID_ARGUMENTS
;
510 target_event_callback_t
*next
= c
->next
;
511 if ((c
->callback
== callback
) && (c
->priv
== priv
))
525 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
527 target_timer_callback_t
**p
= &target_timer_callbacks
;
528 target_timer_callback_t
*c
= target_timer_callbacks
;
530 if (callback
== NULL
)
532 return ERROR_INVALID_ARGUMENTS
;
537 target_timer_callback_t
*next
= c
->next
;
538 if ((c
->callback
== callback
) && (c
->priv
== priv
))
552 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
554 target_event_callback_t
*callback
= target_event_callbacks
;
555 target_event_callback_t
*next_callback
;
557 DEBUG("target event %i", event
);
561 next_callback
= callback
->next
;
562 callback
->callback(target
, event
, callback
->priv
);
563 callback
= next_callback
;
569 int target_call_timer_callbacks()
571 target_timer_callback_t
*callback
= target_timer_callbacks
;
572 target_timer_callback_t
*next_callback
;
575 gettimeofday(&now
, NULL
);
579 next_callback
= callback
->next
;
581 if (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
582 || (now
.tv_sec
> callback
->when
.tv_sec
))
584 callback
->callback(callback
->priv
);
585 if (callback
->periodic
)
587 int time_ms
= callback
->time_ms
;
588 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
589 time_ms
-= (time_ms
% 1000);
590 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
591 if (callback
->when
.tv_usec
> 1000000)
593 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
594 callback
->when
.tv_sec
+= 1;
598 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
601 callback
= next_callback
;
607 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
609 working_area_t
*c
= target
->working_areas
;
610 working_area_t
*new_wa
= NULL
;
612 /* Reevaluate working area address based on MMU state*/
613 if (target
->working_areas
== NULL
)
617 retval
= target
->type
->mmu(target
, &enabled
);
618 if (retval
!= ERROR_OK
)
624 target
->working_area
= target
->working_area_virt
;
628 target
->working_area
= target
->working_area_phys
;
632 /* only allocate multiples of 4 byte */
635 ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
636 size
= CEIL(size
, 4);
639 /* see if there's already a matching working area */
642 if ((c
->free
) && (c
->size
== size
))
650 /* if not, allocate a new one */
653 working_area_t
**p
= &target
->working_areas
;
654 u32 first_free
= target
->working_area
;
655 u32 free_size
= target
->working_area_size
;
657 DEBUG("allocating new working area");
659 c
= target
->working_areas
;
662 first_free
+= c
->size
;
663 free_size
-= c
->size
;
668 if (free_size
< size
)
670 WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
671 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
674 new_wa
= malloc(sizeof(working_area_t
));
677 new_wa
->address
= first_free
;
679 if (target
->backup_working_area
)
681 new_wa
->backup
= malloc(new_wa
->size
);
682 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
686 new_wa
->backup
= NULL
;
689 /* put new entry in list */
693 /* mark as used, and return the new (reused) area */
703 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
708 if (target
->backup_working_area
)
709 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
713 /* mark user pointer invalid */
720 int target_free_all_working_areas(struct target_s
*target
)
722 working_area_t
*c
= target
->working_areas
;
726 working_area_t
*next
= c
->next
;
727 target_free_working_area(target
, c
);
737 target
->working_areas
= NULL
;
742 int target_register_commands(struct command_context_s
*cmd_ctx
)
744 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, NULL
);
745 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
746 register_command(cmd_ctx
, NULL
, "daemon_startup", handle_daemon_startup_command
, COMMAND_CONFIG
, NULL
);
747 register_command(cmd_ctx
, NULL
, "target_script", handle_target_script_command
, COMMAND_CONFIG
, NULL
);
748 register_command(cmd_ctx
, NULL
, "run_and_halt_time", handle_run_and_halt_time_command
, COMMAND_CONFIG
, NULL
);
749 register_command(cmd_ctx
, NULL
, "working_area", handle_working_area_command
, COMMAND_ANY
, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
750 register_command(cmd_ctx
, NULL
, "virt2phys", handle_virt2phys_command
, COMMAND_ANY
, "virt2phys <virtual address>");
755 /* Single aligned words are guaranteed to use 16 or 32 bit access
756 * mode respectively, otherwise data is handled as quickly as
759 int target_write_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
763 DEBUG("writing buffer of %i byte at 0x%8.8x", size
, address
);
765 if (((address
% 2) == 0) && (size
== 2))
767 return target
->type
->write_memory(target
, address
, 2, 1, buffer
);
770 /* handle unaligned head bytes */
773 int unaligned
= 4 - (address
% 4);
775 if ((retval
= target
->type
->write_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
779 address
+= unaligned
;
783 /* handle aligned words */
786 int aligned
= size
- (size
% 4);
788 /* use bulk writes above a certain limit. This may have to be changed */
791 if ((retval
= target
->type
->bulk_write_memory(target
, address
, aligned
/ 4, buffer
)) != ERROR_OK
)
796 if ((retval
= target
->type
->write_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
805 /* handle tail writes of less than 4 bytes */
808 if ((retval
= target
->type
->write_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
816 /* Single aligned words are guaranteed to use 16 or 32 bit access
817 * mode respectively, otherwise data is handled as quickly as
820 int target_read_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
824 DEBUG("reading buffer of %i byte at 0x%8.8x", size
, address
);
826 if (((address
% 2) == 0) && (size
== 2))
828 return target
->type
->read_memory(target
, address
, 2, 1, buffer
);
831 /* handle unaligned head bytes */
834 int unaligned
= 4 - (address
% 4);
836 if ((retval
= target
->type
->read_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
840 address
+= unaligned
;
844 /* handle aligned words */
847 int aligned
= size
- (size
% 4);
849 if ((retval
= target
->type
->read_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
857 /* handle tail writes of less than 4 bytes */
860 if ((retval
= target
->type
->read_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
867 int target_checksum_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* crc
)
874 if ((retval
= target
->type
->checksum_memory(target
, address
,
875 size
, &checksum
)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE
)
877 buffer
= malloc(size
);
880 ERROR("error allocating buffer for section (%d bytes)", size
);
881 return ERROR_INVALID_ARGUMENTS
;
883 retval
= target_read_buffer(target
, address
, size
, buffer
);
884 if (retval
!= ERROR_OK
)
890 /* convert to target endianess */
891 for (i
= 0; i
< (size
/sizeof(u32
)); i
++)
894 target_data
= target_buffer_get_u32(target
, &buffer
[i
*sizeof(u32
)]);
895 target_buffer_set_u32(target
, &buffer
[i
*sizeof(u32
)], target_data
);
898 retval
= image_calculate_checksum( buffer
, size
, &checksum
);
907 int target_read_u32(struct target_s
*target
, u32 address
, u32
*value
)
911 int retval
= target
->type
->read_memory(target
, address
, 4, 1, value_buf
);
913 if (retval
== ERROR_OK
)
915 *value
= target_buffer_get_u32(target
, value_buf
);
916 DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, *value
);
921 DEBUG("address: 0x%8.8x failed", address
);
927 int target_read_u16(struct target_s
*target
, u32 address
, u16
*value
)
931 int retval
= target
->type
->read_memory(target
, address
, 2, 1, value_buf
);
933 if (retval
== ERROR_OK
)
935 *value
= target_buffer_get_u16(target
, value_buf
);
936 DEBUG("address: 0x%8.8x, value: 0x%4.4x", address
, *value
);
941 DEBUG("address: 0x%8.8x failed", address
);
947 int target_read_u8(struct target_s
*target
, u32 address
, u8
*value
)
949 int retval
= target
->type
->read_memory(target
, address
, 1, 1, value
);
951 if (retval
== ERROR_OK
)
953 DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, *value
);
958 DEBUG("address: 0x%8.8x failed", address
);
964 int target_write_u32(struct target_s
*target
, u32 address
, u32 value
)
969 DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
971 target_buffer_set_u32(target
, value_buf
, value
);
972 if ((retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
)) != ERROR_OK
)
974 DEBUG("failed: %i", retval
);
980 int target_write_u16(struct target_s
*target
, u32 address
, u16 value
)
985 DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
987 target_buffer_set_u16(target
, value_buf
, value
);
988 if ((retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
)) != ERROR_OK
)
990 DEBUG("failed: %i", retval
);
996 int target_write_u8(struct target_s
*target
, u32 address
, u8 value
)
1000 DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, value
);
1002 if ((retval
= target
->type
->read_memory(target
, address
, 1, 1, &value
)) != ERROR_OK
)
1004 DEBUG("failed: %i", retval
);
1010 int target_register_user_commands(struct command_context_s
*cmd_ctx
)
1012 register_command(cmd_ctx
, NULL
, "reg", handle_reg_command
, COMMAND_EXEC
, NULL
);
1013 register_command(cmd_ctx
, NULL
, "poll", handle_poll_command
, COMMAND_EXEC
, "poll target state");
1014 register_command(cmd_ctx
, NULL
, "wait_halt", handle_wait_halt_command
, COMMAND_EXEC
, "wait for target halt [time (s)]");
1015 register_command(cmd_ctx
, NULL
, "halt", handle_halt_command
, COMMAND_EXEC
, "halt target");
1016 register_command(cmd_ctx
, NULL
, "resume", handle_resume_command
, COMMAND_EXEC
, "resume target [addr]");
1017 register_command(cmd_ctx
, NULL
, "step", handle_step_command
, COMMAND_EXEC
, "step one instruction from current PC or [addr]");
1018 register_command(cmd_ctx
, NULL
, "reset", handle_reset_command
, COMMAND_EXEC
, "reset target [run|halt|init|run_and_halt|run_and_init]");
1019 register_command(cmd_ctx
, NULL
, "soft_reset_halt", handle_soft_reset_halt_command
, COMMAND_EXEC
, "halt the target and do a soft reset");
1021 register_command(cmd_ctx
, NULL
, "mdw", handle_md_command
, COMMAND_EXEC
, "display memory words <addr> [count]");
1022 register_command(cmd_ctx
, NULL
, "mdh", handle_md_command
, COMMAND_EXEC
, "display memory half-words <addr> [count]");
1023 register_command(cmd_ctx
, NULL
, "mdb", handle_md_command
, COMMAND_EXEC
, "display memory bytes <addr> [count]");
1025 register_command(cmd_ctx
, NULL
, "mww", handle_mw_command
, COMMAND_EXEC
, "write memory word <addr> <value>");
1026 register_command(cmd_ctx
, NULL
, "mwh", handle_mw_command
, COMMAND_EXEC
, "write memory half-word <addr> <value>");
1027 register_command(cmd_ctx
, NULL
, "mwb", handle_mw_command
, COMMAND_EXEC
, "write memory byte <addr> <value>");
1029 register_command(cmd_ctx
, NULL
, "bp", handle_bp_command
, COMMAND_EXEC
, "set breakpoint <address> <length> [hw]");
1030 register_command(cmd_ctx
, NULL
, "rbp", handle_rbp_command
, COMMAND_EXEC
, "remove breakpoint <adress>");
1031 register_command(cmd_ctx
, NULL
, "wp", handle_wp_command
, COMMAND_EXEC
, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
1032 register_command(cmd_ctx
, NULL
, "rwp", handle_rwp_command
, COMMAND_EXEC
, "remove watchpoint <adress>");
1034 register_command(cmd_ctx
, NULL
, "load_image", handle_load_image_command
, COMMAND_EXEC
, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1035 register_command(cmd_ctx
, NULL
, "dump_image", handle_dump_image_command
, COMMAND_EXEC
, "dump_image <file> <address> <size>");
1036 register_command(cmd_ctx
, NULL
, "verify_image", handle_verify_image_command
, COMMAND_EXEC
, "verify_image <file> [offset] [type]");
1037 register_command(cmd_ctx
, NULL
, "load_binary", handle_load_image_command
, COMMAND_EXEC
, "[DEPRECATED] load_binary <file> <address>");
1038 register_command(cmd_ctx
, NULL
, "dump_binary", handle_dump_image_command
, COMMAND_EXEC
, "[DEPRECATED] dump_binary <file> <address> <size>");
1040 target_request_register_commands(cmd_ctx
);
1041 trace_register_commands(cmd_ctx
);
1046 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1048 target_t
*target
= targets
;
1053 int num
= strtoul(args
[0], NULL
, 0);
1058 target
= target
->next
;
1062 cmd_ctx
->current_target
= num
;
1064 command_print(cmd_ctx
, "%i is out of bounds, only %i targets are configured", num
, count
);
1071 command_print(cmd_ctx
, "%i: %s (%s), state: %s", count
++, target
->type
->name
, target_endianess_strings
[target
->endianness
], target_state_strings
[target
->state
]);
1072 target
= target
->next
;
1078 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1085 ERROR("target command requires at least three arguments: <type> <endianess> <reset_mode>");
1089 /* search for the specified target */
1090 if (args
[0] && (args
[0][0] != 0))
1092 for (i
= 0; target_types
[i
]; i
++)
1094 if (strcmp(args
[0], target_types
[i
]->name
) == 0)
1096 target_t
**last_target_p
= &targets
;
1098 /* register target specific commands */
1099 if (target_types
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1101 ERROR("couldn't register '%s' commands", args
[0]);
1107 while ((*last_target_p
)->next
)
1108 last_target_p
= &((*last_target_p
)->next
);
1109 last_target_p
= &((*last_target_p
)->next
);
1112 *last_target_p
= malloc(sizeof(target_t
));
1114 (*last_target_p
)->type
= target_types
[i
];
1116 if (strcmp(args
[1], "big") == 0)
1117 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1118 else if (strcmp(args
[1], "little") == 0)
1119 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1122 ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1126 /* what to do on a target reset */
1127 if (strcmp(args
[2], "reset_halt") == 0)
1128 (*last_target_p
)->reset_mode
= RESET_HALT
;
1129 else if (strcmp(args
[2], "reset_run") == 0)
1130 (*last_target_p
)->reset_mode
= RESET_RUN
;
1131 else if (strcmp(args
[2], "reset_init") == 0)
1132 (*last_target_p
)->reset_mode
= RESET_INIT
;
1133 else if (strcmp(args
[2], "run_and_halt") == 0)
1134 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1135 else if (strcmp(args
[2], "run_and_init") == 0)
1136 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1139 ERROR("unknown target startup mode %s", args
[2]);
1142 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1144 (*last_target_p
)->reset_script
= NULL
;
1145 (*last_target_p
)->post_halt_script
= NULL
;
1146 (*last_target_p
)->pre_resume_script
= NULL
;
1147 (*last_target_p
)->gdb_program_script
= NULL
;
1149 (*last_target_p
)->working_area
= 0x0;
1150 (*last_target_p
)->working_area_size
= 0x0;
1151 (*last_target_p
)->working_areas
= NULL
;
1152 (*last_target_p
)->backup_working_area
= 0;
1154 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1155 (*last_target_p
)->reg_cache
= NULL
;
1156 (*last_target_p
)->breakpoints
= NULL
;
1157 (*last_target_p
)->watchpoints
= NULL
;
1158 (*last_target_p
)->next
= NULL
;
1159 (*last_target_p
)->arch_info
= NULL
;
1161 /* initialize trace information */
1162 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1163 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1164 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1165 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1166 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1167 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1168 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1169 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1171 (*last_target_p
)->dbgmsg
= NULL
;
1172 (*last_target_p
)->dbg_msg_enabled
= 0;
1174 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1182 /* no matching target found */
1185 ERROR("target '%s' not found", args
[0]);
1192 /* usage: target_script <target#> <event> <script_file> */
1193 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1195 target_t
*target
= NULL
;
1199 ERROR("incomplete target_script command");
1203 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1207 ERROR("target number '%s' not defined", args
[0]);
1211 if (strcmp(args
[1], "reset") == 0)
1213 if (target
->reset_script
)
1214 free(target
->reset_script
);
1215 target
->reset_script
= strdup(args
[2]);
1217 else if (strcmp(args
[1], "post_halt") == 0)
1219 if (target
->post_halt_script
)
1220 free(target
->post_halt_script
);
1221 target
->post_halt_script
= strdup(args
[2]);
1223 else if (strcmp(args
[1], "pre_resume") == 0)
1225 if (target
->pre_resume_script
)
1226 free(target
->pre_resume_script
);
1227 target
->pre_resume_script
= strdup(args
[2]);
1229 else if (strcmp(args
[1], "gdb_program_config") == 0)
1231 if (target
->gdb_program_script
)
1232 free(target
->gdb_program_script
);
1233 target
->gdb_program_script
= strdup(args
[2]);
1237 ERROR("unknown event type: '%s", args
[1]);
1244 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1246 target_t
*target
= NULL
;
1250 ERROR("incomplete run_and_halt_time command");
1254 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1258 ERROR("target number '%s' not defined", args
[0]);
1262 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1267 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1269 target_t
*target
= NULL
;
1271 if ((argc
< 4) || (argc
> 5))
1273 return ERROR_COMMAND_SYNTAX_ERROR
;
1276 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1280 ERROR("target number '%s' not defined", args
[0]);
1283 target_free_all_working_areas(target
);
1285 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1288 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1290 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1292 if (strcmp(args
[3], "backup") == 0)
1294 target
->backup_working_area
= 1;
1296 else if (strcmp(args
[3], "nobackup") == 0)
1298 target
->backup_working_area
= 0;
1302 ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1303 return ERROR_COMMAND_SYNTAX_ERROR
;
1310 /* process target state changes */
1311 int handle_target(void *priv
)
1314 target_t
*target
= targets
;
1318 /* only poll if target isn't already halted */
1319 if (target
->state
!= TARGET_HALTED
)
1321 if (target_continous_poll
)
1322 if ((retval
= target
->type
->poll(target
)) < 0)
1324 ERROR("couldn't poll target. It's due for a reset.");
1328 target
= target
->next
;
1334 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1343 target
= get_current_target(cmd_ctx
);
1345 /* list all available registers for the current target */
1348 reg_cache_t
*cache
= target
->reg_cache
;
1354 for (i
= 0; i
< cache
->num_regs
; i
++)
1356 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1357 command_print(cmd_ctx
, "(%i) %s (/%i): 0x%s (dirty: %i, valid: %i)", count
++, cache
->reg_list
[i
].name
, cache
->reg_list
[i
].size
, value
, cache
->reg_list
[i
].dirty
, cache
->reg_list
[i
].valid
);
1360 cache
= cache
->next
;
1366 /* access a single register by its ordinal number */
1367 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1369 int num
= strtoul(args
[0], NULL
, 0);
1370 reg_cache_t
*cache
= target
->reg_cache
;
1376 for (i
= 0; i
< cache
->num_regs
; i
++)
1380 reg
= &cache
->reg_list
[i
];
1386 cache
= cache
->next
;
1391 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1394 } else /* access a single register by its name */
1396 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1400 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1405 /* display a register */
1406 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1408 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1411 if (reg
->valid
== 0)
1413 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1414 if (arch_type
== NULL
)
1416 ERROR("BUG: encountered unregistered arch type");
1419 arch_type
->get(reg
);
1421 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1422 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1427 /* set register value */
1430 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1431 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1433 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1434 if (arch_type
== NULL
)
1436 ERROR("BUG: encountered unregistered arch type");
1440 arch_type
->set(reg
, buf
);
1442 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1443 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1451 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1456 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1458 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1460 target_t
*target
= get_current_target(cmd_ctx
);
1465 command_print(cmd_ctx
, "target state: %s", target_state_strings
[target
->type
->poll(target
)]);
1466 if (target
->state
== TARGET_HALTED
)
1468 target
->type
->arch_state(target
, buffer
, 512);
1470 command_print(cmd_ctx
, "%s", buffer
);
1475 if (strcmp(args
[0], "on") == 0)
1477 target_continous_poll
= 1;
1479 else if (strcmp(args
[0], "off") == 0)
1481 target_continous_poll
= 0;
1485 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1493 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1501 ms
= strtoul(args
[0], &end
, 0) * 1000;
1504 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1509 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1512 static void target_process_events(struct command_context_s
*cmd_ctx
)
1514 target_t
*target
= get_current_target(cmd_ctx
);
1515 target
->type
->poll(target
);
1516 target_call_timer_callbacks();
1519 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1521 struct timeval timeout
, now
;
1523 gettimeofday(&timeout
, NULL
);
1524 timeval_add_time(&timeout
, 0, ms
* 1000);
1525 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1527 target_t
*target
= get_current_target(cmd_ctx
);
1528 while (target
->type
->poll(target
))
1530 target_call_timer_callbacks();
1531 if (target
->state
== state
)
1533 command_print(cmd_ctx
, "target %s", target_state_strings
[state
]);
1537 gettimeofday(&now
, NULL
);
1538 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1540 command_print(cmd_ctx
, "timed out while waiting for target %s", target_state_strings
[state
]);
1541 ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1549 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1552 target_t
*target
= get_current_target(cmd_ctx
);
1556 command_print(cmd_ctx
, "requesting target halt...");
1558 if ((retval
= target
->type
->halt(target
)) != ERROR_OK
)
1562 case ERROR_TARGET_ALREADY_HALTED
:
1563 command_print(cmd_ctx
, "target already halted");
1565 case ERROR_TARGET_TIMEOUT
:
1566 command_print(cmd_ctx
, "target timed out... shutting down");
1569 command_print(cmd_ctx
, "unknown error... shutting down");
1574 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1577 /* what to do on daemon startup */
1578 int handle_daemon_startup_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1582 if (strcmp(args
[0], "attach") == 0)
1584 startup_mode
= DAEMON_ATTACH
;
1587 else if (strcmp(args
[0], "reset") == 0)
1589 startup_mode
= DAEMON_RESET
;
1594 WARNING("invalid daemon_startup configuration directive: %s", args
[0]);
1599 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1601 target_t
*target
= get_current_target(cmd_ctx
);
1604 command_print(cmd_ctx
, "requesting target halt and executing a soft reset");
1606 if ((retval
= target
->type
->soft_reset_halt(target
)) != ERROR_OK
)
1610 case ERROR_TARGET_TIMEOUT
:
1611 command_print(cmd_ctx
, "target timed out... shutting down");
1614 command_print(cmd_ctx
, "unknown error... shutting down");
1622 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1624 target_t
*target
= get_current_target(cmd_ctx
);
1625 enum target_reset_mode reset_mode
= target
->reset_mode
;
1626 enum target_reset_mode save
= target
->reset_mode
;
1632 if (strcmp("run", args
[0]) == 0)
1633 reset_mode
= RESET_RUN
;
1634 else if (strcmp("halt", args
[0]) == 0)
1635 reset_mode
= RESET_HALT
;
1636 else if (strcmp("init", args
[0]) == 0)
1637 reset_mode
= RESET_INIT
;
1638 else if (strcmp("run_and_halt", args
[0]) == 0)
1640 reset_mode
= RESET_RUN_AND_HALT
;
1643 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1646 else if (strcmp("run_and_init", args
[0]) == 0)
1648 reset_mode
= RESET_RUN_AND_INIT
;
1651 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1656 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1661 /* temporarily modify mode of current reset target */
1662 target
->reset_mode
= reset_mode
;
1664 /* reset *all* targets */
1665 target_process_reset(cmd_ctx
);
1667 /* Restore default reset mode for this target */
1668 target
->reset_mode
= save
;
1673 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1676 target_t
*target
= get_current_target(cmd_ctx
);
1681 retval
= target
->type
->resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1683 retval
= target
->type
->resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1686 command_print(cmd_ctx
, "usage: resume [address]");
1690 if (retval
!= ERROR_OK
)
1694 case ERROR_TARGET_NOT_HALTED
:
1695 command_print(cmd_ctx
, "target not halted");
1698 command_print(cmd_ctx
, "unknown error... shutting down");
1703 target_process_events(cmd_ctx
);
1708 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1710 target_t
*target
= get_current_target(cmd_ctx
);
1715 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1718 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1723 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1725 const int line_bytecnt
= 32;
1738 target_t
*target
= get_current_target(cmd_ctx
);
1744 count
= strtoul(args
[1], NULL
, 0);
1746 address
= strtoul(args
[0], NULL
, 0);
1752 size
= 4; line_modulo
= line_bytecnt
/ 4;
1755 size
= 2; line_modulo
= line_bytecnt
/ 2;
1758 size
= 1; line_modulo
= line_bytecnt
/ 1;
1764 buffer
= calloc(count
, size
);
1765 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1766 if (retval
!= ERROR_OK
)
1770 case ERROR_TARGET_UNALIGNED_ACCESS
:
1771 command_print(cmd_ctx
, "error: address not aligned");
1773 case ERROR_TARGET_NOT_HALTED
:
1774 command_print(cmd_ctx
, "error: target must be halted for memory accesses");
1776 case ERROR_TARGET_DATA_ABORT
:
1777 command_print(cmd_ctx
, "error: access caused data abort, system possibly corrupted");
1780 command_print(cmd_ctx
, "error: unknown error");
1788 for (i
= 0; i
< count
; i
++)
1790 if (i
%line_modulo
== 0)
1791 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
1796 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
1799 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
1802 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
1806 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
1808 command_print(cmd_ctx
, output
);
1818 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1823 target_t
*target
= get_current_target(cmd_ctx
);
1829 address
= strtoul(args
[0], NULL
, 0);
1830 value
= strtoul(args
[1], NULL
, 0);
1835 target_buffer_set_u32(target
, value_buf
, value
);
1836 retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
);
1839 target_buffer_set_u16(target
, value_buf
, value
);
1840 retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
);
1843 value_buf
[0] = value
;
1844 retval
= target
->type
->write_memory(target
, address
, 1, 1, value_buf
);
1852 case ERROR_TARGET_UNALIGNED_ACCESS
:
1853 command_print(cmd_ctx
, "error: address not aligned");
1855 case ERROR_TARGET_DATA_ABORT
:
1856 command_print(cmd_ctx
, "error: access caused data abort, system possibly corrupted");
1858 case ERROR_TARGET_NOT_HALTED
:
1859 command_print(cmd_ctx
, "error: target must be halted for memory accesses");
1864 command_print(cmd_ctx
, "error: unknown error");
1872 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1882 duration_t duration
;
1883 char *duration_text
;
1885 target_t
*target
= get_current_target(cmd_ctx
);
1889 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
1893 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
1896 image
.base_address_set
= 1;
1897 image
.base_address
= strtoul(args
[1], NULL
, 0);
1901 image
.base_address_set
= 0;
1904 image
.start_address_set
= 0;
1906 duration_start_measure(&duration
);
1908 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
1910 command_print(cmd_ctx
, "load_image error: %s", image
.error_str
);
1915 for (i
= 0; i
< image
.num_sections
; i
++)
1917 buffer
= malloc(image
.sections
[i
].size
);
1920 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
1924 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
1926 ERROR("image_read_section failed with error code: %i", retval
);
1927 command_print(cmd_ctx
, "image reading failed, download aborted");
1929 image_close(&image
);
1932 target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
);
1933 image_size
+= buf_cnt
;
1934 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
1939 duration_stop_measure(&duration
, &duration_text
);
1940 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
1941 free(duration_text
);
1943 image_close(&image
);
1949 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1958 duration_t duration
;
1959 char *duration_text
;
1961 target_t
*target
= get_current_target(cmd_ctx
);
1965 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
1969 address
= strtoul(args
[1], NULL
, 0);
1970 size
= strtoul(args
[2], NULL
, 0);
1972 if ((address
& 3) || (size
& 3))
1974 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
1978 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
1980 command_print(cmd_ctx
, "dump_image error: %s", fileio
.error_str
);
1984 duration_start_measure(&duration
);
1989 u32 this_run_size
= (size
> 560) ? 560 : size
;
1991 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
1992 if (retval
!= ERROR_OK
)
1994 command_print(cmd_ctx
, "Reading memory failed %d", retval
);
1998 fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2000 size
-= this_run_size
;
2001 address
+= this_run_size
;
2004 fileio_close(&fileio
);
2006 duration_stop_measure(&duration
, &duration_text
);
2007 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2008 free(duration_text
);
2013 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2021 u32 mem_checksum
= 0;
2025 duration_t duration
;
2026 char *duration_text
;
2028 target_t
*target
= get_current_target(cmd_ctx
);
2032 command_print(cmd_ctx
, "usage: verify_image <file> [offset] [type]");
2038 ERROR("no target selected");
2042 duration_start_measure(&duration
);
2046 image
.base_address_set
= 1;
2047 image
.base_address
= strtoul(args
[1], NULL
, 0);
2051 image
.base_address_set
= 0;
2052 image
.base_address
= 0x0;
2055 image
.start_address_set
= 0;
2057 if (image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
) != ERROR_OK
)
2059 command_print(cmd_ctx
, "verify_image error: %s", image
.error_str
);
2064 for (i
= 0; i
< image
.num_sections
; i
++)
2066 buffer
= malloc(image
.sections
[i
].size
);
2069 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2072 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2074 ERROR("image_read_section failed with error code: %i", retval
);
2075 command_print(cmd_ctx
, "image reading failed, verify aborted");
2077 image_close(&image
);
2081 /* calculate checksum of image */
2082 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2084 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2086 if( retval
!= ERROR_OK
)
2088 command_print(cmd_ctx
, "could not calculate checksum, verify aborted");
2090 image_close(&image
);
2094 if( checksum
!= mem_checksum
)
2096 /* failed crc checksum, fall back to a binary compare */
2099 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2101 data
= (u8
*)malloc(buf_cnt
);
2103 /* Can we use 32bit word accesses? */
2105 int count
= buf_cnt
;
2106 if ((count
% 4) == 0)
2111 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2113 if (retval
== ERROR_OK
)
2116 for (t
= 0; t
< buf_cnt
; t
++)
2118 if (data
[t
] != buffer
[t
])
2120 command_print(cmd_ctx
, "Verify operation failed address 0x%08x. Was 0x%02x instead of 0x%02x\n", t
+ image
.sections
[i
].base_address
, data
[t
], buffer
[t
]);
2123 image_close(&image
);
2133 image_size
+= buf_cnt
;
2136 duration_stop_measure(&duration
, &duration_text
);
2137 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2138 free(duration_text
);
2140 image_close(&image
);
2145 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2148 target_t
*target
= get_current_target(cmd_ctx
);
2152 breakpoint_t
*breakpoint
= target
->breakpoints
;
2156 if (breakpoint
->type
== BKPT_SOFT
)
2158 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2159 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2164 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2166 breakpoint
= breakpoint
->next
;
2174 length
= strtoul(args
[1], NULL
, 0);
2177 if (strcmp(args
[2], "hw") == 0)
2180 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2184 case ERROR_TARGET_NOT_HALTED
:
2185 command_print(cmd_ctx
, "target must be halted to set breakpoints");
2187 case ERROR_TARGET_RESOURCE_NOT_AVAILABLE
:
2188 command_print(cmd_ctx
, "no more breakpoints available");
2191 command_print(cmd_ctx
, "unknown error, breakpoint not set");
2197 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2202 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2208 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2210 target_t
*target
= get_current_target(cmd_ctx
);
2213 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2218 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2220 target_t
*target
= get_current_target(cmd_ctx
);
2225 watchpoint_t
*watchpoint
= target
->watchpoints
;
2229 command_print(cmd_ctx
, "address: 0x%8.8x, mask: 0x%8.8x, r/w/a: %i, value: 0x%8.8x, mask: 0x%8.8x", watchpoint
->address
, watchpoint
->length
, watchpoint
->rw
, watchpoint
->value
, watchpoint
->mask
);
2230 watchpoint
= watchpoint
->next
;
2235 enum watchpoint_rw type
= WPT_ACCESS
;
2236 u32 data_value
= 0x0;
2237 u32 data_mask
= 0xffffffff;
2253 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2259 data_value
= strtoul(args
[3], NULL
, 0);
2263 data_mask
= strtoul(args
[4], NULL
, 0);
2266 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2267 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2271 case ERROR_TARGET_NOT_HALTED
:
2272 command_print(cmd_ctx
, "target must be halted to set watchpoints");
2274 case ERROR_TARGET_RESOURCE_NOT_AVAILABLE
:
2275 command_print(cmd_ctx
, "no more watchpoints available");
2278 command_print(cmd_ctx
, "unknown error, watchpoint not set");
2285 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2291 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2293 target_t
*target
= get_current_target(cmd_ctx
);
2296 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2301 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2304 target_t
*target
= get_current_target(cmd_ctx
);
2310 return ERROR_COMMAND_SYNTAX_ERROR
;
2312 va
= strtoul(args
[0], NULL
, 0);
2314 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2315 if (retval
== ERROR_OK
)
2317 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2321 /* lower levels will have logged a detailed error which is
2322 * forwarded to telnet/GDB session.
Linking to existing account procedure
If you already have an account and want to add another login method
you
MUST first sign in with your existing account and
then change URL to read
https://review.openocd.org/login/?link
to get to this page again but this time it'll work for linking. Thank you.
SSH host keys fingerprints
1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=.. |
|+o.. . |
|*.o . . |
|+B . . . |
|Bo. = o S |
|Oo.+ + = |
|oB=.* = . o |
| =+=.+ + E |
|. .=o . o |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)