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 int target_examine(struct command_context_s
*cmd_ctx
)
441 int retval
= ERROR_OK
;
442 target_t
*target
= targets
;
445 if ((retval
= target
->type
->examine(cmd_ctx
, target
))!=ERROR_OK
)
447 target
= target
->next
;
451 int target_init(struct command_context_s
*cmd_ctx
)
453 target_t
*target
= targets
;
457 target
->type
->examined
= 0;
458 if (target
->type
->examine
== NULL
)
460 target
->type
->examine
= default_examine
;
463 if (target
->type
->init_target(cmd_ctx
, target
) != ERROR_OK
)
465 LOG_ERROR("target '%s' init failed", target
->type
->name
);
469 /* Set up default functions if none are provided by target */
470 if (target
->type
->virt2phys
== NULL
)
472 target
->type
->virt2phys
= default_virt2phys
;
474 if (target
->type
->mmu
== NULL
)
476 target
->type
->mmu
= default_mmu
;
478 target
= target
->next
;
483 target_register_user_commands(cmd_ctx
);
484 target_register_timer_callback(handle_target
, 100, 1, NULL
);
490 int target_register_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
492 target_event_callback_t
**callbacks_p
= &target_event_callbacks
;
494 if (callback
== NULL
)
496 return ERROR_INVALID_ARGUMENTS
;
501 while ((*callbacks_p
)->next
)
502 callbacks_p
= &((*callbacks_p
)->next
);
503 callbacks_p
= &((*callbacks_p
)->next
);
506 (*callbacks_p
) = malloc(sizeof(target_event_callback_t
));
507 (*callbacks_p
)->callback
= callback
;
508 (*callbacks_p
)->priv
= priv
;
509 (*callbacks_p
)->next
= NULL
;
514 int target_register_timer_callback(int (*callback
)(void *priv
), int time_ms
, int periodic
, void *priv
)
516 target_timer_callback_t
**callbacks_p
= &target_timer_callbacks
;
519 if (callback
== NULL
)
521 return ERROR_INVALID_ARGUMENTS
;
526 while ((*callbacks_p
)->next
)
527 callbacks_p
= &((*callbacks_p
)->next
);
528 callbacks_p
= &((*callbacks_p
)->next
);
531 (*callbacks_p
) = malloc(sizeof(target_timer_callback_t
));
532 (*callbacks_p
)->callback
= callback
;
533 (*callbacks_p
)->periodic
= periodic
;
534 (*callbacks_p
)->time_ms
= time_ms
;
536 gettimeofday(&now
, NULL
);
537 (*callbacks_p
)->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
538 time_ms
-= (time_ms
% 1000);
539 (*callbacks_p
)->when
.tv_sec
= now
.tv_sec
+ (time_ms
/ 1000);
540 if ((*callbacks_p
)->when
.tv_usec
> 1000000)
542 (*callbacks_p
)->when
.tv_usec
= (*callbacks_p
)->when
.tv_usec
- 1000000;
543 (*callbacks_p
)->when
.tv_sec
+= 1;
546 (*callbacks_p
)->priv
= priv
;
547 (*callbacks_p
)->next
= NULL
;
552 int target_unregister_event_callback(int (*callback
)(struct target_s
*target
, enum target_event event
, void *priv
), void *priv
)
554 target_event_callback_t
**p
= &target_event_callbacks
;
555 target_event_callback_t
*c
= target_event_callbacks
;
557 if (callback
== NULL
)
559 return ERROR_INVALID_ARGUMENTS
;
564 target_event_callback_t
*next
= c
->next
;
565 if ((c
->callback
== callback
) && (c
->priv
== priv
))
579 int target_unregister_timer_callback(int (*callback
)(void *priv
), void *priv
)
581 target_timer_callback_t
**p
= &target_timer_callbacks
;
582 target_timer_callback_t
*c
= target_timer_callbacks
;
584 if (callback
== NULL
)
586 return ERROR_INVALID_ARGUMENTS
;
591 target_timer_callback_t
*next
= c
->next
;
592 if ((c
->callback
== callback
) && (c
->priv
== priv
))
606 int target_call_event_callbacks(target_t
*target
, enum target_event event
)
608 target_event_callback_t
*callback
= target_event_callbacks
;
609 target_event_callback_t
*next_callback
;
611 LOG_DEBUG("target event %i", event
);
615 next_callback
= callback
->next
;
616 callback
->callback(target
, event
, callback
->priv
);
617 callback
= next_callback
;
623 static int target_call_timer_callbacks_check_time(int checktime
)
625 target_timer_callback_t
*callback
= target_timer_callbacks
;
626 target_timer_callback_t
*next_callback
;
629 gettimeofday(&now
, NULL
);
633 next_callback
= callback
->next
;
635 if ((!checktime
&&callback
->periodic
)||
636 (((now
.tv_sec
>= callback
->when
.tv_sec
) && (now
.tv_usec
>= callback
->when
.tv_usec
))
637 || (now
.tv_sec
> callback
->when
.tv_sec
)))
639 callback
->callback(callback
->priv
);
640 if (callback
->periodic
)
642 int time_ms
= callback
->time_ms
;
643 callback
->when
.tv_usec
= now
.tv_usec
+ (time_ms
% 1000) * 1000;
644 time_ms
-= (time_ms
% 1000);
645 callback
->when
.tv_sec
= now
.tv_sec
+ time_ms
/ 1000;
646 if (callback
->when
.tv_usec
> 1000000)
648 callback
->when
.tv_usec
= callback
->when
.tv_usec
- 1000000;
649 callback
->when
.tv_sec
+= 1;
653 target_unregister_timer_callback(callback
->callback
, callback
->priv
);
656 callback
= next_callback
;
662 int target_call_timer_callbacks()
664 return target_call_timer_callbacks_check_time(1);
667 /* invoke periodic callbacks immediately */
668 int target_call_timer_callbacks_now()
670 return target_call_timer_callbacks(0);
674 int target_alloc_working_area(struct target_s
*target
, u32 size
, working_area_t
**area
)
676 working_area_t
*c
= target
->working_areas
;
677 working_area_t
*new_wa
= NULL
;
679 /* Reevaluate working area address based on MMU state*/
680 if (target
->working_areas
== NULL
)
684 retval
= target
->type
->mmu(target
, &enabled
);
685 if (retval
!= ERROR_OK
)
691 target
->working_area
= target
->working_area_virt
;
695 target
->working_area
= target
->working_area_phys
;
699 /* only allocate multiples of 4 byte */
702 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
703 size
= CEIL(size
, 4);
706 /* see if there's already a matching working area */
709 if ((c
->free
) && (c
->size
== size
))
717 /* if not, allocate a new one */
720 working_area_t
**p
= &target
->working_areas
;
721 u32 first_free
= target
->working_area
;
722 u32 free_size
= target
->working_area_size
;
724 LOG_DEBUG("allocating new working area");
726 c
= target
->working_areas
;
729 first_free
+= c
->size
;
730 free_size
-= c
->size
;
735 if (free_size
< size
)
737 LOG_WARNING("not enough working area available(requested %d, free %d)", size
, free_size
);
738 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
741 new_wa
= malloc(sizeof(working_area_t
));
744 new_wa
->address
= first_free
;
746 if (target
->backup_working_area
)
748 new_wa
->backup
= malloc(new_wa
->size
);
749 target
->type
->read_memory(target
, new_wa
->address
, 4, new_wa
->size
/ 4, new_wa
->backup
);
753 new_wa
->backup
= NULL
;
756 /* put new entry in list */
760 /* mark as used, and return the new (reused) area */
770 int target_free_working_area_restore(struct target_s
*target
, working_area_t
*area
, int restore
)
775 if (restore
&&target
->backup_working_area
)
776 target
->type
->write_memory(target
, area
->address
, 4, area
->size
/ 4, area
->backup
);
780 /* mark user pointer invalid */
787 int target_free_working_area(struct target_s
*target
, working_area_t
*area
)
789 return target_free_working_area_restore(target
, area
, 1);
792 int target_free_all_working_areas_restore(struct target_s
*target
, int restore
)
794 working_area_t
*c
= target
->working_areas
;
798 working_area_t
*next
= c
->next
;
799 target_free_working_area_restore(target
, c
, restore
);
809 target
->working_areas
= NULL
;
814 int target_free_all_working_areas(struct target_s
*target
)
816 return target_free_all_working_areas_restore(target
, 1);
819 int target_register_commands(struct command_context_s
*cmd_ctx
)
821 register_command(cmd_ctx
, NULL
, "target", handle_target_command
, COMMAND_CONFIG
, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
822 register_command(cmd_ctx
, NULL
, "targets", handle_targets_command
, COMMAND_EXEC
, NULL
);
823 register_command(cmd_ctx
, NULL
, "target_script", handle_target_script_command
, COMMAND_CONFIG
, NULL
);
824 register_command(cmd_ctx
, NULL
, "run_and_halt_time", handle_run_and_halt_time_command
, COMMAND_CONFIG
, "<target> <run time ms>");
825 register_command(cmd_ctx
, NULL
, "working_area", handle_working_area_command
, COMMAND_ANY
, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
826 register_command(cmd_ctx
, NULL
, "virt2phys", handle_virt2phys_command
, COMMAND_ANY
, "virt2phys <virtual address>");
827 register_command(cmd_ctx
, NULL
, "profile", handle_profile_command
, COMMAND_EXEC
, "PRELIMINARY! - profile <seconds> <gmon.out>");
832 int target_arch_state(struct target_s
*target
)
837 LOG_USER("No target has been configured");
841 LOG_USER("target state: %s", target_state_strings
[target
->state
]);
843 if (target
->state
!=TARGET_HALTED
)
846 retval
=target
->type
->arch_state(target
);
850 /* Single aligned words are guaranteed to use 16 or 32 bit access
851 * mode respectively, otherwise data is handled as quickly as
854 int target_write_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
858 LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size
, address
);
860 if (((address
% 2) == 0) && (size
== 2))
862 return target
->type
->write_memory(target
, address
, 2, 1, buffer
);
865 /* handle unaligned head bytes */
868 int unaligned
= 4 - (address
% 4);
870 if (unaligned
> size
)
873 if ((retval
= target
->type
->write_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
877 address
+= unaligned
;
881 /* handle aligned words */
884 int aligned
= size
- (size
% 4);
886 /* use bulk writes above a certain limit. This may have to be changed */
889 if ((retval
= target
->type
->bulk_write_memory(target
, address
, aligned
/ 4, buffer
)) != ERROR_OK
)
894 if ((retval
= target
->type
->write_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
903 /* handle tail writes of less than 4 bytes */
906 if ((retval
= target
->type
->write_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
914 /* Single aligned words are guaranteed to use 16 or 32 bit access
915 * mode respectively, otherwise data is handled as quickly as
918 int target_read_buffer(struct target_s
*target
, u32 address
, u32 size
, u8
*buffer
)
922 LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size
, address
);
924 if (((address
% 2) == 0) && (size
== 2))
926 return target
->type
->read_memory(target
, address
, 2, 1, buffer
);
929 /* handle unaligned head bytes */
932 int unaligned
= 4 - (address
% 4);
934 if (unaligned
> size
)
937 if ((retval
= target
->type
->read_memory(target
, address
, 1, unaligned
, buffer
)) != ERROR_OK
)
941 address
+= unaligned
;
945 /* handle aligned words */
948 int aligned
= size
- (size
% 4);
950 if ((retval
= target
->type
->read_memory(target
, address
, 4, aligned
/ 4, buffer
)) != ERROR_OK
)
958 /* handle tail writes of less than 4 bytes */
961 if ((retval
= target
->type
->read_memory(target
, address
, 1, size
, buffer
)) != ERROR_OK
)
968 int target_checksum_memory(struct target_s
*target
, u32 address
, u32 size
, u32
* crc
)
975 if ((retval
= target
->type
->checksum_memory(target
, address
,
976 size
, &checksum
)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE
)
978 buffer
= malloc(size
);
981 LOG_ERROR("error allocating buffer for section (%d bytes)", size
);
982 return ERROR_INVALID_ARGUMENTS
;
984 retval
= target_read_buffer(target
, address
, size
, buffer
);
985 if (retval
!= ERROR_OK
)
991 /* convert to target endianess */
992 for (i
= 0; i
< (size
/sizeof(u32
)); i
++)
995 target_data
= target_buffer_get_u32(target
, &buffer
[i
*sizeof(u32
)]);
996 target_buffer_set_u32(target
, &buffer
[i
*sizeof(u32
)], target_data
);
999 retval
= image_calculate_checksum( buffer
, size
, &checksum
);
1008 int target_read_u32(struct target_s
*target
, u32 address
, u32
*value
)
1012 int retval
= target
->type
->read_memory(target
, address
, 4, 1, value_buf
);
1014 if (retval
== ERROR_OK
)
1016 *value
= target_buffer_get_u32(target
, value_buf
);
1017 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, *value
);
1022 LOG_DEBUG("address: 0x%8.8x failed", address
);
1028 int target_read_u16(struct target_s
*target
, u32 address
, u16
*value
)
1032 int retval
= target
->type
->read_memory(target
, address
, 2, 1, value_buf
);
1034 if (retval
== ERROR_OK
)
1036 *value
= target_buffer_get_u16(target
, value_buf
);
1037 LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address
, *value
);
1042 LOG_DEBUG("address: 0x%8.8x failed", address
);
1048 int target_read_u8(struct target_s
*target
, u32 address
, u8
*value
)
1050 int retval
= target
->type
->read_memory(target
, address
, 1, 1, value
);
1052 if (retval
== ERROR_OK
)
1054 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, *value
);
1059 LOG_DEBUG("address: 0x%8.8x failed", address
);
1065 int target_write_u32(struct target_s
*target
, u32 address
, u32 value
)
1070 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1072 target_buffer_set_u32(target
, value_buf
, value
);
1073 if ((retval
= target
->type
->write_memory(target
, address
, 4, 1, value_buf
)) != ERROR_OK
)
1075 LOG_DEBUG("failed: %i", retval
);
1081 int target_write_u16(struct target_s
*target
, u32 address
, u16 value
)
1086 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address
, value
);
1088 target_buffer_set_u16(target
, value_buf
, value
);
1089 if ((retval
= target
->type
->write_memory(target
, address
, 2, 1, value_buf
)) != ERROR_OK
)
1091 LOG_DEBUG("failed: %i", retval
);
1097 int target_write_u8(struct target_s
*target
, u32 address
, u8 value
)
1101 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address
, value
);
1103 if ((retval
= target
->type
->read_memory(target
, address
, 1, 1, &value
)) != ERROR_OK
)
1105 LOG_DEBUG("failed: %i", retval
);
1111 int target_register_user_commands(struct command_context_s
*cmd_ctx
)
1113 register_command(cmd_ctx
, NULL
, "reg", handle_reg_command
, COMMAND_EXEC
, NULL
);
1114 register_command(cmd_ctx
, NULL
, "poll", handle_poll_command
, COMMAND_EXEC
, "poll target state");
1115 register_command(cmd_ctx
, NULL
, "wait_halt", handle_wait_halt_command
, COMMAND_EXEC
, "wait for target halt [time (s)]");
1116 register_command(cmd_ctx
, NULL
, "halt", handle_halt_command
, COMMAND_EXEC
, "halt target");
1117 register_command(cmd_ctx
, NULL
, "resume", handle_resume_command
, COMMAND_EXEC
, "resume target [addr]");
1118 register_command(cmd_ctx
, NULL
, "step", handle_step_command
, COMMAND_EXEC
, "step one instruction from current PC or [addr]");
1119 register_command(cmd_ctx
, NULL
, "reset", handle_reset_command
, COMMAND_EXEC
, "reset target [run|halt|init|run_and_halt|run_and_init]");
1120 register_command(cmd_ctx
, NULL
, "soft_reset_halt", handle_soft_reset_halt_command
, COMMAND_EXEC
, "halt the target and do a soft reset");
1122 register_command(cmd_ctx
, NULL
, "mdw", handle_md_command
, COMMAND_EXEC
, "display memory words <addr> [count]");
1123 register_command(cmd_ctx
, NULL
, "mdh", handle_md_command
, COMMAND_EXEC
, "display memory half-words <addr> [count]");
1124 register_command(cmd_ctx
, NULL
, "mdb", handle_md_command
, COMMAND_EXEC
, "display memory bytes <addr> [count]");
1126 register_command(cmd_ctx
, NULL
, "mww", handle_mw_command
, COMMAND_EXEC
, "write memory word <addr> <value> [count]");
1127 register_command(cmd_ctx
, NULL
, "mwh", handle_mw_command
, COMMAND_EXEC
, "write memory half-word <addr> <value> [count]");
1128 register_command(cmd_ctx
, NULL
, "mwb", handle_mw_command
, COMMAND_EXEC
, "write memory byte <addr> <value> [count]");
1130 register_command(cmd_ctx
, NULL
, "bp", handle_bp_command
, COMMAND_EXEC
, "set breakpoint <address> <length> [hw]");
1131 register_command(cmd_ctx
, NULL
, "rbp", handle_rbp_command
, COMMAND_EXEC
, "remove breakpoint <adress>");
1132 register_command(cmd_ctx
, NULL
, "wp", handle_wp_command
, COMMAND_EXEC
, "set watchpoint <address> <length> <r/w/a> [value] [mask]");
1133 register_command(cmd_ctx
, NULL
, "rwp", handle_rwp_command
, COMMAND_EXEC
, "remove watchpoint <adress>");
1135 register_command(cmd_ctx
, NULL
, "load_image", handle_load_image_command
, COMMAND_EXEC
, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1136 register_command(cmd_ctx
, NULL
, "dump_image", handle_dump_image_command
, COMMAND_EXEC
, "dump_image <file> <address> <size>");
1137 register_command(cmd_ctx
, NULL
, "verify_image", handle_verify_image_command
, COMMAND_EXEC
, "verify_image <file> [offset] [type]");
1138 register_command(cmd_ctx
, NULL
, "load_binary", handle_load_image_command
, COMMAND_EXEC
, "[DEPRECATED] load_binary <file> <address>");
1139 register_command(cmd_ctx
, NULL
, "dump_binary", handle_dump_image_command
, COMMAND_EXEC
, "[DEPRECATED] dump_binary <file> <address> <size>");
1141 target_request_register_commands(cmd_ctx
);
1142 trace_register_commands(cmd_ctx
);
1147 int handle_targets_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1149 target_t
*target
= targets
;
1154 int num
= strtoul(args
[0], NULL
, 0);
1159 target
= target
->next
;
1163 cmd_ctx
->current_target
= num
;
1165 command_print(cmd_ctx
, "%i is out of bounds, only %i targets are configured", num
, count
);
1172 command_print(cmd_ctx
, "%i: %s (%s), state: %s", count
++, target
->type
->name
, target_endianess_strings
[target
->endianness
], target_state_strings
[target
->state
]);
1173 target
= target
->next
;
1179 int handle_target_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1186 return ERROR_COMMAND_SYNTAX_ERROR
;
1189 /* search for the specified target */
1190 if (args
[0] && (args
[0][0] != 0))
1192 for (i
= 0; target_types
[i
]; i
++)
1194 if (strcmp(args
[0], target_types
[i
]->name
) == 0)
1196 target_t
**last_target_p
= &targets
;
1198 /* register target specific commands */
1199 if (target_types
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1201 LOG_ERROR("couldn't register '%s' commands", args
[0]);
1207 while ((*last_target_p
)->next
)
1208 last_target_p
= &((*last_target_p
)->next
);
1209 last_target_p
= &((*last_target_p
)->next
);
1212 *last_target_p
= malloc(sizeof(target_t
));
1214 (*last_target_p
)->type
= target_types
[i
];
1216 if (strcmp(args
[1], "big") == 0)
1217 (*last_target_p
)->endianness
= TARGET_BIG_ENDIAN
;
1218 else if (strcmp(args
[1], "little") == 0)
1219 (*last_target_p
)->endianness
= TARGET_LITTLE_ENDIAN
;
1222 LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args
[1]);
1223 return ERROR_COMMAND_SYNTAX_ERROR
;
1226 /* what to do on a target reset */
1227 (*last_target_p
)->reset_mode
= RESET_INIT
; /* default */
1228 if (strcmp(args
[2], "reset_halt") == 0)
1229 (*last_target_p
)->reset_mode
= RESET_HALT
;
1230 else if (strcmp(args
[2], "reset_run") == 0)
1231 (*last_target_p
)->reset_mode
= RESET_RUN
;
1232 else if (strcmp(args
[2], "reset_init") == 0)
1233 (*last_target_p
)->reset_mode
= RESET_INIT
;
1234 else if (strcmp(args
[2], "run_and_halt") == 0)
1235 (*last_target_p
)->reset_mode
= RESET_RUN_AND_HALT
;
1236 else if (strcmp(args
[2], "run_and_init") == 0)
1237 (*last_target_p
)->reset_mode
= RESET_RUN_AND_INIT
;
1240 /* Kludge! we want to make this reset arg optional while remaining compatible! */
1244 (*last_target_p
)->run_and_halt_time
= 1000; /* default 1s */
1246 (*last_target_p
)->reset_script
= NULL
;
1247 (*last_target_p
)->post_halt_script
= NULL
;
1248 (*last_target_p
)->pre_resume_script
= NULL
;
1249 (*last_target_p
)->gdb_program_script
= NULL
;
1251 (*last_target_p
)->working_area
= 0x0;
1252 (*last_target_p
)->working_area_size
= 0x0;
1253 (*last_target_p
)->working_areas
= NULL
;
1254 (*last_target_p
)->backup_working_area
= 0;
1256 (*last_target_p
)->state
= TARGET_UNKNOWN
;
1257 (*last_target_p
)->debug_reason
= DBG_REASON_UNDEFINED
;
1258 (*last_target_p
)->reg_cache
= NULL
;
1259 (*last_target_p
)->breakpoints
= NULL
;
1260 (*last_target_p
)->watchpoints
= NULL
;
1261 (*last_target_p
)->next
= NULL
;
1262 (*last_target_p
)->arch_info
= NULL
;
1264 /* initialize trace information */
1265 (*last_target_p
)->trace_info
= malloc(sizeof(trace_t
));
1266 (*last_target_p
)->trace_info
->num_trace_points
= 0;
1267 (*last_target_p
)->trace_info
->trace_points_size
= 0;
1268 (*last_target_p
)->trace_info
->trace_points
= NULL
;
1269 (*last_target_p
)->trace_info
->trace_history_size
= 0;
1270 (*last_target_p
)->trace_info
->trace_history
= NULL
;
1271 (*last_target_p
)->trace_info
->trace_history_pos
= 0;
1272 (*last_target_p
)->trace_info
->trace_history_overflowed
= 0;
1274 (*last_target_p
)->dbgmsg
= NULL
;
1275 (*last_target_p
)->dbg_msg_enabled
= 0;
1277 (*last_target_p
)->type
->target_command(cmd_ctx
, cmd
, args
, argc
, *last_target_p
);
1285 /* no matching target found */
1288 LOG_ERROR("target '%s' not found", args
[0]);
1289 return ERROR_COMMAND_SYNTAX_ERROR
;
1295 /* usage: target_script <target#> <event> <script_file> */
1296 int handle_target_script_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1298 target_t
*target
= NULL
;
1302 LOG_ERROR("incomplete target_script command");
1303 return ERROR_COMMAND_SYNTAX_ERROR
;
1306 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1310 return ERROR_COMMAND_SYNTAX_ERROR
;
1313 if (strcmp(args
[1], "reset") == 0)
1315 if (target
->reset_script
)
1316 free(target
->reset_script
);
1317 target
->reset_script
= strdup(args
[2]);
1319 else if (strcmp(args
[1], "post_halt") == 0)
1321 if (target
->post_halt_script
)
1322 free(target
->post_halt_script
);
1323 target
->post_halt_script
= strdup(args
[2]);
1325 else if (strcmp(args
[1], "pre_resume") == 0)
1327 if (target
->pre_resume_script
)
1328 free(target
->pre_resume_script
);
1329 target
->pre_resume_script
= strdup(args
[2]);
1331 else if (strcmp(args
[1], "gdb_program_config") == 0)
1333 if (target
->gdb_program_script
)
1334 free(target
->gdb_program_script
);
1335 target
->gdb_program_script
= strdup(args
[2]);
1339 LOG_ERROR("unknown event type: '%s", args
[1]);
1340 return ERROR_COMMAND_SYNTAX_ERROR
;
1346 int handle_run_and_halt_time_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1348 target_t
*target
= NULL
;
1352 return ERROR_COMMAND_SYNTAX_ERROR
;
1355 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1358 return ERROR_COMMAND_SYNTAX_ERROR
;
1361 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1366 int handle_working_area_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1368 target_t
*target
= NULL
;
1370 if ((argc
< 4) || (argc
> 5))
1372 return ERROR_COMMAND_SYNTAX_ERROR
;
1375 target
= get_target_by_num(strtoul(args
[0], NULL
, 0));
1378 return ERROR_COMMAND_SYNTAX_ERROR
;
1380 target_free_all_working_areas(target
);
1382 target
->working_area_phys
= target
->working_area_virt
= strtoul(args
[1], NULL
, 0);
1385 target
->working_area_virt
= strtoul(args
[4], NULL
, 0);
1387 target
->working_area_size
= strtoul(args
[2], NULL
, 0);
1389 if (strcmp(args
[3], "backup") == 0)
1391 target
->backup_working_area
= 1;
1393 else if (strcmp(args
[3], "nobackup") == 0)
1395 target
->backup_working_area
= 0;
1399 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args
[3]);
1400 return ERROR_COMMAND_SYNTAX_ERROR
;
1407 /* process target state changes */
1408 int handle_target(void *priv
)
1411 target_t
*target
= targets
;
1415 /* only poll if target isn't already halted */
1416 if (target
->state
!= TARGET_HALTED
)
1418 if (target_continous_poll
)
1419 if ((retval
= target
->type
->poll(target
)) != ERROR_OK
)
1421 LOG_ERROR("couldn't poll target(%d). It's due for a reset.", retval
);
1425 target
= target
->next
;
1431 int handle_reg_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1440 target
= get_current_target(cmd_ctx
);
1442 /* list all available registers for the current target */
1445 reg_cache_t
*cache
= target
->reg_cache
;
1451 for (i
= 0; i
< cache
->num_regs
; i
++)
1453 value
= buf_to_str(cache
->reg_list
[i
].value
, cache
->reg_list
[i
].size
, 16);
1454 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
);
1457 cache
= cache
->next
;
1463 /* access a single register by its ordinal number */
1464 if ((args
[0][0] >= '0') && (args
[0][0] <= '9'))
1466 int num
= strtoul(args
[0], NULL
, 0);
1467 reg_cache_t
*cache
= target
->reg_cache
;
1473 for (i
= 0; i
< cache
->num_regs
; i
++)
1477 reg
= &cache
->reg_list
[i
];
1483 cache
= cache
->next
;
1488 command_print(cmd_ctx
, "%i is out of bounds, the current target has only %i registers (0 - %i)", num
, count
, count
- 1);
1491 } else /* access a single register by its name */
1493 reg
= register_get_by_name(target
->reg_cache
, args
[0], 1);
1497 command_print(cmd_ctx
, "register %s not found in current target", args
[0]);
1502 /* display a register */
1503 if ((argc
== 1) || ((argc
== 2) && !((args
[1][0] >= '0') && (args
[1][0] <= '9'))))
1505 if ((argc
== 2) && (strcmp(args
[1], "force") == 0))
1508 if (reg
->valid
== 0)
1510 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1511 if (arch_type
== NULL
)
1513 LOG_ERROR("BUG: encountered unregistered arch type");
1516 arch_type
->get(reg
);
1518 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1519 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1524 /* set register value */
1527 u8
*buf
= malloc(CEIL(reg
->size
, 8));
1528 str_to_buf(args
[1], strlen(args
[1]), buf
, reg
->size
, 0);
1530 reg_arch_type_t
*arch_type
= register_get_arch_type(reg
->arch_type
);
1531 if (arch_type
== NULL
)
1533 LOG_ERROR("BUG: encountered unregistered arch type");
1537 arch_type
->set(reg
, buf
);
1539 value
= buf_to_str(reg
->value
, reg
->size
, 16);
1540 command_print(cmd_ctx
, "%s (/%i): 0x%s", reg
->name
, reg
->size
, value
);
1548 command_print(cmd_ctx
, "usage: reg <#|name> [value]");
1553 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
);
1555 int handle_poll_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1557 target_t
*target
= get_current_target(cmd_ctx
);
1561 target
->type
->poll(target
);
1562 target_arch_state(target
);
1566 if (strcmp(args
[0], "on") == 0)
1568 target_continous_poll
= 1;
1570 else if (strcmp(args
[0], "off") == 0)
1572 target_continous_poll
= 0;
1576 command_print(cmd_ctx
, "arg is \"on\" or \"off\"");
1584 int handle_wait_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1592 ms
= strtoul(args
[0], &end
, 0) * 1000;
1595 command_print(cmd_ctx
, "usage: %s [seconds]", cmd
);
1600 return wait_state(cmd_ctx
, cmd
, TARGET_HALTED
, ms
);
1603 static void target_process_events(struct command_context_s
*cmd_ctx
)
1605 target_t
*target
= get_current_target(cmd_ctx
);
1606 target
->type
->poll(target
);
1607 target_call_timer_callbacks_now();
1610 static int wait_state(struct command_context_s
*cmd_ctx
, char *cmd
, enum target_state state
, int ms
)
1613 struct timeval timeout
, now
;
1615 gettimeofday(&timeout
, NULL
);
1616 timeval_add_time(&timeout
, 0, ms
* 1000);
1618 target_t
*target
= get_current_target(cmd_ctx
);
1621 if ((retval
=target
->type
->poll(target
))!=ERROR_OK
)
1623 target_call_timer_callbacks_now();
1624 if (target
->state
== state
)
1631 command_print(cmd_ctx
, "waiting for target %s...", target_state_strings
[state
]);
1634 gettimeofday(&now
, NULL
);
1635 if ((now
.tv_sec
> timeout
.tv_sec
) || ((now
.tv_sec
== timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
1637 LOG_ERROR("timed out while waiting for target %s", target_state_strings
[state
]);
1645 int handle_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1648 target_t
*target
= get_current_target(cmd_ctx
);
1652 if ((retval
= target
->type
->halt(target
)) != ERROR_OK
)
1657 return handle_wait_halt_command(cmd_ctx
, cmd
, args
, argc
);
1661 int handle_soft_reset_halt_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1663 target_t
*target
= get_current_target(cmd_ctx
);
1665 LOG_USER("requesting target halt and executing a soft reset");
1667 target
->type
->soft_reset_halt(target
);
1672 int handle_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1674 target_t
*target
= get_current_target(cmd_ctx
);
1675 enum target_reset_mode reset_mode
= target
->reset_mode
;
1676 enum target_reset_mode save
= target
->reset_mode
;
1682 if (strcmp("run", args
[0]) == 0)
1683 reset_mode
= RESET_RUN
;
1684 else if (strcmp("halt", args
[0]) == 0)
1685 reset_mode
= RESET_HALT
;
1686 else if (strcmp("init", args
[0]) == 0)
1687 reset_mode
= RESET_INIT
;
1688 else if (strcmp("run_and_halt", args
[0]) == 0)
1690 reset_mode
= RESET_RUN_AND_HALT
;
1693 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1696 else if (strcmp("run_and_init", args
[0]) == 0)
1698 reset_mode
= RESET_RUN_AND_INIT
;
1701 target
->run_and_halt_time
= strtoul(args
[1], NULL
, 0);
1706 command_print(cmd_ctx
, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1711 /* temporarily modify mode of current reset target */
1712 target
->reset_mode
= reset_mode
;
1714 /* reset *all* targets */
1715 target_process_reset(cmd_ctx
);
1717 /* Restore default reset mode for this target */
1718 target
->reset_mode
= save
;
1723 int handle_resume_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1726 target_t
*target
= get_current_target(cmd_ctx
);
1729 retval
= target
->type
->resume(target
, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1731 retval
= target
->type
->resume(target
, 0, strtoul(args
[0], NULL
, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1734 return ERROR_COMMAND_SYNTAX_ERROR
;
1737 target_process_events(cmd_ctx
);
1742 int handle_step_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1744 target_t
*target
= get_current_target(cmd_ctx
);
1749 target
->type
->step(target
, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1752 target
->type
->step(target
, 0, strtoul(args
[0], NULL
, 0), 1); /* addr = args[0], handle breakpoints */
1757 int handle_md_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1759 const int line_bytecnt
= 32;
1772 target_t
*target
= get_current_target(cmd_ctx
);
1778 count
= strtoul(args
[1], NULL
, 0);
1780 address
= strtoul(args
[0], NULL
, 0);
1786 size
= 4; line_modulo
= line_bytecnt
/ 4;
1789 size
= 2; line_modulo
= line_bytecnt
/ 2;
1792 size
= 1; line_modulo
= line_bytecnt
/ 1;
1798 buffer
= calloc(count
, size
);
1799 retval
= target
->type
->read_memory(target
, address
, size
, count
, buffer
);
1800 if (retval
== ERROR_OK
)
1804 for (i
= 0; i
< count
; i
++)
1806 if (i
%line_modulo
== 0)
1807 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "0x%8.8x: ", address
+ (i
*size
));
1812 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%8.8x ", target_buffer_get_u32(target
, &buffer
[i
*4]));
1815 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%4.4x ", target_buffer_get_u16(target
, &buffer
[i
*2]));
1818 output_len
+= snprintf(output
+ output_len
, 128 - output_len
, "%2.2x ", buffer
[i
*1]);
1822 if ((i
%line_modulo
== line_modulo
-1) || (i
== count
- 1))
1824 command_print(cmd_ctx
, output
);
1830 LOG_ERROR("Failure examining memory");
1838 int handle_mw_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1845 target_t
*target
= get_current_target(cmd_ctx
);
1848 if ((argc
< 2) || (argc
> 3))
1849 return ERROR_COMMAND_SYNTAX_ERROR
;
1851 address
= strtoul(args
[0], NULL
, 0);
1852 value
= strtoul(args
[1], NULL
, 0);
1854 count
= strtoul(args
[2], NULL
, 0);
1861 target_buffer_set_u32(target
, value_buf
, value
);
1865 target_buffer_set_u16(target
, value_buf
, value
);
1869 value_buf
[0] = value
;
1872 return ERROR_COMMAND_SYNTAX_ERROR
;
1874 for (i
=0; i
<count
; i
++)
1880 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 4, 1, value_buf
);
1883 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 2, 1, value_buf
);
1886 retval
= target
->type
->write_memory(target
, address
+ i
*wordsize
, 1, 1, value_buf
);
1891 if (retval
!=ERROR_OK
)
1901 int handle_load_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1911 duration_t duration
;
1912 char *duration_text
;
1914 target_t
*target
= get_current_target(cmd_ctx
);
1918 command_print(cmd_ctx
, "usage: load_image <filename> [address] [type]");
1922 /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
1925 image
.base_address_set
= 1;
1926 image
.base_address
= strtoul(args
[1], NULL
, 0);
1930 image
.base_address_set
= 0;
1933 image
.start_address_set
= 0;
1935 duration_start_measure(&duration
);
1937 if (image_open(&image
, args
[0], (argc
>= 3) ? args
[2] : NULL
) != ERROR_OK
)
1944 for (i
= 0; i
< image
.num_sections
; i
++)
1946 buffer
= malloc(image
.sections
[i
].size
);
1949 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
1953 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
1958 if ((retval
= target_write_buffer(target
, image
.sections
[i
].base_address
, buf_cnt
, buffer
)) != ERROR_OK
)
1963 image_size
+= buf_cnt
;
1964 command_print(cmd_ctx
, "%u byte written at address 0x%8.8x", buf_cnt
, image
.sections
[i
].base_address
);
1969 duration_stop_measure(&duration
, &duration_text
);
1970 if (retval
==ERROR_OK
)
1972 command_print(cmd_ctx
, "downloaded %u byte in %s", image_size
, duration_text
);
1974 free(duration_text
);
1976 image_close(&image
);
1982 int handle_dump_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1989 int retval
=ERROR_OK
;
1991 duration_t duration
;
1992 char *duration_text
;
1994 target_t
*target
= get_current_target(cmd_ctx
);
1998 command_print(cmd_ctx
, "usage: dump_image <filename> <address> <size>");
2002 address
= strtoul(args
[1], NULL
, 0);
2003 size
= strtoul(args
[2], NULL
, 0);
2005 if ((address
& 3) || (size
& 3))
2007 command_print(cmd_ctx
, "only 32-bit aligned address and size are supported");
2011 if (fileio_open(&fileio
, args
[0], FILEIO_WRITE
, FILEIO_BINARY
) != ERROR_OK
)
2016 duration_start_measure(&duration
);
2021 u32 this_run_size
= (size
> 560) ? 560 : size
;
2023 retval
= target
->type
->read_memory(target
, address
, 4, this_run_size
/ 4, buffer
);
2024 if (retval
!= ERROR_OK
)
2029 retval
= fileio_write(&fileio
, this_run_size
, buffer
, &size_written
);
2030 if (retval
!= ERROR_OK
)
2035 size
-= this_run_size
;
2036 address
+= this_run_size
;
2039 fileio_close(&fileio
);
2041 duration_stop_measure(&duration
, &duration_text
);
2042 if (retval
==ERROR_OK
)
2044 command_print(cmd_ctx
, "dumped %"PRIi64
" byte in %s", fileio
.size
, duration_text
);
2046 free(duration_text
);
2051 int handle_verify_image_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2059 u32 mem_checksum
= 0;
2063 duration_t duration
;
2064 char *duration_text
;
2066 target_t
*target
= get_current_target(cmd_ctx
);
2070 return ERROR_COMMAND_SYNTAX_ERROR
;
2075 LOG_ERROR("no target selected");
2079 duration_start_measure(&duration
);
2083 image
.base_address_set
= 1;
2084 image
.base_address
= strtoul(args
[1], NULL
, 0);
2088 image
.base_address_set
= 0;
2089 image
.base_address
= 0x0;
2092 image
.start_address_set
= 0;
2094 if ((retval
=image_open(&image
, args
[0], (argc
== 3) ? args
[2] : NULL
)) != ERROR_OK
)
2101 for (i
= 0; i
< image
.num_sections
; i
++)
2103 buffer
= malloc(image
.sections
[i
].size
);
2106 command_print(cmd_ctx
, "error allocating buffer for section (%d bytes)", image
.sections
[i
].size
);
2109 if ((retval
= image_read_section(&image
, i
, 0x0, image
.sections
[i
].size
, buffer
, &buf_cnt
)) != ERROR_OK
)
2115 /* calculate checksum of image */
2116 image_calculate_checksum( buffer
, buf_cnt
, &checksum
);
2118 retval
= target_checksum_memory(target
, image
.sections
[i
].base_address
, buf_cnt
, &mem_checksum
);
2119 if( retval
!= ERROR_OK
)
2125 if( checksum
!= mem_checksum
)
2127 /* failed crc checksum, fall back to a binary compare */
2130 command_print(cmd_ctx
, "checksum mismatch - attempting binary compare");
2132 data
= (u8
*)malloc(buf_cnt
);
2134 /* Can we use 32bit word accesses? */
2136 int count
= buf_cnt
;
2137 if ((count
% 4) == 0)
2142 retval
= target
->type
->read_memory(target
, image
.sections
[i
].base_address
, size
, count
, data
);
2143 if (retval
== ERROR_OK
)
2146 for (t
= 0; t
< buf_cnt
; t
++)
2148 if (data
[t
] != buffer
[t
])
2150 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
]);
2163 image_size
+= buf_cnt
;
2166 duration_stop_measure(&duration
, &duration_text
);
2167 if (retval
==ERROR_OK
)
2169 command_print(cmd_ctx
, "verified %u bytes in %s", image_size
, duration_text
);
2171 free(duration_text
);
2173 image_close(&image
);
2178 int handle_bp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2181 target_t
*target
= get_current_target(cmd_ctx
);
2185 breakpoint_t
*breakpoint
= target
->breakpoints
;
2189 if (breakpoint
->type
== BKPT_SOFT
)
2191 char* buf
= buf_to_str(breakpoint
->orig_instr
, breakpoint
->length
, 16);
2192 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
, buf
);
2197 command_print(cmd_ctx
, "0x%8.8x, 0x%x, %i", breakpoint
->address
, breakpoint
->length
, breakpoint
->set
);
2199 breakpoint
= breakpoint
->next
;
2207 length
= strtoul(args
[1], NULL
, 0);
2210 if (strcmp(args
[2], "hw") == 0)
2213 if ((retval
= breakpoint_add(target
, strtoul(args
[0], NULL
, 0), length
, hw
)) != ERROR_OK
)
2215 LOG_ERROR("Failure setting breakpoints");
2219 command_print(cmd_ctx
, "breakpoint added at address 0x%8.8x", strtoul(args
[0], NULL
, 0));
2224 command_print(cmd_ctx
, "usage: bp <address> <length> ['hw']");
2230 int handle_rbp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2232 target_t
*target
= get_current_target(cmd_ctx
);
2235 breakpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2240 int handle_wp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2242 target_t
*target
= get_current_target(cmd_ctx
);
2247 watchpoint_t
*watchpoint
= target
->watchpoints
;
2251 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
);
2252 watchpoint
= watchpoint
->next
;
2257 enum watchpoint_rw type
= WPT_ACCESS
;
2258 u32 data_value
= 0x0;
2259 u32 data_mask
= 0xffffffff;
2275 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2281 data_value
= strtoul(args
[3], NULL
, 0);
2285 data_mask
= strtoul(args
[4], NULL
, 0);
2288 if ((retval
= watchpoint_add(target
, strtoul(args
[0], NULL
, 0),
2289 strtoul(args
[1], NULL
, 0), type
, data_value
, data_mask
)) != ERROR_OK
)
2291 LOG_ERROR("Failure setting breakpoints");
2296 command_print(cmd_ctx
, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2302 int handle_rwp_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2304 target_t
*target
= get_current_target(cmd_ctx
);
2307 watchpoint_remove(target
, strtoul(args
[0], NULL
, 0));
2312 int handle_virt2phys_command(command_context_t
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2315 target_t
*target
= get_current_target(cmd_ctx
);
2321 return ERROR_COMMAND_SYNTAX_ERROR
;
2323 va
= strtoul(args
[0], NULL
, 0);
2325 retval
= target
->type
->virt2phys(target
, va
, &pa
);
2326 if (retval
== ERROR_OK
)
2328 command_print(cmd_ctx
, "Physical address 0x%08x", pa
);
2332 /* lower levels will have logged a detailed error which is
2333 * forwarded to telnet/GDB session.
2338 static void writeLong(FILE *f
, int l
)
2343 char c
=(l
>>(i
*8))&0xff;
2344 fwrite(&c
, 1, 1, f
);
2348 static void writeString(FILE *f
, char *s
)
2350 fwrite(s
, 1, strlen(s
), f
);
2355 // Dump a gmon.out histogram file.
2356 static void writeGmon(u32
*samples
, int sampleNum
, char *filename
)
2359 FILE *f
=fopen(filename
, "w");
2362 fwrite("gmon", 1, 4, f
);
2363 writeLong(f
, 0x00000001); // Version
2364 writeLong(f
, 0); // padding
2365 writeLong(f
, 0); // padding
2366 writeLong(f
, 0); // padding
2368 fwrite("", 1, 1, f
); // GMON_TAG_TIME_HIST
2370 // figure out bucket size
2373 for (i
=0; i
<sampleNum
; i
++)
2385 int addressSpace
=(max
-min
+1);
2387 static int const maxBuckets
=256*1024; // maximum buckets.
2388 int length
=addressSpace
;
2389 if (length
> maxBuckets
)
2393 int *buckets
=malloc(sizeof(int)*length
);
2399 memset(buckets
, 0, sizeof(int)*length
);
2400 for (i
=0; i
<sampleNum
;i
++)
2402 u32 address
=samples
[i
];
2403 long long a
=address
-min
;
2404 long long b
=length
-1;
2405 long long c
=addressSpace
-1;
2406 int index
=(a
*b
)/c
; // danger!!!! int32 overflows
2410 // append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2411 writeLong(f
, min
); // low_pc
2412 writeLong(f
, max
); // high_pc
2413 writeLong(f
, length
); // # of samples
2414 writeLong(f
, 64000000); // 64MHz
2415 writeString(f
, "seconds");
2416 for (i
=0; i
<(15-strlen("seconds")); i
++)
2418 fwrite("", 1, 1, f
); // padding
2420 writeString(f
, "s");
2422 // append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2424 char *data
=malloc(2*length
);
2427 for (i
=0; i
<length
;i
++)
2436 data
[i
*2+1]=(val
>>8)&0xff;
2439 fwrite(data
, 1, length
*2, f
);
2449 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2450 int handle_profile_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2452 target_t
*target
= get_current_target(cmd_ctx
);
2453 struct timeval timeout
, now
;
2455 gettimeofday(&timeout
, NULL
);
2458 return ERROR_COMMAND_SYNTAX_ERROR
;
2461 timeval_add_time(&timeout
, strtoul(args
[0], &end
, 0), 0);
2467 command_print(cmd_ctx
, "Starting profiling. Halting and resuming the target as often as we can...");
2469 static const int maxSample
=10000;
2470 u32
*samples
=malloc(sizeof(u32
)*maxSample
);
2475 int retval
=ERROR_OK
;
2476 // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2477 reg_t
*reg
= register_get_by_name(target
->reg_cache
, "pc", 1);
2481 target
->type
->poll(target
);
2482 if (target
->state
== TARGET_HALTED
)
2484 u32 t
=*((u32
*)reg
->value
);
2485 samples
[numSamples
++]=t
;
2486 retval
= target
->type
->resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2487 target
->type
->poll(target
);
2488 usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2489 } else if (target
->state
== TARGET_RUNNING
)
2491 // We want to quickly sample the PC.
2492 target
->type
->halt(target
);
2495 command_print(cmd_ctx
, "Target not halted or running");
2499 if (retval
!=ERROR_OK
)
2504 gettimeofday(&now
, NULL
);
2505 if ((numSamples
>=maxSample
) || ((now
.tv_sec
>= timeout
.tv_sec
) && (now
.tv_usec
>= timeout
.tv_usec
)))
2507 command_print(cmd_ctx
, "Profiling completed. %d samples.", numSamples
);
2508 target
->type
->poll(target
);
2509 if (target
->state
== TARGET_HALTED
)
2511 target
->type
->resume(target
, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2513 target
->type
->poll(target
);
2514 writeGmon(samples
, numSamples
, args
[1]);
2515 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)