1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
24 #include "replacements.h"
26 #include "target_request.h"
29 #include "configuration.h"
30 #include "binarybuffer.h"
37 #include <sys/types.h>
45 #include <time_support.h>
50 int cli_target_callback_event_handler(struct target_s
*target
, enum target_event event
, void *priv
);
53 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
54 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
56 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
57 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
58 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
60 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
61 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
62 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
63 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
64 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
65 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
66 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
67 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
68 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
69 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
70 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
71 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
72 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
73 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
74 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
75 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
76 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
77 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
);
78 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
82 extern target_type_t arm7tdmi_target
;
83 extern target_type_t arm720t_target
;
84 extern target_type_t arm9tdmi_target
;
85 extern target_type_t arm920t_target
;
86 extern target_type_t arm966e_target
;
87 extern target_type_t arm926ejs_target
;
88 extern target_type_t feroceon_target
;
89 extern target_type_t xscale_target
;
90 extern target_type_t cortexm3_target
;
91 extern target_type_t arm11_target
;
93 target_type_t
*target_types
[] =
108 target_t
*targets
= NULL
;
109 target_event_callback_t
*target_event_callbacks
= NULL
;
110 target_timer_callback_t
*target_timer_callbacks
= NULL
;
112 char *target_state_strings
[] =
121 char *target_debug_reason_strings
[] =
123 "debug request", "breakpoint", "watchpoint",
124 "watchpoint and breakpoint", "single step",
125 "target not halted", "undefined"
128 char *target_endianess_strings
[] =
134 static int target_continous_poll
= 1;
136 /* read a u32 from a buffer in target memory endianness */
137 u32
target_buffer_get_u32(target_t
*target
, u8
*buffer
)
139 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
140 return le_to_h_u32(buffer
);
142 return be_to_h_u32(buffer
);
145 /* read a u16 from a buffer in target memory endianness */
146 u16
target_buffer_get_u16(target_t
*target
, u8
*buffer
)
148 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
149 return le_to_h_u16(buffer
);
151 return be_to_h_u16(buffer
);
154 /* write a u32 to a buffer in target memory endianness */
155 void target_buffer_set_u32(target_t
*target
, u8
*buffer
, u32 value
)
157 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
158 h_u32_to_le(buffer
, value
);
160 h_u32_to_be(buffer
, value
);
163 /* write a u16 to a buffer in target memory endianness */
164 void target_buffer_set_u16(target_t
*target
, u8
*buffer
, u16 value
)
166 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
167 h_u16_to_le(buffer
, value
);
169 h_u16_to_be(buffer
, value
);
172 /* returns a pointer to the n-th configured target */
173 target_t
* get_target_by_num(int num
)
175 target_t
*target
= targets
;
182 target
= target
->next
;
189 int get_num_by_target(target_t
*query_target
)
191 target_t
*target
= targets
;
196 if (target
== query_target
)
198 target
= target
->next
;
205 target_t
* get_current_target(command_context_t
*cmd_ctx
)
207 target_t
*target
= get_target_by_num(cmd_ctx
->current_target
);
211 LOG_ERROR("BUG: current_target out of bounds");
218 static void execute_script(struct command_context_s
*cmd_ctx
, char *reset_script
)
220 if (reset_script
==NULL
)
223 script
= open_file_from_path(reset_script
, "r");
226 LOG_ERROR("couldn't open script file %s", reset_script
);
230 LOG_INFO("executing script '%s'", reset_script
);
231 command_run_file(cmd_ctx
, script
, COMMAND_EXEC
);
235 /* Process target initialization, when target entered debug out of reset
236 * the handler is unregistered at the end of this function, so it's only called once
238 int target_init_handler(struct target_s
*target
, enum target_event event
, void *priv
)
240 struct command_context_s
*cmd_ctx
= priv
;
242 if (event
== TARGET_EVENT_HALTED
)
244 target_unregister_event_callback(target_init_handler
, priv
);
246 execute_script(cmd_ctx
, target
->reset_script
);
248 jtag_execute_queue();
254 int target_run_and_halt_handler(void *priv
)
256 target_t
*target
= priv
;
263 int target_poll(struct target_s
*target
)
265 /* We can't poll until after examine */
266 if (!target
->type
->examined
)
268 /* Fail silently lest we pollute the log */
271 return target
->type
->poll(target
);
274 int target_halt(struct target_s
*target
)
276 /* We can't poll until after examine */
277 if (!target
->type
->examined
)
279 LOG_ERROR("Target not examined yet");
282 return target
->type
->halt(target
);
285 int target_resume(struct target_s
*target
, int current
, u32 address
, int handle_breakpoints
, int debug_execution
)
287 /* We can't poll until after examine */
288 if (!target
->type
->examined
)
290 LOG_ERROR("Target not examined yet");
293 return target
->type
->resume(target
, current
, address
, handle_breakpoints
, debug_execution
);
297 int target_process_reset(struct command_context_s
*cmd_ctx
)
299 int retval
= ERROR_OK
;
301 struct timeval timeout
, now
;
303 jtag
->speed(jtag_speed
);
308 execute_script(cmd_ctx
, target
->pre_reset_script
);
309 target
= target
->next
;
312 if ((retval
= jtag_init_reset(cmd_ctx
)) != ERROR_OK
)
315 /* First time this is executed after launching OpenOCD, it will read out
316 * the type of CPU, etc. and init Embedded ICE registers in host
319 * It will also set up ICE registers in the target.
321 * However, if we assert TRST later, we need to set up the registers again.
323 * For the "reset halt/init" case we must only set up the registers here.
325 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
328 /* prepare reset_halt where necessary */
332 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
334 switch (target
->reset_mode
)
337 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_halt\"");
338 target
->reset_mode
= RESET_RUN_AND_HALT
;
341 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_init\"");
342 target
->reset_mode
= RESET_RUN_AND_INIT
;
348 target
= target
->next
;
354 /* we have no idea what state the target is in, so we
355 * have to drop working areas
357 target_free_all_working_areas_restore(target
, 0);
358 target
->type
->assert_reset(target
);
359 target
= target
->next
;
361 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
363 LOG_WARNING("JTAG communication failed asserting reset.");
367 /* request target halt if necessary, and schedule further action */
371 switch (target
->reset_mode
)
374 /* nothing to do if target just wants to be run */
376 case RESET_RUN_AND_HALT
:
378 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
380 case RESET_RUN_AND_INIT
:
382 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
383 target_register_event_callback(target_init_handler
, cmd_ctx
);
390 target_register_event_callback(target_init_handler
, cmd_ctx
);
393 LOG_ERROR("BUG: unknown target->reset_mode");
395 target
= target
->next
;
398 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
400 LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
407 target
->type
->deassert_reset(target
);
408 target
= target
->next
;
411 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
413 LOG_WARNING("JTAG communication failed while deasserting reset.");
417 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
419 /* If TRST was asserted we need to set up registers again */
420 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
425 LOG_DEBUG("Waiting for halted stated as approperiate");
427 /* Wait for reset to complete, maximum 5 seconds. */
428 gettimeofday(&timeout
, NULL
);
429 timeval_add_time(&timeout
, 5, 0);
432 gettimeofday(&now
, NULL
);
434 target_call_timer_callbacks_now();
439 LOG_DEBUG("Polling target");
441 if ((target
->reset_mode
== RESET_RUN_AND_INIT
) ||
442 (target
->reset_mode
== RESET_RUN_AND_HALT
) ||
443 (target
->reset_mode
== RESET_HALT
) ||
444 (target
->reset_mode
== RESET_INIT
))
446 if (target
->state
!= TARGET_HALTED
)
448 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
450 LOG_USER("Timed out waiting for halt after reset");
453 /* this will send alive messages on e.g. GDB remote protocol. */
455 LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/
459 target
= target
->next
;
461 /* All targets we're waiting for are halted */
469 /* We want any events to be processed before the prompt */
470 target_call_timer_callbacks_now();
472 /* if we timed out we need to unregister these handlers */
476 target_unregister_timer_callback(target_run_and_halt_handler
, target
);
477 target
= target
->next
;
479 target_unregister_event_callback(target_init_handler
, cmd_ctx
);
482 jtag
->speed(jtag_speed_post_reset
);
487 static int default_virt2phys(struct target_s
*target
, u32
virtual, u32
*physical
)
493 static int default_mmu(struct target_s
*target
, int *enabled
)
499 static int default_examine(struct command_context_s
*cmd_ctx
, struct target_s
*target
)
501 target
->type
->examined
= 1;
506 /* Targets that correctly implement init+examine, i.e.
507 * no communication with target during init:
511 int target_examine(struct command_context_s
*cmd_ctx
)
513 int retval
= ERROR_OK
;
514 target_t
*target
= targets
;
517 if ((retval
= target
->type
->examine(cmd_ctx
, target
))!=ERROR_OK
)
519 target
= target
->next
;
524 static int target_write_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
526 if (!target
->type
->examined
)
528 LOG_ERROR("Target not examined yet");
531 return target
->type
->write_memory_imp(target
, address
, size
, count
, buffer
);
534 static int target_read_memory_imp(struct target_s
*target
, u32 address
, u32 size
, u32 count
, u8
*buffer
)
536 if (!target
->type
->examined
)
538 LOG_ERROR("Target not examined yet");
541 return target
->type
->read_memory_imp(target
, address
, size
, count
, buffer
);
544 static int target_soft_reset_halt_imp(struct target_s
*target
)
546 if (!target
->type
->examined
)
548 LOG_ERROR("Target not examined yet");
551 return target
->type
->soft_reset_halt_imp(target
);
554 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
)
556 if (!target
->type
->examined
)
558 LOG_ERROR("Target not examined yet");
561 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
);
564 int target_init(struct command_context_s
*cmd_ctx
)
566 target_t
*target
= targets
;
570 target
->type
->examined
= 0;
571 if (target
->type
->examine
== NULL
)
573 target
->type
->examine
= default_examine
;
576 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
578 LOG_ERROR("target '%s' init failed", target
->type
->name
);
582 /* Set up default functions if none are provided by target */
583 if (target
->type
->virt2phys
== NULL
)
585 target
->type
->virt2phys
= default_virt2phys
;
587 target
->type
->virt2phys
= default_virt2phys
;
588 /* a non-invasive way(in terms of patches) to add some code that
589 * runs before the type->write/read_memory implementation
591 target
->type
->write_memory_imp
= target
->type
->write_memory
;
592 target
->type
->write_memory
= target_write_memory_imp
;
593 target
->type
->read_memory_imp
= target
->type
->read_memory
;
594 target
->type
->read_memory
= target_read_memory_imp
;
595 target
->type
->soft_reset_halt_imp
= target
->type
->soft_reset_halt
;
596 target
->type
->soft_reset_halt
= target_soft_reset_halt_imp
;
597 target
->type
->run_algorithm_imp
= target
->type
->run_algorithm
;
598 target
->type
->run_algorithm
= target_run_algorithm_imp
;
601 if (target
->type
->mmu
== NULL
)
603 target
->type
->mmu
= default_mmu
;
605 target
= target
->next
;
610 target_register_user_commands(cmd_ctx
);
611 target_register_timer_callback(handle_target
, 100, 1, NULL
);
617 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
619 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
621 if (callback
== NULL
)
623 return ERROR_INVALID_ARGUMENTS
;
628 while ((*callbacks_p
)->next
)
629 callbacks_p
= &((*callbacks_p
)->next
);
630 callbacks_p
= &((*callbacks_p
)->next
);
633 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
634 (*callbacks_p
)->callback
= callback
;
635 (*callbacks_p
)->priv
= priv
;
636 (*callbacks_p
)->next
= NULL
;
641 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
643 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
646 if (callback
== NULL
)
648 return ERROR_INVALID_ARGUMENTS
;
653 while ((*callbacks_p
)->next
)
654 callbacks_p
= &((*callbacks_p
)->next
);
655 callbacks_p
= &((*callbacks_p
)->next
);
658 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
659 (*callbacks_p
)->callback
= callback
;
660 (*callbacks_p
)->periodic
= periodic
;
661 (*callbacks_p
)->time_ms
= time_ms
;
663 gettimeofday(&now
, NULL
);
664 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
665 time_ms
-= (time_ms
% 1000);
666 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
667 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
669 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
670 (*callbacks_p
)->when
.tv_sec
+= 1;
673 (*callbacks_p
)->priv
= priv
;
674 (*callbacks_p
)->next
= NULL
;
679 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
681 target_event_callback_t
**p
= &target_event_callbacks
;
682 target_event_callback_t
*c
= target_event_callbacks
;
684 if (callback
== NULL
)
686 return ERROR_INVALID_ARGUMENTS
;
691 target_event_callback_t
*next
= c
->next
;
692 if ((c
->callback
== callback
) && (c
->priv
== priv
))
706 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
708 target_timer_callback_t
**p
= &target_timer_callbacks
;
709 target_timer_callback_t
*c
= target_timer_callbacks
;
711 if (callback
== NULL
)
713 return ERROR_INVALID_ARGUMENTS
;
718 target_timer_callback_t
*next
= c
->next
;
719 if ((c
->callback
== callback
) && (c
->priv
== priv
))
733 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
735 target_event_callback_t
*callback
= target_event_callbacks
;
736 target_event_callback_t
*next_callback
;
738 LOG_DEBUG("target event %i", event
);
742 next_callback
= callback
->next
;
743 callback
->callback(target
, event
, callback
->priv
);
744 callback
= next_callback
;
750 static int target_call_timer_callbacks_check_time(int checktime
)
752 target_timer_callback_t
*callback
= target_timer_callbacks
;
753 target_timer_callback_t
*next_callback
;
756 gettimeofday(&now
, NULL
);
760 next_callback
= callback
->next
;
762 if ((!checktime
&&callback
->periodic
)||
763 (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
764 || (now
.tv_sec
> callback
->when
.tv_sec
)))
766 if(callback
->callback
!= NULL
)
768 callback
->callback(callback
->priv
);
769 if (callback
->periodic
)
771 int time_ms
= callback
->time_ms
;
772 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
773 time_ms
-= (time_ms
% 1000);
774 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
775 if (callback
->when
.tv_usec
> 1000000)
777 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
778 callback
->when
.tv_sec
+= 1;
782 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
786 callback
= next_callback
;
792 int target_call_timer_callbacks()
794 return target_call_timer_callbacks_check_time(1);
797 /* invoke periodic callbacks immediately */
798 int target_call_timer_callbacks_now()
800 return target_call_timer_callbacks(0);
804 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
806 working_area_t
*c
= target
->working_areas
;
807 working_area_t
*new_wa
= NULL
;
809 /* Reevaluate working area address based on MMU state*/
810 if (target
->working_areas
== NULL
)
814 retval
= target
->type
->mmu(target
, &enabled
);
815 if (retval
!= ERROR_OK
)
821 target
->working_area
= target
->working_area_virt
;
825 target
->working_area
= target
->working_area_phys
;
829 /* only allocate multiples of 4 byte */
832 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
833 size
= CEIL(size
, 4);
836 /* see if there's already a matching working area */
839 if ((c
->free
) && (c
->size
== size
))
847 /* if not, allocate a new one */
850 working_area_t
**p
= &target
->working_areas
;
851 u32 first_free
= target
->working_area
;
852 u32 free_size
= target
->working_area_size
;
854 LOG_DEBUG("allocating new working area");
856 c
= target
->working_areas
;
859 first_free
+= c
->size
;
860 free_size
-= c
->size
;
865 if (free_size
< size
)
867 LOG_WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
868 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
871 new_wa
= malloc(sizeof(working_area_t
));
874 new_wa
->address
= first_free
;
876 if (target
->backup_working_area
)
878 new_wa
->backup
= malloc(new_wa
->size
);
879 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
883 new_wa
->backup
= NULL
;
886 /* put new entry in list */
890 /* mark as used, and return the new (reused) area */
900 int target_free_working_area_restore(struct target_s
*target
, working_area_t
*area
, int restore
)
905 if (restore
&&target
->backup_working_area
)
906 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
910 /* mark user pointer invalid */
917 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
919 return target_free_working_area_restore(target
, area
, 1);
922 int target_free_all_working_areas_restore(struct target_s
*target
, int restore
)
924 working_area_t
*c
= target
->working_areas
;
928 working_area_t
*next
= c
->next
;
929 target_free_working_area_restore(target
, c
, restore
);
939 target
->working_areas
= NULL
;
944 int target_free_all_working_areas(struct target_s
*target
)
946 return target_free_all_working_areas_restore(target
, 1);
949 int target_register_commands(struct command_context_s
*cmd_ctx
)
951 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
952 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
953 register_command(cmd_ctx
, NULL
, "target_script", handle_target_script_command
, COMMAND_CONFIG
, 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 (*last_target_p
)->type
= target_types
[i
];
1408 if (strcmp(args
[1], "big") == 0)
1409 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1410 else if (strcmp(args
[1], "little") == 0)
1411 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1414 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1415 return ERROR_COMMAND_SYNTAX_ERROR
;
1418 /* what to do on a target reset */
1419 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1420 if (strcmp(args
[2], "reset_halt") == 0)
1421 (*last_target_p
)->reset_mode
= RESET_HALT
;
1422 else if (strcmp(args
[2], "reset_run") == 0)
1423 (*last_target_p
)->reset_mode
= RESET_RUN
;
1424 else if (strcmp(args
[2], "reset_init") == 0)
1425 (*last_target_p
)->reset_mode
= RESET_INIT
;
1426 else if (strcmp(args
[2], "run_and_halt") == 0)
1427 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1428 else if (strcmp(args
[2], "run_and_init") == 0)
1429 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1432 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1436 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1438 (*last_target_p
)->reset_script
= NULL
;
1439 (*last_target_p
)->pre_reset_script
= NULL
;
1440 (*last_target_p
)->post_halt_script
= NULL
;
1441 (*last_target_p
)->pre_resume_script
= NULL
;
1442 (*last_target_p
)->gdb_program_script
= NULL
;
1444 (*last_target_p
)->working_area
= 0x0;
1445 (*last_target_p
)->working_area_size
= 0x0;
1446 (*last_target_p
)->working_areas
= NULL
;
1447 (*last_target_p
)->backup_working_area
= 0;
1449 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1450 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1451 (*last_target_p
)->reg_cache
= NULL
;
1452 (*last_target_p
)->breakpoints
= NULL
;
1453 (*last_target_p
)->watchpoints
= NULL
;
1454 (*last_target_p
)->next
= NULL
;
1455 (*last_target_p
)->arch_info
= NULL
;
1457 /* initialize trace information */
1458 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1459 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1460 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1461 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1462 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1463 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1464 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1465 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1467 (*last_target_p
)->dbgmsg
= NULL
;
1468 (*last_target_p
)->dbg_msg_enabled
= 0;
1470 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1478 /* no matching target found */
1481 LOG_ERROR("target '%s' not found", args
[0]);
1482 return ERROR_COMMAND_SYNTAX_ERROR
;
1488 /* usage: target_script <target#> <event> <script_file> */
1489 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1491 target_t
*target
= NULL
;
1495 LOG_ERROR("incomplete target_script command");
1496 return ERROR_COMMAND_SYNTAX_ERROR
;
1499 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1503 return ERROR_COMMAND_SYNTAX_ERROR
;
1506 if ((strcmp(args
[1], "reset") == 0)||(strcmp(args
[1], "post_reset") == 0))
1508 if (target
->reset_script
)
1509 free(target
->reset_script
);
1510 target
->reset_script
= strdup(args
[2]);
1512 else if (strcmp(args
[1], "pre_reset") == 0)
1514 if (target
->pre_reset_script
)
1515 free(target
->pre_reset_script
);
1516 target
->pre_reset_script
= strdup(args
[2]);
1518 else if (strcmp(args
[1], "post_halt") == 0)
1520 if (target
->post_halt_script
)
1521 free(target
->post_halt_script
);
1522 target
->post_halt_script
= strdup(args
[2]);
1524 else if (strcmp(args
[1], "pre_resume") == 0)
1526 if (target
->pre_resume_script
)
1527 free(target
->pre_resume_script
);
1528 target
->pre_resume_script
= strdup(args
[2]);
1530 else if (strcmp(args
[1], "gdb_program_config") == 0)
1532 if (target
->gdb_program_script
)
1533 free(target
->gdb_program_script
);
1534 target
->gdb_program_script
= strdup(args
[2]);
1538 LOG_ERROR("unknown event type: '%s", args
[1]);
1539 return ERROR_COMMAND_SYNTAX_ERROR
;
1545 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1547 target_t
*target
= NULL
;
1551 return ERROR_COMMAND_SYNTAX_ERROR
;
1554 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1557 return ERROR_COMMAND_SYNTAX_ERROR
;
1560 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1565 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1567 target_t
*target
= NULL
;
1569 if ((argc
< 4) || (argc
> 5))
1571 return ERROR_COMMAND_SYNTAX_ERROR
;
1574 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1577 return ERROR_COMMAND_SYNTAX_ERROR
;
1579 target_free_all_working_areas(target
);
1581 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1584 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1586 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1588 if (strcmp(args
[3], "backup") == 0)
1590 target
->backup_working_area
= 1;
1592 else if (strcmp(args
[3], "nobackup") == 0)
1594 target
->backup_working_area
= 0;
1598 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1599 return ERROR_COMMAND_SYNTAX_ERROR
;
1606 /* process target state changes */
1607 int handle_target(void *priv
)
1609 target_t
*target
= targets
;
1613 if (target_continous_poll
)
1615 /* polling may fail silently until the target has been examined */
1616 target_poll(target
);
1619 target
= target
->next
;
1625 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1634 target
= get_current_target(cmd_ctx
);
1636 /* list all available registers for the current target */
1639 reg_cache_t
*cache
= target
->reg_cache
;
1645 for (i
= 0; i
< cache
->num_regs
; i
++)
1647 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1648 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
);
1651 cache
= cache
->next
;
1657 /* access a single register by its ordinal number */
1658 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1660 int num
= strtoul(args
[0], NULL
, 0);
1661 reg_cache_t
*cache
= target
->reg_cache
;
1667 for (i
= 0; i
< cache
->num_regs
; i
++)
1671 reg
= &cache
->reg_list
[i
];
1677 cache
= cache
->next
;
1682 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1685 } else /* access a single register by its name */
1687 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1691 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1696 /* display a register */
1697 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1699 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1702 if (reg
->valid
== 0)
1704 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1705 if (arch_type
== NULL
)
1707 LOG_ERROR("BUG: encountered unregistered arch type");
1710 arch_type
->get(reg
);
1712 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1713 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1718 /* set register value */
1721 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1722 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1724 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1725 if (arch_type
== NULL
)
1727 LOG_ERROR("BUG: encountered unregistered arch type");
1731 arch_type
->set(reg
, buf
);
1733 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1734 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1742 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1747 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1749 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1751 target_t
*target
= get_current_target(cmd_ctx
);
1755 target_poll(target
);
1756 target_arch_state(target
);
1760 if (strcmp(args
[0], "on") == 0)
1762 target_continous_poll
= 1;
1764 else if (strcmp(args
[0], "off") == 0)
1766 target_continous_poll
= 0;
1770 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1778 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1786 ms
= strtoul(args
[0], &end
, 0) * 1000;
1789 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1794 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1797 static void target_process_events(struct command_context_s
*cmd_ctx
)
1799 target_t
*target
= get_current_target(cmd_ctx
);
1800 target_poll(target
);
1801 target_call_timer_callbacks_now();
1804 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1807 struct timeval timeout
, now
;
1809 gettimeofday(&timeout
, NULL
);
1810 timeval_add_time(&timeout
, 0, ms
* 1000);
1812 target_t
*target
= get_current_target(cmd_ctx
);
1815 if ((retval
=target_poll(target
))!=ERROR_OK
)
1817 target_call_timer_callbacks_now();
1818 if (target
->state
== state
)
1825 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1828 gettimeofday(&now
, NULL
);
1829 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1831 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1839 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1842 target_t
*target
= get_current_target(cmd_ctx
);
1846 if ((retval
= target_halt(target
)) != ERROR_OK
)
1851 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1855 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1857 target_t
*target
= get_current_target(cmd_ctx
);
1859 LOG_USER("requesting target halt and executing a soft reset");
1861 target
->type
->soft_reset_halt(target
);
1866 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1868 target_t
*target
= get_current_target(cmd_ctx
);
1869 enum target_reset_mode reset_mode
= target
->reset_mode
;
1870 enum target_reset_mode save
= target
->reset_mode
;
1876 if (strcmp("run", args
[0]) == 0)
1877 reset_mode
= RESET_RUN
;
1878 else if (strcmp("halt", args
[0]) == 0)
1879 reset_mode
= RESET_HALT
;
1880 else if (strcmp("init", args
[0]) == 0)
1881 reset_mode
= RESET_INIT
;
1882 else if (strcmp("run_and_halt", args
[0]) == 0)
1884 reset_mode
= RESET_RUN_AND_HALT
;
1887 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1890 else if (strcmp("run_and_init", args
[0]) == 0)
1892 reset_mode
= RESET_RUN_AND_INIT
;
1895 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1900 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1905 /* temporarily modify mode of current reset target */
1906 target
->reset_mode
= reset_mode
;
1908 /* reset *all* targets */
1909 target_process_reset(cmd_ctx
);
1911 /* Restore default reset mode for this target */
1912 target
->reset_mode
= save
;
1917 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1920 target_t
*target
= get_current_target(cmd_ctx
);
1923 retval
= target_resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1925 retval
= target_resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1928 return ERROR_COMMAND_SYNTAX_ERROR
;
1931 target_process_events(cmd_ctx
);
1936 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1938 target_t
*target
= get_current_target(cmd_ctx
);
1943 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1946 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1951 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1953 const int line_bytecnt
= 32;
1966 target_t
*target
= get_current_target(cmd_ctx
);
1972 count
= strtoul(args
[1], NULL
, 0);
1974 address
= strtoul(args
[0], NULL
, 0);
1980 size
= 4; line_modulo
= line_bytecnt
/ 4;
1983 size
= 2; line_modulo
= line_bytecnt
/ 2;
1986 size
= 1; line_modulo
= line_bytecnt
/ 1;
1992 buffer
= calloc(count
, size
);
1993 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1994 if (retval
== ERROR_OK
)
1998 for (i
= 0; i
< count
; i
++)
2000 if (i
%line_modulo
== 0)
2001 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
2006 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
2009 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
2012 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
2016 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
2018 command_print(cmd_ctx
, output
);
2024 LOG_ERROR("Failure examining memory");
2032 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2039 target_t
*target
= get_current_target(cmd_ctx
);
2042 if ((argc
< 2) || (argc
> 3))
2043 return ERROR_COMMAND_SYNTAX_ERROR
;
2045 address
= strtoul(args
[0], NULL
, 0);
2046 value
= strtoul(args
[1], NULL
, 0);
2048 count
= strtoul(args
[2], NULL
, 0);
2055 target_buffer_set_u32(target
, value_buf
, value
);
2059 target_buffer_set_u16(target
, value_buf
, value
);
2063 value_buf
[0] = value
;
2066 return ERROR_COMMAND_SYNTAX_ERROR
;
2068 for (i
=0; i
<count
; i
++)
2074 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
2077 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
2080 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
2085 if (retval
!=ERROR_OK
)
2095 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2105 duration_t duration
;
2106 char *duration_text
;
2108 target_t
*target
= get_current_target(cmd_ctx
);
2112 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
2116 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
2119 image
.base_address_set
= 1;
2120 image
.base_address
= strtoul(args
[1], NULL
, 0);
2124 image
.base_address_set
= 0;
2127 image
.start_address_set
= 0;
2129 duration_start_measure(&duration
);
2131 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
2138 for (i
= 0; i
< image
.num_sections
; i
++)
2140 buffer
= malloc(image
.sections
[i
].size
);
2143 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2147 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2152 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
2157 image_size
+= buf_cnt
;
2158 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
2163 duration_stop_measure(&duration
, &duration_text
);
2164 if (retval
==ERROR_OK
)
2166 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
2168 free(duration_text
);
2170 image_close(&image
);
2176 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2183 int retval
=ERROR_OK
;
2185 duration_t duration
;
2186 char *duration_text
;
2188 target_t
*target
= get_current_target(cmd_ctx
);
2192 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2196 address
= strtoul(args
[1], NULL
, 0);
2197 size
= strtoul(args
[2], NULL
, 0);
2199 if ((address
& 3) || (size
& 3))
2201 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2205 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2210 duration_start_measure(&duration
);
2215 u32 this_run_size
= (size
> 560) ? 560 : size
;
2217 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2218 if (retval
!= ERROR_OK
)
2223 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2224 if (retval
!= ERROR_OK
)
2229 size
-= this_run_size
;
2230 address
+= this_run_size
;
2233 fileio_close(&fileio
);
2235 duration_stop_measure(&duration
, &duration_text
);
2236 if (retval
==ERROR_OK
)
2238 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2240 free(duration_text
);
2245 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2253 u32 mem_checksum
= 0;
2257 duration_t duration
;
2258 char *duration_text
;
2260 target_t
*target
= get_current_target(cmd_ctx
);
2264 return ERROR_COMMAND_SYNTAX_ERROR
;
2269 LOG_ERROR("no target selected");
2273 duration_start_measure(&duration
);
2277 image
.base_address_set
= 1;
2278 image
.base_address
= strtoul(args
[1], NULL
, 0);
2282 image
.base_address_set
= 0;
2283 image
.base_address
= 0x0;
2286 image
.start_address_set
= 0;
2288 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2295 for (i
= 0; i
< image
.num_sections
; i
++)
2297 buffer
= malloc(image
.sections
[i
].size
);
2300 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2303 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2309 /* calculate checksum of image */
2310 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2312 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2313 if( retval
!= ERROR_OK
)
2319 if( checksum
!= mem_checksum
)
2321 /* failed crc checksum, fall back to a binary compare */
2324 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2326 data
= (u8
*)malloc(buf_cnt
);
2328 /* Can we use 32bit word accesses? */
2330 int count
= buf_cnt
;
2331 if ((count
% 4) == 0)
2336 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2337 if (retval
== ERROR_OK
)
2340 for (t
= 0; t
< buf_cnt
; t
++)
2342 if (data
[t
] != buffer
[t
])
2344 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
]);
2357 image_size
+= buf_cnt
;
2360 duration_stop_measure(&duration
, &duration_text
);
2361 if (retval
==ERROR_OK
)
2363 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2365 free(duration_text
);
2367 image_close(&image
);
2372 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2375 target_t
*target
= get_current_target(cmd_ctx
);
2379 breakpoint_t
*breakpoint
= target
->breakpoints
;
2383 if (breakpoint
->type
== BKPT_SOFT
)
2385 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2386 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2391 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2393 breakpoint
= breakpoint
->next
;
2401 length
= strtoul(args
[1], NULL
, 0);
2404 if (strcmp(args
[2], "hw") == 0)
2407 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2409 LOG_ERROR("Failure setting breakpoints");
2413 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2418 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2424 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2426 target_t
*target
= get_current_target(cmd_ctx
);
2429 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2434 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2436 target_t
*target
= get_current_target(cmd_ctx
);
2441 watchpoint_t
*watchpoint
= target
->watchpoints
;
2445 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
);
2446 watchpoint
= watchpoint
->next
;
2451 enum watchpoint_rw type
= WPT_ACCESS
;
2452 u32 data_value
= 0x0;
2453 u32 data_mask
= 0xffffffff;
2469 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2475 data_value
= strtoul(args
[3], NULL
, 0);
2479 data_mask
= strtoul(args
[4], NULL
, 0);
2482 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2483 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2485 LOG_ERROR("Failure setting breakpoints");
2490 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2496 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2498 target_t
*target
= get_current_target(cmd_ctx
);
2501 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2506 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2509 target_t
*target
= get_current_target(cmd_ctx
);
2515 return ERROR_COMMAND_SYNTAX_ERROR
;
2517 va
= strtoul(args
[0], NULL
, 0);
2519 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2520 if (retval
== ERROR_OK
)
2522 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2526 /* lower levels will have logged a detailed error which is
2527 * forwarded to telnet/GDB session.
2532 static void writeLong(FILE *f
, int l
)
2537 char c
=(l
>>(i
*8))&0xff;
2538 fwrite(&c
, 1, 1, f
);
2542 static void writeString(FILE *f
, char *s
)
2544 fwrite(s
, 1, strlen(s
), f
);
2549 // Dump a gmon.out histogram file.
2550 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2553 FILE *f
=fopen(filename
, "w");
2556 fwrite("gmon", 1, 4, f
);
2557 writeLong(f
, 0x00000001); // Version
2558 writeLong(f
, 0); // padding
2559 writeLong(f
, 0); // padding
2560 writeLong(f
, 0); // padding
2562 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2564 // figure out bucket size
2567 for (i
=0; i
<sampleNum
; i
++)
2579 int addressSpace
=(max
-min
+1);
2581 static int const maxBuckets
=256*1024; // maximum buckets.
2582 int length
=addressSpace
;
2583 if (length
> maxBuckets
)
2587 int *buckets
=malloc(sizeof(int)*length
);
2593 memset(buckets
, 0, sizeof(int)*length
);
2594 for (i
=0; i
<sampleNum
;i
++)
2596 u32 address
=samples
[i
];
2597 long long a
=address
-min
;
2598 long long b
=length
-1;
2599 long long c
=addressSpace
-1;
2600 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2604 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2605 writeLong(f
, min
); // low_pc
2606 writeLong(f
, max
); // high_pc
2607 writeLong(f
, length
); // # of samples
2608 writeLong(f
, 64000000); // 64MHz
2609 writeString(f
, "seconds");
2610 for (i
=0; i
<(15-strlen("seconds")); i
++)
2612 fwrite("", 1, 1, f
); // padding
2614 writeString(f
, "s");
2616 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2618 char *data
=malloc(2*length
);
2621 for (i
=0; i
<length
;i
++)
2630 data
[i
*2+1]=(val
>>8)&0xff;
2633 fwrite(data
, 1, length
*2, f
);
2643 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2644 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2646 target_t
*target
= get_current_target(cmd_ctx
);
2647 struct timeval timeout
, now
;
2649 gettimeofday(&timeout
, NULL
);
2652 return ERROR_COMMAND_SYNTAX_ERROR
;
2655 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2661 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2663 static const int maxSample
=10000;
2664 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2669 int retval
=ERROR_OK
;
2670 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2671 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2675 target_poll(target
);
2676 if (target
->state
== TARGET_HALTED
)
2678 u32 t
=*((u32
*)reg
->value
);
2679 samples
[numSamples
++]=t
;
2680 retval
= target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2681 target_poll(target
);
2682 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2683 } else if (target
->state
== TARGET_RUNNING
)
2685 // We want to quickly sample the PC.
2686 target_halt(target
);
2689 command_print(cmd_ctx
, "Target not halted or running");
2693 if (retval
!=ERROR_OK
)
2698 gettimeofday(&now
, NULL
);
2699 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2701 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2702 target_poll(target
);
2703 if (target
->state
== TARGET_HALTED
)
2705 target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2707 target_poll(target
);
2708 writeGmon(samples
, numSamples
, args
[1]);
2709 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)