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
);
53 int handle_target_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
);
78 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
82 extern target_type_t arm7tdmi_target
;
83 extern target_type_t arm720t_target
;
84 extern target_type_t arm9tdmi_target
;
85 extern target_type_t arm920t_target
;
86 extern target_type_t arm966e_target
;
87 extern target_type_t arm926ejs_target
;
88 extern target_type_t feroceon_target
;
89 extern target_type_t xscale_target
;
90 extern target_type_t cortexm3_target
;
91 extern target_type_t arm11_target
;
93 target_type_t
*target_types
[] =
108 target_t
*targets
= NULL
;
109 target_event_callback_t
*target_event_callbacks
= NULL
;
110 target_timer_callback_t
*target_timer_callbacks
= NULL
;
112 char *target_state_strings
[] =
121 char *target_debug_reason_strings
[] =
123 "debug request", "breakpoint", "watchpoint",
124 "watchpoint and breakpoint", "single step",
125 "target not halted", "undefined"
128 char *target_endianess_strings
[] =
134 static int target_continous_poll
= 1;
136 /* read a u32 from a buffer in target memory endianness */
137 u32
target_buffer_get_u32(target_t
*target
, u8
*buffer
)
139 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
140 return le_to_h_u32(buffer
);
142 return be_to_h_u32(buffer
);
145 /* read a u16 from a buffer in target memory endianness */
146 u16
target_buffer_get_u16(target_t
*target
, u8
*buffer
)
148 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
149 return le_to_h_u16(buffer
);
151 return be_to_h_u16(buffer
);
154 /* write a u32 to a buffer in target memory endianness */
155 void target_buffer_set_u32(target_t
*target
, u8
*buffer
, u32 value
)
157 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
158 h_u32_to_le(buffer
, value
);
160 h_u32_to_be(buffer
, value
);
163 /* write a u16 to a buffer in target memory endianness */
164 void target_buffer_set_u16(target_t
*target
, u8
*buffer
, u16 value
)
166 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
167 h_u16_to_le(buffer
, value
);
169 h_u16_to_be(buffer
, value
);
172 /* returns a pointer to the n-th configured target */
173 target_t
* get_target_by_num(int num
)
175 target_t
*target
= targets
;
182 target
= target
->next
;
189 int get_num_by_target(target_t
*query_target
)
191 target_t
*target
= targets
;
196 if (target
== query_target
)
198 target
= target
->next
;
205 target_t
* get_current_target(command_context_t
*cmd_ctx
)
207 target_t
*target
= get_target_by_num(cmd_ctx
->current_target
);
211 LOG_ERROR("BUG: current_target out of bounds");
218 static void execute_script(struct command_context_s
*cmd_ctx
, char *reset_script
)
221 script
= open_file_from_path(reset_script
, "r");
224 LOG_ERROR("couldn't open script file %s", reset_script
);
228 LOG_INFO("executing script '%s'", reset_script
);
229 command_run_file(cmd_ctx
, script
, COMMAND_EXEC
);
233 /* Process target initialization, when target entered debug out of reset
234 * the handler is unregistered at the end of this function, so it's only called once
236 int target_init_handler(struct target_s
*target
, enum target_event event
, void *priv
)
238 struct command_context_s
*cmd_ctx
= priv
;
240 if ((event
== TARGET_EVENT_HALTED
) && (target
->reset_script
))
242 target_unregister_event_callback(target_init_handler
, priv
);
244 execute_script(cmd_ctx
, target
->reset_script
);
246 jtag_execute_queue();
252 int target_run_and_halt_handler(void *priv
)
254 target_t
*target
= priv
;
261 int target_poll(struct target_s
*target
)
263 /* We can't poll until after examine */
264 if (!target
->type
->examined
)
266 /* Fail silently lest we pollute the log */
269 return target
->type
->poll(target
);
272 int target_halt(struct target_s
*target
)
274 /* We can't poll until after examine */
275 if (!target
->type
->examined
)
277 LOG_ERROR("Target not examined yet");
280 return target
->type
->halt(target
);
283 int target_resume(struct target_s
*target
, int current
, u32 address
, int handle_breakpoints
, int debug_execution
)
285 /* We can't poll until after examine */
286 if (!target
->type
->examined
)
288 LOG_ERROR("Target not examined yet");
291 return target
->type
->resume(target
, current
, address
, handle_breakpoints
, debug_execution
);
295 int target_process_reset(struct command_context_s
*cmd_ctx
)
297 int retval
= ERROR_OK
;
299 struct timeval timeout
, now
;
301 jtag
->speed(jtag_speed
);
306 execute_script(cmd_ctx
, target
->pre_reset_script
);
307 target
= target
->next
;
310 if ((retval
= jtag_init_reset(cmd_ctx
)) != ERROR_OK
)
313 /* First time this is executed after launching OpenOCD, it will read out
314 * the type of CPU, etc. and init Embedded ICE registers in host
317 * It will also set up ICE registers in the target.
319 * However, if we assert TRST later, we need to set up the registers again.
321 * For the "reset halt/init" case we must only set up the registers here.
323 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
326 /* prepare reset_halt where necessary */
330 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
332 switch (target
->reset_mode
)
335 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_halt\"");
336 target
->reset_mode
= RESET_RUN_AND_HALT
;
339 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_init\"");
340 target
->reset_mode
= RESET_RUN_AND_INIT
;
346 target
= target
->next
;
352 /* we have no idea what state the target is in, so we
353 * have to drop working areas
355 target_free_all_working_areas_restore(target
, 0);
356 target
->type
->assert_reset(target
);
357 target
= target
->next
;
359 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
361 LOG_WARNING("JTAG communication failed asserting reset.");
365 /* request target halt if necessary, and schedule further action */
369 switch (target
->reset_mode
)
372 /* nothing to do if target just wants to be run */
374 case RESET_RUN_AND_HALT
:
376 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
378 case RESET_RUN_AND_INIT
:
380 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
381 target_register_event_callback(target_init_handler
, cmd_ctx
);
388 target_register_event_callback(target_init_handler
, cmd_ctx
);
391 LOG_ERROR("BUG: unknown target->reset_mode");
393 target
= target
->next
;
396 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
398 LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
405 target
->type
->deassert_reset(target
);
406 target
= target
->next
;
409 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
411 LOG_WARNING("JTAG communication failed while deasserting reset.");
415 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
417 /* If TRST was asserted we need to set up registers again */
418 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
423 LOG_DEBUG("Waiting for halted stated as approperiate");
425 /* Wait for reset to complete, maximum 5 seconds. */
426 gettimeofday(&timeout
, NULL
);
427 timeval_add_time(&timeout
, 5, 0);
430 gettimeofday(&now
, NULL
);
432 target_call_timer_callbacks_now();
437 LOG_DEBUG("Polling target");
439 if ((target
->reset_mode
== RESET_RUN_AND_INIT
) ||
440 (target
->reset_mode
== RESET_RUN_AND_HALT
) ||
441 (target
->reset_mode
== RESET_HALT
) ||
442 (target
->reset_mode
== RESET_INIT
))
444 if (target
->state
!= TARGET_HALTED
)
446 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
448 LOG_USER("Timed out waiting for halt after reset");
451 /* this will send alive messages on e.g. GDB remote protocol. */
453 LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/
457 target
= target
->next
;
459 /* All targets we're waiting for are halted */
467 /* We want any events to be processed before the prompt */
468 target_call_timer_callbacks_now();
470 /* if we timed out we need to unregister these handlers */
474 target_unregister_timer_callback(target_run_and_halt_handler
, target
);
475 target
= target
->next
;
477 target_unregister_event_callback(target_init_handler
, cmd_ctx
);
480 jtag
->speed(jtag_speed_post_reset
);
485 static int default_virt2phys(struct target_s
*target
, u32
virtual, u32
*physical
)
491 static int default_mmu(struct target_s
*target
, int *enabled
)
497 static int default_examine(struct command_context_s
*cmd_ctx
, struct target_s
*target
)
499 target
->type
->examined
= 1;
504 /* Targets that correctly implement init+examine, i.e.
505 * no communication with target during init:
509 int target_examine(struct command_context_s
*cmd_ctx
)
511 int retval
= ERROR_OK
;
512 target_t
*target
= targets
;
515 if ((retval
= target
->type
->examine(cmd_ctx
, target
))!=ERROR_OK
)
517 target
= target
->next
;
522 static int target_write_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
524 if (!target
->type
->examined
)
526 LOG_ERROR("Target not examined yet");
529 return target
->type
->write_memory_imp(target
, address
, size
, count
, buffer
);
532 static int target_read_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
534 if (!target
->type
->examined
)
536 LOG_ERROR("Target not examined yet");
539 return target
->type
->read_memory_imp(target
, address
, size
, count
, buffer
);
542 static int target_soft_reset_halt_imp(struct target_s
*target
)
544 if (!target
->type
->examined
)
546 LOG_ERROR("Target not examined yet");
549 return target
->type
->soft_reset_halt_imp(target
);
552 static int target_run_algorithm_imp(struct target_s
*target
, int num_mem_params
, mem_param_t
*mem_params
, int num_reg_params
, reg_param_t
*reg_param
, u32 entry_point
, u32 exit_point
, int timeout_ms
, void *arch_info
)
554 if (!target
->type
->examined
)
556 LOG_ERROR("Target not examined yet");
559 return target
->type
->run_algorithm_imp(target
, num_mem_params
, mem_params
, num_reg_params
, reg_param
, entry_point
, exit_point
, timeout_ms
, arch_info
);
562 int target_init(struct command_context_s
*cmd_ctx
)
564 target_t
*target
= targets
;
568 target
->type
->examined
= 0;
569 if (target
->type
->examine
== NULL
)
571 target
->type
->examine
= default_examine
;
574 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
576 LOG_ERROR("target '%s' init failed", target
->type
->name
);
580 /* Set up default functions if none are provided by target */
581 if (target
->type
->virt2phys
== NULL
)
583 target
->type
->virt2phys
= default_virt2phys
;
585 target
->type
->virt2phys
= default_virt2phys
;
586 /* a non-invasive way(in terms of patches) to add some code that
587 * runs before the type->write/read_memory implementation
589 target
->type
->write_memory_imp
= target
->type
->write_memory
;
590 target
->type
->write_memory
= target_write_memory_imp
;
591 target
->type
->read_memory_imp
= target
->type
->read_memory
;
592 target
->type
->read_memory
= target_read_memory_imp
;
593 target
->type
->soft_reset_halt_imp
= target
->type
->soft_reset_halt
;
594 target
->type
->soft_reset_halt
= target_soft_reset_halt_imp
;
595 target
->type
->run_algorithm_imp
= target
->type
->run_algorithm
;
596 target
->type
->run_algorithm
= target_run_algorithm_imp
;
599 if (target
->type
->mmu
== NULL
)
601 target
->type
->mmu
= default_mmu
;
603 target
= target
->next
;
608 target_register_user_commands(cmd_ctx
);
609 target_register_timer_callback(handle_target
, 100, 1, NULL
);
615 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
617 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
619 if (callback
== NULL
)
621 return ERROR_INVALID_ARGUMENTS
;
626 while ((*callbacks_p
)->next
)
627 callbacks_p
= &((*callbacks_p
)->next
);
628 callbacks_p
= &((*callbacks_p
)->next
);
631 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
632 (*callbacks_p
)->callback
= callback
;
633 (*callbacks_p
)->priv
= priv
;
634 (*callbacks_p
)->next
= NULL
;
639 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
641 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
644 if (callback
== NULL
)
646 return ERROR_INVALID_ARGUMENTS
;
651 while ((*callbacks_p
)->next
)
652 callbacks_p
= &((*callbacks_p
)->next
);
653 callbacks_p
= &((*callbacks_p
)->next
);
656 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
657 (*callbacks_p
)->callback
= callback
;
658 (*callbacks_p
)->periodic
= periodic
;
659 (*callbacks_p
)->time_ms
= time_ms
;
661 gettimeofday(&now
, NULL
);
662 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
663 time_ms
-= (time_ms
% 1000);
664 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
665 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
667 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
668 (*callbacks_p
)->when
.tv_sec
+= 1;
671 (*callbacks_p
)->priv
= priv
;
672 (*callbacks_p
)->next
= NULL
;
677 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
679 target_event_callback_t
**p
= &target_event_callbacks
;
680 target_event_callback_t
*c
= target_event_callbacks
;
682 if (callback
== NULL
)
684 return ERROR_INVALID_ARGUMENTS
;
689 target_event_callback_t
*next
= c
->next
;
690 if ((c
->callback
== callback
) && (c
->priv
== priv
))
704 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
706 target_timer_callback_t
**p
= &target_timer_callbacks
;
707 target_timer_callback_t
*c
= target_timer_callbacks
;
709 if (callback
== NULL
)
711 return ERROR_INVALID_ARGUMENTS
;
716 target_timer_callback_t
*next
= c
->next
;
717 if ((c
->callback
== callback
) && (c
->priv
== priv
))
731 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
733 target_event_callback_t
*callback
= target_event_callbacks
;
734 target_event_callback_t
*next_callback
;
736 LOG_DEBUG("target event %i", event
);
740 next_callback
= callback
->next
;
741 callback
->callback(target
, event
, callback
->priv
);
742 callback
= next_callback
;
748 static int target_call_timer_callbacks_check_time(int checktime
)
750 target_timer_callback_t
*callback
= target_timer_callbacks
;
751 target_timer_callback_t
*next_callback
;
754 gettimeofday(&now
, NULL
);
758 next_callback
= callback
->next
;
760 if ((!checktime
&&callback
->periodic
)||
761 (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
762 || (now
.tv_sec
> callback
->when
.tv_sec
)))
764 if(callback
->callback
!= NULL
)
766 callback
->callback(callback
->priv
);
767 if (callback
->periodic
)
769 int time_ms
= callback
->time_ms
;
770 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
771 time_ms
-= (time_ms
% 1000);
772 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
773 if (callback
->when
.tv_usec
> 1000000)
775 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
776 callback
->when
.tv_sec
+= 1;
780 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
784 callback
= next_callback
;
790 int target_call_timer_callbacks()
792 return target_call_timer_callbacks_check_time(1);
795 /* invoke periodic callbacks immediately */
796 int target_call_timer_callbacks_now()
798 return target_call_timer_callbacks(0);
802 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
804 working_area_t
*c
= target
->working_areas
;
805 working_area_t
*new_wa
= NULL
;
807 /* Reevaluate working area address based on MMU state*/
808 if (target
->working_areas
== NULL
)
812 retval
= target
->type
->mmu(target
, &enabled
);
813 if (retval
!= ERROR_OK
)
819 target
->working_area
= target
->working_area_virt
;
823 target
->working_area
= target
->working_area_phys
;
827 /* only allocate multiples of 4 byte */
830 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
831 size
= CEIL(size
, 4);
834 /* see if there's already a matching working area */
837 if ((c
->free
) && (c
->size
== size
))
845 /* if not, allocate a new one */
848 working_area_t
**p
= &target
->working_areas
;
849 u32 first_free
= target
->working_area
;
850 u32 free_size
= target
->working_area_size
;
852 LOG_DEBUG("allocating new working area");
854 c
= target
->working_areas
;
857 first_free
+= c
->size
;
858 free_size
-= c
->size
;
863 if (free_size
< size
)
865 LOG_WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
866 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
869 new_wa
= malloc(sizeof(working_area_t
));
872 new_wa
->address
= first_free
;
874 if (target
->backup_working_area
)
876 new_wa
->backup
= malloc(new_wa
->size
);
877 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
881 new_wa
->backup
= NULL
;
884 /* put new entry in list */
888 /* mark as used, and return the new (reused) area */
898 int target_free_working_area_restore(struct target_s
*target
, working_area_t
*area
, int restore
)
903 if (restore
&&target
->backup_working_area
)
904 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
908 /* mark user pointer invalid */
915 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
917 return target_free_working_area_restore(target
, area
, 1);
920 int target_free_all_working_areas_restore(struct target_s
*target
, int restore
)
922 working_area_t
*c
= target
->working_areas
;
926 working_area_t
*next
= c
->next
;
927 target_free_working_area_restore(target
, c
, restore
);
937 target
->working_areas
= NULL
;
942 int target_free_all_working_areas(struct target_s
*target
)
944 return target_free_all_working_areas_restore(target
, 1);
947 int target_register_commands(struct command_context_s
*cmd_ctx
)
949 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
950 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
951 register_command(cmd_ctx
, NULL
, "target_script", handle_target_script_command
, COMMAND_CONFIG
, NULL
);
952 register_command(cmd_ctx
, NULL
, "run_and_halt_time", handle_run_and_halt_time_command
, COMMAND_CONFIG
, "<target> <run time ms>");
953 register_command(cmd_ctx
, NULL
, "working_area", handle_working_area_command
, COMMAND_ANY
, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
954 register_command(cmd_ctx
, NULL
, "virt2phys", handle_virt2phys_command
, COMMAND_ANY
, "virt2phys <virtual address>");
955 register_command(cmd_ctx
, NULL
, "profile", handle_profile_command
, COMMAND_EXEC
, "PRELIMINARY! - profile <seconds> <gmon.out>");
960 int target_arch_state(struct target_s
*target
)
965 LOG_USER("No target has been configured");
969 LOG_USER("target state: %s", target_state_strings
[target
->state
]);
971 if (target
->state
!=TARGET_HALTED
)
974 retval
=target
->type
->arch_state(target
);
978 /* Single aligned words are guaranteed to use 16 or 32 bit access
979 * mode respectively, otherwise data is handled as quickly as
982 int target_write_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
985 if (!target
->type
->examined
)
987 LOG_ERROR("Target not examined yet");
991 LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size
, address
);
993 if (((address
% 2) == 0) && (size
== 2))
995 return target
->type
->write_memory(target
, address
, 2, 1, buffer
);
998 /* handle unaligned head bytes */
1001 int unaligned
= 4 - (address
% 4);
1003 if (unaligned
> size
)
1006 if ((retval
= target
->type
->write_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
1009 buffer
+= unaligned
;
1010 address
+= unaligned
;
1014 /* handle aligned words */
1017 int aligned
= size
- (size
% 4);
1019 /* use bulk writes above a certain limit. This may have to be changed */
1022 if ((retval
= target
->type
->bulk_write_memory(target
, address
, aligned
/ 4, buffer
)) != ERROR_OK
)
1027 if ((retval
= target
->type
->write_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
1036 /* handle tail writes of less than 4 bytes */
1039 if ((retval
= target
->type
->write_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
1047 /* Single aligned words are guaranteed to use 16 or 32 bit access
1048 * mode respectively, otherwise data is handled as quickly as
1051 int target_read_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
1054 if (!target
->type
->examined
)
1056 LOG_ERROR("Target not examined yet");
1060 LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size
, address
);
1062 if (((address
% 2) == 0) && (size
== 2))
1064 return target
->type
->read_memory(target
, address
, 2, 1, buffer
);
1067 /* handle unaligned head bytes */
1070 int unaligned
= 4 - (address
% 4);
1072 if (unaligned
> size
)
1075 if ((retval
= target
->type
->read_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
1078 buffer
+= unaligned
;
1079 address
+= unaligned
;
1083 /* handle aligned words */
1086 int aligned
= size
- (size
% 4);
1088 if ((retval
= target
->type
->read_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
1096 /* handle tail writes of less than 4 bytes */
1099 if ((retval
= target
->type
->read_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
1106 int target_checksum_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* crc
)
1112 if (!target
->type
->examined
)
1114 LOG_ERROR("Target not examined yet");
1118 if ((retval
= target
->type
->checksum_memory(target
, address
,
1119 size
, &checksum
)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE
)
1121 buffer
= malloc(size
);
1124 LOG_ERROR("error allocating buffer for section (%d bytes)", size
);
1125 return ERROR_INVALID_ARGUMENTS
;
1127 retval
= target_read_buffer(target
, address
, size
, buffer
);
1128 if (retval
!= ERROR_OK
)
1134 /* convert to target endianess */
1135 for (i
= 0; i
< (size
/sizeof(u32
)); i
++)
1138 target_data
= target_buffer_get_u32(target
, &buffer
[i
*sizeof(u32
)]);
1139 target_buffer_set_u32(target
, &buffer
[i
*sizeof(u32
)], target_data
);
1142 retval
= image_calculate_checksum( buffer
, size
, &checksum
);
1151 int target_blank_check_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* blank
)
1154 if (!target
->type
->examined
)
1156 LOG_ERROR("Target not examined yet");
1160 if (target
->type
->blank_check_memory
== 0)
1161 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
1163 retval
= target
->type
->blank_check_memory(target
, address
, size
, blank
);
1168 int target_read_u32(struct target_s
*target
, u32 address
, u32
*value
)
1171 if (!target
->type
->examined
)
1173 LOG_ERROR("Target not examined yet");
1177 int retval
= target
->type
->read_memory(target
, address
, 4, 1, value_buf
);
1179 if (retval
== ERROR_OK
)
1181 *value
= target_buffer_get_u32(target
, value_buf
);
1182 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, *value
);
1187 LOG_DEBUG("address: 0x%8.8x failed", address
);
1193 int target_read_u16(struct target_s
*target
, u32 address
, u16
*value
)
1196 if (!target
->type
->examined
)
1198 LOG_ERROR("Target not examined yet");
1202 int retval
= target
->type
->read_memory(target
, address
, 2, 1, value_buf
);
1204 if (retval
== ERROR_OK
)
1206 *value
= target_buffer_get_u16(target
, value_buf
);
1207 LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address
, *value
);
1212 LOG_DEBUG("address: 0x%8.8x failed", address
);
1218 int target_read_u8(struct target_s
*target
, u32 address
, u8
*value
)
1220 int retval
= target
->type
->read_memory(target
, address
, 1, 1, value
);
1221 if (!target
->type
->examined
)
1223 LOG_ERROR("Target not examined yet");
1227 if (retval
== ERROR_OK
)
1229 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, *value
);
1234 LOG_DEBUG("address: 0x%8.8x failed", address
);
1240 int target_write_u32(struct target_s
*target
, u32 address
, u32 value
)
1244 if (!target
->type
->examined
)
1246 LOG_ERROR("Target not examined yet");
1250 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1252 target_buffer_set_u32(target
, value_buf
, value
);
1253 if ((retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
)) != ERROR_OK
)
1255 LOG_DEBUG("failed: %i", retval
);
1261 int target_write_u16(struct target_s
*target
, u32 address
, u16 value
)
1265 if (!target
->type
->examined
)
1267 LOG_ERROR("Target not examined yet");
1271 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1273 target_buffer_set_u16(target
, value_buf
, value
);
1274 if ((retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
)) != ERROR_OK
)
1276 LOG_DEBUG("failed: %i", retval
);
1282 int target_write_u8(struct target_s
*target
, u32 address
, u8 value
)
1285 if (!target
->type
->examined
)
1287 LOG_ERROR("Target not examined yet");
1291 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, value
);
1293 if ((retval
= target
->type
->read_memory(target
, address
, 1, 1, &value
)) != ERROR_OK
)
1295 LOG_DEBUG("failed: %i", retval
);
1301 int target_register_user_commands(struct command_context_s
*cmd_ctx
)
1303 register_command(cmd_ctx
, NULL
, "reg", handle_reg_command
, COMMAND_EXEC
, NULL
);
1304 register_command(cmd_ctx
, NULL
, "poll", handle_poll_command
, COMMAND_EXEC
, "poll target state");
1305 register_command(cmd_ctx
, NULL
, "wait_halt", handle_wait_halt_command
, COMMAND_EXEC
, "wait for target halt [time (s)]");
1306 register_command(cmd_ctx
, NULL
, "halt", handle_halt_command
, COMMAND_EXEC
, "halt target");
1307 register_command(cmd_ctx
, NULL
, "resume", handle_resume_command
, COMMAND_EXEC
, "resume target [addr]");
1308 register_command(cmd_ctx
, NULL
, "step", handle_step_command
, COMMAND_EXEC
, "step one instruction from current PC or [addr]");
1309 register_command(cmd_ctx
, NULL
, "reset", handle_reset_command
, COMMAND_EXEC
, "reset target [run|halt|init|run_and_halt|run_and_init]");
1310 register_command(cmd_ctx
, NULL
, "soft_reset_halt", handle_soft_reset_halt_command
, COMMAND_EXEC
, "halt the target and do a soft reset");
1312 register_command(cmd_ctx
, NULL
, "mdw", handle_md_command
, COMMAND_EXEC
, "display memory words <addr> [count]");
1313 register_command(cmd_ctx
, NULL
, "mdh", handle_md_command
, COMMAND_EXEC
, "display memory half-words <addr> [count]");
1314 register_command(cmd_ctx
, NULL
, "mdb", handle_md_command
, COMMAND_EXEC
, "display memory bytes <addr> [count]");
1316 register_command(cmd_ctx
, NULL
, "mww", handle_mw_command
, COMMAND_EXEC
, "write memory word <addr> <value> [count]");
1317 register_command(cmd_ctx
, NULL
, "mwh", handle_mw_command
, COMMAND_EXEC
, "write memory half-word <addr> <value> [count]");
1318 register_command(cmd_ctx
, NULL
, "mwb", handle_mw_command
, COMMAND_EXEC
, "write memory byte <addr> <value> [count]");
1320 register_command(cmd_ctx
, NULL
, "bp", handle_bp_command
, COMMAND_EXEC
, "set breakpoint <address> <length> [hw]");
1321 register_command(cmd_ctx
, NULL
, "rbp", handle_rbp_command
, COMMAND_EXEC
, "remove breakpoint <adress>");
1322 register_command(cmd_ctx
, NULL
, "wp", handle_wp_command
, COMMAND_EXEC
, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
1323 register_command(cmd_ctx
, NULL
, "rwp", handle_rwp_command
, COMMAND_EXEC
, "remove watchpoint <adress>");
1325 register_command(cmd_ctx
, NULL
, "load_image", handle_load_image_command
, COMMAND_EXEC
, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1326 register_command(cmd_ctx
, NULL
, "dump_image", handle_dump_image_command
, COMMAND_EXEC
, "dump_image <file> <address> <size>");
1327 register_command(cmd_ctx
, NULL
, "verify_image", handle_verify_image_command
, COMMAND_EXEC
, "verify_image <file> [offset] [type]");
1328 register_command(cmd_ctx
, NULL
, "load_binary", handle_load_image_command
, COMMAND_EXEC
, "[DEPRECATED] load_binary <file> <address>");
1329 register_command(cmd_ctx
, NULL
, "dump_binary", handle_dump_image_command
, COMMAND_EXEC
, "[DEPRECATED] dump_binary <file> <address> <size>");
1331 target_request_register_commands(cmd_ctx
);
1332 trace_register_commands(cmd_ctx
);
1337 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1339 target_t
*target
= targets
;
1344 int num
= strtoul(args
[0], NULL
, 0);
1349 target
= target
->next
;
1353 cmd_ctx
->current_target
= num
;
1355 command_print(cmd_ctx
, "%i is out of bounds, only %i targets are configured", num
, count
);
1362 command_print(cmd_ctx
, "%i: %s (%s), state: %s", count
++, target
->type
->name
, target_endianess_strings
[target
->endianness
], target_state_strings
[target
->state
]);
1363 target
= target
->next
;
1369 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1376 return ERROR_COMMAND_SYNTAX_ERROR
;
1379 /* search for the specified target */
1380 if (args
[0] && (args
[0][0] != 0))
1382 for (i
= 0; target_types
[i
]; i
++)
1384 if (strcmp(args
[0], target_types
[i
]->name
) == 0)
1386 target_t
**last_target_p
= &targets
;
1388 /* register target specific commands */
1389 if (target_types
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1391 LOG_ERROR("couldn't register '%s' commands", args
[0]);
1397 while ((*last_target_p
)->next
)
1398 last_target_p
= &((*last_target_p
)->next
);
1399 last_target_p
= &((*last_target_p
)->next
);
1402 *last_target_p
= malloc(sizeof(target_t
));
1404 (*last_target_p
)->type
= target_types
[i
];
1406 if (strcmp(args
[1], "big") == 0)
1407 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1408 else if (strcmp(args
[1], "little") == 0)
1409 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1412 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1413 return ERROR_COMMAND_SYNTAX_ERROR
;
1416 /* what to do on a target reset */
1417 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1418 if (strcmp(args
[2], "reset_halt") == 0)
1419 (*last_target_p
)->reset_mode
= RESET_HALT
;
1420 else if (strcmp(args
[2], "reset_run") == 0)
1421 (*last_target_p
)->reset_mode
= RESET_RUN
;
1422 else if (strcmp(args
[2], "reset_init") == 0)
1423 (*last_target_p
)->reset_mode
= RESET_INIT
;
1424 else if (strcmp(args
[2], "run_and_halt") == 0)
1425 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1426 else if (strcmp(args
[2], "run_and_init") == 0)
1427 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1430 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1434 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1436 (*last_target_p
)->reset_script
= NULL
;
1437 (*last_target_p
)->pre_reset_script
= NULL
;
1438 (*last_target_p
)->post_halt_script
= NULL
;
1439 (*last_target_p
)->pre_resume_script
= NULL
;
1440 (*last_target_p
)->gdb_program_script
= NULL
;
1442 (*last_target_p
)->working_area
= 0x0;
1443 (*last_target_p
)->working_area_size
= 0x0;
1444 (*last_target_p
)->working_areas
= NULL
;
1445 (*last_target_p
)->backup_working_area
= 0;
1447 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1448 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1449 (*last_target_p
)->reg_cache
= NULL
;
1450 (*last_target_p
)->breakpoints
= NULL
;
1451 (*last_target_p
)->watchpoints
= NULL
;
1452 (*last_target_p
)->next
= NULL
;
1453 (*last_target_p
)->arch_info
= NULL
;
1455 /* initialize trace information */
1456 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1457 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1458 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1459 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1460 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1461 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1462 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1463 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1465 (*last_target_p
)->dbgmsg
= NULL
;
1466 (*last_target_p
)->dbg_msg_enabled
= 0;
1468 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1476 /* no matching target found */
1479 LOG_ERROR("target '%s' not found", args
[0]);
1480 return ERROR_COMMAND_SYNTAX_ERROR
;
1486 /* usage: target_script <target#> <event> <script_file> */
1487 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1489 target_t
*target
= NULL
;
1493 LOG_ERROR("incomplete target_script command");
1494 return ERROR_COMMAND_SYNTAX_ERROR
;
1497 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1501 return ERROR_COMMAND_SYNTAX_ERROR
;
1504 if ((strcmp(args
[1], "reset") == 0)||(strcmp(args
[1], "post_reset") == 0))
1506 if (target
->reset_script
)
1507 free(target
->reset_script
);
1508 target
->reset_script
= strdup(args
[2]);
1510 else if (strcmp(args
[1], "pre_reset") == 0)
1512 if (target
->pre_reset_script
)
1513 free(target
->pre_reset_script
);
1514 target
->pre_reset_script
= strdup(args
[2]);
1516 else if (strcmp(args
[1], "post_halt") == 0)
1518 if (target
->post_halt_script
)
1519 free(target
->post_halt_script
);
1520 target
->post_halt_script
= strdup(args
[2]);
1522 else if (strcmp(args
[1], "pre_resume") == 0)
1524 if (target
->pre_resume_script
)
1525 free(target
->pre_resume_script
);
1526 target
->pre_resume_script
= strdup(args
[2]);
1528 else if (strcmp(args
[1], "gdb_program_config") == 0)
1530 if (target
->gdb_program_script
)
1531 free(target
->gdb_program_script
);
1532 target
->gdb_program_script
= strdup(args
[2]);
1536 LOG_ERROR("unknown event type: '%s", args
[1]);
1537 return ERROR_COMMAND_SYNTAX_ERROR
;
1543 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1545 target_t
*target
= NULL
;
1549 return ERROR_COMMAND_SYNTAX_ERROR
;
1552 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1555 return ERROR_COMMAND_SYNTAX_ERROR
;
1558 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1563 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1565 target_t
*target
= NULL
;
1567 if ((argc
< 4) || (argc
> 5))
1569 return ERROR_COMMAND_SYNTAX_ERROR
;
1572 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1575 return ERROR_COMMAND_SYNTAX_ERROR
;
1577 target_free_all_working_areas(target
);
1579 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1582 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1584 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1586 if (strcmp(args
[3], "backup") == 0)
1588 target
->backup_working_area
= 1;
1590 else if (strcmp(args
[3], "nobackup") == 0)
1592 target
->backup_working_area
= 0;
1596 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1597 return ERROR_COMMAND_SYNTAX_ERROR
;
1604 /* process target state changes */
1605 int handle_target(void *priv
)
1607 target_t
*target
= targets
;
1611 if (target_continous_poll
)
1613 /* polling may fail silently until the target has been examined */
1614 target_poll(target
);
1617 target
= target
->next
;
1623 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1632 target
= get_current_target(cmd_ctx
);
1634 /* list all available registers for the current target */
1637 reg_cache_t
*cache
= target
->reg_cache
;
1643 for (i
= 0; i
< cache
->num_regs
; i
++)
1645 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1646 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
);
1649 cache
= cache
->next
;
1655 /* access a single register by its ordinal number */
1656 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1658 int num
= strtoul(args
[0], NULL
, 0);
1659 reg_cache_t
*cache
= target
->reg_cache
;
1665 for (i
= 0; i
< cache
->num_regs
; i
++)
1669 reg
= &cache
->reg_list
[i
];
1675 cache
= cache
->next
;
1680 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1683 } else /* access a single register by its name */
1685 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1689 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1694 /* display a register */
1695 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1697 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1700 if (reg
->valid
== 0)
1702 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1703 if (arch_type
== NULL
)
1705 LOG_ERROR("BUG: encountered unregistered arch type");
1708 arch_type
->get(reg
);
1710 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1711 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1716 /* set register value */
1719 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1720 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1722 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1723 if (arch_type
== NULL
)
1725 LOG_ERROR("BUG: encountered unregistered arch type");
1729 arch_type
->set(reg
, buf
);
1731 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1732 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1740 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1745 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1747 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1749 target_t
*target
= get_current_target(cmd_ctx
);
1753 target_poll(target
);
1754 target_arch_state(target
);
1758 if (strcmp(args
[0], "on") == 0)
1760 target_continous_poll
= 1;
1762 else if (strcmp(args
[0], "off") == 0)
1764 target_continous_poll
= 0;
1768 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1776 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1784 ms
= strtoul(args
[0], &end
, 0) * 1000;
1787 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1792 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1795 static void target_process_events(struct command_context_s
*cmd_ctx
)
1797 target_t
*target
= get_current_target(cmd_ctx
);
1798 target_poll(target
);
1799 target_call_timer_callbacks_now();
1802 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1805 struct timeval timeout
, now
;
1807 gettimeofday(&timeout
, NULL
);
1808 timeval_add_time(&timeout
, 0, ms
* 1000);
1810 target_t
*target
= get_current_target(cmd_ctx
);
1813 if ((retval
=target_poll(target
))!=ERROR_OK
)
1815 target_call_timer_callbacks_now();
1816 if (target
->state
== state
)
1823 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1826 gettimeofday(&now
, NULL
);
1827 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1829 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1837 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1840 target_t
*target
= get_current_target(cmd_ctx
);
1844 if ((retval
= target_halt(target
)) != ERROR_OK
)
1849 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1853 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1855 target_t
*target
= get_current_target(cmd_ctx
);
1857 LOG_USER("requesting target halt and executing a soft reset");
1859 target
->type
->soft_reset_halt(target
);
1864 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1866 target_t
*target
= get_current_target(cmd_ctx
);
1867 enum target_reset_mode reset_mode
= target
->reset_mode
;
1868 enum target_reset_mode save
= target
->reset_mode
;
1874 if (strcmp("run", args
[0]) == 0)
1875 reset_mode
= RESET_RUN
;
1876 else if (strcmp("halt", args
[0]) == 0)
1877 reset_mode
= RESET_HALT
;
1878 else if (strcmp("init", args
[0]) == 0)
1879 reset_mode
= RESET_INIT
;
1880 else if (strcmp("run_and_halt", args
[0]) == 0)
1882 reset_mode
= RESET_RUN_AND_HALT
;
1885 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1888 else if (strcmp("run_and_init", args
[0]) == 0)
1890 reset_mode
= RESET_RUN_AND_INIT
;
1893 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1898 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1903 /* temporarily modify mode of current reset target */
1904 target
->reset_mode
= reset_mode
;
1906 /* reset *all* targets */
1907 target_process_reset(cmd_ctx
);
1909 /* Restore default reset mode for this target */
1910 target
->reset_mode
= save
;
1915 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1918 target_t
*target
= get_current_target(cmd_ctx
);
1921 retval
= target_resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1923 retval
= target_resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1926 return ERROR_COMMAND_SYNTAX_ERROR
;
1929 target_process_events(cmd_ctx
);
1934 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1936 target_t
*target
= get_current_target(cmd_ctx
);
1941 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1944 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1949 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1951 const int line_bytecnt
= 32;
1964 target_t
*target
= get_current_target(cmd_ctx
);
1970 count
= strtoul(args
[1], NULL
, 0);
1972 address
= strtoul(args
[0], NULL
, 0);
1978 size
= 4; line_modulo
= line_bytecnt
/ 4;
1981 size
= 2; line_modulo
= line_bytecnt
/ 2;
1984 size
= 1; line_modulo
= line_bytecnt
/ 1;
1990 buffer
= calloc(count
, size
);
1991 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1992 if (retval
== ERROR_OK
)
1996 for (i
= 0; i
< count
; i
++)
1998 if (i
%line_modulo
== 0)
1999 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
2004 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
2007 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
2010 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
2014 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
2016 command_print(cmd_ctx
, output
);
2022 LOG_ERROR("Failure examining memory");
2030 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2037 target_t
*target
= get_current_target(cmd_ctx
);
2040 if ((argc
< 2) || (argc
> 3))
2041 return ERROR_COMMAND_SYNTAX_ERROR
;
2043 address
= strtoul(args
[0], NULL
, 0);
2044 value
= strtoul(args
[1], NULL
, 0);
2046 count
= strtoul(args
[2], NULL
, 0);
2053 target_buffer_set_u32(target
, value_buf
, value
);
2057 target_buffer_set_u16(target
, value_buf
, value
);
2061 value_buf
[0] = value
;
2064 return ERROR_COMMAND_SYNTAX_ERROR
;
2066 for (i
=0; i
<count
; i
++)
2072 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
2075 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
2078 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
2083 if (retval
!=ERROR_OK
)
2093 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2103 duration_t duration
;
2104 char *duration_text
;
2106 target_t
*target
= get_current_target(cmd_ctx
);
2110 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
2114 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
2117 image
.base_address_set
= 1;
2118 image
.base_address
= strtoul(args
[1], NULL
, 0);
2122 image
.base_address_set
= 0;
2125 image
.start_address_set
= 0;
2127 duration_start_measure(&duration
);
2129 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
2136 for (i
= 0; i
< image
.num_sections
; i
++)
2138 buffer
= malloc(image
.sections
[i
].size
);
2141 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2145 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2150 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
2155 image_size
+= buf_cnt
;
2156 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
2161 duration_stop_measure(&duration
, &duration_text
);
2162 if (retval
==ERROR_OK
)
2164 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
2166 free(duration_text
);
2168 image_close(&image
);
2174 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2181 int retval
=ERROR_OK
;
2183 duration_t duration
;
2184 char *duration_text
;
2186 target_t
*target
= get_current_target(cmd_ctx
);
2190 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2194 address
= strtoul(args
[1], NULL
, 0);
2195 size
= strtoul(args
[2], NULL
, 0);
2197 if ((address
& 3) || (size
& 3))
2199 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2203 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2208 duration_start_measure(&duration
);
2213 u32 this_run_size
= (size
> 560) ? 560 : size
;
2215 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2216 if (retval
!= ERROR_OK
)
2221 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2222 if (retval
!= ERROR_OK
)
2227 size
-= this_run_size
;
2228 address
+= this_run_size
;
2231 fileio_close(&fileio
);
2233 duration_stop_measure(&duration
, &duration_text
);
2234 if (retval
==ERROR_OK
)
2236 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2238 free(duration_text
);
2243 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2251 u32 mem_checksum
= 0;
2255 duration_t duration
;
2256 char *duration_text
;
2258 target_t
*target
= get_current_target(cmd_ctx
);
2262 return ERROR_COMMAND_SYNTAX_ERROR
;
2267 LOG_ERROR("no target selected");
2271 duration_start_measure(&duration
);
2275 image
.base_address_set
= 1;
2276 image
.base_address
= strtoul(args
[1], NULL
, 0);
2280 image
.base_address_set
= 0;
2281 image
.base_address
= 0x0;
2284 image
.start_address_set
= 0;
2286 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2293 for (i
= 0; i
< image
.num_sections
; i
++)
2295 buffer
= malloc(image
.sections
[i
].size
);
2298 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2301 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2307 /* calculate checksum of image */
2308 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2310 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2311 if( retval
!= ERROR_OK
)
2317 if( checksum
!= mem_checksum
)
2319 /* failed crc checksum, fall back to a binary compare */
2322 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2324 data
= (u8
*)malloc(buf_cnt
);
2326 /* Can we use 32bit word accesses? */
2328 int count
= buf_cnt
;
2329 if ((count
% 4) == 0)
2334 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2335 if (retval
== ERROR_OK
)
2338 for (t
= 0; t
< buf_cnt
; t
++)
2340 if (data
[t
] != buffer
[t
])
2342 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
]);
2355 image_size
+= buf_cnt
;
2358 duration_stop_measure(&duration
, &duration_text
);
2359 if (retval
==ERROR_OK
)
2361 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2363 free(duration_text
);
2365 image_close(&image
);
2370 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2373 target_t
*target
= get_current_target(cmd_ctx
);
2377 breakpoint_t
*breakpoint
= target
->breakpoints
;
2381 if (breakpoint
->type
== BKPT_SOFT
)
2383 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2384 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2389 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2391 breakpoint
= breakpoint
->next
;
2399 length
= strtoul(args
[1], NULL
, 0);
2402 if (strcmp(args
[2], "hw") == 0)
2405 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2407 LOG_ERROR("Failure setting breakpoints");
2411 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2416 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2422 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2424 target_t
*target
= get_current_target(cmd_ctx
);
2427 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2432 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2434 target_t
*target
= get_current_target(cmd_ctx
);
2439 watchpoint_t
*watchpoint
= target
->watchpoints
;
2443 command_print(cmd_ctx
, "address: 0x%8.8x, len: 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
);
2444 watchpoint
= watchpoint
->next
;
2449 enum watchpoint_rw type
= WPT_ACCESS
;
2450 u32 data_value
= 0x0;
2451 u32 data_mask
= 0xffffffff;
2467 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2473 data_value
= strtoul(args
[3], NULL
, 0);
2477 data_mask
= strtoul(args
[4], NULL
, 0);
2480 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2481 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2483 LOG_ERROR("Failure setting breakpoints");
2488 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2494 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2496 target_t
*target
= get_current_target(cmd_ctx
);
2499 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2504 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2507 target_t
*target
= get_current_target(cmd_ctx
);
2513 return ERROR_COMMAND_SYNTAX_ERROR
;
2515 va
= strtoul(args
[0], NULL
, 0);
2517 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2518 if (retval
== ERROR_OK
)
2520 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2524 /* lower levels will have logged a detailed error which is
2525 * forwarded to telnet/GDB session.
2530 static void writeLong(FILE *f
, int l
)
2535 char c
=(l
>>(i
*8))&0xff;
2536 fwrite(&c
, 1, 1, f
);
2540 static void writeString(FILE *f
, char *s
)
2542 fwrite(s
, 1, strlen(s
), f
);
2547 // Dump a gmon.out histogram file.
2548 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2551 FILE *f
=fopen(filename
, "w");
2554 fwrite("gmon", 1, 4, f
);
2555 writeLong(f
, 0x00000001); // Version
2556 writeLong(f
, 0); // padding
2557 writeLong(f
, 0); // padding
2558 writeLong(f
, 0); // padding
2560 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2562 // figure out bucket size
2565 for (i
=0; i
<sampleNum
; i
++)
2577 int addressSpace
=(max
-min
+1);
2579 static int const maxBuckets
=256*1024; // maximum buckets.
2580 int length
=addressSpace
;
2581 if (length
> maxBuckets
)
2585 int *buckets
=malloc(sizeof(int)*length
);
2591 memset(buckets
, 0, sizeof(int)*length
);
2592 for (i
=0; i
<sampleNum
;i
++)
2594 u32 address
=samples
[i
];
2595 long long a
=address
-min
;
2596 long long b
=length
-1;
2597 long long c
=addressSpace
-1;
2598 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2602 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2603 writeLong(f
, min
); // low_pc
2604 writeLong(f
, max
); // high_pc
2605 writeLong(f
, length
); // # of samples
2606 writeLong(f
, 64000000); // 64MHz
2607 writeString(f
, "seconds");
2608 for (i
=0; i
<(15-strlen("seconds")); i
++)
2610 fwrite("", 1, 1, f
); // padding
2612 writeString(f
, "s");
2614 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2616 char *data
=malloc(2*length
);
2619 for (i
=0; i
<length
;i
++)
2628 data
[i
*2+1]=(val
>>8)&0xff;
2631 fwrite(data
, 1, length
*2, f
);
2641 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2642 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2644 target_t
*target
= get_current_target(cmd_ctx
);
2645 struct timeval timeout
, now
;
2647 gettimeofday(&timeout
, NULL
);
2650 return ERROR_COMMAND_SYNTAX_ERROR
;
2653 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2659 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2661 static const int maxSample
=10000;
2662 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2667 int retval
=ERROR_OK
;
2668 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2669 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2673 target_poll(target
);
2674 if (target
->state
== TARGET_HALTED
)
2676 u32 t
=*((u32
*)reg
->value
);
2677 samples
[numSamples
++]=t
;
2678 retval
= target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2679 target_poll(target
);
2680 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2681 } else if (target
->state
== TARGET_RUNNING
)
2683 // We want to quickly sample the PC.
2684 target_halt(target
);
2687 command_print(cmd_ctx
, "Target not halted or running");
2691 if (retval
!=ERROR_OK
)
2696 gettimeofday(&now
, NULL
);
2697 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2699 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2700 target_poll(target
);
2701 if (target
->state
== TARGET_HALTED
)
2703 target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2705 target_poll(target
);
2706 writeGmon(samples
, numSamples
, args
[1]);
2707 command_print(cmd_ctx
, "Wrote %s", args
[1]);
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)