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 /* allocate memory for each unique target type */
1407 (*last_target_p
)->type
= (target_type_t
*)malloc(sizeof(target_type_t
));
1408 *((*last_target_p
)->type
) = *target_types
[i
];
1410 if (strcmp(args
[1], "big") == 0)
1411 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1412 else if (strcmp(args
[1], "little") == 0)
1413 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1416 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1417 return ERROR_COMMAND_SYNTAX_ERROR
;
1420 /* what to do on a target reset */
1421 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1422 if (strcmp(args
[2], "reset_halt") == 0)
1423 (*last_target_p
)->reset_mode
= RESET_HALT
;
1424 else if (strcmp(args
[2], "reset_run") == 0)
1425 (*last_target_p
)->reset_mode
= RESET_RUN
;
1426 else if (strcmp(args
[2], "reset_init") == 0)
1427 (*last_target_p
)->reset_mode
= RESET_INIT
;
1428 else if (strcmp(args
[2], "run_and_halt") == 0)
1429 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1430 else if (strcmp(args
[2], "run_and_init") == 0)
1431 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1434 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1438 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1440 (*last_target_p
)->reset_script
= NULL
;
1441 (*last_target_p
)->pre_reset_script
= NULL
;
1442 (*last_target_p
)->post_halt_script
= NULL
;
1443 (*last_target_p
)->pre_resume_script
= NULL
;
1444 (*last_target_p
)->gdb_program_script
= NULL
;
1446 (*last_target_p
)->working_area
= 0x0;
1447 (*last_target_p
)->working_area_size
= 0x0;
1448 (*last_target_p
)->working_areas
= NULL
;
1449 (*last_target_p
)->backup_working_area
= 0;
1451 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1452 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1453 (*last_target_p
)->reg_cache
= NULL
;
1454 (*last_target_p
)->breakpoints
= NULL
;
1455 (*last_target_p
)->watchpoints
= NULL
;
1456 (*last_target_p
)->next
= NULL
;
1457 (*last_target_p
)->arch_info
= NULL
;
1459 /* initialize trace information */
1460 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1461 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1462 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1463 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1464 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1465 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1466 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1467 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1469 (*last_target_p
)->dbgmsg
= NULL
;
1470 (*last_target_p
)->dbg_msg_enabled
= 0;
1472 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1480 /* no matching target found */
1483 LOG_ERROR("target '%s' not found", args
[0]);
1484 return ERROR_COMMAND_SYNTAX_ERROR
;
1490 /* usage: target_script <target#> <event> <script_file> */
1491 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1493 target_t
*target
= NULL
;
1497 LOG_ERROR("incomplete target_script command");
1498 return ERROR_COMMAND_SYNTAX_ERROR
;
1501 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1505 return ERROR_COMMAND_SYNTAX_ERROR
;
1508 if ((strcmp(args
[1], "reset") == 0)||(strcmp(args
[1], "post_reset") == 0))
1510 if (target
->reset_script
)
1511 free(target
->reset_script
);
1512 target
->reset_script
= strdup(args
[2]);
1514 else if (strcmp(args
[1], "pre_reset") == 0)
1516 if (target
->pre_reset_script
)
1517 free(target
->pre_reset_script
);
1518 target
->pre_reset_script
= strdup(args
[2]);
1520 else if (strcmp(args
[1], "post_halt") == 0)
1522 if (target
->post_halt_script
)
1523 free(target
->post_halt_script
);
1524 target
->post_halt_script
= strdup(args
[2]);
1526 else if (strcmp(args
[1], "pre_resume") == 0)
1528 if (target
->pre_resume_script
)
1529 free(target
->pre_resume_script
);
1530 target
->pre_resume_script
= strdup(args
[2]);
1532 else if (strcmp(args
[1], "gdb_program_config") == 0)
1534 if (target
->gdb_program_script
)
1535 free(target
->gdb_program_script
);
1536 target
->gdb_program_script
= strdup(args
[2]);
1540 LOG_ERROR("unknown event type: '%s", args
[1]);
1541 return ERROR_COMMAND_SYNTAX_ERROR
;
1547 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1549 target_t
*target
= NULL
;
1553 return ERROR_COMMAND_SYNTAX_ERROR
;
1556 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1559 return ERROR_COMMAND_SYNTAX_ERROR
;
1562 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1567 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1569 target_t
*target
= NULL
;
1571 if ((argc
< 4) || (argc
> 5))
1573 return ERROR_COMMAND_SYNTAX_ERROR
;
1576 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1579 return ERROR_COMMAND_SYNTAX_ERROR
;
1581 target_free_all_working_areas(target
);
1583 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1586 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1588 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1590 if (strcmp(args
[3], "backup") == 0)
1592 target
->backup_working_area
= 1;
1594 else if (strcmp(args
[3], "nobackup") == 0)
1596 target
->backup_working_area
= 0;
1600 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1601 return ERROR_COMMAND_SYNTAX_ERROR
;
1608 /* process target state changes */
1609 int handle_target(void *priv
)
1611 target_t
*target
= targets
;
1615 if (target_continous_poll
)
1617 /* polling may fail silently until the target has been examined */
1618 target_poll(target
);
1621 target
= target
->next
;
1627 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1636 target
= get_current_target(cmd_ctx
);
1638 /* list all available registers for the current target */
1641 reg_cache_t
*cache
= target
->reg_cache
;
1647 for (i
= 0; i
< cache
->num_regs
; i
++)
1649 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1650 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
);
1653 cache
= cache
->next
;
1659 /* access a single register by its ordinal number */
1660 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1662 int num
= strtoul(args
[0], NULL
, 0);
1663 reg_cache_t
*cache
= target
->reg_cache
;
1669 for (i
= 0; i
< cache
->num_regs
; i
++)
1673 reg
= &cache
->reg_list
[i
];
1679 cache
= cache
->next
;
1684 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1687 } else /* access a single register by its name */
1689 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1693 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1698 /* display a register */
1699 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1701 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1704 if (reg
->valid
== 0)
1706 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1707 if (arch_type
== NULL
)
1709 LOG_ERROR("BUG: encountered unregistered arch type");
1712 arch_type
->get(reg
);
1714 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1715 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1720 /* set register value */
1723 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1724 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1726 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1727 if (arch_type
== NULL
)
1729 LOG_ERROR("BUG: encountered unregistered arch type");
1733 arch_type
->set(reg
, buf
);
1735 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1736 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1744 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1749 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1751 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1753 target_t
*target
= get_current_target(cmd_ctx
);
1757 target_poll(target
);
1758 target_arch_state(target
);
1762 if (strcmp(args
[0], "on") == 0)
1764 target_continous_poll
= 1;
1766 else if (strcmp(args
[0], "off") == 0)
1768 target_continous_poll
= 0;
1772 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1780 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1788 ms
= strtoul(args
[0], &end
, 0) * 1000;
1791 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1796 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1799 static void target_process_events(struct command_context_s
*cmd_ctx
)
1801 target_t
*target
= get_current_target(cmd_ctx
);
1802 target_poll(target
);
1803 target_call_timer_callbacks_now();
1806 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1809 struct timeval timeout
, now
;
1811 gettimeofday(&timeout
, NULL
);
1812 timeval_add_time(&timeout
, 0, ms
* 1000);
1814 target_t
*target
= get_current_target(cmd_ctx
);
1817 if ((retval
=target_poll(target
))!=ERROR_OK
)
1819 target_call_timer_callbacks_now();
1820 if (target
->state
== state
)
1827 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1830 gettimeofday(&now
, NULL
);
1831 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1833 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1841 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1844 target_t
*target
= get_current_target(cmd_ctx
);
1848 if ((retval
= target_halt(target
)) != ERROR_OK
)
1853 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1857 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1859 target_t
*target
= get_current_target(cmd_ctx
);
1861 LOG_USER("requesting target halt and executing a soft reset");
1863 target
->type
->soft_reset_halt(target
);
1868 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1870 target_t
*target
= get_current_target(cmd_ctx
);
1871 enum target_reset_mode reset_mode
= target
->reset_mode
;
1872 enum target_reset_mode save
= target
->reset_mode
;
1878 if (strcmp("run", args
[0]) == 0)
1879 reset_mode
= RESET_RUN
;
1880 else if (strcmp("halt", args
[0]) == 0)
1881 reset_mode
= RESET_HALT
;
1882 else if (strcmp("init", args
[0]) == 0)
1883 reset_mode
= RESET_INIT
;
1884 else if (strcmp("run_and_halt", args
[0]) == 0)
1886 reset_mode
= RESET_RUN_AND_HALT
;
1889 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1892 else if (strcmp("run_and_init", args
[0]) == 0)
1894 reset_mode
= RESET_RUN_AND_INIT
;
1897 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1902 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1907 /* temporarily modify mode of current reset target */
1908 target
->reset_mode
= reset_mode
;
1910 /* reset *all* targets */
1911 target_process_reset(cmd_ctx
);
1913 /* Restore default reset mode for this target */
1914 target
->reset_mode
= save
;
1919 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1922 target_t
*target
= get_current_target(cmd_ctx
);
1925 retval
= target_resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1927 retval
= target_resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1930 return ERROR_COMMAND_SYNTAX_ERROR
;
1933 target_process_events(cmd_ctx
);
1938 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1940 target_t
*target
= get_current_target(cmd_ctx
);
1945 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1948 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1953 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1955 const int line_bytecnt
= 32;
1968 target_t
*target
= get_current_target(cmd_ctx
);
1974 count
= strtoul(args
[1], NULL
, 0);
1976 address
= strtoul(args
[0], NULL
, 0);
1982 size
= 4; line_modulo
= line_bytecnt
/ 4;
1985 size
= 2; line_modulo
= line_bytecnt
/ 2;
1988 size
= 1; line_modulo
= line_bytecnt
/ 1;
1994 buffer
= calloc(count
, size
);
1995 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1996 if (retval
== ERROR_OK
)
2000 for (i
= 0; i
< count
; i
++)
2002 if (i
%line_modulo
== 0)
2003 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
2008 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
2011 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
2014 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
2018 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
2020 command_print(cmd_ctx
, output
);
2026 LOG_ERROR("Failure examining memory");
2034 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2041 target_t
*target
= get_current_target(cmd_ctx
);
2044 if ((argc
< 2) || (argc
> 3))
2045 return ERROR_COMMAND_SYNTAX_ERROR
;
2047 address
= strtoul(args
[0], NULL
, 0);
2048 value
= strtoul(args
[1], NULL
, 0);
2050 count
= strtoul(args
[2], NULL
, 0);
2057 target_buffer_set_u32(target
, value_buf
, value
);
2061 target_buffer_set_u16(target
, value_buf
, value
);
2065 value_buf
[0] = value
;
2068 return ERROR_COMMAND_SYNTAX_ERROR
;
2070 for (i
=0; i
<count
; i
++)
2076 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
2079 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
2082 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
2087 if (retval
!=ERROR_OK
)
2097 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2107 duration_t duration
;
2108 char *duration_text
;
2110 target_t
*target
= get_current_target(cmd_ctx
);
2114 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
2118 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
2121 image
.base_address_set
= 1;
2122 image
.base_address
= strtoul(args
[1], NULL
, 0);
2126 image
.base_address_set
= 0;
2129 image
.start_address_set
= 0;
2131 duration_start_measure(&duration
);
2133 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
2140 for (i
= 0; i
< image
.num_sections
; i
++)
2142 buffer
= malloc(image
.sections
[i
].size
);
2145 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2149 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2154 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
2159 image_size
+= buf_cnt
;
2160 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
2165 duration_stop_measure(&duration
, &duration_text
);
2166 if (retval
==ERROR_OK
)
2168 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
2170 free(duration_text
);
2172 image_close(&image
);
2178 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2185 int retval
=ERROR_OK
;
2187 duration_t duration
;
2188 char *duration_text
;
2190 target_t
*target
= get_current_target(cmd_ctx
);
2194 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2198 address
= strtoul(args
[1], NULL
, 0);
2199 size
= strtoul(args
[2], NULL
, 0);
2201 if ((address
& 3) || (size
& 3))
2203 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2207 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2212 duration_start_measure(&duration
);
2217 u32 this_run_size
= (size
> 560) ? 560 : size
;
2219 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2220 if (retval
!= ERROR_OK
)
2225 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2226 if (retval
!= ERROR_OK
)
2231 size
-= this_run_size
;
2232 address
+= this_run_size
;
2235 fileio_close(&fileio
);
2237 duration_stop_measure(&duration
, &duration_text
);
2238 if (retval
==ERROR_OK
)
2240 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2242 free(duration_text
);
2247 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2255 u32 mem_checksum
= 0;
2259 duration_t duration
;
2260 char *duration_text
;
2262 target_t
*target
= get_current_target(cmd_ctx
);
2266 return ERROR_COMMAND_SYNTAX_ERROR
;
2271 LOG_ERROR("no target selected");
2275 duration_start_measure(&duration
);
2279 image
.base_address_set
= 1;
2280 image
.base_address
= strtoul(args
[1], NULL
, 0);
2284 image
.base_address_set
= 0;
2285 image
.base_address
= 0x0;
2288 image
.start_address_set
= 0;
2290 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2297 for (i
= 0; i
< image
.num_sections
; i
++)
2299 buffer
= malloc(image
.sections
[i
].size
);
2302 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2305 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2311 /* calculate checksum of image */
2312 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2314 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2315 if( retval
!= ERROR_OK
)
2321 if( checksum
!= mem_checksum
)
2323 /* failed crc checksum, fall back to a binary compare */
2326 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2328 data
= (u8
*)malloc(buf_cnt
);
2330 /* Can we use 32bit word accesses? */
2332 int count
= buf_cnt
;
2333 if ((count
% 4) == 0)
2338 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2339 if (retval
== ERROR_OK
)
2342 for (t
= 0; t
< buf_cnt
; t
++)
2344 if (data
[t
] != buffer
[t
])
2346 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
]);
2359 image_size
+= buf_cnt
;
2362 duration_stop_measure(&duration
, &duration_text
);
2363 if (retval
==ERROR_OK
)
2365 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2367 free(duration_text
);
2369 image_close(&image
);
2374 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2377 target_t
*target
= get_current_target(cmd_ctx
);
2381 breakpoint_t
*breakpoint
= target
->breakpoints
;
2385 if (breakpoint
->type
== BKPT_SOFT
)
2387 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2388 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2393 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2395 breakpoint
= breakpoint
->next
;
2403 length
= strtoul(args
[1], NULL
, 0);
2406 if (strcmp(args
[2], "hw") == 0)
2409 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2411 LOG_ERROR("Failure setting breakpoints");
2415 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2420 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2426 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2428 target_t
*target
= get_current_target(cmd_ctx
);
2431 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2436 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2438 target_t
*target
= get_current_target(cmd_ctx
);
2443 watchpoint_t
*watchpoint
= target
->watchpoints
;
2447 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
);
2448 watchpoint
= watchpoint
->next
;
2453 enum watchpoint_rw type
= WPT_ACCESS
;
2454 u32 data_value
= 0x0;
2455 u32 data_mask
= 0xffffffff;
2471 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2477 data_value
= strtoul(args
[3], NULL
, 0);
2481 data_mask
= strtoul(args
[4], NULL
, 0);
2484 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2485 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2487 LOG_ERROR("Failure setting breakpoints");
2492 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2498 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2500 target_t
*target
= get_current_target(cmd_ctx
);
2503 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2508 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2511 target_t
*target
= get_current_target(cmd_ctx
);
2517 return ERROR_COMMAND_SYNTAX_ERROR
;
2519 va
= strtoul(args
[0], NULL
, 0);
2521 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2522 if (retval
== ERROR_OK
)
2524 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2528 /* lower levels will have logged a detailed error which is
2529 * forwarded to telnet/GDB session.
2534 static void writeLong(FILE *f
, int l
)
2539 char c
=(l
>>(i
*8))&0xff;
2540 fwrite(&c
, 1, 1, f
);
2544 static void writeString(FILE *f
, char *s
)
2546 fwrite(s
, 1, strlen(s
), f
);
2551 // Dump a gmon.out histogram file.
2552 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2555 FILE *f
=fopen(filename
, "w");
2558 fwrite("gmon", 1, 4, f
);
2559 writeLong(f
, 0x00000001); // Version
2560 writeLong(f
, 0); // padding
2561 writeLong(f
, 0); // padding
2562 writeLong(f
, 0); // padding
2564 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2566 // figure out bucket size
2569 for (i
=0; i
<sampleNum
; i
++)
2581 int addressSpace
=(max
-min
+1);
2583 static int const maxBuckets
=256*1024; // maximum buckets.
2584 int length
=addressSpace
;
2585 if (length
> maxBuckets
)
2589 int *buckets
=malloc(sizeof(int)*length
);
2595 memset(buckets
, 0, sizeof(int)*length
);
2596 for (i
=0; i
<sampleNum
;i
++)
2598 u32 address
=samples
[i
];
2599 long long a
=address
-min
;
2600 long long b
=length
-1;
2601 long long c
=addressSpace
-1;
2602 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2606 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2607 writeLong(f
, min
); // low_pc
2608 writeLong(f
, max
); // high_pc
2609 writeLong(f
, length
); // # of samples
2610 writeLong(f
, 64000000); // 64MHz
2611 writeString(f
, "seconds");
2612 for (i
=0; i
<(15-strlen("seconds")); i
++)
2614 fwrite("", 1, 1, f
); // padding
2616 writeString(f
, "s");
2618 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2620 char *data
=malloc(2*length
);
2623 for (i
=0; i
<length
;i
++)
2632 data
[i
*2+1]=(val
>>8)&0xff;
2635 fwrite(data
, 1, length
*2, f
);
2645 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2646 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2648 target_t
*target
= get_current_target(cmd_ctx
);
2649 struct timeval timeout
, now
;
2651 gettimeofday(&timeout
, NULL
);
2654 return ERROR_COMMAND_SYNTAX_ERROR
;
2657 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2663 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2665 static const int maxSample
=10000;
2666 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2671 int retval
=ERROR_OK
;
2672 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2673 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2677 target_poll(target
);
2678 if (target
->state
== TARGET_HALTED
)
2680 u32 t
=*((u32
*)reg
->value
);
2681 samples
[numSamples
++]=t
;
2682 retval
= target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2683 target_poll(target
);
2684 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2685 } else if (target
->state
== TARGET_RUNNING
)
2687 // We want to quickly sample the PC.
2688 target_halt(target
);
2691 command_print(cmd_ctx
, "Target not halted or running");
2695 if (retval
!=ERROR_OK
)
2700 gettimeofday(&now
, NULL
);
2701 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2703 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2704 target_poll(target
);
2705 if (target
->state
== TARGET_HALTED
)
2707 target_resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2709 target_poll(target
);
2710 writeGmon(samples
, numSamples
, args
[1]);
2711 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)