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 /* Process target initialization, when target entered debug out of reset
219 * the handler is unregistered at the end of this function, so it's only called once
221 int target_init_handler(struct target_s
*target
, enum target_event event
, void *priv
)
224 struct command_context_s
*cmd_ctx
= priv
;
226 if ((event
== TARGET_EVENT_HALTED
) && (target
->reset_script
))
228 if ((jtag_reset_config
& RESET_SRST_PULLS_TRST
)==0)
230 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
231 u32 t
=*((u32
*)reg
->value
);
234 LOG_ERROR("PC was not 0. Does this target does target need srst_pulls_trst?");
238 target_unregister_event_callback(target_init_handler
, priv
);
240 script
= open_file_from_path(target
->reset_script
, "r");
243 LOG_ERROR("couldn't open script file %s", target
->reset_script
);
247 LOG_INFO("executing reset script '%s'", target
->reset_script
);
248 command_run_file(cmd_ctx
, script
, COMMAND_EXEC
);
251 jtag_execute_queue();
257 int target_run_and_halt_handler(void *priv
)
259 target_t
*target
= priv
;
266 int target_poll(struct target_s
*target
)
268 /* We can't poll until after examine */
269 if (!target
->type
->examined
)
271 /* Fail silently lest we pollute the log */
274 return target
->type
->poll(target
);
277 int target_halt(struct target_s
*target
)
279 /* We can't poll until after examine */
280 if (!target
->type
->examined
)
282 LOG_ERROR("Target not examined yet");
285 return target
->type
->halt(target
);
288 int target_resume(struct target_s
*target
, int current
, u32 address
, int handle_breakpoints
, int debug_execution
)
290 /* We can't poll until after examine */
291 if (!target
->type
->examined
)
293 LOG_ERROR("Target not examined yet");
296 return target
->type
->resume(target
, current
, address
, handle_breakpoints
, debug_execution
);
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
);
308 if ((retval
= jtag_init_reset(cmd_ctx
)) != ERROR_OK
)
311 /* First time this is executed after launching OpenOCD, it will read out
312 * the type of CPU, etc. and init Embedded ICE registers in host
315 * It will also set up ICE registers in the target.
317 * However, if we assert TRST later, we need to set up the registers again.
319 * For the "reset halt/init" case we must only set up the registers here.
321 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
324 /* prepare reset_halt where necessary */
328 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
330 switch (target
->reset_mode
)
333 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_halt\"");
334 target
->reset_mode
= RESET_RUN_AND_HALT
;
337 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_init\"");
338 target
->reset_mode
= RESET_RUN_AND_INIT
;
344 target
= target
->next
;
350 /* we have no idea what state the target is in, so we
351 * have to drop working areas
353 target_free_all_working_areas_restore(target
, 0);
354 target
->type
->assert_reset(target
);
355 target
= target
->next
;
357 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
359 LOG_WARNING("JTAG communication failed asserting reset.");
363 /* request target halt if necessary, and schedule further action */
367 switch (target
->reset_mode
)
370 /* nothing to do if target just wants to be run */
372 case RESET_RUN_AND_HALT
:
374 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
376 case RESET_RUN_AND_INIT
:
378 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
379 target_register_event_callback(target_init_handler
, cmd_ctx
);
386 target_register_event_callback(target_init_handler
, cmd_ctx
);
389 LOG_ERROR("BUG: unknown target->reset_mode");
391 target
= target
->next
;
394 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
396 LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
403 target
->type
->deassert_reset(target
);
404 target
= target
->next
;
407 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
409 LOG_WARNING("JTAG communication failed while deasserting reset.");
413 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
415 /* If TRST was asserted we need to set up registers again */
416 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
421 LOG_DEBUG("Waiting for halted stated as approperiate");
423 /* Wait for reset to complete, maximum 5 seconds. */
424 gettimeofday(&timeout
, NULL
);
425 timeval_add_time(&timeout
, 5, 0);
428 gettimeofday(&now
, NULL
);
430 target_call_timer_callbacks_now();
435 LOG_DEBUG("Polling target");
437 if ((target
->reset_mode
== RESET_RUN_AND_INIT
) ||
438 (target
->reset_mode
== RESET_RUN_AND_HALT
) ||
439 (target
->reset_mode
== RESET_HALT
) ||
440 (target
->reset_mode
== RESET_INIT
))
442 if (target
->state
!= TARGET_HALTED
)
444 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
446 LOG_USER("Timed out waiting for halt after reset");
449 /* this will send alive messages on e.g. GDB remote protocol. */
451 LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/
455 target
= target
->next
;
457 /* All targets we're waiting for are halted */
465 /* We want any events to be processed before the prompt */
466 target_call_timer_callbacks_now();
468 /* if we timed out we need to unregister these handlers */
472 target_unregister_timer_callback(target_run_and_halt_handler
, target
);
473 target
= target
->next
;
475 target_unregister_event_callback(target_init_handler
, cmd_ctx
);
478 jtag
->speed(jtag_speed_post_reset
);
483 static int default_virt2phys(struct target_s
*target
, u32
virtual, u32
*physical
)
489 static int default_mmu(struct target_s
*target
, int *enabled
)
495 static int default_examine(struct command_context_s
*cmd_ctx
, struct target_s
*target
)
497 target
->type
->examined
= 1;
502 /* Targets that correctly implement init+examine, i.e.
503 * no communication with target during init:
507 int target_examine(struct command_context_s
*cmd_ctx
)
509 int retval
= ERROR_OK
;
510 target_t
*target
= targets
;
513 if ((retval
= target
->type
->examine(cmd_ctx
, target
))!=ERROR_OK
)
515 target
= target
->next
;
520 static int target_write_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
522 if (!target
->type
->examined
)
524 LOG_ERROR("Target not examined yet");
527 return target
->type
->write_memory_imp(target
, address
, size
, count
, buffer
);
530 static int target_read_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
532 if (!target
->type
->examined
)
534 LOG_ERROR("Target not examined yet");
537 return target
->type
->read_memory_imp(target
, address
, size
, count
, buffer
);
540 static int target_soft_reset_halt_imp(struct target_s
*target
)
542 if (!target
->type
->examined
)
544 LOG_ERROR("Target not examined yet");
547 return target
->type
->soft_reset_halt_imp(target
);
550 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
)
552 if (!target
->type
->examined
)
554 LOG_ERROR("Target not examined yet");
557 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
);
560 int target_init(struct command_context_s
*cmd_ctx
)
562 target_t
*target
= targets
;
566 target
->type
->examined
= 0;
567 if (target
->type
->examine
== NULL
)
569 target
->type
->examine
= default_examine
;
572 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
574 LOG_ERROR("target '%s' init failed", target
->type
->name
);
578 /* Set up default functions if none are provided by target */
579 if (target
->type
->virt2phys
== NULL
)
581 target
->type
->virt2phys
= default_virt2phys
;
583 target
->type
->virt2phys
= default_virt2phys
;
584 /* a non-invasive way(in terms of patches) to add some code that
585 * runs before the type->write/read_memory implementation
587 target
->type
->write_memory_imp
= target
->type
->write_memory
;
588 target
->type
->write_memory
= target_write_memory_imp
;
589 target
->type
->read_memory_imp
= target
->type
->read_memory
;
590 target
->type
->read_memory
= target_read_memory_imp
;
591 target
->type
->soft_reset_halt_imp
= target
->type
->soft_reset_halt
;
592 target
->type
->soft_reset_halt
= target_soft_reset_halt_imp
;
593 target
->type
->run_algorithm_imp
= target
->type
->run_algorithm
;
594 target
->type
->run_algorithm
= target_run_algorithm_imp
;
597 if (target
->type
->mmu
== NULL
)
599 target
->type
->mmu
= default_mmu
;
601 target
= target
->next
;
606 target_register_user_commands(cmd_ctx
);
607 target_register_timer_callback(handle_target
, 100, 1, NULL
);
613 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
615 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
617 if (callback
== NULL
)
619 return ERROR_INVALID_ARGUMENTS
;
624 while ((*callbacks_p
)->next
)
625 callbacks_p
= &((*callbacks_p
)->next
);
626 callbacks_p
= &((*callbacks_p
)->next
);
629 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
630 (*callbacks_p
)->callback
= callback
;
631 (*callbacks_p
)->priv
= priv
;
632 (*callbacks_p
)->next
= NULL
;
637 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
639 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
642 if (callback
== NULL
)
644 return ERROR_INVALID_ARGUMENTS
;
649 while ((*callbacks_p
)->next
)
650 callbacks_p
= &((*callbacks_p
)->next
);
651 callbacks_p
= &((*callbacks_p
)->next
);
654 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
655 (*callbacks_p
)->callback
= callback
;
656 (*callbacks_p
)->periodic
= periodic
;
657 (*callbacks_p
)->time_ms
= time_ms
;
659 gettimeofday(&now
, NULL
);
660 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
661 time_ms
-= (time_ms
% 1000);
662 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
663 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
665 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
666 (*callbacks_p
)->when
.tv_sec
+= 1;
669 (*callbacks_p
)->priv
= priv
;
670 (*callbacks_p
)->next
= NULL
;
675 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
677 target_event_callback_t
**p
= &target_event_callbacks
;
678 target_event_callback_t
*c
= target_event_callbacks
;
680 if (callback
== NULL
)
682 return ERROR_INVALID_ARGUMENTS
;
687 target_event_callback_t
*next
= c
->next
;
688 if ((c
->callback
== callback
) && (c
->priv
== priv
))
702 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
704 target_timer_callback_t
**p
= &target_timer_callbacks
;
705 target_timer_callback_t
*c
= target_timer_callbacks
;
707 if (callback
== NULL
)
709 return ERROR_INVALID_ARGUMENTS
;
714 target_timer_callback_t
*next
= c
->next
;
715 if ((c
->callback
== callback
) && (c
->priv
== priv
))
729 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
731 target_event_callback_t
*callback
= target_event_callbacks
;
732 target_event_callback_t
*next_callback
;
734 LOG_DEBUG("target event %i", event
);
738 next_callback
= callback
->next
;
739 callback
->callback(target
, event
, callback
->priv
);
740 callback
= next_callback
;
746 static int target_call_timer_callbacks_check_time(int checktime
)
748 target_timer_callback_t
*callback
= target_timer_callbacks
;
749 target_timer_callback_t
*next_callback
;
752 gettimeofday(&now
, NULL
);
756 next_callback
= callback
->next
;
758 if ((!checktime
&&callback
->periodic
)||
759 (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
760 || (now
.tv_sec
> callback
->when
.tv_sec
)))
762 if(callback
->callback
!= NULL
)
764 callback
->callback(callback
->priv
);
765 if (callback
->periodic
)
767 int time_ms
= callback
->time_ms
;
768 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
769 time_ms
-= (time_ms
% 1000);
770 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
771 if (callback
->when
.tv_usec
> 1000000)
773 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
774 callback
->when
.tv_sec
+= 1;
778 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
782 callback
= next_callback
;
788 int target_call_timer_callbacks()
790 return target_call_timer_callbacks_check_time(1);
793 /* invoke periodic callbacks immediately */
794 int target_call_timer_callbacks_now()
796 return target_call_timer_callbacks(0);
800 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
802 working_area_t
*c
= target
->working_areas
;
803 working_area_t
*new_wa
= NULL
;
805 /* Reevaluate working area address based on MMU state*/
806 if (target
->working_areas
== NULL
)
810 retval
= target
->type
->mmu(target
, &enabled
);
811 if (retval
!= ERROR_OK
)
817 target
->working_area
= target
->working_area_virt
;
821 target
->working_area
= target
->working_area_phys
;
825 /* only allocate multiples of 4 byte */
828 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
829 size
= CEIL(size
, 4);
832 /* see if there's already a matching working area */
835 if ((c
->free
) && (c
->size
== size
))
843 /* if not, allocate a new one */
846 working_area_t
**p
= &target
->working_areas
;
847 u32 first_free
= target
->working_area
;
848 u32 free_size
= target
->working_area_size
;
850 LOG_DEBUG("allocating new working area");
852 c
= target
->working_areas
;
855 first_free
+= c
->size
;
856 free_size
-= c
->size
;
861 if (free_size
< size
)
863 LOG_WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
864 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
867 new_wa
= malloc(sizeof(working_area_t
));
870 new_wa
->address
= first_free
;
872 if (target
->backup_working_area
)
874 new_wa
->backup
= malloc(new_wa
->size
);
875 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
879 new_wa
->backup
= NULL
;
882 /* put new entry in list */
886 /* mark as used, and return the new (reused) area */
896 int target_free_working_area_restore(struct target_s
*target
, working_area_t
*area
, int restore
)
901 if (restore
&&target
->backup_working_area
)
902 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
906 /* mark user pointer invalid */
913 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
915 return target_free_working_area_restore(target
, area
, 1);
918 int target_free_all_working_areas_restore(struct target_s
*target
, int restore
)
920 working_area_t
*c
= target
->working_areas
;
924 working_area_t
*next
= c
->next
;
925 target_free_working_area_restore(target
, c
, restore
);
935 target
->working_areas
= NULL
;
940 int target_free_all_working_areas(struct target_s
*target
)
942 return target_free_all_working_areas_restore(target
, 1);
945 int target_register_commands(struct command_context_s
*cmd_ctx
)
947 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
948 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
949 register_command(cmd_ctx
, NULL
, "target_script", handle_target_script_command
, COMMAND_CONFIG
, NULL
);
950 register_command(cmd_ctx
, NULL
, "run_and_halt_time", handle_run_and_halt_time_command
, COMMAND_CONFIG
, "<target> <run time ms>");
951 register_command(cmd_ctx
, NULL
, "working_area", handle_working_area_command
, COMMAND_ANY
, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
952 register_command(cmd_ctx
, NULL
, "virt2phys", handle_virt2phys_command
, COMMAND_ANY
, "virt2phys <virtual address>");
953 register_command(cmd_ctx
, NULL
, "profile", handle_profile_command
, COMMAND_EXEC
, "PRELIMINARY! - profile <seconds> <gmon.out>");
958 int target_arch_state(struct target_s
*target
)
963 LOG_USER("No target has been configured");
967 LOG_USER("target state: %s", target_state_strings
[target
->state
]);
969 if (target
->state
!=TARGET_HALTED
)
972 retval
=target
->type
->arch_state(target
);
976 /* Single aligned words are guaranteed to use 16 or 32 bit access
977 * mode respectively, otherwise data is handled as quickly as
980 int target_write_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
983 if (!target
->type
->examined
)
985 LOG_ERROR("Target not examined yet");
989 LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size
, address
);
991 if (((address
% 2) == 0) && (size
== 2))
993 return target
->type
->write_memory(target
, address
, 2, 1, buffer
);
996 /* handle unaligned head bytes */
999 int unaligned
= 4 - (address
% 4);
1001 if (unaligned
> size
)
1004 if ((retval
= target
->type
->write_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
1007 buffer
+= unaligned
;
1008 address
+= unaligned
;
1012 /* handle aligned words */
1015 int aligned
= size
- (size
% 4);
1017 /* use bulk writes above a certain limit. This may have to be changed */
1020 if ((retval
= target
->type
->bulk_write_memory(target
, address
, aligned
/ 4, buffer
)) != ERROR_OK
)
1025 if ((retval
= target
->type
->write_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
1034 /* handle tail writes of less than 4 bytes */
1037 if ((retval
= target
->type
->write_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
1045 /* Single aligned words are guaranteed to use 16 or 32 bit access
1046 * mode respectively, otherwise data is handled as quickly as
1049 int target_read_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
1052 if (!target
->type
->examined
)
1054 LOG_ERROR("Target not examined yet");
1058 LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size
, address
);
1060 if (((address
% 2) == 0) && (size
== 2))
1062 return target
->type
->read_memory(target
, address
, 2, 1, buffer
);
1065 /* handle unaligned head bytes */
1068 int unaligned
= 4 - (address
% 4);
1070 if (unaligned
> size
)
1073 if ((retval
= target
->type
->read_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
1076 buffer
+= unaligned
;
1077 address
+= unaligned
;
1081 /* handle aligned words */
1084 int aligned
= size
- (size
% 4);
1086 if ((retval
= target
->type
->read_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
1094 /* handle tail writes of less than 4 bytes */
1097 if ((retval
= target
->type
->read_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
1104 int target_checksum_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* crc
)
1110 if (!target
->type
->examined
)
1112 LOG_ERROR("Target not examined yet");
1116 if ((retval
= target
->type
->checksum_memory(target
, address
,
1117 size
, &checksum
)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE
)
1119 buffer
= malloc(size
);
1122 LOG_ERROR("error allocating buffer for section (%d bytes)", size
);
1123 return ERROR_INVALID_ARGUMENTS
;
1125 retval
= target_read_buffer(target
, address
, size
, buffer
);
1126 if (retval
!= ERROR_OK
)
1132 /* convert to target endianess */
1133 for (i
= 0; i
< (size
/sizeof(u32
)); i
++)
1136 target_data
= target_buffer_get_u32(target
, &buffer
[i
*sizeof(u32
)]);
1137 target_buffer_set_u32(target
, &buffer
[i
*sizeof(u32
)], target_data
);
1140 retval
= image_calculate_checksum( buffer
, size
, &checksum
);
1149 int target_read_u32(struct target_s
*target
, u32 address
, u32
*value
)
1152 if (!target
->type
->examined
)
1154 LOG_ERROR("Target not examined yet");
1158 int retval
= target
->type
->read_memory(target
, address
, 4, 1, value_buf
);
1160 if (retval
== ERROR_OK
)
1162 *value
= target_buffer_get_u32(target
, value_buf
);
1163 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, *value
);
1168 LOG_DEBUG("address: 0x%8.8x failed", address
);
1174 int target_read_u16(struct target_s
*target
, u32 address
, u16
*value
)
1177 if (!target
->type
->examined
)
1179 LOG_ERROR("Target not examined yet");
1183 int retval
= target
->type
->read_memory(target
, address
, 2, 1, value_buf
);
1185 if (retval
== ERROR_OK
)
1187 *value
= target_buffer_get_u16(target
, value_buf
);
1188 LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address
, *value
);
1193 LOG_DEBUG("address: 0x%8.8x failed", address
);
1199 int target_read_u8(struct target_s
*target
, u32 address
, u8
*value
)
1201 int retval
= target
->type
->read_memory(target
, address
, 1, 1, value
);
1202 if (!target
->type
->examined
)
1204 LOG_ERROR("Target not examined yet");
1208 if (retval
== ERROR_OK
)
1210 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, *value
);
1215 LOG_DEBUG("address: 0x%8.8x failed", address
);
1221 int target_write_u32(struct target_s
*target
, u32 address
, u32 value
)
1225 if (!target
->type
->examined
)
1227 LOG_ERROR("Target not examined yet");
1231 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1233 target_buffer_set_u32(target
, value_buf
, value
);
1234 if ((retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
)) != ERROR_OK
)
1236 LOG_DEBUG("failed: %i", retval
);
1242 int target_write_u16(struct target_s
*target
, u32 address
, u16 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_u16(target
, value_buf
, value
);
1255 if ((retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
)) != ERROR_OK
)
1257 LOG_DEBUG("failed: %i", retval
);
1263 int target_write_u8(struct target_s
*target
, u32 address
, u8 value
)
1266 if (!target
->type
->examined
)
1268 LOG_ERROR("Target not examined yet");
1272 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, value
);
1274 if ((retval
= target
->type
->read_memory(target
, address
, 1, 1, &value
)) != ERROR_OK
)
1276 LOG_DEBUG("failed: %i", retval
);
1282 int target_register_user_commands(struct command_context_s
*cmd_ctx
)
1284 register_command(cmd_ctx
, NULL
, "reg", handle_reg_command
, COMMAND_EXEC
, NULL
);
1285 register_command(cmd_ctx
, NULL
, "poll", handle_poll_command
, COMMAND_EXEC
, "poll target state");
1286 register_command(cmd_ctx
, NULL
, "wait_halt", handle_wait_halt_command
, COMMAND_EXEC
, "wait for target halt [time (s)]");
1287 register_command(cmd_ctx
, NULL
, "halt", handle_halt_command
, COMMAND_EXEC
, "halt target");
1288 register_command(cmd_ctx
, NULL
, "resume", handle_resume_command
, COMMAND_EXEC
, "resume target [addr]");
1289 register_command(cmd_ctx
, NULL
, "step", handle_step_command
, COMMAND_EXEC
, "step one instruction from current PC or [addr]");
1290 register_command(cmd_ctx
, NULL
, "reset", handle_reset_command
, COMMAND_EXEC
, "reset target [run|halt|init|run_and_halt|run_and_init]");
1291 register_command(cmd_ctx
, NULL
, "soft_reset_halt", handle_soft_reset_halt_command
, COMMAND_EXEC
, "halt the target and do a soft reset");
1293 register_command(cmd_ctx
, NULL
, "mdw", handle_md_command
, COMMAND_EXEC
, "display memory words <addr> [count]");
1294 register_command(cmd_ctx
, NULL
, "mdh", handle_md_command
, COMMAND_EXEC
, "display memory half-words <addr> [count]");
1295 register_command(cmd_ctx
, NULL
, "mdb", handle_md_command
, COMMAND_EXEC
, "display memory bytes <addr> [count]");
1297 register_command(cmd_ctx
, NULL
, "mww", handle_mw_command
, COMMAND_EXEC
, "write memory word <addr> <value> [count]");
1298 register_command(cmd_ctx
, NULL
, "mwh", handle_mw_command
, COMMAND_EXEC
, "write memory half-word <addr> <value> [count]");
1299 register_command(cmd_ctx
, NULL
, "mwb", handle_mw_command
, COMMAND_EXEC
, "write memory byte <addr> <value> [count]");
1301 register_command(cmd_ctx
, NULL
, "bp", handle_bp_command
, COMMAND_EXEC
, "set breakpoint <address> <length> [hw]");
1302 register_command(cmd_ctx
, NULL
, "rbp", handle_rbp_command
, COMMAND_EXEC
, "remove breakpoint <adress>");
1303 register_command(cmd_ctx
, NULL
, "wp", handle_wp_command
, COMMAND_EXEC
, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
1304 register_command(cmd_ctx
, NULL
, "rwp", handle_rwp_command
, COMMAND_EXEC
, "remove watchpoint <adress>");
1306 register_command(cmd_ctx
, NULL
, "load_image", handle_load_image_command
, COMMAND_EXEC
, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1307 register_command(cmd_ctx
, NULL
, "dump_image", handle_dump_image_command
, COMMAND_EXEC
, "dump_image <file> <address> <size>");
1308 register_command(cmd_ctx
, NULL
, "verify_image", handle_verify_image_command
, COMMAND_EXEC
, "verify_image <file> [offset] [type]");
1309 register_command(cmd_ctx
, NULL
, "load_binary", handle_load_image_command
, COMMAND_EXEC
, "[DEPRECATED] load_binary <file> <address>");
1310 register_command(cmd_ctx
, NULL
, "dump_binary", handle_dump_image_command
, COMMAND_EXEC
, "[DEPRECATED] dump_binary <file> <address> <size>");
1312 target_request_register_commands(cmd_ctx
);
1313 trace_register_commands(cmd_ctx
);
1318 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1320 target_t
*target
= targets
;
1325 int num
= strtoul(args
[0], NULL
, 0);
1330 target
= target
->next
;
1334 cmd_ctx
->current_target
= num
;
1336 command_print(cmd_ctx
, "%i is out of bounds, only %i targets are configured", num
, count
);
1343 command_print(cmd_ctx
, "%i: %s (%s), state: %s", count
++, target
->type
->name
, target_endianess_strings
[target
->endianness
], target_state_strings
[target
->state
]);
1344 target
= target
->next
;
1350 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1357 return ERROR_COMMAND_SYNTAX_ERROR
;
1360 /* search for the specified target */
1361 if (args
[0] && (args
[0][0] != 0))
1363 for (i
= 0; target_types
[i
]; i
++)
1365 if (strcmp(args
[0], target_types
[i
]->name
) == 0)
1367 target_t
**last_target_p
= &targets
;
1369 /* register target specific commands */
1370 if (target_types
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1372 LOG_ERROR("couldn't register '%s' commands", args
[0]);
1378 while ((*last_target_p
)->next
)
1379 last_target_p
= &((*last_target_p
)->next
);
1380 last_target_p
= &((*last_target_p
)->next
);
1383 *last_target_p
= malloc(sizeof(target_t
));
1385 (*last_target_p
)->type
= target_types
[i
];
1387 if (strcmp(args
[1], "big") == 0)
1388 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1389 else if (strcmp(args
[1], "little") == 0)
1390 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1393 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1394 return ERROR_COMMAND_SYNTAX_ERROR
;
1397 /* what to do on a target reset */
1398 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1399 if (strcmp(args
[2], "reset_halt") == 0)
1400 (*last_target_p
)->reset_mode
= RESET_HALT
;
1401 else if (strcmp(args
[2], "reset_run") == 0)
1402 (*last_target_p
)->reset_mode
= RESET_RUN
;
1403 else if (strcmp(args
[2], "reset_init") == 0)
1404 (*last_target_p
)->reset_mode
= RESET_INIT
;
1405 else if (strcmp(args
[2], "run_and_halt") == 0)
1406 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1407 else if (strcmp(args
[2], "run_and_init") == 0)
1408 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1411 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1415 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1417 (*last_target_p
)->reset_script
= NULL
;
1418 (*last_target_p
)->post_halt_script
= NULL
;
1419 (*last_target_p
)->pre_resume_script
= NULL
;
1420 (*last_target_p
)->gdb_program_script
= NULL
;
1422 (*last_target_p
)->working_area
= 0x0;
1423 (*last_target_p
)->working_area_size
= 0x0;
1424 (*last_target_p
)->working_areas
= NULL
;
1425 (*last_target_p
)->backup_working_area
= 0;
1427 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1428 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1429 (*last_target_p
)->reg_cache
= NULL
;
1430 (*last_target_p
)->breakpoints
= NULL
;
1431 (*last_target_p
)->watchpoints
= NULL
;
1432 (*last_target_p
)->next
= NULL
;
1433 (*last_target_p
)->arch_info
= NULL
;
1435 /* initialize trace information */
1436 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1437 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1438 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1439 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1440 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1441 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1442 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1443 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1445 (*last_target_p
)->dbgmsg
= NULL
;
1446 (*last_target_p
)->dbg_msg_enabled
= 0;
1448 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1456 /* no matching target found */
1459 LOG_ERROR("target '%s' not found", args
[0]);
1460 return ERROR_COMMAND_SYNTAX_ERROR
;
1466 /* usage: target_script <target#> <event> <script_file> */
1467 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1469 target_t
*target
= NULL
;
1473 LOG_ERROR("incomplete target_script command");
1474 return ERROR_COMMAND_SYNTAX_ERROR
;
1477 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1481 return ERROR_COMMAND_SYNTAX_ERROR
;
1484 if (strcmp(args
[1], "reset") == 0)
1486 if (target
->reset_script
)
1487 free(target
->reset_script
);
1488 target
->reset_script
= strdup(args
[2]);
1490 else if (strcmp(args
[1], "post_halt") == 0)
1492 if (target
->post_halt_script
)
1493 free(target
->post_halt_script
);
1494 target
->post_halt_script
= strdup(args
[2]);
1496 else if (strcmp(args
[1], "pre_resume") == 0)
1498 if (target
->pre_resume_script
)
1499 free(target
->pre_resume_script
);
1500 target
->pre_resume_script
= strdup(args
[2]);
1502 else if (strcmp(args
[1], "gdb_program_config") == 0)
1504 if (target
->gdb_program_script
)
1505 free(target
->gdb_program_script
);
1506 target
->gdb_program_script
= strdup(args
[2]);
1510 LOG_ERROR("unknown event type: '%s", args
[1]);
1511 return ERROR_COMMAND_SYNTAX_ERROR
;
1517 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1519 target_t
*target
= NULL
;
1523 return ERROR_COMMAND_SYNTAX_ERROR
;
1526 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1529 return ERROR_COMMAND_SYNTAX_ERROR
;
1532 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1537 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1539 target_t
*target
= NULL
;
1541 if ((argc
< 4) || (argc
> 5))
1543 return ERROR_COMMAND_SYNTAX_ERROR
;
1546 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1549 return ERROR_COMMAND_SYNTAX_ERROR
;
1551 target_free_all_working_areas(target
);
1553 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1556 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1558 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1560 if (strcmp(args
[3], "backup") == 0)
1562 target
->backup_working_area
= 1;
1564 else if (strcmp(args
[3], "nobackup") == 0)
1566 target
->backup_working_area
= 0;
1570 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1571 return ERROR_COMMAND_SYNTAX_ERROR
;
1578 /* process target state changes */
1579 int handle_target(void *priv
)
1581 target_t
*target
= targets
;
1585 if (target_continous_poll
)
1587 /* polling may fail silently until the target has been examined */
1588 target_poll(target
);
1591 target
= target
->next
;
1597 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1606 target
= get_current_target(cmd_ctx
);
1608 /* list all available registers for the current target */
1611 reg_cache_t
*cache
= target
->reg_cache
;
1617 for (i
= 0; i
< cache
->num_regs
; i
++)
1619 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1620 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
);
1623 cache
= cache
->next
;
1629 /* access a single register by its ordinal number */
1630 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1632 int num
= strtoul(args
[0], NULL
, 0);
1633 reg_cache_t
*cache
= target
->reg_cache
;
1639 for (i
= 0; i
< cache
->num_regs
; i
++)
1643 reg
= &cache
->reg_list
[i
];
1649 cache
= cache
->next
;
1654 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1657 } else /* access a single register by its name */
1659 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1663 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1668 /* display a register */
1669 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1671 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1674 if (reg
->valid
== 0)
1676 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1677 if (arch_type
== NULL
)
1679 LOG_ERROR("BUG: encountered unregistered arch type");
1682 arch_type
->get(reg
);
1684 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1685 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1690 /* set register value */
1693 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1694 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1696 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1697 if (arch_type
== NULL
)
1699 LOG_ERROR("BUG: encountered unregistered arch type");
1703 arch_type
->set(reg
, buf
);
1705 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1706 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1714 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1719 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1721 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1723 target_t
*target
= get_current_target(cmd_ctx
);
1727 target_poll(target
);
1728 target_arch_state(target
);
1732 if (strcmp(args
[0], "on") == 0)
1734 target_continous_poll
= 1;
1736 else if (strcmp(args
[0], "off") == 0)
1738 target_continous_poll
= 0;
1742 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1750 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1758 ms
= strtoul(args
[0], &end
, 0) * 1000;
1761 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1766 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1769 static void target_process_events(struct command_context_s
*cmd_ctx
)
1771 target_t
*target
= get_current_target(cmd_ctx
);
1772 target_poll(target
);
1773 target_call_timer_callbacks_now();
1776 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1779 struct timeval timeout
, now
;
1781 gettimeofday(&timeout
, NULL
);
1782 timeval_add_time(&timeout
, 0, ms
* 1000);
1784 target_t
*target
= get_current_target(cmd_ctx
);
1787 if ((retval
=target_poll(target
))!=ERROR_OK
)
1789 target_call_timer_callbacks_now();
1790 if (target
->state
== state
)
1797 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1800 gettimeofday(&now
, NULL
);
1801 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1803 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1811 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1814 target_t
*target
= get_current_target(cmd_ctx
);
1818 if ((retval
= target_halt(target
)) != ERROR_OK
)
1823 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1827 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1829 target_t
*target
= get_current_target(cmd_ctx
);
1831 LOG_USER("requesting target halt and executing a soft reset");
1833 target
->type
->soft_reset_halt(target
);
1838 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1840 target_t
*target
= get_current_target(cmd_ctx
);
1841 enum target_reset_mode reset_mode
= target
->reset_mode
;
1842 enum target_reset_mode save
= target
->reset_mode
;
1848 if (strcmp("run", args
[0]) == 0)
1849 reset_mode
= RESET_RUN
;
1850 else if (strcmp("halt", args
[0]) == 0)
1851 reset_mode
= RESET_HALT
;
1852 else if (strcmp("init", args
[0]) == 0)
1853 reset_mode
= RESET_INIT
;
1854 else if (strcmp("run_and_halt", args
[0]) == 0)
1856 reset_mode
= RESET_RUN_AND_HALT
;
1859 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1862 else if (strcmp("run_and_init", args
[0]) == 0)
1864 reset_mode
= RESET_RUN_AND_INIT
;
1867 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1872 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1877 /* temporarily modify mode of current reset target */
1878 target
->reset_mode
= reset_mode
;
1880 /* reset *all* targets */
1881 target_process_reset(cmd_ctx
);
1883 /* Restore default reset mode for this target */
1884 target
->reset_mode
= save
;
1889 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1892 target_t
*target
= get_current_target(cmd_ctx
);
1895 retval
= target_resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1897 retval
= target_resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1900 return ERROR_COMMAND_SYNTAX_ERROR
;
1903 target_process_events(cmd_ctx
);
1908 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1910 target_t
*target
= get_current_target(cmd_ctx
);
1915 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1918 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1923 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1925 const int line_bytecnt
= 32;
1938 target_t
*target
= get_current_target(cmd_ctx
);
1944 count
= strtoul(args
[1], NULL
, 0);
1946 address
= strtoul(args
[0], NULL
, 0);
1952 size
= 4; line_modulo
= line_bytecnt
/ 4;
1955 size
= 2; line_modulo
= line_bytecnt
/ 2;
1958 size
= 1; line_modulo
= line_bytecnt
/ 1;
1964 buffer
= calloc(count
, size
);
1965 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1966 if (retval
== ERROR_OK
)
1970 for (i
= 0; i
< count
; i
++)
1972 if (i
%line_modulo
== 0)
1973 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
1978 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
1981 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
1984 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
1988 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
1990 command_print(cmd_ctx
, output
);
1996 LOG_ERROR("Failure examining memory");
2004 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2011 target_t
*target
= get_current_target(cmd_ctx
);
2014 if ((argc
< 2) || (argc
> 3))
2015 return ERROR_COMMAND_SYNTAX_ERROR
;
2017 address
= strtoul(args
[0], NULL
, 0);
2018 value
= strtoul(args
[1], NULL
, 0);
2020 count
= strtoul(args
[2], NULL
, 0);
2027 target_buffer_set_u32(target
, value_buf
, value
);
2031 target_buffer_set_u16(target
, value_buf
, value
);
2035 value_buf
[0] = value
;
2038 return ERROR_COMMAND_SYNTAX_ERROR
;
2040 for (i
=0; i
<count
; i
++)
2046 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
2049 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
2052 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
2057 if (retval
!=ERROR_OK
)
2067 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2077 duration_t duration
;
2078 char *duration_text
;
2080 target_t
*target
= get_current_target(cmd_ctx
);
2084 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
2088 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
2091 image
.base_address_set
= 1;
2092 image
.base_address
= strtoul(args
[1], NULL
, 0);
2096 image
.base_address_set
= 0;
2099 image
.start_address_set
= 0;
2101 duration_start_measure(&duration
);
2103 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
2110 for (i
= 0; i
< image
.num_sections
; i
++)
2112 buffer
= malloc(image
.sections
[i
].size
);
2115 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2119 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2124 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
2129 image_size
+= buf_cnt
;
2130 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
2135 duration_stop_measure(&duration
, &duration_text
);
2136 if (retval
==ERROR_OK
)
2138 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
2140 free(duration_text
);
2142 image_close(&image
);
2148 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2155 int retval
=ERROR_OK
;
2157 duration_t duration
;
2158 char *duration_text
;
2160 target_t
*target
= get_current_target(cmd_ctx
);
2164 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2168 address
= strtoul(args
[1], NULL
, 0);
2169 size
= strtoul(args
[2], NULL
, 0);
2171 if ((address
& 3) || (size
& 3))
2173 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2177 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2182 duration_start_measure(&duration
);
2187 u32 this_run_size
= (size
> 560) ? 560 : size
;
2189 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2190 if (retval
!= ERROR_OK
)
2195 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2196 if (retval
!= ERROR_OK
)
2201 size
-= this_run_size
;
2202 address
+= this_run_size
;
2205 fileio_close(&fileio
);
2207 duration_stop_measure(&duration
, &duration_text
);
2208 if (retval
==ERROR_OK
)
2210 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2212 free(duration_text
);
2217 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2225 u32 mem_checksum
= 0;
2229 duration_t duration
;
2230 char *duration_text
;
2232 target_t
*target
= get_current_target(cmd_ctx
);
2236 return ERROR_COMMAND_SYNTAX_ERROR
;
2241 LOG_ERROR("no target selected");
2245 duration_start_measure(&duration
);
2249 image
.base_address_set
= 1;
2250 image
.base_address
= strtoul(args
[1], NULL
, 0);
2254 image
.base_address_set
= 0;
2255 image
.base_address
= 0x0;
2258 image
.start_address_set
= 0;
2260 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2267 for (i
= 0; i
< image
.num_sections
; i
++)
2269 buffer
= malloc(image
.sections
[i
].size
);
2272 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2275 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2281 /* calculate checksum of image */
2282 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2284 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2285 if( retval
!= ERROR_OK
)
2291 if( checksum
!= mem_checksum
)
2293 /* failed crc checksum, fall back to a binary compare */
2296 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2298 data
= (u8
*)malloc(buf_cnt
);
2300 /* Can we use 32bit word accesses? */
2302 int count
= buf_cnt
;
2303 if ((count
% 4) == 0)
2308 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2309 if (retval
== ERROR_OK
)
2312 for (t
= 0; t
< buf_cnt
; t
++)
2314 if (data
[t
] != buffer
[t
])
2316 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
]);
2329 image_size
+= buf_cnt
;
2332 duration_stop_measure(&duration
, &duration_text
);
2333 if (retval
==ERROR_OK
)
2335 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2337 free(duration_text
);
2339 image_close(&image
);
2344 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2347 target_t
*target
= get_current_target(cmd_ctx
);
2351 breakpoint_t
*breakpoint
= target
->breakpoints
;
2355 if (breakpoint
->type
== BKPT_SOFT
)
2357 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2358 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2363 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2365 breakpoint
= breakpoint
->next
;
2373 length
= strtoul(args
[1], NULL
, 0);
2376 if (strcmp(args
[2], "hw") == 0)
2379 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2381 LOG_ERROR("Failure setting breakpoints");
2385 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2390 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2396 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2398 target_t
*target
= get_current_target(cmd_ctx
);
2401 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2406 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2408 target_t
*target
= get_current_target(cmd_ctx
);
2413 watchpoint_t
*watchpoint
= target
->watchpoints
;
2417 command_print(cmd_ctx
, "address: 0x%8.8x, mask: 0x%8.8x, r/w/a: %i, value: 0x%8.8x, mask: 0x%8.8x", watchpoint
->address
, watchpoint
->length
, watchpoint
->rw
, watchpoint
->value
, watchpoint
->mask
);
2418 watchpoint
= watchpoint
->next
;
2423 enum watchpoint_rw type
= WPT_ACCESS
;
2424 u32 data_value
= 0x0;
2425 u32 data_mask
= 0xffffffff;
2441 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2447 data_value
= strtoul(args
[3], NULL
, 0);
2451 data_mask
= strtoul(args
[4], NULL
, 0);
2454 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2455 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2457 LOG_ERROR("Failure setting breakpoints");
2462 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2468 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2470 target_t
*target
= get_current_target(cmd_ctx
);
2473 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2478 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2481 target_t
*target
= get_current_target(cmd_ctx
);
2487 return ERROR_COMMAND_SYNTAX_ERROR
;
2489 va
= strtoul(args
[0], NULL
, 0);
2491 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2492 if (retval
== ERROR_OK
)
2494 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2498 /* lower levels will have logged a detailed error which is
2499 * forwarded to telnet/GDB session.
2504 static void writeLong(FILE *f
, int l
)
2509 char c
=(l
>>(i
*8))&0xff;
2510 fwrite(&c
, 1, 1, f
);
2514 static void writeString(FILE *f
, char *s
)
2516 fwrite(s
, 1, strlen(s
), f
);
2521 // Dump a gmon.out histogram file.
2522 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2525 FILE *f
=fopen(filename
, "w");
2528 fwrite("gmon", 1, 4, f
);
2529 writeLong(f
, 0x00000001); // Version
2530 writeLong(f
, 0); // padding
2531 writeLong(f
, 0); // padding
2532 writeLong(f
, 0); // padding
2534 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2536 // figure out bucket size
2539 for (i
=0; i
<sampleNum
; i
++)
2551 int addressSpace
=(max
-min
+1);
2553 static int const maxBuckets
=256*1024; // maximum buckets.
2554 int length
=addressSpace
;
2555 if (length
> maxBuckets
)
2559 int *buckets
=malloc(sizeof(int)*length
);
2565 memset(buckets
, 0, sizeof(int)*length
);
2566 for (i
=0; i
<sampleNum
;i
++)
2568 u32 address
=samples
[i
];
2569 long long a
=address
-min
;
2570 long long b
=length
-1;
2571 long long c
=addressSpace
-1;
2572 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2576 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2577 writeLong(f
, min
); // low_pc
2578 writeLong(f
, max
); // high_pc
2579 writeLong(f
, length
); // # of samples
2580 writeLong(f
, 64000000); // 64MHz
2581 writeString(f
, "seconds");
2582 for (i
=0; i
<(15-strlen("seconds")); i
++)
2584 fwrite("", 1, 1, f
); // padding
2586 writeString(f
, "s");
2588 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2590 char *data
=malloc(2*length
);
2593 for (i
=0; i
<length
;i
++)
2602 data
[i
*2+1]=(val
>>8)&0xff;
2605 fwrite(data
, 1, length
*2, f
);
2615 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2616 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2618 target_t
*target
= get_current_target(cmd_ctx
);
2619 struct timeval timeout
, now
;
2621 gettimeofday(&timeout
, NULL
);
2624 return ERROR_COMMAND_SYNTAX_ERROR
;
2627 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2633 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2635 static const int maxSample
=10000;
2636 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2641 int retval
=ERROR_OK
;
2642 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2643 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2647 target_poll(target
);
2648 if (target
->state
== TARGET_HALTED
)
2650 u32 t
=*((u32
*)reg
->value
);
2651 samples
[numSamples
++]=t
;
2652 retval
= target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2653 target_poll(target
);
2654 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2655 } else if (target
->state
== TARGET_RUNNING
)
2657 // We want to quickly sample the PC.
2658 target_halt(target
);
2661 command_print(cmd_ctx
, "Target not halted or running");
2665 if (retval
!=ERROR_OK
)
2670 gettimeofday(&now
, NULL
);
2671 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2673 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2674 target_poll(target
);
2675 if (target
->state
== TARGET_HALTED
)
2677 target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2679 target_poll(target
);
2680 writeGmon(samples
, numSamples
, args
[1]);
2681 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)