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_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
55 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
56 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
58 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
59 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
60 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
61 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
62 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
63 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
64 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
65 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
66 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
67 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
68 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
69 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
70 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
71 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
72 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
73 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
74 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
75 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
);
76 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
80 extern target_type_t arm7tdmi_target
;
81 extern target_type_t arm720t_target
;
82 extern target_type_t arm9tdmi_target
;
83 extern target_type_t arm920t_target
;
84 extern target_type_t arm966e_target
;
85 extern target_type_t arm926ejs_target
;
86 extern target_type_t feroceon_target
;
87 extern target_type_t xscale_target
;
88 extern target_type_t cortexm3_target
;
89 extern target_type_t arm11_target
;
91 target_type_t
*target_types
[] =
106 target_t
*targets
= NULL
;
107 target_event_callback_t
*target_event_callbacks
= NULL
;
108 target_timer_callback_t
*target_timer_callbacks
= NULL
;
110 char *target_state_strings
[] =
119 char *target_debug_reason_strings
[] =
121 "debug request", "breakpoint", "watchpoint",
122 "watchpoint and breakpoint", "single step",
123 "target not halted", "undefined"
126 char *target_endianess_strings
[] =
132 static int target_continous_poll
= 1;
134 /* read a u32 from a buffer in target memory endianness */
135 u32
target_buffer_get_u32(target_t
*target
, u8
*buffer
)
137 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
138 return le_to_h_u32(buffer
);
140 return be_to_h_u32(buffer
);
143 /* read a u16 from a buffer in target memory endianness */
144 u16
target_buffer_get_u16(target_t
*target
, u8
*buffer
)
146 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
147 return le_to_h_u16(buffer
);
149 return be_to_h_u16(buffer
);
152 /* write a u32 to a buffer in target memory endianness */
153 void target_buffer_set_u32(target_t
*target
, u8
*buffer
, u32 value
)
155 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
156 h_u32_to_le(buffer
, value
);
158 h_u32_to_be(buffer
, value
);
161 /* write a u16 to a buffer in target memory endianness */
162 void target_buffer_set_u16(target_t
*target
, u8
*buffer
, u16 value
)
164 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
165 h_u16_to_le(buffer
, value
);
167 h_u16_to_be(buffer
, value
);
170 /* returns a pointer to the n-th configured target */
171 target_t
* get_target_by_num(int num
)
173 target_t
*target
= targets
;
180 target
= target
->next
;
187 int get_num_by_target(target_t
*query_target
)
189 target_t
*target
= targets
;
194 if (target
== query_target
)
196 target
= target
->next
;
203 target_t
* get_current_target(command_context_t
*cmd_ctx
)
205 target_t
*target
= get_target_by_num(cmd_ctx
->current_target
);
209 LOG_ERROR("BUG: current_target out of bounds");
216 /* Process target initialization, when target entered debug out of reset
217 * the handler is unregistered at the end of this function, so it's only called once
219 int target_init_handler(struct target_s
*target
, enum target_event event
, void *priv
)
221 struct command_context_s
*cmd_ctx
= priv
;
223 if (event
== TARGET_EVENT_HALTED
)
225 target_unregister_event_callback(target_init_handler
, priv
);
226 target_invoke_script(cmd_ctx
, target
, "post_reset");
227 jtag_execute_queue();
233 int target_run_and_halt_handler(void *priv
)
235 target_t
*target
= priv
;
242 int target_poll(struct target_s
*target
)
244 /* We can't poll until after examine */
245 if (!target
->type
->examined
)
247 /* Fail silently lest we pollute the log */
250 return target
->type
->poll(target
);
253 int target_halt(struct target_s
*target
)
255 /* We can't poll until after examine */
256 if (!target
->type
->examined
)
258 LOG_ERROR("Target not examined yet");
261 return target
->type
->halt(target
);
264 int target_resume(struct target_s
*target
, int current
, u32 address
, int handle_breakpoints
, int debug_execution
)
267 int timeout_ms
= 5000;
269 /* We can't poll until after examine */
270 if (!target
->type
->examined
)
272 LOG_ERROR("Target not examined yet");
276 if ((retval
= target
->type
->resume(target
, current
, address
, handle_breakpoints
, debug_execution
)) != ERROR_OK
)
279 /* only check for resume event if normal resume */
280 if (!debug_execution
)
282 /* wait for target to exit halted mode - not debug resume*/
285 while (target
->state
!= TARGET_RUNNING
)
289 if ((timeout_ms
-= 10) <= 0)
291 LOG_ERROR("timeout waiting for target resume");
292 return ERROR_TARGET_TIMEOUT
;
300 int target_process_reset(struct command_context_s
*cmd_ctx
)
302 int retval
= ERROR_OK
;
304 struct timeval timeout
, now
;
306 jtag
->speed(jtag_speed
);
311 target_invoke_script(cmd_ctx
, target
, "pre_reset");
312 target
= target
->next
;
315 if ((retval
= jtag_init_reset(cmd_ctx
)) != ERROR_OK
)
318 /* First time this is executed after launching OpenOCD, it will read out
319 * the type of CPU, etc. and init Embedded ICE registers in host
322 * It will also set up ICE registers in the target.
324 * However, if we assert TRST later, we need to set up the registers again.
326 * For the "reset halt/init" case we must only set up the registers here.
328 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
331 /* prepare reset_halt where necessary */
335 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
337 switch (target
->reset_mode
)
340 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_halt\"");
341 target
->reset_mode
= RESET_RUN_AND_HALT
;
344 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_init\"");
345 target
->reset_mode
= RESET_RUN_AND_INIT
;
351 target
= target
->next
;
357 /* we have no idea what state the target is in, so we
358 * have to drop working areas
360 target_free_all_working_areas_restore(target
, 0);
361 target
->type
->assert_reset(target
);
362 target
= target
->next
;
364 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
366 LOG_WARNING("JTAG communication failed asserting reset.");
370 /* request target halt if necessary, and schedule further action */
374 switch (target
->reset_mode
)
377 /* nothing to do if target just wants to be run */
379 case RESET_RUN_AND_HALT
:
381 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
383 case RESET_RUN_AND_INIT
:
385 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
386 target_register_event_callback(target_init_handler
, cmd_ctx
);
393 target_register_event_callback(target_init_handler
, cmd_ctx
);
396 LOG_ERROR("BUG: unknown target->reset_mode");
398 target
= target
->next
;
401 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
403 LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
410 target
->type
->deassert_reset(target
);
411 target
= target
->next
;
414 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
416 LOG_WARNING("JTAG communication failed while deasserting reset.");
420 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
422 /* If TRST was asserted we need to set up registers again */
423 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
428 LOG_DEBUG("Waiting for halted stated as approperiate");
430 /* Wait for reset to complete, maximum 5 seconds. */
431 gettimeofday(&timeout
, NULL
);
432 timeval_add_time(&timeout
, 5, 0);
435 gettimeofday(&now
, NULL
);
437 target_call_timer_callbacks_now();
442 LOG_DEBUG("Polling target");
444 if ((target
->reset_mode
== RESET_RUN_AND_INIT
) ||
445 (target
->reset_mode
== RESET_RUN_AND_HALT
) ||
446 (target
->reset_mode
== RESET_HALT
) ||
447 (target
->reset_mode
== RESET_INIT
))
449 if (target
->state
!= TARGET_HALTED
)
451 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
453 LOG_USER("Timed out waiting for halt after reset");
456 /* this will send alive messages on e.g. GDB remote protocol. */
458 LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/
462 target
= target
->next
;
464 /* All targets we're waiting for are halted */
472 /* We want any events to be processed before the prompt */
473 target_call_timer_callbacks_now();
475 /* if we timed out we need to unregister these handlers */
479 target_unregister_timer_callback(target_run_and_halt_handler
, target
);
480 target
= target
->next
;
482 target_unregister_event_callback(target_init_handler
, cmd_ctx
);
484 jtag
->speed(jtag_speed_post_reset
);
489 static int default_virt2phys(struct target_s
*target
, u32
virtual, u32
*physical
)
495 static int default_mmu(struct target_s
*target
, int *enabled
)
501 static int default_examine(struct command_context_s
*cmd_ctx
, struct target_s
*target
)
503 target
->type
->examined
= 1;
508 /* Targets that correctly implement init+examine, i.e.
509 * no communication with target during init:
513 int target_examine(struct command_context_s
*cmd_ctx
)
515 int retval
= ERROR_OK
;
516 target_t
*target
= targets
;
519 if ((retval
= target
->type
->examine(cmd_ctx
, target
))!=ERROR_OK
)
521 target
= target
->next
;
526 static int target_write_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
528 if (!target
->type
->examined
)
530 LOG_ERROR("Target not examined yet");
533 return target
->type
->write_memory_imp(target
, address
, size
, count
, buffer
);
536 static int target_read_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
538 if (!target
->type
->examined
)
540 LOG_ERROR("Target not examined yet");
543 return target
->type
->read_memory_imp(target
, address
, size
, count
, buffer
);
546 static int target_soft_reset_halt_imp(struct target_s
*target
)
548 if (!target
->type
->examined
)
550 LOG_ERROR("Target not examined yet");
553 return target
->type
->soft_reset_halt_imp(target
);
556 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
)
558 if (!target
->type
->examined
)
560 LOG_ERROR("Target not examined yet");
563 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
);
566 int target_init(struct command_context_s
*cmd_ctx
)
568 target_t
*target
= targets
;
572 target
->type
->examined
= 0;
573 if (target
->type
->examine
== NULL
)
575 target
->type
->examine
= default_examine
;
578 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
580 LOG_ERROR("target '%s' init failed", target
->type
->name
);
584 /* Set up default functions if none are provided by target */
585 if (target
->type
->virt2phys
== NULL
)
587 target
->type
->virt2phys
= default_virt2phys
;
589 target
->type
->virt2phys
= default_virt2phys
;
590 /* a non-invasive way(in terms of patches) to add some code that
591 * runs before the type->write/read_memory implementation
593 target
->type
->write_memory_imp
= target
->type
->write_memory
;
594 target
->type
->write_memory
= target_write_memory_imp
;
595 target
->type
->read_memory_imp
= target
->type
->read_memory
;
596 target
->type
->read_memory
= target_read_memory_imp
;
597 target
->type
->soft_reset_halt_imp
= target
->type
->soft_reset_halt
;
598 target
->type
->soft_reset_halt
= target_soft_reset_halt_imp
;
599 target
->type
->run_algorithm_imp
= target
->type
->run_algorithm
;
600 target
->type
->run_algorithm
= target_run_algorithm_imp
;
603 if (target
->type
->mmu
== NULL
)
605 target
->type
->mmu
= default_mmu
;
607 target
= target
->next
;
612 target_register_user_commands(cmd_ctx
);
613 target_register_timer_callback(handle_target
, 100, 1, NULL
);
619 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
621 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
623 if (callback
== NULL
)
625 return ERROR_INVALID_ARGUMENTS
;
630 while ((*callbacks_p
)->next
)
631 callbacks_p
= &((*callbacks_p
)->next
);
632 callbacks_p
= &((*callbacks_p
)->next
);
635 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
636 (*callbacks_p
)->callback
= callback
;
637 (*callbacks_p
)->priv
= priv
;
638 (*callbacks_p
)->next
= NULL
;
643 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
645 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
648 if (callback
== NULL
)
650 return ERROR_INVALID_ARGUMENTS
;
655 while ((*callbacks_p
)->next
)
656 callbacks_p
= &((*callbacks_p
)->next
);
657 callbacks_p
= &((*callbacks_p
)->next
);
660 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
661 (*callbacks_p
)->callback
= callback
;
662 (*callbacks_p
)->periodic
= periodic
;
663 (*callbacks_p
)->time_ms
= time_ms
;
665 gettimeofday(&now
, NULL
);
666 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
667 time_ms
-= (time_ms
% 1000);
668 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
669 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
671 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
672 (*callbacks_p
)->when
.tv_sec
+= 1;
675 (*callbacks_p
)->priv
= priv
;
676 (*callbacks_p
)->next
= NULL
;
681 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
683 target_event_callback_t
**p
= &target_event_callbacks
;
684 target_event_callback_t
*c
= target_event_callbacks
;
686 if (callback
== NULL
)
688 return ERROR_INVALID_ARGUMENTS
;
693 target_event_callback_t
*next
= c
->next
;
694 if ((c
->callback
== callback
) && (c
->priv
== priv
))
708 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
710 target_timer_callback_t
**p
= &target_timer_callbacks
;
711 target_timer_callback_t
*c
= target_timer_callbacks
;
713 if (callback
== NULL
)
715 return ERROR_INVALID_ARGUMENTS
;
720 target_timer_callback_t
*next
= c
->next
;
721 if ((c
->callback
== callback
) && (c
->priv
== priv
))
735 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
737 target_event_callback_t
*callback
= target_event_callbacks
;
738 target_event_callback_t
*next_callback
;
740 LOG_DEBUG("target event %i", event
);
744 next_callback
= callback
->next
;
745 callback
->callback(target
, event
, callback
->priv
);
746 callback
= next_callback
;
752 static int target_call_timer_callbacks_check_time(int checktime
)
754 target_timer_callback_t
*callback
= target_timer_callbacks
;
755 target_timer_callback_t
*next_callback
;
758 gettimeofday(&now
, NULL
);
762 next_callback
= callback
->next
;
764 if ((!checktime
&&callback
->periodic
)||
765 (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
766 || (now
.tv_sec
> callback
->when
.tv_sec
)))
768 if(callback
->callback
!= NULL
)
770 callback
->callback(callback
->priv
);
771 if (callback
->periodic
)
773 int time_ms
= callback
->time_ms
;
774 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
775 time_ms
-= (time_ms
% 1000);
776 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
777 if (callback
->when
.tv_usec
> 1000000)
779 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
780 callback
->when
.tv_sec
+= 1;
784 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
788 callback
= next_callback
;
794 int target_call_timer_callbacks()
796 return target_call_timer_callbacks_check_time(1);
799 /* invoke periodic callbacks immediately */
800 int target_call_timer_callbacks_now()
802 return target_call_timer_callbacks(0);
805 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
807 working_area_t
*c
= target
->working_areas
;
808 working_area_t
*new_wa
= NULL
;
810 /* Reevaluate working area address based on MMU state*/
811 if (target
->working_areas
== NULL
)
815 retval
= target
->type
->mmu(target
, &enabled
);
816 if (retval
!= ERROR_OK
)
822 target
->working_area
= target
->working_area_virt
;
826 target
->working_area
= target
->working_area_phys
;
830 /* only allocate multiples of 4 byte */
833 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
834 size
= CEIL(size
, 4);
837 /* see if there's already a matching working area */
840 if ((c
->free
) && (c
->size
== size
))
848 /* if not, allocate a new one */
851 working_area_t
**p
= &target
->working_areas
;
852 u32 first_free
= target
->working_area
;
853 u32 free_size
= target
->working_area_size
;
855 LOG_DEBUG("allocating new working area");
857 c
= target
->working_areas
;
860 first_free
+= c
->size
;
861 free_size
-= c
->size
;
866 if (free_size
< size
)
868 LOG_WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
869 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
872 new_wa
= malloc(sizeof(working_area_t
));
875 new_wa
->address
= first_free
;
877 if (target
->backup_working_area
)
879 new_wa
->backup
= malloc(new_wa
->size
);
880 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
884 new_wa
->backup
= NULL
;
887 /* put new entry in list */
891 /* mark as used, and return the new (reused) area */
901 int target_free_working_area_restore(struct target_s
*target
, working_area_t
*area
, int restore
)
906 if (restore
&&target
->backup_working_area
)
907 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
911 /* mark user pointer invalid */
918 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
920 return target_free_working_area_restore(target
, area
, 1);
923 int target_free_all_working_areas_restore(struct target_s
*target
, int restore
)
925 working_area_t
*c
= target
->working_areas
;
929 working_area_t
*next
= c
->next
;
930 target_free_working_area_restore(target
, c
, restore
);
940 target
->working_areas
= NULL
;
945 int target_free_all_working_areas(struct target_s
*target
)
947 return target_free_all_working_areas_restore(target
, 1);
950 int target_register_commands(struct command_context_s
*cmd_ctx
)
952 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
953 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
954 register_command(cmd_ctx
, NULL
, "run_and_halt_time", handle_run_and_halt_time_command
, COMMAND_CONFIG
, "<target> <run time ms>");
955 register_command(cmd_ctx
, NULL
, "working_area", handle_working_area_command
, COMMAND_ANY
, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
956 register_command(cmd_ctx
, NULL
, "virt2phys", handle_virt2phys_command
, COMMAND_ANY
, "virt2phys <virtual address>");
957 register_command(cmd_ctx
, NULL
, "profile", handle_profile_command
, COMMAND_EXEC
, "PRELIMINARY! - profile <seconds> <gmon.out>");
962 int target_arch_state(struct target_s
*target
)
967 LOG_USER("No target has been configured");
971 LOG_USER("target state: %s", target_state_strings
[target
->state
]);
973 if (target
->state
!=TARGET_HALTED
)
976 retval
=target
->type
->arch_state(target
);
980 /* Single aligned words are guaranteed to use 16 or 32 bit access
981 * mode respectively, otherwise data is handled as quickly as
984 int target_write_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
987 if (!target
->type
->examined
)
989 LOG_ERROR("Target not examined yet");
993 LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size
, address
);
995 if (((address
% 2) == 0) && (size
== 2))
997 return target
->type
->write_memory(target
, address
, 2, 1, buffer
);
1000 /* handle unaligned head bytes */
1003 int unaligned
= 4 - (address
% 4);
1005 if (unaligned
> size
)
1008 if ((retval
= target
->type
->write_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
1011 buffer
+= unaligned
;
1012 address
+= unaligned
;
1016 /* handle aligned words */
1019 int aligned
= size
- (size
% 4);
1021 /* use bulk writes above a certain limit. This may have to be changed */
1024 if ((retval
= target
->type
->bulk_write_memory(target
, address
, aligned
/ 4, buffer
)) != ERROR_OK
)
1029 if ((retval
= target
->type
->write_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
1038 /* handle tail writes of less than 4 bytes */
1041 if ((retval
= target
->type
->write_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
1049 /* Single aligned words are guaranteed to use 16 or 32 bit access
1050 * mode respectively, otherwise data is handled as quickly as
1053 int target_read_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
1056 if (!target
->type
->examined
)
1058 LOG_ERROR("Target not examined yet");
1062 LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size
, address
);
1064 if (((address
% 2) == 0) && (size
== 2))
1066 return target
->type
->read_memory(target
, address
, 2, 1, buffer
);
1069 /* handle unaligned head bytes */
1072 int unaligned
= 4 - (address
% 4);
1074 if (unaligned
> size
)
1077 if ((retval
= target
->type
->read_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
1080 buffer
+= unaligned
;
1081 address
+= unaligned
;
1085 /* handle aligned words */
1088 int aligned
= size
- (size
% 4);
1090 if ((retval
= target
->type
->read_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
1098 /* handle tail writes of less than 4 bytes */
1101 if ((retval
= target
->type
->read_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
1108 int target_checksum_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* crc
)
1114 if (!target
->type
->examined
)
1116 LOG_ERROR("Target not examined yet");
1120 if ((retval
= target
->type
->checksum_memory(target
, address
,
1121 size
, &checksum
)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE
)
1123 buffer
= malloc(size
);
1126 LOG_ERROR("error allocating buffer for section (%d bytes)", size
);
1127 return ERROR_INVALID_ARGUMENTS
;
1129 retval
= target_read_buffer(target
, address
, size
, buffer
);
1130 if (retval
!= ERROR_OK
)
1136 /* convert to target endianess */
1137 for (i
= 0; i
< (size
/sizeof(u32
)); i
++)
1140 target_data
= target_buffer_get_u32(target
, &buffer
[i
*sizeof(u32
)]);
1141 target_buffer_set_u32(target
, &buffer
[i
*sizeof(u32
)], target_data
);
1144 retval
= image_calculate_checksum( buffer
, size
, &checksum
);
1153 int target_blank_check_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* blank
)
1156 if (!target
->type
->examined
)
1158 LOG_ERROR("Target not examined yet");
1162 if (target
->type
->blank_check_memory
== 0)
1163 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
1165 retval
= target
->type
->blank_check_memory(target
, address
, size
, blank
);
1170 int target_read_u32(struct target_s
*target
, u32 address
, u32
*value
)
1173 if (!target
->type
->examined
)
1175 LOG_ERROR("Target not examined yet");
1179 int retval
= target
->type
->read_memory(target
, address
, 4, 1, value_buf
);
1181 if (retval
== ERROR_OK
)
1183 *value
= target_buffer_get_u32(target
, value_buf
);
1184 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, *value
);
1189 LOG_DEBUG("address: 0x%8.8x failed", address
);
1195 int target_read_u16(struct target_s
*target
, u32 address
, u16
*value
)
1198 if (!target
->type
->examined
)
1200 LOG_ERROR("Target not examined yet");
1204 int retval
= target
->type
->read_memory(target
, address
, 2, 1, value_buf
);
1206 if (retval
== ERROR_OK
)
1208 *value
= target_buffer_get_u16(target
, value_buf
);
1209 LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address
, *value
);
1214 LOG_DEBUG("address: 0x%8.8x failed", address
);
1220 int target_read_u8(struct target_s
*target
, u32 address
, u8
*value
)
1222 int retval
= target
->type
->read_memory(target
, address
, 1, 1, value
);
1223 if (!target
->type
->examined
)
1225 LOG_ERROR("Target not examined yet");
1229 if (retval
== ERROR_OK
)
1231 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, *value
);
1236 LOG_DEBUG("address: 0x%8.8x failed", address
);
1242 int target_write_u32(struct target_s
*target
, u32 address
, u32 value
)
1246 if (!target
->type
->examined
)
1248 LOG_ERROR("Target not examined yet");
1252 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1254 target_buffer_set_u32(target
, value_buf
, value
);
1255 if ((retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
)) != ERROR_OK
)
1257 LOG_DEBUG("failed: %i", retval
);
1263 int target_write_u16(struct target_s
*target
, u32 address
, u16 value
)
1267 if (!target
->type
->examined
)
1269 LOG_ERROR("Target not examined yet");
1273 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1275 target_buffer_set_u16(target
, value_buf
, value
);
1276 if ((retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
)) != ERROR_OK
)
1278 LOG_DEBUG("failed: %i", retval
);
1284 int target_write_u8(struct target_s
*target
, u32 address
, u8 value
)
1287 if (!target
->type
->examined
)
1289 LOG_ERROR("Target not examined yet");
1293 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, value
);
1295 if ((retval
= target
->type
->read_memory(target
, address
, 1, 1, &value
)) != ERROR_OK
)
1297 LOG_DEBUG("failed: %i", retval
);
1303 int target_register_user_commands(struct command_context_s
*cmd_ctx
)
1305 register_command(cmd_ctx
, NULL
, "reg", handle_reg_command
, COMMAND_EXEC
, NULL
);
1306 register_command(cmd_ctx
, NULL
, "poll", handle_poll_command
, COMMAND_EXEC
, "poll target state");
1307 register_command(cmd_ctx
, NULL
, "wait_halt", handle_wait_halt_command
, COMMAND_EXEC
, "wait for target halt [time (s)]");
1308 register_command(cmd_ctx
, NULL
, "halt", handle_halt_command
, COMMAND_EXEC
, "halt target");
1309 register_command(cmd_ctx
, NULL
, "resume", handle_resume_command
, COMMAND_EXEC
, "resume target [addr]");
1310 register_command(cmd_ctx
, NULL
, "step", handle_step_command
, COMMAND_EXEC
, "step one instruction from current PC or [addr]");
1311 register_command(cmd_ctx
, NULL
, "reset", handle_reset_command
, COMMAND_EXEC
, "reset target [run|halt|init|run_and_halt|run_and_init]");
1312 register_command(cmd_ctx
, NULL
, "soft_reset_halt", handle_soft_reset_halt_command
, COMMAND_EXEC
, "halt the target and do a soft reset");
1314 register_command(cmd_ctx
, NULL
, "mdw", handle_md_command
, COMMAND_EXEC
, "display memory words <addr> [count]");
1315 register_command(cmd_ctx
, NULL
, "mdh", handle_md_command
, COMMAND_EXEC
, "display memory half-words <addr> [count]");
1316 register_command(cmd_ctx
, NULL
, "mdb", handle_md_command
, COMMAND_EXEC
, "display memory bytes <addr> [count]");
1318 register_command(cmd_ctx
, NULL
, "mww", handle_mw_command
, COMMAND_EXEC
, "write memory word <addr> <value> [count]");
1319 register_command(cmd_ctx
, NULL
, "mwh", handle_mw_command
, COMMAND_EXEC
, "write memory half-word <addr> <value> [count]");
1320 register_command(cmd_ctx
, NULL
, "mwb", handle_mw_command
, COMMAND_EXEC
, "write memory byte <addr> <value> [count]");
1322 register_command(cmd_ctx
, NULL
, "bp", handle_bp_command
, COMMAND_EXEC
, "set breakpoint <address> <length> [hw]");
1323 register_command(cmd_ctx
, NULL
, "rbp", handle_rbp_command
, COMMAND_EXEC
, "remove breakpoint <adress>");
1324 register_command(cmd_ctx
, NULL
, "wp", handle_wp_command
, COMMAND_EXEC
, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
1325 register_command(cmd_ctx
, NULL
, "rwp", handle_rwp_command
, COMMAND_EXEC
, "remove watchpoint <adress>");
1327 register_command(cmd_ctx
, NULL
, "load_image", handle_load_image_command
, COMMAND_EXEC
, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1328 register_command(cmd_ctx
, NULL
, "dump_image", handle_dump_image_command
, COMMAND_EXEC
, "dump_image <file> <address> <size>");
1329 register_command(cmd_ctx
, NULL
, "verify_image", handle_verify_image_command
, COMMAND_EXEC
, "verify_image <file> [offset] [type]");
1330 register_command(cmd_ctx
, NULL
, "load_binary", handle_load_image_command
, COMMAND_EXEC
, "[DEPRECATED] load_binary <file> <address>");
1331 register_command(cmd_ctx
, NULL
, "dump_binary", handle_dump_image_command
, COMMAND_EXEC
, "[DEPRECATED] dump_binary <file> <address> <size>");
1333 target_request_register_commands(cmd_ctx
);
1334 trace_register_commands(cmd_ctx
);
1339 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1341 target_t
*target
= targets
;
1346 int num
= strtoul(args
[0], NULL
, 0);
1351 target
= target
->next
;
1355 cmd_ctx
->current_target
= num
;
1357 command_print(cmd_ctx
, "%i is out of bounds, only %i targets are configured", num
, count
);
1364 command_print(cmd_ctx
, "%i: %s (%s), state: %s", count
++, target
->type
->name
, target_endianess_strings
[target
->endianness
], target_state_strings
[target
->state
]);
1365 target
= target
->next
;
1371 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1378 return ERROR_COMMAND_SYNTAX_ERROR
;
1381 /* search for the specified target */
1382 if (args
[0] && (args
[0][0] != 0))
1384 for (i
= 0; target_types
[i
]; i
++)
1386 if (strcmp(args
[0], target_types
[i
]->name
) == 0)
1388 target_t
**last_target_p
= &targets
;
1390 /* register target specific commands */
1391 if (target_types
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1393 LOG_ERROR("couldn't register '%s' commands", args
[0]);
1399 while ((*last_target_p
)->next
)
1400 last_target_p
= &((*last_target_p
)->next
);
1401 last_target_p
= &((*last_target_p
)->next
);
1404 *last_target_p
= malloc(sizeof(target_t
));
1406 /* allocate memory for each unique target type */
1407 (*last_target_p
)->type
= (target_type_t
*)malloc(sizeof(target_type_t
));
1408 *((*last_target_p
)->type
) = *target_types
[i
];
1410 if (strcmp(args
[1], "big") == 0)
1411 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1412 else if (strcmp(args
[1], "little") == 0)
1413 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1416 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1417 return ERROR_COMMAND_SYNTAX_ERROR
;
1420 /* what to do on a target reset */
1421 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1422 if (strcmp(args
[2], "reset_halt") == 0)
1423 (*last_target_p
)->reset_mode
= RESET_HALT
;
1424 else if (strcmp(args
[2], "reset_run") == 0)
1425 (*last_target_p
)->reset_mode
= RESET_RUN
;
1426 else if (strcmp(args
[2], "reset_init") == 0)
1427 (*last_target_p
)->reset_mode
= RESET_INIT
;
1428 else if (strcmp(args
[2], "run_and_halt") == 0)
1429 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1430 else if (strcmp(args
[2], "run_and_init") == 0)
1431 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1434 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1438 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1440 (*last_target_p
)->working_area
= 0x0;
1441 (*last_target_p
)->working_area_size
= 0x0;
1442 (*last_target_p
)->working_areas
= NULL
;
1443 (*last_target_p
)->backup_working_area
= 0;
1445 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1446 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1447 (*last_target_p
)->reg_cache
= NULL
;
1448 (*last_target_p
)->breakpoints
= NULL
;
1449 (*last_target_p
)->watchpoints
= NULL
;
1450 (*last_target_p
)->next
= NULL
;
1451 (*last_target_p
)->arch_info
= NULL
;
1453 /* initialize trace information */
1454 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1455 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1456 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1457 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1458 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1459 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1460 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1461 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1463 (*last_target_p
)->dbgmsg
= NULL
;
1464 (*last_target_p
)->dbg_msg_enabled
= 0;
1466 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1474 /* no matching target found */
1477 LOG_ERROR("target '%s' not found", args
[0]);
1478 return ERROR_COMMAND_SYNTAX_ERROR
;
1484 int target_invoke_script(struct command_context_s
*cmd_ctx
, target_t
*target
, char *name
)
1486 return command_run_linef(cmd_ctx
, " if {[catch {info body target_%s_%d} t]==0} {target_%s_%d}",
1487 name
, get_num_by_target(target
),
1488 name
, get_num_by_target(target
));
1491 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1493 target_t
*target
= NULL
;
1497 return ERROR_COMMAND_SYNTAX_ERROR
;
1500 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1503 return ERROR_COMMAND_SYNTAX_ERROR
;
1506 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1511 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1513 target_t
*target
= NULL
;
1515 if ((argc
< 4) || (argc
> 5))
1517 return ERROR_COMMAND_SYNTAX_ERROR
;
1520 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1523 return ERROR_COMMAND_SYNTAX_ERROR
;
1525 target_free_all_working_areas(target
);
1527 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1530 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1532 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1534 if (strcmp(args
[3], "backup") == 0)
1536 target
->backup_working_area
= 1;
1538 else if (strcmp(args
[3], "nobackup") == 0)
1540 target
->backup_working_area
= 0;
1544 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1545 return ERROR_COMMAND_SYNTAX_ERROR
;
1552 /* process target state changes */
1553 int handle_target(void *priv
)
1555 target_t
*target
= targets
;
1559 if (target_continous_poll
)
1561 /* polling may fail silently until the target has been examined */
1562 target_poll(target
);
1565 target
= target
->next
;
1571 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1580 target
= get_current_target(cmd_ctx
);
1582 /* list all available registers for the current target */
1585 reg_cache_t
*cache
= target
->reg_cache
;
1591 for (i
= 0; i
< cache
->num_regs
; i
++)
1593 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1594 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
);
1597 cache
= cache
->next
;
1603 /* access a single register by its ordinal number */
1604 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1606 int num
= strtoul(args
[0], NULL
, 0);
1607 reg_cache_t
*cache
= target
->reg_cache
;
1613 for (i
= 0; i
< cache
->num_regs
; i
++)
1617 reg
= &cache
->reg_list
[i
];
1623 cache
= cache
->next
;
1628 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1631 } else /* access a single register by its name */
1633 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1637 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1642 /* display a register */
1643 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1645 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1648 if (reg
->valid
== 0)
1650 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1651 if (arch_type
== NULL
)
1653 LOG_ERROR("BUG: encountered unregistered arch type");
1656 arch_type
->get(reg
);
1658 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1659 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1664 /* set register value */
1667 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1668 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1670 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1671 if (arch_type
== NULL
)
1673 LOG_ERROR("BUG: encountered unregistered arch type");
1677 arch_type
->set(reg
, buf
);
1679 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1680 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1688 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1693 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1695 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1697 target_t
*target
= get_current_target(cmd_ctx
);
1701 target_poll(target
);
1702 target_arch_state(target
);
1706 if (strcmp(args
[0], "on") == 0)
1708 target_continous_poll
= 1;
1710 else if (strcmp(args
[0], "off") == 0)
1712 target_continous_poll
= 0;
1716 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1724 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1732 ms
= strtoul(args
[0], &end
, 0) * 1000;
1735 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1740 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1743 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1746 struct timeval timeout
, now
;
1748 gettimeofday(&timeout
, NULL
);
1749 timeval_add_time(&timeout
, 0, ms
* 1000);
1751 target_t
*target
= get_current_target(cmd_ctx
);
1754 if ((retval
=target_poll(target
))!=ERROR_OK
)
1756 target_call_timer_callbacks_now();
1757 if (target
->state
== state
)
1764 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1767 gettimeofday(&now
, NULL
);
1768 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1770 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1778 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1781 target_t
*target
= get_current_target(cmd_ctx
);
1785 if ((retval
= target_halt(target
)) != ERROR_OK
)
1790 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1793 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1795 target_t
*target
= get_current_target(cmd_ctx
);
1797 LOG_USER("requesting target halt and executing a soft reset");
1799 target
->type
->soft_reset_halt(target
);
1804 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1806 target_t
*target
= get_current_target(cmd_ctx
);
1807 enum target_reset_mode reset_mode
= target
->reset_mode
;
1808 enum target_reset_mode save
= target
->reset_mode
;
1814 if (strcmp("run", args
[0]) == 0)
1815 reset_mode
= RESET_RUN
;
1816 else if (strcmp("halt", args
[0]) == 0)
1817 reset_mode
= RESET_HALT
;
1818 else if (strcmp("init", args
[0]) == 0)
1819 reset_mode
= RESET_INIT
;
1820 else if (strcmp("run_and_halt", args
[0]) == 0)
1822 reset_mode
= RESET_RUN_AND_HALT
;
1825 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1828 else if (strcmp("run_and_init", args
[0]) == 0)
1830 reset_mode
= RESET_RUN_AND_INIT
;
1833 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1838 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1843 /* temporarily modify mode of current reset target */
1844 target
->reset_mode
= reset_mode
;
1846 /* reset *all* targets */
1847 target_process_reset(cmd_ctx
);
1849 /* Restore default reset mode for this target */
1850 target
->reset_mode
= save
;
1855 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1858 target_t
*target
= get_current_target(cmd_ctx
);
1860 target_invoke_script(cmd_ctx
, target
, "pre_resume");
1863 retval
= target_resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1865 retval
= target_resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1868 return ERROR_COMMAND_SYNTAX_ERROR
;
1874 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1876 target_t
*target
= get_current_target(cmd_ctx
);
1881 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1884 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1889 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1891 const int line_bytecnt
= 32;
1904 target_t
*target
= get_current_target(cmd_ctx
);
1910 count
= strtoul(args
[1], NULL
, 0);
1912 address
= strtoul(args
[0], NULL
, 0);
1918 size
= 4; line_modulo
= line_bytecnt
/ 4;
1921 size
= 2; line_modulo
= line_bytecnt
/ 2;
1924 size
= 1; line_modulo
= line_bytecnt
/ 1;
1930 buffer
= calloc(count
, size
);
1931 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1932 if (retval
== ERROR_OK
)
1936 for (i
= 0; i
< count
; i
++)
1938 if (i
%line_modulo
== 0)
1939 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
1944 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
1947 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
1950 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
1954 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
1956 command_print(cmd_ctx
, output
);
1967 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1974 target_t
*target
= get_current_target(cmd_ctx
);
1977 if ((argc
< 2) || (argc
> 3))
1978 return ERROR_COMMAND_SYNTAX_ERROR
;
1980 address
= strtoul(args
[0], NULL
, 0);
1981 value
= strtoul(args
[1], NULL
, 0);
1983 count
= strtoul(args
[2], NULL
, 0);
1989 target_buffer_set_u32(target
, value_buf
, value
);
1993 target_buffer_set_u16(target
, value_buf
, value
);
1997 value_buf
[0] = value
;
2000 return ERROR_COMMAND_SYNTAX_ERROR
;
2002 for (i
=0; i
<count
; i
++)
2008 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
2011 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
2014 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
2019 if (retval
!=ERROR_OK
)
2029 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2039 duration_t duration
;
2040 char *duration_text
;
2042 target_t
*target
= get_current_target(cmd_ctx
);
2046 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
2050 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
2053 image
.base_address_set
= 1;
2054 image
.base_address
= strtoul(args
[1], NULL
, 0);
2058 image
.base_address_set
= 0;
2061 image
.start_address_set
= 0;
2063 duration_start_measure(&duration
);
2065 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
2072 for (i
= 0; i
< image
.num_sections
; i
++)
2074 buffer
= malloc(image
.sections
[i
].size
);
2077 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2081 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2086 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
2091 image_size
+= buf_cnt
;
2092 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
2097 duration_stop_measure(&duration
, &duration_text
);
2098 if (retval
==ERROR_OK
)
2100 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
2102 free(duration_text
);
2104 image_close(&image
);
2110 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2117 int retval
=ERROR_OK
;
2119 duration_t duration
;
2120 char *duration_text
;
2122 target_t
*target
= get_current_target(cmd_ctx
);
2126 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2130 address
= strtoul(args
[1], NULL
, 0);
2131 size
= strtoul(args
[2], NULL
, 0);
2133 if ((address
& 3) || (size
& 3))
2135 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2139 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2144 duration_start_measure(&duration
);
2149 u32 this_run_size
= (size
> 560) ? 560 : size
;
2151 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2152 if (retval
!= ERROR_OK
)
2157 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2158 if (retval
!= ERROR_OK
)
2163 size
-= this_run_size
;
2164 address
+= this_run_size
;
2167 fileio_close(&fileio
);
2169 duration_stop_measure(&duration
, &duration_text
);
2170 if (retval
==ERROR_OK
)
2172 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2174 free(duration_text
);
2179 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2187 u32 mem_checksum
= 0;
2191 duration_t duration
;
2192 char *duration_text
;
2194 target_t
*target
= get_current_target(cmd_ctx
);
2198 return ERROR_COMMAND_SYNTAX_ERROR
;
2203 LOG_ERROR("no target selected");
2207 duration_start_measure(&duration
);
2211 image
.base_address_set
= 1;
2212 image
.base_address
= strtoul(args
[1], NULL
, 0);
2216 image
.base_address_set
= 0;
2217 image
.base_address
= 0x0;
2220 image
.start_address_set
= 0;
2222 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2229 for (i
= 0; i
< image
.num_sections
; i
++)
2231 buffer
= malloc(image
.sections
[i
].size
);
2234 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2237 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2243 /* calculate checksum of image */
2244 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2246 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2247 if( retval
!= ERROR_OK
)
2253 if( checksum
!= mem_checksum
)
2255 /* failed crc checksum, fall back to a binary compare */
2258 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2260 data
= (u8
*)malloc(buf_cnt
);
2262 /* Can we use 32bit word accesses? */
2264 int count
= buf_cnt
;
2265 if ((count
% 4) == 0)
2270 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2271 if (retval
== ERROR_OK
)
2274 for (t
= 0; t
< buf_cnt
; t
++)
2276 if (data
[t
] != buffer
[t
])
2278 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
]);
2291 image_size
+= buf_cnt
;
2294 duration_stop_measure(&duration
, &duration_text
);
2295 if (retval
==ERROR_OK
)
2297 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2299 free(duration_text
);
2301 image_close(&image
);
2306 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2309 target_t
*target
= get_current_target(cmd_ctx
);
2313 breakpoint_t
*breakpoint
= target
->breakpoints
;
2317 if (breakpoint
->type
== BKPT_SOFT
)
2319 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2320 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2325 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2327 breakpoint
= breakpoint
->next
;
2335 length
= strtoul(args
[1], NULL
, 0);
2338 if (strcmp(args
[2], "hw") == 0)
2341 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2343 LOG_ERROR("Failure setting breakpoints");
2347 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2352 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2358 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2360 target_t
*target
= get_current_target(cmd_ctx
);
2363 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2368 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2370 target_t
*target
= get_current_target(cmd_ctx
);
2375 watchpoint_t
*watchpoint
= target
->watchpoints
;
2379 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
);
2380 watchpoint
= watchpoint
->next
;
2385 enum watchpoint_rw type
= WPT_ACCESS
;
2386 u32 data_value
= 0x0;
2387 u32 data_mask
= 0xffffffff;
2403 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2409 data_value
= strtoul(args
[3], NULL
, 0);
2413 data_mask
= strtoul(args
[4], NULL
, 0);
2416 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2417 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2419 LOG_ERROR("Failure setting breakpoints");
2424 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2430 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2432 target_t
*target
= get_current_target(cmd_ctx
);
2435 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2440 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2443 target_t
*target
= get_current_target(cmd_ctx
);
2449 return ERROR_COMMAND_SYNTAX_ERROR
;
2451 va
= strtoul(args
[0], NULL
, 0);
2453 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2454 if (retval
== ERROR_OK
)
2456 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2460 /* lower levels will have logged a detailed error which is
2461 * forwarded to telnet/GDB session.
2466 static void writeLong(FILE *f
, int l
)
2471 char c
=(l
>>(i
*8))&0xff;
2472 fwrite(&c
, 1, 1, f
);
2476 static void writeString(FILE *f
, char *s
)
2478 fwrite(s
, 1, strlen(s
), f
);
2483 // Dump a gmon.out histogram file.
2484 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2487 FILE *f
=fopen(filename
, "w");
2490 fwrite("gmon", 1, 4, f
);
2491 writeLong(f
, 0x00000001); // Version
2492 writeLong(f
, 0); // padding
2493 writeLong(f
, 0); // padding
2494 writeLong(f
, 0); // padding
2496 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2498 // figure out bucket size
2501 for (i
=0; i
<sampleNum
; i
++)
2513 int addressSpace
=(max
-min
+1);
2515 static int const maxBuckets
=256*1024; // maximum buckets.
2516 int length
=addressSpace
;
2517 if (length
> maxBuckets
)
2521 int *buckets
=malloc(sizeof(int)*length
);
2527 memset(buckets
, 0, sizeof(int)*length
);
2528 for (i
=0; i
<sampleNum
;i
++)
2530 u32 address
=samples
[i
];
2531 long long a
=address
-min
;
2532 long long b
=length
-1;
2533 long long c
=addressSpace
-1;
2534 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2538 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2539 writeLong(f
, min
); // low_pc
2540 writeLong(f
, max
); // high_pc
2541 writeLong(f
, length
); // # of samples
2542 writeLong(f
, 64000000); // 64MHz
2543 writeString(f
, "seconds");
2544 for (i
=0; i
<(15-strlen("seconds")); i
++)
2546 fwrite("", 1, 1, f
); // padding
2548 writeString(f
, "s");
2550 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2552 char *data
=malloc(2*length
);
2555 for (i
=0; i
<length
;i
++)
2564 data
[i
*2+1]=(val
>>8)&0xff;
2567 fwrite(data
, 1, length
*2, f
);
2577 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2578 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2580 target_t
*target
= get_current_target(cmd_ctx
);
2581 struct timeval timeout
, now
;
2583 gettimeofday(&timeout
, NULL
);
2586 return ERROR_COMMAND_SYNTAX_ERROR
;
2589 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2595 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2597 static const int maxSample
=10000;
2598 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2603 int retval
=ERROR_OK
;
2604 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2605 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2609 target_poll(target
);
2610 if (target
->state
== TARGET_HALTED
)
2612 u32 t
=*((u32
*)reg
->value
);
2613 samples
[numSamples
++]=t
;
2614 retval
= target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2615 target_poll(target
);
2616 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2617 } else if (target
->state
== TARGET_RUNNING
)
2619 // We want to quickly sample the PC.
2620 target_halt(target
);
2623 command_print(cmd_ctx
, "Target not halted or running");
2627 if (retval
!=ERROR_OK
)
2632 gettimeofday(&now
, NULL
);
2633 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2635 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2636 target_poll(target
);
2637 if (target
->state
== TARGET_HALTED
)
2639 target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2641 target_poll(target
);
2642 writeGmon(samples
, numSamples
, args
[1]);
2643 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)