1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
24 #include "replacements.h"
26 #include "target_request.h"
29 #include "configuration.h"
30 #include "binarybuffer.h"
37 #include <sys/types.h>
45 #include <time_support.h>
50 int cli_target_callback_event_handler(struct target_s
*target
, enum target_event event
, void *priv
);
53 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
54 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
56 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
57 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
58 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
60 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
61 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
62 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
63 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
64 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
65 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
66 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
67 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
68 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
69 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
70 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
71 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
72 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
73 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
74 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
75 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
76 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
77 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
);
78 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
82 extern target_type_t arm7tdmi_target
;
83 extern target_type_t arm720t_target
;
84 extern target_type_t arm9tdmi_target
;
85 extern target_type_t arm920t_target
;
86 extern target_type_t arm966e_target
;
87 extern target_type_t arm926ejs_target
;
88 extern target_type_t feroceon_target
;
89 extern target_type_t xscale_target
;
90 extern target_type_t cortexm3_target
;
91 extern target_type_t arm11_target
;
93 target_type_t
*target_types
[] =
108 target_t
*targets
= NULL
;
109 target_event_callback_t
*target_event_callbacks
= NULL
;
110 target_timer_callback_t
*target_timer_callbacks
= NULL
;
112 char *target_state_strings
[] =
121 char *target_debug_reason_strings
[] =
123 "debug request", "breakpoint", "watchpoint",
124 "watchpoint and breakpoint", "single step",
125 "target not halted", "undefined"
128 char *target_endianess_strings
[] =
134 static int target_continous_poll
= 1;
136 /* read a u32 from a buffer in target memory endianness */
137 u32
target_buffer_get_u32(target_t
*target
, u8
*buffer
)
139 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
140 return le_to_h_u32(buffer
);
142 return be_to_h_u32(buffer
);
145 /* read a u16 from a buffer in target memory endianness */
146 u16
target_buffer_get_u16(target_t
*target
, u8
*buffer
)
148 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
149 return le_to_h_u16(buffer
);
151 return be_to_h_u16(buffer
);
154 /* write a u32 to a buffer in target memory endianness */
155 void target_buffer_set_u32(target_t
*target
, u8
*buffer
, u32 value
)
157 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
158 h_u32_to_le(buffer
, value
);
160 h_u32_to_be(buffer
, value
);
163 /* write a u16 to a buffer in target memory endianness */
164 void target_buffer_set_u16(target_t
*target
, u8
*buffer
, u16 value
)
166 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
167 h_u16_to_le(buffer
, value
);
169 h_u16_to_be(buffer
, value
);
172 /* returns a pointer to the n-th configured target */
173 target_t
* get_target_by_num(int num
)
175 target_t
*target
= targets
;
182 target
= target
->next
;
189 int get_num_by_target(target_t
*query_target
)
191 target_t
*target
= targets
;
196 if (target
== query_target
)
198 target
= target
->next
;
205 target_t
* get_current_target(command_context_t
*cmd_ctx
)
207 target_t
*target
= get_target_by_num(cmd_ctx
->current_target
);
211 LOG_ERROR("BUG: current_target out of bounds");
218 /* Process target initialization, when target entered debug out of reset
219 * the handler is unregistered at the end of this function, so it's only called once
221 int target_init_handler(struct target_s
*target
, enum target_event event
, void *priv
)
224 struct command_context_s
*cmd_ctx
= priv
;
226 if ((event
== TARGET_EVENT_HALTED
) && (target
->reset_script
))
228 target_unregister_event_callback(target_init_handler
, priv
);
230 script
= open_file_from_path(target
->reset_script
, "r");
233 LOG_ERROR("couldn't open script file %s", target
->reset_script
);
237 LOG_INFO("executing reset script '%s'", target
->reset_script
);
238 command_run_file(cmd_ctx
, script
, COMMAND_EXEC
);
241 jtag_execute_queue();
247 int target_run_and_halt_handler(void *priv
)
249 target_t
*target
= priv
;
251 target
->type
->halt(target
);
256 int target_process_reset(struct command_context_s
*cmd_ctx
)
258 int retval
= ERROR_OK
;
260 struct timeval timeout
, now
;
262 jtag
->speed(jtag_speed
);
264 if ((retval
= jtag_init_reset(cmd_ctx
)) != ERROR_OK
)
267 if ((retval
= target_examine(cmd_ctx
)) != ERROR_OK
)
270 /* prepare reset_halt where necessary */
274 if (jtag_reset_config
& RESET_SRST_PULLS_TRST
)
276 switch (target
->reset_mode
)
279 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_halt\"");
280 target
->reset_mode
= RESET_RUN_AND_HALT
;
283 command_print(cmd_ctx
, "nSRST pulls nTRST, falling back to \"reset run_and_init\"");
284 target
->reset_mode
= RESET_RUN_AND_INIT
;
290 target
= target
->next
;
296 /* we have no idea what state the target is in, so we
297 * have to drop working areas
299 target_free_all_working_areas_restore(target
, 0);
300 target
->type
->assert_reset(target
);
301 target
= target
->next
;
303 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
305 LOG_WARNING("JTAG communication failed asserting reset.");
309 /* request target halt if necessary, and schedule further action */
313 switch (target
->reset_mode
)
316 /* nothing to do if target just wants to be run */
318 case RESET_RUN_AND_HALT
:
320 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
322 case RESET_RUN_AND_INIT
:
324 target_register_timer_callback(target_run_and_halt_handler
, target
->run_and_halt_time
, 0, target
);
325 target_register_event_callback(target_init_handler
, cmd_ctx
);
328 target
->type
->halt(target
);
331 target
->type
->halt(target
);
332 target_register_event_callback(target_init_handler
, cmd_ctx
);
335 LOG_ERROR("BUG: unknown target->reset_mode");
337 target
= target
->next
;
340 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
342 LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
349 target
->type
->deassert_reset(target
);
350 target
= target
->next
;
353 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
355 LOG_WARNING("JTAG communication failed while deasserting reset.");
359 LOG_DEBUG("Waiting for halted stated as approperiate");
361 /* Wait for reset to complete, maximum 5 seconds. */
362 gettimeofday(&timeout
, NULL
);
363 timeval_add_time(&timeout
, 5, 0);
366 gettimeofday(&now
, NULL
);
368 target_call_timer_callbacks_now();
373 LOG_DEBUG("Polling target");
374 target
->type
->poll(target
);
375 if ((target
->reset_mode
== RESET_RUN_AND_INIT
) ||
376 (target
->reset_mode
== RESET_RUN_AND_HALT
) ||
377 (target
->reset_mode
== RESET_HALT
) ||
378 (target
->reset_mode
== RESET_INIT
))
380 if (target
->state
!= TARGET_HALTED
)
382 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
384 LOG_USER("Timed out waiting for halt after reset");
387 /* this will send alive messages on e.g. GDB remote protocol. */
389 LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/
393 target
= target
->next
;
395 /* All targets we're waiting for are halted */
403 /* We want any events to be processed before the prompt */
404 target_call_timer_callbacks_now();
406 /* if we timed out we need to unregister these handlers */
410 target_unregister_timer_callback(target_run_and_halt_handler
, target
);
411 target
= target
->next
;
413 target_unregister_event_callback(target_init_handler
, cmd_ctx
);
416 jtag
->speed(jtag_speed_post_reset
);
421 static int default_virt2phys(struct target_s
*target
, u32
virtual, u32
*physical
)
427 static int default_mmu(struct target_s
*target
, int *enabled
)
433 static int default_examine(struct command_context_s
*cmd_ctx
, struct target_s
*target
)
439 /* Targets that correctly implement init+examine, i.e.
440 * no communication with target during init:
444 int target_examine(struct command_context_s
*cmd_ctx
)
446 int retval
= ERROR_OK
;
447 target_t
*target
= targets
;
450 if ((retval
= target
->type
->examine(cmd_ctx
, target
))!=ERROR_OK
)
452 target
= target
->next
;
458 int target_init(struct command_context_s
*cmd_ctx
)
460 target_t
*target
= targets
;
464 target
->type
->examined
= 0;
465 if (target
->type
->examine
== NULL
)
467 target
->type
->examine
= default_examine
;
470 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
472 LOG_ERROR("target '%s' init failed", target
->type
->name
);
476 /* Set up default functions if none are provided by target */
477 if (target
->type
->virt2phys
== NULL
)
479 target
->type
->virt2phys
= default_virt2phys
;
481 if (target
->type
->mmu
== NULL
)
483 target
->type
->mmu
= default_mmu
;
485 target
= target
->next
;
490 target_register_user_commands(cmd_ctx
);
491 target_register_timer_callback(handle_target
, 100, 1, NULL
);
497 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
499 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
501 if (callback
== NULL
)
503 return ERROR_INVALID_ARGUMENTS
;
508 while ((*callbacks_p
)->next
)
509 callbacks_p
= &((*callbacks_p
)->next
);
510 callbacks_p
= &((*callbacks_p
)->next
);
513 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
514 (*callbacks_p
)->callback
= callback
;
515 (*callbacks_p
)->priv
= priv
;
516 (*callbacks_p
)->next
= NULL
;
521 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
523 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
526 if (callback
== NULL
)
528 return ERROR_INVALID_ARGUMENTS
;
533 while ((*callbacks_p
)->next
)
534 callbacks_p
= &((*callbacks_p
)->next
);
535 callbacks_p
= &((*callbacks_p
)->next
);
538 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
539 (*callbacks_p
)->callback
= callback
;
540 (*callbacks_p
)->periodic
= periodic
;
541 (*callbacks_p
)->time_ms
= time_ms
;
543 gettimeofday(&now
, NULL
);
544 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
545 time_ms
-= (time_ms
% 1000);
546 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
547 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
549 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
550 (*callbacks_p
)->when
.tv_sec
+= 1;
553 (*callbacks_p
)->priv
= priv
;
554 (*callbacks_p
)->next
= NULL
;
559 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
561 target_event_callback_t
**p
= &target_event_callbacks
;
562 target_event_callback_t
*c
= target_event_callbacks
;
564 if (callback
== NULL
)
566 return ERROR_INVALID_ARGUMENTS
;
571 target_event_callback_t
*next
= c
->next
;
572 if ((c
->callback
== callback
) && (c
->priv
== priv
))
586 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
588 target_timer_callback_t
**p
= &target_timer_callbacks
;
589 target_timer_callback_t
*c
= target_timer_callbacks
;
591 if (callback
== NULL
)
593 return ERROR_INVALID_ARGUMENTS
;
598 target_timer_callback_t
*next
= c
->next
;
599 if ((c
->callback
== callback
) && (c
->priv
== priv
))
613 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
615 target_event_callback_t
*callback
= target_event_callbacks
;
616 target_event_callback_t
*next_callback
;
618 LOG_DEBUG("target event %i", event
);
622 next_callback
= callback
->next
;
623 callback
->callback(target
, event
, callback
->priv
);
624 callback
= next_callback
;
630 static int target_call_timer_callbacks_check_time(int checktime
)
632 target_timer_callback_t
*callback
= target_timer_callbacks
;
633 target_timer_callback_t
*next_callback
;
636 gettimeofday(&now
, NULL
);
640 next_callback
= callback
->next
;
642 if ((!checktime
&&callback
->periodic
)||
643 (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
644 || (now
.tv_sec
> callback
->when
.tv_sec
)))
646 callback
->callback(callback
->priv
);
647 if (callback
->periodic
)
649 int time_ms
= callback
->time_ms
;
650 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
651 time_ms
-= (time_ms
% 1000);
652 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
653 if (callback
->when
.tv_usec
> 1000000)
655 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
656 callback
->when
.tv_sec
+= 1;
660 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
663 callback
= next_callback
;
669 int target_call_timer_callbacks()
671 return target_call_timer_callbacks_check_time(1);
674 /* invoke periodic callbacks immediately */
675 int target_call_timer_callbacks_now()
677 return target_call_timer_callbacks(0);
681 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
683 working_area_t
*c
= target
->working_areas
;
684 working_area_t
*new_wa
= NULL
;
686 /* Reevaluate working area address based on MMU state*/
687 if (target
->working_areas
== NULL
)
691 retval
= target
->type
->mmu(target
, &enabled
);
692 if (retval
!= ERROR_OK
)
698 target
->working_area
= target
->working_area_virt
;
702 target
->working_area
= target
->working_area_phys
;
706 /* only allocate multiples of 4 byte */
709 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
710 size
= CEIL(size
, 4);
713 /* see if there's already a matching working area */
716 if ((c
->free
) && (c
->size
== size
))
724 /* if not, allocate a new one */
727 working_area_t
**p
= &target
->working_areas
;
728 u32 first_free
= target
->working_area
;
729 u32 free_size
= target
->working_area_size
;
731 LOG_DEBUG("allocating new working area");
733 c
= target
->working_areas
;
736 first_free
+= c
->size
;
737 free_size
-= c
->size
;
742 if (free_size
< size
)
744 LOG_WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
745 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
748 new_wa
= malloc(sizeof(working_area_t
));
751 new_wa
->address
= first_free
;
753 if (target
->backup_working_area
)
755 new_wa
->backup
= malloc(new_wa
->size
);
756 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
760 new_wa
->backup
= NULL
;
763 /* put new entry in list */
767 /* mark as used, and return the new (reused) area */
777 int target_free_working_area_restore(struct target_s
*target
, working_area_t
*area
, int restore
)
782 if (restore
&&target
->backup_working_area
)
783 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
787 /* mark user pointer invalid */
794 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
796 return target_free_working_area_restore(target
, area
, 1);
799 int target_free_all_working_areas_restore(struct target_s
*target
, int restore
)
801 working_area_t
*c
= target
->working_areas
;
805 working_area_t
*next
= c
->next
;
806 target_free_working_area_restore(target
, c
, restore
);
816 target
->working_areas
= NULL
;
821 int target_free_all_working_areas(struct target_s
*target
)
823 return target_free_all_working_areas_restore(target
, 1);
826 int target_register_commands(struct command_context_s
*cmd_ctx
)
828 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
829 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
830 register_command(cmd_ctx
, NULL
, "target_script", handle_target_script_command
, COMMAND_CONFIG
, NULL
);
831 register_command(cmd_ctx
, NULL
, "run_and_halt_time", handle_run_and_halt_time_command
, COMMAND_CONFIG
, "<target> <run time ms>");
832 register_command(cmd_ctx
, NULL
, "working_area", handle_working_area_command
, COMMAND_ANY
, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
833 register_command(cmd_ctx
, NULL
, "virt2phys", handle_virt2phys_command
, COMMAND_ANY
, "virt2phys <virtual address>");
834 register_command(cmd_ctx
, NULL
, "profile", handle_profile_command
, COMMAND_EXEC
, "PRELIMINARY! - profile <seconds> <gmon.out>");
839 int target_arch_state(struct target_s
*target
)
844 LOG_USER("No target has been configured");
848 LOG_USER("target state: %s", target_state_strings
[target
->state
]);
850 if (target
->state
!=TARGET_HALTED
)
853 retval
=target
->type
->arch_state(target
);
857 /* Single aligned words are guaranteed to use 16 or 32 bit access
858 * mode respectively, otherwise data is handled as quickly as
861 int target_write_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
865 LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size
, address
);
867 if (((address
% 2) == 0) && (size
== 2))
869 return target
->type
->write_memory(target
, address
, 2, 1, buffer
);
872 /* handle unaligned head bytes */
875 int unaligned
= 4 - (address
% 4);
877 if (unaligned
> size
)
880 if ((retval
= target
->type
->write_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
884 address
+= unaligned
;
888 /* handle aligned words */
891 int aligned
= size
- (size
% 4);
893 /* use bulk writes above a certain limit. This may have to be changed */
896 if ((retval
= target
->type
->bulk_write_memory(target
, address
, aligned
/ 4, buffer
)) != ERROR_OK
)
901 if ((retval
= target
->type
->write_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
910 /* handle tail writes of less than 4 bytes */
913 if ((retval
= target
->type
->write_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
921 /* Single aligned words are guaranteed to use 16 or 32 bit access
922 * mode respectively, otherwise data is handled as quickly as
925 int target_read_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
929 LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size
, address
);
931 if (((address
% 2) == 0) && (size
== 2))
933 return target
->type
->read_memory(target
, address
, 2, 1, buffer
);
936 /* handle unaligned head bytes */
939 int unaligned
= 4 - (address
% 4);
941 if (unaligned
> size
)
944 if ((retval
= target
->type
->read_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
948 address
+= unaligned
;
952 /* handle aligned words */
955 int aligned
= size
- (size
% 4);
957 if ((retval
= target
->type
->read_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
965 /* handle tail writes of less than 4 bytes */
968 if ((retval
= target
->type
->read_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
975 int target_checksum_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* crc
)
982 if ((retval
= target
->type
->checksum_memory(target
, address
,
983 size
, &checksum
)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE
)
985 buffer
= malloc(size
);
988 LOG_ERROR("error allocating buffer for section (%d bytes)", size
);
989 return ERROR_INVALID_ARGUMENTS
;
991 retval
= target_read_buffer(target
, address
, size
, buffer
);
992 if (retval
!= ERROR_OK
)
998 /* convert to target endianess */
999 for (i
= 0; i
< (size
/sizeof(u32
)); i
++)
1002 target_data
= target_buffer_get_u32(target
, &buffer
[i
*sizeof(u32
)]);
1003 target_buffer_set_u32(target
, &buffer
[i
*sizeof(u32
)], target_data
);
1006 retval
= image_calculate_checksum( buffer
, size
, &checksum
);
1015 int target_read_u32(struct target_s
*target
, u32 address
, u32
*value
)
1019 int retval
= target
->type
->read_memory(target
, address
, 4, 1, value_buf
);
1021 if (retval
== ERROR_OK
)
1023 *value
= target_buffer_get_u32(target
, value_buf
);
1024 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, *value
);
1029 LOG_DEBUG("address: 0x%8.8x failed", address
);
1035 int target_read_u16(struct target_s
*target
, u32 address
, u16
*value
)
1039 int retval
= target
->type
->read_memory(target
, address
, 2, 1, value_buf
);
1041 if (retval
== ERROR_OK
)
1043 *value
= target_buffer_get_u16(target
, value_buf
);
1044 LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address
, *value
);
1049 LOG_DEBUG("address: 0x%8.8x failed", address
);
1055 int target_read_u8(struct target_s
*target
, u32 address
, u8
*value
)
1057 int retval
= target
->type
->read_memory(target
, address
, 1, 1, value
);
1059 if (retval
== ERROR_OK
)
1061 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, *value
);
1066 LOG_DEBUG("address: 0x%8.8x failed", address
);
1072 int target_write_u32(struct target_s
*target
, u32 address
, u32 value
)
1077 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1079 target_buffer_set_u32(target
, value_buf
, value
);
1080 if ((retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
)) != ERROR_OK
)
1082 LOG_DEBUG("failed: %i", retval
);
1088 int target_write_u16(struct target_s
*target
, u32 address
, u16 value
)
1093 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1095 target_buffer_set_u16(target
, value_buf
, value
);
1096 if ((retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
)) != ERROR_OK
)
1098 LOG_DEBUG("failed: %i", retval
);
1104 int target_write_u8(struct target_s
*target
, u32 address
, u8 value
)
1108 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, value
);
1110 if ((retval
= target
->type
->read_memory(target
, address
, 1, 1, &value
)) != ERROR_OK
)
1112 LOG_DEBUG("failed: %i", retval
);
1118 int target_register_user_commands(struct command_context_s
*cmd_ctx
)
1120 register_command(cmd_ctx
, NULL
, "reg", handle_reg_command
, COMMAND_EXEC
, NULL
);
1121 register_command(cmd_ctx
, NULL
, "poll", handle_poll_command
, COMMAND_EXEC
, "poll target state");
1122 register_command(cmd_ctx
, NULL
, "wait_halt", handle_wait_halt_command
, COMMAND_EXEC
, "wait for target halt [time (s)]");
1123 register_command(cmd_ctx
, NULL
, "halt", handle_halt_command
, COMMAND_EXEC
, "halt target");
1124 register_command(cmd_ctx
, NULL
, "resume", handle_resume_command
, COMMAND_EXEC
, "resume target [addr]");
1125 register_command(cmd_ctx
, NULL
, "step", handle_step_command
, COMMAND_EXEC
, "step one instruction from current PC or [addr]");
1126 register_command(cmd_ctx
, NULL
, "reset", handle_reset_command
, COMMAND_EXEC
, "reset target [run|halt|init|run_and_halt|run_and_init]");
1127 register_command(cmd_ctx
, NULL
, "soft_reset_halt", handle_soft_reset_halt_command
, COMMAND_EXEC
, "halt the target and do a soft reset");
1129 register_command(cmd_ctx
, NULL
, "mdw", handle_md_command
, COMMAND_EXEC
, "display memory words <addr> [count]");
1130 register_command(cmd_ctx
, NULL
, "mdh", handle_md_command
, COMMAND_EXEC
, "display memory half-words <addr> [count]");
1131 register_command(cmd_ctx
, NULL
, "mdb", handle_md_command
, COMMAND_EXEC
, "display memory bytes <addr> [count]");
1133 register_command(cmd_ctx
, NULL
, "mww", handle_mw_command
, COMMAND_EXEC
, "write memory word <addr> <value> [count]");
1134 register_command(cmd_ctx
, NULL
, "mwh", handle_mw_command
, COMMAND_EXEC
, "write memory half-word <addr> <value> [count]");
1135 register_command(cmd_ctx
, NULL
, "mwb", handle_mw_command
, COMMAND_EXEC
, "write memory byte <addr> <value> [count]");
1137 register_command(cmd_ctx
, NULL
, "bp", handle_bp_command
, COMMAND_EXEC
, "set breakpoint <address> <length> [hw]");
1138 register_command(cmd_ctx
, NULL
, "rbp", handle_rbp_command
, COMMAND_EXEC
, "remove breakpoint <adress>");
1139 register_command(cmd_ctx
, NULL
, "wp", handle_wp_command
, COMMAND_EXEC
, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
1140 register_command(cmd_ctx
, NULL
, "rwp", handle_rwp_command
, COMMAND_EXEC
, "remove watchpoint <adress>");
1142 register_command(cmd_ctx
, NULL
, "load_image", handle_load_image_command
, COMMAND_EXEC
, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1143 register_command(cmd_ctx
, NULL
, "dump_image", handle_dump_image_command
, COMMAND_EXEC
, "dump_image <file> <address> <size>");
1144 register_command(cmd_ctx
, NULL
, "verify_image", handle_verify_image_command
, COMMAND_EXEC
, "verify_image <file> [offset] [type]");
1145 register_command(cmd_ctx
, NULL
, "load_binary", handle_load_image_command
, COMMAND_EXEC
, "[DEPRECATED] load_binary <file> <address>");
1146 register_command(cmd_ctx
, NULL
, "dump_binary", handle_dump_image_command
, COMMAND_EXEC
, "[DEPRECATED] dump_binary <file> <address> <size>");
1148 target_request_register_commands(cmd_ctx
);
1149 trace_register_commands(cmd_ctx
);
1154 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1156 target_t
*target
= targets
;
1161 int num
= strtoul(args
[0], NULL
, 0);
1166 target
= target
->next
;
1170 cmd_ctx
->current_target
= num
;
1172 command_print(cmd_ctx
, "%i is out of bounds, only %i targets are configured", num
, count
);
1179 command_print(cmd_ctx
, "%i: %s (%s), state: %s", count
++, target
->type
->name
, target_endianess_strings
[target
->endianness
], target_state_strings
[target
->state
]);
1180 target
= target
->next
;
1186 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1193 return ERROR_COMMAND_SYNTAX_ERROR
;
1196 /* search for the specified target */
1197 if (args
[0] && (args
[0][0] != 0))
1199 for (i
= 0; target_types
[i
]; i
++)
1201 if (strcmp(args
[0], target_types
[i
]->name
) == 0)
1203 target_t
**last_target_p
= &targets
;
1205 /* register target specific commands */
1206 if (target_types
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1208 LOG_ERROR("couldn't register '%s' commands", args
[0]);
1214 while ((*last_target_p
)->next
)
1215 last_target_p
= &((*last_target_p
)->next
);
1216 last_target_p
= &((*last_target_p
)->next
);
1219 *last_target_p
= malloc(sizeof(target_t
));
1221 (*last_target_p
)->type
= target_types
[i
];
1223 if (strcmp(args
[1], "big") == 0)
1224 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1225 else if (strcmp(args
[1], "little") == 0)
1226 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1229 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1230 return ERROR_COMMAND_SYNTAX_ERROR
;
1233 /* what to do on a target reset */
1234 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1235 if (strcmp(args
[2], "reset_halt") == 0)
1236 (*last_target_p
)->reset_mode
= RESET_HALT
;
1237 else if (strcmp(args
[2], "reset_run") == 0)
1238 (*last_target_p
)->reset_mode
= RESET_RUN
;
1239 else if (strcmp(args
[2], "reset_init") == 0)
1240 (*last_target_p
)->reset_mode
= RESET_INIT
;
1241 else if (strcmp(args
[2], "run_and_halt") == 0)
1242 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1243 else if (strcmp(args
[2], "run_and_init") == 0)
1244 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1247 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1251 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1253 (*last_target_p
)->reset_script
= NULL
;
1254 (*last_target_p
)->post_halt_script
= NULL
;
1255 (*last_target_p
)->pre_resume_script
= NULL
;
1256 (*last_target_p
)->gdb_program_script
= NULL
;
1258 (*last_target_p
)->working_area
= 0x0;
1259 (*last_target_p
)->working_area_size
= 0x0;
1260 (*last_target_p
)->working_areas
= NULL
;
1261 (*last_target_p
)->backup_working_area
= 0;
1263 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1264 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1265 (*last_target_p
)->reg_cache
= NULL
;
1266 (*last_target_p
)->breakpoints
= NULL
;
1267 (*last_target_p
)->watchpoints
= NULL
;
1268 (*last_target_p
)->next
= NULL
;
1269 (*last_target_p
)->arch_info
= NULL
;
1271 /* initialize trace information */
1272 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1273 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1274 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1275 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1276 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1277 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1278 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1279 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1281 (*last_target_p
)->dbgmsg
= NULL
;
1282 (*last_target_p
)->dbg_msg_enabled
= 0;
1284 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1292 /* no matching target found */
1295 LOG_ERROR("target '%s' not found", args
[0]);
1296 return ERROR_COMMAND_SYNTAX_ERROR
;
1302 /* usage: target_script <target#> <event> <script_file> */
1303 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1305 target_t
*target
= NULL
;
1309 LOG_ERROR("incomplete target_script command");
1310 return ERROR_COMMAND_SYNTAX_ERROR
;
1313 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1317 return ERROR_COMMAND_SYNTAX_ERROR
;
1320 if (strcmp(args
[1], "reset") == 0)
1322 if (target
->reset_script
)
1323 free(target
->reset_script
);
1324 target
->reset_script
= strdup(args
[2]);
1326 else if (strcmp(args
[1], "post_halt") == 0)
1328 if (target
->post_halt_script
)
1329 free(target
->post_halt_script
);
1330 target
->post_halt_script
= strdup(args
[2]);
1332 else if (strcmp(args
[1], "pre_resume") == 0)
1334 if (target
->pre_resume_script
)
1335 free(target
->pre_resume_script
);
1336 target
->pre_resume_script
= strdup(args
[2]);
1338 else if (strcmp(args
[1], "gdb_program_config") == 0)
1340 if (target
->gdb_program_script
)
1341 free(target
->gdb_program_script
);
1342 target
->gdb_program_script
= strdup(args
[2]);
1346 LOG_ERROR("unknown event type: '%s", args
[1]);
1347 return ERROR_COMMAND_SYNTAX_ERROR
;
1353 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1355 target_t
*target
= NULL
;
1359 return ERROR_COMMAND_SYNTAX_ERROR
;
1362 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1365 return ERROR_COMMAND_SYNTAX_ERROR
;
1368 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1373 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1375 target_t
*target
= NULL
;
1377 if ((argc
< 4) || (argc
> 5))
1379 return ERROR_COMMAND_SYNTAX_ERROR
;
1382 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1385 return ERROR_COMMAND_SYNTAX_ERROR
;
1387 target_free_all_working_areas(target
);
1389 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1392 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1394 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1396 if (strcmp(args
[3], "backup") == 0)
1398 target
->backup_working_area
= 1;
1400 else if (strcmp(args
[3], "nobackup") == 0)
1402 target
->backup_working_area
= 0;
1406 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1407 return ERROR_COMMAND_SYNTAX_ERROR
;
1414 /* process target state changes */
1415 int handle_target(void *priv
)
1418 target_t
*target
= targets
;
1422 /* only poll if target isn't already halted */
1423 if (target
->state
!= TARGET_HALTED
)
1425 if (target_continous_poll
)
1426 if ((retval
= target
->type
->poll(target
)) != ERROR_OK
)
1428 LOG_ERROR("couldn't poll target(%d). It's due for a reset.", retval
);
1432 target
= target
->next
;
1438 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1447 target
= get_current_target(cmd_ctx
);
1449 /* list all available registers for the current target */
1452 reg_cache_t
*cache
= target
->reg_cache
;
1458 for (i
= 0; i
< cache
->num_regs
; i
++)
1460 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1461 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
);
1464 cache
= cache
->next
;
1470 /* access a single register by its ordinal number */
1471 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1473 int num
= strtoul(args
[0], NULL
, 0);
1474 reg_cache_t
*cache
= target
->reg_cache
;
1480 for (i
= 0; i
< cache
->num_regs
; i
++)
1484 reg
= &cache
->reg_list
[i
];
1490 cache
= cache
->next
;
1495 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1498 } else /* access a single register by its name */
1500 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1504 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1509 /* display a register */
1510 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1512 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1515 if (reg
->valid
== 0)
1517 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1518 if (arch_type
== NULL
)
1520 LOG_ERROR("BUG: encountered unregistered arch type");
1523 arch_type
->get(reg
);
1525 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1526 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1531 /* set register value */
1534 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1535 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1537 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1538 if (arch_type
== NULL
)
1540 LOG_ERROR("BUG: encountered unregistered arch type");
1544 arch_type
->set(reg
, buf
);
1546 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1547 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1555 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1560 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1562 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1564 target_t
*target
= get_current_target(cmd_ctx
);
1568 target
->type
->poll(target
);
1569 target_arch_state(target
);
1573 if (strcmp(args
[0], "on") == 0)
1575 target_continous_poll
= 1;
1577 else if (strcmp(args
[0], "off") == 0)
1579 target_continous_poll
= 0;
1583 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1591 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1599 ms
= strtoul(args
[0], &end
, 0) * 1000;
1602 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1607 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1610 static void target_process_events(struct command_context_s
*cmd_ctx
)
1612 target_t
*target
= get_current_target(cmd_ctx
);
1613 target
->type
->poll(target
);
1614 target_call_timer_callbacks_now();
1617 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1620 struct timeval timeout
, now
;
1622 gettimeofday(&timeout
, NULL
);
1623 timeval_add_time(&timeout
, 0, ms
* 1000);
1625 target_t
*target
= get_current_target(cmd_ctx
);
1628 if ((retval
=target
->type
->poll(target
))!=ERROR_OK
)
1630 target_call_timer_callbacks_now();
1631 if (target
->state
== state
)
1638 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1641 gettimeofday(&now
, NULL
);
1642 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1644 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1652 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1655 target_t
*target
= get_current_target(cmd_ctx
);
1659 if ((retval
= target
->type
->halt(target
)) != ERROR_OK
)
1664 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1668 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1670 target_t
*target
= get_current_target(cmd_ctx
);
1672 LOG_USER("requesting target halt and executing a soft reset");
1674 target
->type
->soft_reset_halt(target
);
1679 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1681 target_t
*target
= get_current_target(cmd_ctx
);
1682 enum target_reset_mode reset_mode
= target
->reset_mode
;
1683 enum target_reset_mode save
= target
->reset_mode
;
1689 if (strcmp("run", args
[0]) == 0)
1690 reset_mode
= RESET_RUN
;
1691 else if (strcmp("halt", args
[0]) == 0)
1692 reset_mode
= RESET_HALT
;
1693 else if (strcmp("init", args
[0]) == 0)
1694 reset_mode
= RESET_INIT
;
1695 else if (strcmp("run_and_halt", args
[0]) == 0)
1697 reset_mode
= RESET_RUN_AND_HALT
;
1700 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1703 else if (strcmp("run_and_init", args
[0]) == 0)
1705 reset_mode
= RESET_RUN_AND_INIT
;
1708 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1713 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1718 /* temporarily modify mode of current reset target */
1719 target
->reset_mode
= reset_mode
;
1721 /* reset *all* targets */
1722 target_process_reset(cmd_ctx
);
1724 /* Restore default reset mode for this target */
1725 target
->reset_mode
= save
;
1730 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1733 target_t
*target
= get_current_target(cmd_ctx
);
1736 retval
= target
->type
->resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1738 retval
= target
->type
->resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1741 return ERROR_COMMAND_SYNTAX_ERROR
;
1744 target_process_events(cmd_ctx
);
1749 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1751 target_t
*target
= get_current_target(cmd_ctx
);
1756 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1759 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1764 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1766 const int line_bytecnt
= 32;
1779 target_t
*target
= get_current_target(cmd_ctx
);
1785 count
= strtoul(args
[1], NULL
, 0);
1787 address
= strtoul(args
[0], NULL
, 0);
1793 size
= 4; line_modulo
= line_bytecnt
/ 4;
1796 size
= 2; line_modulo
= line_bytecnt
/ 2;
1799 size
= 1; line_modulo
= line_bytecnt
/ 1;
1805 buffer
= calloc(count
, size
);
1806 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1807 if (retval
== ERROR_OK
)
1811 for (i
= 0; i
< count
; i
++)
1813 if (i
%line_modulo
== 0)
1814 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
1819 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
1822 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
1825 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
1829 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
1831 command_print(cmd_ctx
, output
);
1837 LOG_ERROR("Failure examining memory");
1845 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1852 target_t
*target
= get_current_target(cmd_ctx
);
1855 if ((argc
< 2) || (argc
> 3))
1856 return ERROR_COMMAND_SYNTAX_ERROR
;
1858 address
= strtoul(args
[0], NULL
, 0);
1859 value
= strtoul(args
[1], NULL
, 0);
1861 count
= strtoul(args
[2], NULL
, 0);
1868 target_buffer_set_u32(target
, value_buf
, value
);
1872 target_buffer_set_u16(target
, value_buf
, value
);
1876 value_buf
[0] = value
;
1879 return ERROR_COMMAND_SYNTAX_ERROR
;
1881 for (i
=0; i
<count
; i
++)
1887 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
1890 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
1893 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
1898 if (retval
!=ERROR_OK
)
1908 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1918 duration_t duration
;
1919 char *duration_text
;
1921 target_t
*target
= get_current_target(cmd_ctx
);
1925 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
1929 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
1932 image
.base_address_set
= 1;
1933 image
.base_address
= strtoul(args
[1], NULL
, 0);
1937 image
.base_address_set
= 0;
1940 image
.start_address_set
= 0;
1942 duration_start_measure(&duration
);
1944 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
1951 for (i
= 0; i
< image
.num_sections
; i
++)
1953 buffer
= malloc(image
.sections
[i
].size
);
1956 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
1960 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
1965 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
1970 image_size
+= buf_cnt
;
1971 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
1976 duration_stop_measure(&duration
, &duration_text
);
1977 if (retval
==ERROR_OK
)
1979 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
1981 free(duration_text
);
1983 image_close(&image
);
1989 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1996 int retval
=ERROR_OK
;
1998 duration_t duration
;
1999 char *duration_text
;
2001 target_t
*target
= get_current_target(cmd_ctx
);
2005 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2009 address
= strtoul(args
[1], NULL
, 0);
2010 size
= strtoul(args
[2], NULL
, 0);
2012 if ((address
& 3) || (size
& 3))
2014 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2018 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2023 duration_start_measure(&duration
);
2028 u32 this_run_size
= (size
> 560) ? 560 : size
;
2030 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2031 if (retval
!= ERROR_OK
)
2036 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2037 if (retval
!= ERROR_OK
)
2042 size
-= this_run_size
;
2043 address
+= this_run_size
;
2046 fileio_close(&fileio
);
2048 duration_stop_measure(&duration
, &duration_text
);
2049 if (retval
==ERROR_OK
)
2051 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2053 free(duration_text
);
2058 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2066 u32 mem_checksum
= 0;
2070 duration_t duration
;
2071 char *duration_text
;
2073 target_t
*target
= get_current_target(cmd_ctx
);
2077 return ERROR_COMMAND_SYNTAX_ERROR
;
2082 LOG_ERROR("no target selected");
2086 duration_start_measure(&duration
);
2090 image
.base_address_set
= 1;
2091 image
.base_address
= strtoul(args
[1], NULL
, 0);
2095 image
.base_address_set
= 0;
2096 image
.base_address
= 0x0;
2099 image
.start_address_set
= 0;
2101 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2108 for (i
= 0; i
< image
.num_sections
; i
++)
2110 buffer
= malloc(image
.sections
[i
].size
);
2113 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2116 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2122 /* calculate checksum of image */
2123 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2125 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2126 if( retval
!= ERROR_OK
)
2132 if( checksum
!= mem_checksum
)
2134 /* failed crc checksum, fall back to a binary compare */
2137 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2139 data
= (u8
*)malloc(buf_cnt
);
2141 /* Can we use 32bit word accesses? */
2143 int count
= buf_cnt
;
2144 if ((count
% 4) == 0)
2149 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2150 if (retval
== ERROR_OK
)
2153 for (t
= 0; t
< buf_cnt
; t
++)
2155 if (data
[t
] != buffer
[t
])
2157 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
]);
2170 image_size
+= buf_cnt
;
2173 duration_stop_measure(&duration
, &duration_text
);
2174 if (retval
==ERROR_OK
)
2176 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2178 free(duration_text
);
2180 image_close(&image
);
2185 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2188 target_t
*target
= get_current_target(cmd_ctx
);
2192 breakpoint_t
*breakpoint
= target
->breakpoints
;
2196 if (breakpoint
->type
== BKPT_SOFT
)
2198 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2199 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2204 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2206 breakpoint
= breakpoint
->next
;
2214 length
= strtoul(args
[1], NULL
, 0);
2217 if (strcmp(args
[2], "hw") == 0)
2220 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2222 LOG_ERROR("Failure setting breakpoints");
2226 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2231 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2237 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2239 target_t
*target
= get_current_target(cmd_ctx
);
2242 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2247 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2249 target_t
*target
= get_current_target(cmd_ctx
);
2254 watchpoint_t
*watchpoint
= target
->watchpoints
;
2258 command_print(cmd_ctx
, "address: 0x%8.8x, mask: 0x%8.8x, r/w/a: %i, value: 0x%8.8x, mask: 0x%8.8x", watchpoint
->address
, watchpoint
->length
, watchpoint
->rw
, watchpoint
->value
, watchpoint
->mask
);
2259 watchpoint
= watchpoint
->next
;
2264 enum watchpoint_rw type
= WPT_ACCESS
;
2265 u32 data_value
= 0x0;
2266 u32 data_mask
= 0xffffffff;
2282 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2288 data_value
= strtoul(args
[3], NULL
, 0);
2292 data_mask
= strtoul(args
[4], NULL
, 0);
2295 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2296 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2298 LOG_ERROR("Failure setting breakpoints");
2303 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2309 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2311 target_t
*target
= get_current_target(cmd_ctx
);
2314 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2319 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2322 target_t
*target
= get_current_target(cmd_ctx
);
2328 return ERROR_COMMAND_SYNTAX_ERROR
;
2330 va
= strtoul(args
[0], NULL
, 0);
2332 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2333 if (retval
== ERROR_OK
)
2335 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2339 /* lower levels will have logged a detailed error which is
2340 * forwarded to telnet/GDB session.
2345 static void writeLong(FILE *f
, int l
)
2350 char c
=(l
>>(i
*8))&0xff;
2351 fwrite(&c
, 1, 1, f
);
2355 static void writeString(FILE *f
, char *s
)
2357 fwrite(s
, 1, strlen(s
), f
);
2362 // Dump a gmon.out histogram file.
2363 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2366 FILE *f
=fopen(filename
, "w");
2369 fwrite("gmon", 1, 4, f
);
2370 writeLong(f
, 0x00000001); // Version
2371 writeLong(f
, 0); // padding
2372 writeLong(f
, 0); // padding
2373 writeLong(f
, 0); // padding
2375 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2377 // figure out bucket size
2380 for (i
=0; i
<sampleNum
; i
++)
2392 int addressSpace
=(max
-min
+1);
2394 static int const maxBuckets
=256*1024; // maximum buckets.
2395 int length
=addressSpace
;
2396 if (length
> maxBuckets
)
2400 int *buckets
=malloc(sizeof(int)*length
);
2406 memset(buckets
, 0, sizeof(int)*length
);
2407 for (i
=0; i
<sampleNum
;i
++)
2409 u32 address
=samples
[i
];
2410 long long a
=address
-min
;
2411 long long b
=length
-1;
2412 long long c
=addressSpace
-1;
2413 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2417 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2418 writeLong(f
, min
); // low_pc
2419 writeLong(f
, max
); // high_pc
2420 writeLong(f
, length
); // # of samples
2421 writeLong(f
, 64000000); // 64MHz
2422 writeString(f
, "seconds");
2423 for (i
=0; i
<(15-strlen("seconds")); i
++)
2425 fwrite("", 1, 1, f
); // padding
2427 writeString(f
, "s");
2429 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2431 char *data
=malloc(2*length
);
2434 for (i
=0; i
<length
;i
++)
2443 data
[i
*2+1]=(val
>>8)&0xff;
2446 fwrite(data
, 1, length
*2, f
);
2456 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2457 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2459 target_t
*target
= get_current_target(cmd_ctx
);
2460 struct timeval timeout
, now
;
2462 gettimeofday(&timeout
, NULL
);
2465 return ERROR_COMMAND_SYNTAX_ERROR
;
2468 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2474 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2476 static const int maxSample
=10000;
2477 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2482 int retval
=ERROR_OK
;
2483 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2484 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2488 target
->type
->poll(target
);
2489 if (target
->state
== TARGET_HALTED
)
2491 u32 t
=*((u32
*)reg
->value
);
2492 samples
[numSamples
++]=t
;
2493 retval
= target
->type
->resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2494 target
->type
->poll(target
);
2495 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2496 } else if (target
->state
== TARGET_RUNNING
)
2498 // We want to quickly sample the PC.
2499 target
->type
->halt(target
);
2502 command_print(cmd_ctx
, "Target not halted or running");
2506 if (retval
!=ERROR_OK
)
2511 gettimeofday(&now
, NULL
);
2512 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2514 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2515 target
->type
->poll(target
);
2516 if (target
->state
== TARGET_HALTED
)
2518 target
->type
->resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2520 target
->type
->poll(target
);
2521 writeGmon(samples
, numSamples
, args
[1]);
2522 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)