- removed target_process_events as only used in handle_resume_command and events...
[fw/openocd] / src / target / target.c
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
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.                                   *
9  *                                                                         *
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.                          *
14  *                                                                         *
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  ***************************************************************************/
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
23
24 #include "replacements.h"
25 #include "target.h"
26 #include "target_request.h"
27
28 #include "log.h"
29 #include "configuration.h"
30 #include "binarybuffer.h"
31 #include "jtag.h"
32
33 #include <string.h>
34 #include <stdlib.h>
35 #include <inttypes.h>
36
37 #include <sys/types.h>
38 #include <sys/stat.h>
39 #include <unistd.h>
40 #include <errno.h>
41
42 #include <sys/time.h>
43 #include <time.h>
44
45 #include <time_support.h>
46
47 #include <fileio.h>
48 #include <image.h>
49
50 int cli_target_callback_event_handler(struct target_s *target, enum target_event event, void *priv);
51
52 int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
53 int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
54
55 int handle_target_script_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
56 int handle_run_and_halt_time_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
57 int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
58
59 int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
60 int handle_poll_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
61 int handle_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
62 int handle_wait_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
63 int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
64 int handle_soft_reset_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
65 int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
66 int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
67 int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
68 int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
69 int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
70 int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
71 int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
72 int handle_bp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
73 int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
74 int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
75 int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
76 int handle_virt2phys_command(command_context_t *cmd_ctx, char *cmd, char **args, int argc);
77 int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
78
79 /* targets
80  */
81 extern target_type_t arm7tdmi_target;
82 extern target_type_t arm720t_target;
83 extern target_type_t arm9tdmi_target;
84 extern target_type_t arm920t_target;
85 extern target_type_t arm966e_target;
86 extern target_type_t arm926ejs_target;
87 extern target_type_t feroceon_target;
88 extern target_type_t xscale_target;
89 extern target_type_t cortexm3_target;
90 extern target_type_t arm11_target;
91
92 target_type_t *target_types[] =
93 {
94         &arm7tdmi_target,
95         &arm9tdmi_target,
96         &arm920t_target,
97         &arm720t_target,
98         &arm966e_target,
99         &arm926ejs_target,
100         &feroceon_target,
101         &xscale_target,
102         &cortexm3_target,
103         &arm11_target,
104         NULL,
105 };
106
107 target_t *targets = NULL;
108 target_event_callback_t *target_event_callbacks = NULL;
109 target_timer_callback_t *target_timer_callbacks = NULL;
110
111 char *target_state_strings[] =
112 {
113         "unknown",
114         "running",
115         "halted",
116         "reset",
117         "debug_running",
118 };
119
120 char *target_debug_reason_strings[] =
121 {
122         "debug request", "breakpoint", "watchpoint",
123         "watchpoint and breakpoint", "single step",
124         "target not halted", "undefined"
125 };
126
127 char *target_endianess_strings[] =
128 {
129         "big endian",
130         "little endian",
131 };
132
133 static int target_continous_poll = 1;
134
135 /* read a u32 from a buffer in target memory endianness */
136 u32 target_buffer_get_u32(target_t *target, u8 *buffer)
137 {
138         if (target->endianness == TARGET_LITTLE_ENDIAN)
139                 return le_to_h_u32(buffer);
140         else
141                 return be_to_h_u32(buffer);
142 }
143
144 /* read a u16 from a buffer in target memory endianness */
145 u16 target_buffer_get_u16(target_t *target, u8 *buffer)
146 {
147         if (target->endianness == TARGET_LITTLE_ENDIAN)
148                 return le_to_h_u16(buffer);
149         else
150                 return be_to_h_u16(buffer);
151 }
152
153 /* write a u32 to a buffer in target memory endianness */
154 void target_buffer_set_u32(target_t *target, u8 *buffer, u32 value)
155 {
156         if (target->endianness == TARGET_LITTLE_ENDIAN)
157                 h_u32_to_le(buffer, value);
158         else
159                 h_u32_to_be(buffer, value);
160 }
161
162 /* write a u16 to a buffer in target memory endianness */
163 void target_buffer_set_u16(target_t *target, u8 *buffer, u16 value)
164 {
165         if (target->endianness == TARGET_LITTLE_ENDIAN)
166                 h_u16_to_le(buffer, value);
167         else
168                 h_u16_to_be(buffer, value);
169 }
170
171 /* returns a pointer to the n-th configured target */
172 target_t* get_target_by_num(int num)
173 {
174         target_t *target = targets;
175         int i = 0;
176
177         while (target)
178         {
179                 if (num == i)
180                         return target;
181                 target = target->next;
182                 i++;
183         }
184
185         return NULL;
186 }
187
188 int get_num_by_target(target_t *query_target)
189 {
190         target_t *target = targets;
191         int i = 0;      
192         
193         while (target)
194         {
195                 if (target == query_target)
196                         return i;
197                 target = target->next;
198                 i++;
199         }
200         
201         return -1;
202 }
203
204 target_t* get_current_target(command_context_t *cmd_ctx)
205 {
206         target_t *target = get_target_by_num(cmd_ctx->current_target);
207         
208         if (target == NULL)
209         {
210                 LOG_ERROR("BUG: current_target out of bounds");
211                 exit(-1);
212         }
213         
214         return target;
215 }
216
217 /* Process target initialization, when target entered debug out of reset
218  * the handler is unregistered at the end of this function, so it's only called once
219  */
220 int target_init_handler(struct target_s *target, enum target_event event, void *priv)
221 {
222         struct command_context_s *cmd_ctx = priv;
223         
224         if (event == TARGET_EVENT_HALTED)
225         {
226                 target_unregister_event_callback(target_init_handler, priv);
227                 target_invoke_script(cmd_ctx, target, "post_reset");
228                 jtag_execute_queue();
229         }
230         
231         return ERROR_OK;
232 }
233
234 int target_run_and_halt_handler(void *priv)
235 {
236         target_t *target = priv;
237         
238         target_halt(target);
239         
240         return ERROR_OK;
241 }
242
243 int target_poll(struct target_s *target)
244 {
245         /* We can't poll until after examine */
246         if (!target->type->examined)
247         {
248                 /* Fail silently lest we pollute the log */
249                 return ERROR_FAIL;
250         }
251         return target->type->poll(target);
252 }
253
254 int target_halt(struct target_s *target)
255 {
256         /* We can't poll until after examine */
257         if (!target->type->examined)
258         {
259                 LOG_ERROR("Target not examined yet");
260                 return ERROR_FAIL;
261         }
262         return target->type->halt(target);
263 }
264
265 int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution)
266 {
267         /* We can't poll until after examine */
268         if (!target->type->examined)
269         {
270                 LOG_ERROR("Target not examined yet");
271                 return ERROR_FAIL;
272         }
273         
274         return target->type->resume(target, current, address, handle_breakpoints, debug_execution);
275 }
276
277 int target_process_reset(struct command_context_s *cmd_ctx)
278 {
279         int retval = ERROR_OK;
280         target_t *target;
281         struct timeval timeout, now;
282
283         jtag->speed(jtag_speed);
284
285         target = targets;
286         while (target)
287         {
288                 target_invoke_script(cmd_ctx, target, "pre_reset");
289                 target = target->next;
290         }
291         
292         if ((retval = jtag_init_reset(cmd_ctx)) != ERROR_OK)
293                 return retval;
294         
295         /* First time this is executed after launching OpenOCD, it will read out 
296          * the type of CPU, etc. and init Embedded ICE registers in host
297          * memory. 
298          * 
299          * It will also set up ICE registers in the target.
300          * 
301          * However, if we assert TRST later, we need to set up the registers again. 
302          * 
303          * For the "reset halt/init" case we must only set up the registers here.
304          */
305         if ((retval = target_examine(cmd_ctx)) != ERROR_OK)
306                 return retval;
307         
308         /* prepare reset_halt where necessary */
309         target = targets;
310         while (target)
311         {
312                 if (jtag_reset_config & RESET_SRST_PULLS_TRST)
313                 {
314                         switch (target->reset_mode)
315                         {
316                                 case RESET_HALT:
317                                         command_print(cmd_ctx, "nSRST pulls nTRST, falling back to \"reset run_and_halt\"");
318                                         target->reset_mode = RESET_RUN_AND_HALT;
319                                         break;
320                                 case RESET_INIT:
321                                         command_print(cmd_ctx, "nSRST pulls nTRST, falling back to \"reset run_and_init\"");
322                                         target->reset_mode = RESET_RUN_AND_INIT;
323                                         break;
324                                 default:
325                                         break;
326                         } 
327                 }
328                 target = target->next;
329         }
330         
331         target = targets;
332         while (target)
333         {
334                 /* we have no idea what state the target is in, so we
335                  * have to drop working areas
336                  */
337                 target_free_all_working_areas_restore(target, 0);
338                 target->type->assert_reset(target);
339                 target = target->next;
340         }
341         if ((retval = jtag_execute_queue()) != ERROR_OK)
342         {
343                 LOG_WARNING("JTAG communication failed asserting reset.");
344                 retval = ERROR_OK;
345         }
346         
347         /* request target halt if necessary, and schedule further action */
348         target = targets;
349         while (target)
350         {
351                 switch (target->reset_mode)
352                 {
353                         case RESET_RUN:
354                                 /* nothing to do if target just wants to be run */
355                                 break;
356                         case RESET_RUN_AND_HALT:
357                                 /* schedule halt */
358                                 target_register_timer_callback(target_run_and_halt_handler, target->run_and_halt_time, 0, target);
359                                 break;
360                         case RESET_RUN_AND_INIT:
361                                 /* schedule halt */
362                                 target_register_timer_callback(target_run_and_halt_handler, target->run_and_halt_time, 0, target);
363                                 target_register_event_callback(target_init_handler, cmd_ctx);
364                                 break;
365                         case RESET_HALT:
366                                 target_halt(target);
367                                 break;
368                         case RESET_INIT:
369                                 target_halt(target);
370                                 target_register_event_callback(target_init_handler, cmd_ctx);
371                                 break;
372                         default:
373                                 LOG_ERROR("BUG: unknown target->reset_mode");
374                 }
375                 target = target->next;
376         }
377         
378         if ((retval = jtag_execute_queue()) != ERROR_OK)
379         {
380                 LOG_WARNING("JTAG communication failed while reset was asserted. Consider using srst_only for reset_config.");
381                 retval = ERROR_OK;              
382         }
383         
384         target = targets;
385         while (target)
386         {
387                 target->type->deassert_reset(target);
388                 target = target->next;
389         }
390         
391         if ((retval = jtag_execute_queue()) != ERROR_OK)
392         {
393                 LOG_WARNING("JTAG communication failed while deasserting reset.");
394                 retval = ERROR_OK;
395         }
396
397         if (jtag_reset_config & RESET_SRST_PULLS_TRST)
398         {
399                 /* If TRST was asserted we need to set up registers again */
400                 if ((retval = target_examine(cmd_ctx)) != ERROR_OK)
401                         return retval;
402         }               
403         
404         
405         LOG_DEBUG("Waiting for halted stated as approperiate");
406         
407         /* Wait for reset to complete, maximum 5 seconds. */    
408         gettimeofday(&timeout, NULL);
409         timeval_add_time(&timeout, 5, 0);
410         for(;;)
411         {
412                 gettimeofday(&now, NULL);
413                 
414                 target_call_timer_callbacks_now();
415                 
416                 target = targets;
417                 while (target)
418                 {
419                         LOG_DEBUG("Polling target");
420                         target_poll(target);
421                         if ((target->reset_mode == RESET_RUN_AND_INIT) || 
422                                         (target->reset_mode == RESET_RUN_AND_HALT) ||
423                                         (target->reset_mode == RESET_HALT) ||
424                                         (target->reset_mode == RESET_INIT))
425                         {
426                                 if (target->state != TARGET_HALTED)
427                                 {
428                                         if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
429                                         {
430                                                 LOG_USER("Timed out waiting for halt after reset");
431                                                 goto done;
432                                         }
433                                         /* this will send alive messages on e.g. GDB remote protocol. */
434                                         usleep(500*1000); 
435                                         LOG_USER_N("%s", ""); /* avoid warning about zero length formatting message*/ 
436                                         goto again;
437                                 }
438                         }
439                         target = target->next;
440                 }
441                 /* All targets we're waiting for are halted */
442                 break;
443                 
444                 again:;
445         }
446         done:
447         
448         
449         /* We want any events to be processed before the prompt */
450         target_call_timer_callbacks_now();
451
452         /* if we timed out we need to unregister these handlers */
453         target = targets;
454         while (target)
455         {
456                 target_unregister_timer_callback(target_run_and_halt_handler, target);
457                 target = target->next;
458         }
459         target_unregister_event_callback(target_init_handler, cmd_ctx);
460         
461         jtag->speed(jtag_speed_post_reset);
462         
463         return retval;
464 }
465
466 static int default_virt2phys(struct target_s *target, u32 virtual, u32 *physical)
467 {
468         *physical = virtual;
469         return ERROR_OK;
470 }
471
472 static int default_mmu(struct target_s *target, int *enabled)
473 {
474         *enabled = 0;
475         return ERROR_OK;
476 }
477
478 static int default_examine(struct command_context_s *cmd_ctx, struct target_s *target)
479 {
480         target->type->examined = 1;
481         return ERROR_OK;
482 }
483
484
485 /* Targets that correctly implement init+examine, i.e.
486  * no communication with target during init:
487  * 
488  * XScale 
489  */
490 int target_examine(struct command_context_s *cmd_ctx)
491 {
492         int retval = ERROR_OK;
493         target_t *target = targets;
494         while (target)
495         {
496                 if ((retval = target->type->examine(cmd_ctx, target))!=ERROR_OK)
497                         return retval;
498                 target = target->next;
499         }
500         return retval;
501 }
502
503 static int target_write_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer)
504 {
505         if (!target->type->examined)
506         {
507                 LOG_ERROR("Target not examined yet");
508                 return ERROR_FAIL;
509         }
510         return target->type->write_memory_imp(target, address, size, count, buffer);
511 }
512
513 static int target_read_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer)
514 {
515         if (!target->type->examined)
516         {
517                 LOG_ERROR("Target not examined yet");
518                 return ERROR_FAIL;
519         }
520         return target->type->read_memory_imp(target, address, size, count, buffer);
521 }
522
523 static int target_soft_reset_halt_imp(struct target_s *target)
524 {
525         if (!target->type->examined)
526         {
527                 LOG_ERROR("Target not examined yet");
528                 return ERROR_FAIL;
529         }
530         return target->type->soft_reset_halt_imp(target);
531 }
532
533 static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info)
534 {
535         if (!target->type->examined)
536         {
537                 LOG_ERROR("Target not examined yet");
538                 return ERROR_FAIL;
539         }
540         return target->type->run_algorithm_imp(target, num_mem_params, mem_params, num_reg_params, reg_param, entry_point, exit_point, timeout_ms, arch_info);
541 }
542
543 int target_init(struct command_context_s *cmd_ctx)
544 {
545         target_t *target = targets;
546         
547         while (target)
548         {
549                 target->type->examined = 0;
550                 if (target->type->examine == NULL)
551                 {
552                         target->type->examine = default_examine;
553                 }
554                 
555                 if (target->type->init_target(cmd_ctx, target) != ERROR_OK)
556                 {
557                         LOG_ERROR("target '%s' init failed", target->type->name);
558                         exit(-1);
559                 }
560                 
561                 /* Set up default functions if none are provided by target */
562                 if (target->type->virt2phys == NULL)
563                 {
564                         target->type->virt2phys = default_virt2phys;
565                 }
566                 target->type->virt2phys = default_virt2phys;
567                 /* a non-invasive way(in terms of patches) to add some code that
568                  * runs before the type->write/read_memory implementation
569                  */
570                 target->type->write_memory_imp = target->type->write_memory;
571                 target->type->write_memory = target_write_memory_imp;
572                 target->type->read_memory_imp = target->type->read_memory;
573                 target->type->read_memory = target_read_memory_imp;
574                 target->type->soft_reset_halt_imp = target->type->soft_reset_halt;
575                 target->type->soft_reset_halt = target_soft_reset_halt_imp;
576                 target->type->run_algorithm_imp = target->type->run_algorithm;
577                 target->type->run_algorithm = target_run_algorithm_imp;
578
579                 
580                 if (target->type->mmu == NULL)
581                 {
582                         target->type->mmu = default_mmu;
583                 }
584                 target = target->next;
585         }
586         
587         if (targets)
588         {
589                 target_register_user_commands(cmd_ctx);
590                 target_register_timer_callback(handle_target, 100, 1, NULL);
591         }
592                 
593         return ERROR_OK;
594 }
595
596 int target_register_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv)
597 {
598         target_event_callback_t **callbacks_p = &target_event_callbacks;
599         
600         if (callback == NULL)
601         {
602                 return ERROR_INVALID_ARGUMENTS;
603         }
604         
605         if (*callbacks_p)
606         {
607                 while ((*callbacks_p)->next)
608                         callbacks_p = &((*callbacks_p)->next);
609                 callbacks_p = &((*callbacks_p)->next);
610         }
611         
612         (*callbacks_p) = malloc(sizeof(target_event_callback_t));
613         (*callbacks_p)->callback = callback;
614         (*callbacks_p)->priv = priv;
615         (*callbacks_p)->next = NULL;
616         
617         return ERROR_OK;
618 }
619
620 int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int periodic, void *priv)
621 {
622         target_timer_callback_t **callbacks_p = &target_timer_callbacks;
623         struct timeval now;
624         
625         if (callback == NULL)
626         {
627                 return ERROR_INVALID_ARGUMENTS;
628         }
629         
630         if (*callbacks_p)
631         {
632                 while ((*callbacks_p)->next)
633                         callbacks_p = &((*callbacks_p)->next);
634                 callbacks_p = &((*callbacks_p)->next);
635         }
636         
637         (*callbacks_p) = malloc(sizeof(target_timer_callback_t));
638         (*callbacks_p)->callback = callback;
639         (*callbacks_p)->periodic = periodic;
640         (*callbacks_p)->time_ms = time_ms;
641         
642         gettimeofday(&now, NULL);
643         (*callbacks_p)->when.tv_usec = now.tv_usec + (time_ms % 1000) * 1000;
644         time_ms -= (time_ms % 1000);
645         (*callbacks_p)->when.tv_sec = now.tv_sec + (time_ms / 1000);
646         if ((*callbacks_p)->when.tv_usec > 1000000)
647         {
648                 (*callbacks_p)->when.tv_usec = (*callbacks_p)->when.tv_usec - 1000000;
649                 (*callbacks_p)->when.tv_sec += 1;
650         }
651         
652         (*callbacks_p)->priv = priv;
653         (*callbacks_p)->next = NULL;
654         
655         return ERROR_OK;
656 }
657
658 int target_unregister_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv)
659 {
660         target_event_callback_t **p = &target_event_callbacks;
661         target_event_callback_t *c = target_event_callbacks;
662         
663         if (callback == NULL)
664         {
665                 return ERROR_INVALID_ARGUMENTS;
666         }
667                 
668         while (c)
669         {
670                 target_event_callback_t *next = c->next;
671                 if ((c->callback == callback) && (c->priv == priv))
672                 {
673                         *p = next;
674                         free(c);
675                         return ERROR_OK;
676                 }
677                 else
678                         p = &(c->next);
679                 c = next;
680         }
681         
682         return ERROR_OK;
683 }
684
685 int target_unregister_timer_callback(int (*callback)(void *priv), void *priv)
686 {
687         target_timer_callback_t **p = &target_timer_callbacks;
688         target_timer_callback_t *c = target_timer_callbacks;
689         
690         if (callback == NULL)
691         {
692                 return ERROR_INVALID_ARGUMENTS;
693         }
694                 
695         while (c)
696         {
697                 target_timer_callback_t *next = c->next;
698                 if ((c->callback == callback) && (c->priv == priv))
699                 {
700                         *p = next;
701                         free(c);
702                         return ERROR_OK;
703                 }
704                 else
705                         p = &(c->next);
706                 c = next;
707         }
708         
709         return ERROR_OK;
710 }
711
712 int target_call_event_callbacks(target_t *target, enum target_event event)
713 {
714         target_event_callback_t *callback = target_event_callbacks;
715         target_event_callback_t *next_callback;
716         
717         LOG_DEBUG("target event %i", event);
718         
719         while (callback)
720         {
721                 next_callback = callback->next;
722                 callback->callback(target, event, callback->priv);
723                 callback = next_callback;
724         }
725         
726         return ERROR_OK;
727 }
728
729 static int target_call_timer_callbacks_check_time(int checktime)
730 {
731         target_timer_callback_t *callback = target_timer_callbacks;
732         target_timer_callback_t *next_callback;
733         struct timeval now;
734
735         gettimeofday(&now, NULL);
736         
737         while (callback)
738         {
739                 next_callback = callback->next;
740                 
741                 if ((!checktime&&callback->periodic)||
742                                 (((now.tv_sec >= callback->when.tv_sec) && (now.tv_usec >= callback->when.tv_usec))
743                                                 || (now.tv_sec > callback->when.tv_sec)))
744                 {
745                         if(callback->callback != NULL)
746                         {
747                                 callback->callback(callback->priv);
748                                 if (callback->periodic)
749                                 {
750                                         int time_ms = callback->time_ms;
751                                         callback->when.tv_usec = now.tv_usec + (time_ms % 1000) * 1000;
752                                         time_ms -= (time_ms % 1000);
753                                         callback->when.tv_sec = now.tv_sec + time_ms / 1000;
754                                         if (callback->when.tv_usec > 1000000)
755                                         {
756                                                 callback->when.tv_usec = callback->when.tv_usec - 1000000;
757                                                 callback->when.tv_sec += 1;
758                                         }
759                                 }
760                                 else
761                                         target_unregister_timer_callback(callback->callback, callback->priv);
762                         }
763                 }
764                         
765                 callback = next_callback;
766         }
767         
768         return ERROR_OK;
769 }
770
771 int target_call_timer_callbacks()
772 {
773         return target_call_timer_callbacks_check_time(1);
774 }
775
776 /* invoke periodic callbacks immediately */
777 int target_call_timer_callbacks_now()
778 {
779         return target_call_timer_callbacks(0);
780 }
781
782 int target_alloc_working_area(struct target_s *target, u32 size, working_area_t **area)
783 {
784         working_area_t *c = target->working_areas;
785         working_area_t *new_wa = NULL;
786         
787         /* Reevaluate working area address based on MMU state*/
788         if (target->working_areas == NULL)
789         {
790                 int retval;
791                 int enabled;
792                 retval = target->type->mmu(target, &enabled);
793                 if (retval != ERROR_OK)
794                 {
795                         return retval;
796                 }
797                 if (enabled)
798                 {
799                         target->working_area = target->working_area_virt;
800                 }
801                 else
802                 {
803                         target->working_area = target->working_area_phys;
804                 }
805         }
806         
807         /* only allocate multiples of 4 byte */
808         if (size % 4)
809         {
810                 LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding");
811                 size = CEIL(size, 4);
812         }
813         
814         /* see if there's already a matching working area */
815         while (c)
816         {
817                 if ((c->free) && (c->size == size))
818                 {
819                         new_wa = c;
820                         break;
821                 }
822                 c = c->next;
823         }
824         
825         /* if not, allocate a new one */
826         if (!new_wa)
827         {
828                 working_area_t **p = &target->working_areas;
829                 u32 first_free = target->working_area;
830                 u32 free_size = target->working_area_size;
831                 
832                 LOG_DEBUG("allocating new working area");
833                 
834                 c = target->working_areas;
835                 while (c)
836                 {
837                         first_free += c->size;
838                         free_size -= c->size;
839                         p = &c->next;
840                         c = c->next;
841                 }
842                 
843                 if (free_size < size)
844                 {
845                         LOG_WARNING("not enough working area available(requested %d, free %d)", size, free_size);
846                         return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
847                 }
848                 
849                 new_wa = malloc(sizeof(working_area_t));
850                 new_wa->next = NULL;
851                 new_wa->size = size;
852                 new_wa->address = first_free;
853                 
854                 if (target->backup_working_area)
855                 {
856                         new_wa->backup = malloc(new_wa->size);
857                         target->type->read_memory(target, new_wa->address, 4, new_wa->size / 4, new_wa->backup);
858                 }
859                 else
860                 {
861                         new_wa->backup = NULL;
862                 }
863                 
864                 /* put new entry in list */
865                 *p = new_wa;
866         }
867         
868         /* mark as used, and return the new (reused) area */
869         new_wa->free = 0;
870         *area = new_wa;
871         
872         /* user pointer */
873         new_wa->user = area;
874         
875         return ERROR_OK;
876 }
877
878 int target_free_working_area_restore(struct target_s *target, working_area_t *area, int restore)
879 {
880         if (area->free)
881                 return ERROR_OK;
882         
883         if (restore&&target->backup_working_area)
884                 target->type->write_memory(target, area->address, 4, area->size / 4, area->backup);
885         
886         area->free = 1;
887         
888         /* mark user pointer invalid */
889         *area->user = NULL;
890         area->user = NULL;
891         
892         return ERROR_OK;
893 }
894
895 int target_free_working_area(struct target_s *target, working_area_t *area)
896 {
897         return target_free_working_area_restore(target, area, 1);
898 }
899
900 int target_free_all_working_areas_restore(struct target_s *target, int restore)
901 {
902         working_area_t *c = target->working_areas;
903
904         while (c)
905         {
906                 working_area_t *next = c->next;
907                 target_free_working_area_restore(target, c, restore);
908                 
909                 if (c->backup)
910                         free(c->backup);
911                 
912                 free(c);
913                 
914                 c = next;
915         }
916         
917         target->working_areas = NULL;
918         
919         return ERROR_OK;
920 }
921
922 int target_free_all_working_areas(struct target_s *target)
923 {
924         return target_free_all_working_areas_restore(target, 1); 
925 }
926
927 int target_register_commands(struct command_context_s *cmd_ctx)
928 {
929         register_command(cmd_ctx, NULL, "target", handle_target_command, COMMAND_CONFIG, "target <cpu> [reset_init default - DEPRECATED] <chainpos> <endianness> <variant> [cpu type specifc args]");
930         register_command(cmd_ctx, NULL, "targets", handle_targets_command, COMMAND_EXEC, NULL);
931         register_command(cmd_ctx, NULL, "target_script", handle_target_script_command, COMMAND_CONFIG, 
932         "target_script <target#> <event=reset/pre_reset/post_halt/pre_resume/gdb_program_config> <script_file>");
933         register_command(cmd_ctx, NULL, "run_and_halt_time", handle_run_and_halt_time_command, COMMAND_CONFIG, "<target> <run time ms>");
934         register_command(cmd_ctx, NULL, "working_area", handle_working_area_command, COMMAND_ANY, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
935         register_command(cmd_ctx, NULL, "virt2phys", handle_virt2phys_command, COMMAND_ANY, "virt2phys <virtual address>");
936         register_command(cmd_ctx, NULL, "profile", handle_profile_command, COMMAND_EXEC, "PRELIMINARY! - profile <seconds> <gmon.out>");
937
938         return ERROR_OK;
939 }
940
941 int target_arch_state(struct target_s *target)
942 {
943         int retval;
944         if (target==NULL)
945         {
946                 LOG_USER("No target has been configured");
947                 return ERROR_OK;
948         }
949         
950         LOG_USER("target state: %s", target_state_strings[target->state]);
951         
952         if (target->state!=TARGET_HALTED)
953                 return ERROR_OK;
954         
955         retval=target->type->arch_state(target);
956         return retval;
957 }
958
959 /* Single aligned words are guaranteed to use 16 or 32 bit access 
960  * mode respectively, otherwise data is handled as quickly as 
961  * possible
962  */
963 int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer)
964 {
965         int retval;
966         if (!target->type->examined)
967         {
968                 LOG_ERROR("Target not examined yet");
969                 return ERROR_FAIL;
970         }
971         
972         LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size, address);
973         
974         if (((address % 2) == 0) && (size == 2))
975         {
976                 return target->type->write_memory(target, address, 2, 1, buffer);
977         }
978         
979         /* handle unaligned head bytes */
980         if (address % 4)
981         {
982                 int unaligned = 4 - (address % 4);
983                 
984                 if (unaligned > size)
985                         unaligned = size;
986
987                 if ((retval = target->type->write_memory(target, address, 1, unaligned, buffer)) != ERROR_OK)
988                         return retval;
989                 
990                 buffer += unaligned;
991                 address += unaligned;
992                 size -= unaligned;
993         }
994                 
995         /* handle aligned words */
996         if (size >= 4)
997         {
998                 int aligned = size - (size % 4);
999         
1000                 /* use bulk writes above a certain limit. This may have to be changed */
1001                 if (aligned > 128)
1002                 {
1003                         if ((retval = target->type->bulk_write_memory(target, address, aligned / 4, buffer)) != ERROR_OK)
1004                                 return retval;
1005                 }
1006                 else
1007                 {
1008                         if ((retval = target->type->write_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK)
1009                                 return retval;
1010                 }
1011                 
1012                 buffer += aligned;
1013                 address += aligned;
1014                 size -= aligned;
1015         }
1016         
1017         /* handle tail writes of less than 4 bytes */
1018         if (size > 0)
1019         {
1020                 if ((retval = target->type->write_memory(target, address, 1, size, buffer)) != ERROR_OK)
1021                         return retval;
1022         }
1023         
1024         return ERROR_OK;
1025 }
1026
1027
1028 /* Single aligned words are guaranteed to use 16 or 32 bit access 
1029  * mode respectively, otherwise data is handled as quickly as 
1030  * possible
1031  */
1032 int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer)
1033 {
1034         int retval;
1035         if (!target->type->examined)
1036         {
1037                 LOG_ERROR("Target not examined yet");
1038                 return ERROR_FAIL;
1039         }
1040
1041         LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size, address);
1042         
1043         if (((address % 2) == 0) && (size == 2))
1044         {
1045                 return target->type->read_memory(target, address, 2, 1, buffer);
1046         }
1047         
1048         /* handle unaligned head bytes */
1049         if (address % 4)
1050         {
1051                 int unaligned = 4 - (address % 4);
1052                 
1053                 if (unaligned > size)
1054                         unaligned = size;
1055
1056                 if ((retval = target->type->read_memory(target, address, 1, unaligned, buffer)) != ERROR_OK)
1057                         return retval;
1058                 
1059                 buffer += unaligned;
1060                 address += unaligned;
1061                 size -= unaligned;
1062         }
1063                 
1064         /* handle aligned words */
1065         if (size >= 4)
1066         {
1067                 int aligned = size - (size % 4);
1068         
1069                 if ((retval = target->type->read_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK)
1070                         return retval;
1071                 
1072                 buffer += aligned;
1073                 address += aligned;
1074                 size -= aligned;
1075         }
1076         
1077         /* handle tail writes of less than 4 bytes */
1078         if (size > 0)
1079         {
1080                 if ((retval = target->type->read_memory(target, address, 1, size, buffer)) != ERROR_OK)
1081                         return retval;
1082         }
1083         
1084         return ERROR_OK;
1085 }
1086
1087 int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* crc)
1088 {
1089         u8 *buffer;
1090         int retval;
1091         int i;
1092         u32 checksum = 0;
1093         if (!target->type->examined)
1094         {
1095                 LOG_ERROR("Target not examined yet");
1096                 return ERROR_FAIL;
1097         }
1098         
1099         if ((retval = target->type->checksum_memory(target, address,
1100                 size, &checksum)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE)
1101         {
1102                 buffer = malloc(size);
1103                 if (buffer == NULL)
1104                 {
1105                         LOG_ERROR("error allocating buffer for section (%d bytes)", size);
1106                         return ERROR_INVALID_ARGUMENTS;
1107                 }
1108                 retval = target_read_buffer(target, address, size, buffer);
1109                 if (retval != ERROR_OK)
1110                 {
1111                         free(buffer);
1112                         return retval;
1113                 }
1114
1115                 /* convert to target endianess */
1116                 for (i = 0; i < (size/sizeof(u32)); i++)
1117                 {
1118                         u32 target_data;
1119                         target_data = target_buffer_get_u32(target, &buffer[i*sizeof(u32)]);
1120                         target_buffer_set_u32(target, &buffer[i*sizeof(u32)], target_data);
1121                 }
1122
1123                 retval = image_calculate_checksum( buffer, size, &checksum );
1124                 free(buffer);
1125         }
1126         
1127         *crc = checksum;
1128         
1129         return retval;
1130 }
1131
1132 int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u32* blank)
1133 {
1134         int retval;
1135         if (!target->type->examined)
1136         {
1137                 LOG_ERROR("Target not examined yet");
1138                 return ERROR_FAIL;
1139         }
1140         
1141         if (target->type->blank_check_memory == 0)
1142                 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
1143         
1144         retval = target->type->blank_check_memory(target, address, size, blank);
1145                         
1146         return retval;
1147 }
1148
1149 int target_read_u32(struct target_s *target, u32 address, u32 *value)
1150 {
1151         u8 value_buf[4];
1152         if (!target->type->examined)
1153         {
1154                 LOG_ERROR("Target not examined yet");
1155                 return ERROR_FAIL;
1156         }
1157
1158         int retval = target->type->read_memory(target, address, 4, 1, value_buf);
1159         
1160         if (retval == ERROR_OK)
1161         {
1162                 *value = target_buffer_get_u32(target, value_buf);
1163                 LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, *value);
1164         }
1165         else
1166         {
1167                 *value = 0x0;
1168                 LOG_DEBUG("address: 0x%8.8x failed", address);
1169         }
1170         
1171         return retval;
1172 }
1173
1174 int target_read_u16(struct target_s *target, u32 address, u16 *value)
1175 {
1176         u8 value_buf[2];
1177         if (!target->type->examined)
1178         {
1179                 LOG_ERROR("Target not examined yet");
1180                 return ERROR_FAIL;
1181         }
1182
1183         int retval = target->type->read_memory(target, address, 2, 1, value_buf);
1184         
1185         if (retval == ERROR_OK)
1186         {
1187                 *value = target_buffer_get_u16(target, value_buf);
1188                 LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address, *value);
1189         }
1190         else
1191         {
1192                 *value = 0x0;
1193                 LOG_DEBUG("address: 0x%8.8x failed", address);
1194         }
1195         
1196         return retval;
1197 }
1198
1199 int target_read_u8(struct target_s *target, u32 address, u8 *value)
1200 {
1201         int retval = target->type->read_memory(target, address, 1, 1, value);
1202         if (!target->type->examined)
1203         {
1204                 LOG_ERROR("Target not examined yet");
1205                 return ERROR_FAIL;
1206         }
1207
1208         if (retval == ERROR_OK)
1209         {
1210                 LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, *value);
1211         }
1212         else
1213         {
1214                 *value = 0x0;
1215                 LOG_DEBUG("address: 0x%8.8x failed", address);
1216         }
1217         
1218         return retval;
1219 }
1220
1221 int target_write_u32(struct target_s *target, u32 address, u32 value)
1222 {
1223         int retval;
1224         u8 value_buf[4];
1225         if (!target->type->examined)
1226         {
1227                 LOG_ERROR("Target not examined yet");
1228                 return ERROR_FAIL;
1229         }
1230
1231         LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value);
1232
1233         target_buffer_set_u32(target, value_buf, value);        
1234         if ((retval = target->type->write_memory(target, address, 4, 1, value_buf)) != ERROR_OK)
1235         {
1236                 LOG_DEBUG("failed: %i", retval);
1237         }
1238         
1239         return retval;
1240 }
1241
1242 int target_write_u16(struct target_s *target, u32 address, u16 value)
1243 {
1244         int retval;
1245         u8 value_buf[2];
1246         if (!target->type->examined)
1247         {
1248                 LOG_ERROR("Target not examined yet");
1249                 return ERROR_FAIL;
1250         }
1251
1252         LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value);
1253
1254         target_buffer_set_u16(target, value_buf, value);        
1255         if ((retval = target->type->write_memory(target, address, 2, 1, value_buf)) != ERROR_OK)
1256         {
1257                 LOG_DEBUG("failed: %i", retval);
1258         }
1259         
1260         return retval;
1261 }
1262
1263 int target_write_u8(struct target_s *target, u32 address, u8 value)
1264 {
1265         int retval;
1266         if (!target->type->examined)
1267         {
1268                 LOG_ERROR("Target not examined yet");
1269                 return ERROR_FAIL;
1270         }
1271
1272         LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, value);
1273
1274         if ((retval = target->type->read_memory(target, address, 1, 1, &value)) != ERROR_OK)
1275         {
1276                 LOG_DEBUG("failed: %i", retval);
1277         }
1278         
1279         return retval;
1280 }
1281
1282 int target_register_user_commands(struct command_context_s *cmd_ctx)
1283 {
1284         register_command(cmd_ctx,  NULL, "reg", handle_reg_command, COMMAND_EXEC, NULL);
1285         register_command(cmd_ctx,  NULL, "poll", handle_poll_command, COMMAND_EXEC, "poll target state");
1286         register_command(cmd_ctx,  NULL, "wait_halt", handle_wait_halt_command, COMMAND_EXEC, "wait for target halt [time (s)]");
1287         register_command(cmd_ctx,  NULL, "halt", handle_halt_command, COMMAND_EXEC, "halt target");
1288         register_command(cmd_ctx,  NULL, "resume", handle_resume_command, COMMAND_EXEC, "resume target [addr]");
1289         register_command(cmd_ctx,  NULL, "step", handle_step_command, COMMAND_EXEC, "step one instruction from current PC or [addr]");
1290         register_command(cmd_ctx,  NULL, "reset", handle_reset_command, COMMAND_EXEC, "reset target [run|halt|init|run_and_halt|run_and_init]");
1291         register_command(cmd_ctx,  NULL, "soft_reset_halt", handle_soft_reset_halt_command, COMMAND_EXEC, "halt the target and do a soft reset");
1292
1293         register_command(cmd_ctx,  NULL, "mdw", handle_md_command, COMMAND_EXEC, "display memory words <addr> [count]");
1294         register_command(cmd_ctx,  NULL, "mdh", handle_md_command, COMMAND_EXEC, "display memory half-words <addr> [count]");
1295         register_command(cmd_ctx,  NULL, "mdb", handle_md_command, COMMAND_EXEC, "display memory bytes <addr> [count]");
1296         
1297         register_command(cmd_ctx,  NULL, "mww", handle_mw_command, COMMAND_EXEC, "write memory word <addr> <value> [count]");
1298         register_command(cmd_ctx,  NULL, "mwh", handle_mw_command, COMMAND_EXEC, "write memory half-word <addr> <value> [count]");
1299         register_command(cmd_ctx,  NULL, "mwb", handle_mw_command, COMMAND_EXEC, "write memory byte <addr> <value> [count]");
1300         
1301         register_command(cmd_ctx,  NULL, "bp", handle_bp_command, COMMAND_EXEC, "set breakpoint <address> <length> [hw]");      
1302         register_command(cmd_ctx,  NULL, "rbp", handle_rbp_command, COMMAND_EXEC, "remove breakpoint <adress>");
1303         register_command(cmd_ctx,  NULL, "wp", handle_wp_command, COMMAND_EXEC, "set watchpoint <address> <length> <r/w/a> [value] [mask]");    
1304         register_command(cmd_ctx,  NULL, "rwp", handle_rwp_command, COMMAND_EXEC, "remove watchpoint <adress>");
1305         
1306         register_command(cmd_ctx,  NULL, "load_image", handle_load_image_command, COMMAND_EXEC, "load_image <file> <address> ['bin'|'ihex'|'elf'|'s19']");
1307         register_command(cmd_ctx,  NULL, "dump_image", handle_dump_image_command, COMMAND_EXEC, "dump_image <file> <address> <size>");
1308         register_command(cmd_ctx,  NULL, "verify_image", handle_verify_image_command, COMMAND_EXEC, "verify_image <file> [offset] [type]");
1309         register_command(cmd_ctx,  NULL, "load_binary", handle_load_image_command, COMMAND_EXEC, "[DEPRECATED] load_binary <file> <address>");
1310         register_command(cmd_ctx,  NULL, "dump_binary", handle_dump_image_command, COMMAND_EXEC, "[DEPRECATED] dump_binary <file> <address> <size>");
1311         
1312         target_request_register_commands(cmd_ctx);
1313         trace_register_commands(cmd_ctx);
1314         
1315         return ERROR_OK;
1316 }
1317
1318 int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1319 {
1320         target_t *target = targets;
1321         int count = 0;
1322         
1323         if (argc == 1)
1324         {
1325                 int num = strtoul(args[0], NULL, 0);
1326                 
1327                 while (target)
1328                 {
1329                         count++;
1330                         target = target->next;
1331                 }
1332                 
1333                 if (num < count)
1334                         cmd_ctx->current_target = num;
1335                 else
1336                         command_print(cmd_ctx, "%i is out of bounds, only %i targets are configured", num, count);
1337                         
1338                 return ERROR_OK;
1339         }
1340                 
1341         while (target)
1342         {
1343                 command_print(cmd_ctx, "%i: %s (%s), state: %s", count++, target->type->name, target_endianess_strings[target->endianness], target_state_strings[target->state]);
1344                 target = target->next;
1345         }
1346         
1347         return ERROR_OK;
1348 }
1349
1350 int handle_target_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1351 {
1352         int i;
1353         int found = 0;
1354         
1355         if (argc < 3)
1356         {
1357                 return ERROR_COMMAND_SYNTAX_ERROR;
1358         }
1359         
1360         /* search for the specified target */
1361         if (args[0] && (args[0][0] != 0))
1362         {
1363                 for (i = 0; target_types[i]; i++)
1364                 {
1365                         if (strcmp(args[0], target_types[i]->name) == 0)
1366                         {
1367                                 target_t **last_target_p = &targets;
1368                                 
1369                                 /* register target specific commands */
1370                                 if (target_types[i]->register_commands(cmd_ctx) != ERROR_OK)
1371                                 {
1372                                         LOG_ERROR("couldn't register '%s' commands", args[0]);
1373                                         exit(-1);
1374                                 }
1375
1376                                 if (*last_target_p)
1377                                 {
1378                                         while ((*last_target_p)->next)
1379                                                 last_target_p = &((*last_target_p)->next);
1380                                         last_target_p = &((*last_target_p)->next);
1381                                 }
1382
1383                                 *last_target_p = malloc(sizeof(target_t));
1384                                 
1385                                 /* allocate memory for each unique target type */
1386                                 (*last_target_p)->type = (target_type_t*)malloc(sizeof(target_type_t));
1387                                 *((*last_target_p)->type) = *target_types[i]; 
1388                                 
1389                                 if (strcmp(args[1], "big") == 0)
1390                                         (*last_target_p)->endianness = TARGET_BIG_ENDIAN;
1391                                 else if (strcmp(args[1], "little") == 0)
1392                                         (*last_target_p)->endianness = TARGET_LITTLE_ENDIAN;
1393                                 else
1394                                 {
1395                                         LOG_ERROR("endianness must be either 'little' or 'big', not '%s'", args[1]);
1396                                         return ERROR_COMMAND_SYNTAX_ERROR;
1397                                 }
1398                                 
1399                                 /* what to do on a target reset */
1400                                 (*last_target_p)->reset_mode = RESET_INIT; /* default */
1401                                 if (strcmp(args[2], "reset_halt") == 0)
1402                                         (*last_target_p)->reset_mode = RESET_HALT;
1403                                 else if (strcmp(args[2], "reset_run") == 0)
1404                                         (*last_target_p)->reset_mode = RESET_RUN;
1405                                 else if (strcmp(args[2], "reset_init") == 0)
1406                                         (*last_target_p)->reset_mode = RESET_INIT;
1407                                 else if (strcmp(args[2], "run_and_halt") == 0)
1408                                         (*last_target_p)->reset_mode = RESET_RUN_AND_HALT;
1409                                 else if (strcmp(args[2], "run_and_init") == 0)
1410                                         (*last_target_p)->reset_mode = RESET_RUN_AND_INIT;
1411                                 else
1412                                 {
1413                                         /* Kludge! we want to make this reset arg optional while remaining compatible! */
1414                                         args--;
1415                                         argc++;
1416                                 }
1417                                 (*last_target_p)->run_and_halt_time = 1000; /* default 1s */
1418                                 
1419                                 (*last_target_p)->working_area = 0x0;
1420                                 (*last_target_p)->working_area_size = 0x0;
1421                                 (*last_target_p)->working_areas = NULL;
1422                                 (*last_target_p)->backup_working_area = 0;
1423                                 
1424                                 (*last_target_p)->state = TARGET_UNKNOWN;
1425                                 (*last_target_p)->debug_reason = DBG_REASON_UNDEFINED;
1426                                 (*last_target_p)->reg_cache = NULL;
1427                                 (*last_target_p)->breakpoints = NULL;
1428                                 (*last_target_p)->watchpoints = NULL;
1429                                 (*last_target_p)->next = NULL;
1430                                 (*last_target_p)->arch_info = NULL;
1431                                 
1432                                 /* initialize trace information */
1433                                 (*last_target_p)->trace_info = malloc(sizeof(trace_t));
1434                                 (*last_target_p)->trace_info->num_trace_points = 0;
1435                                 (*last_target_p)->trace_info->trace_points_size = 0;
1436                                 (*last_target_p)->trace_info->trace_points = NULL;
1437                                 (*last_target_p)->trace_info->trace_history_size = 0;
1438                                 (*last_target_p)->trace_info->trace_history = NULL;
1439                                 (*last_target_p)->trace_info->trace_history_pos = 0;
1440                                 (*last_target_p)->trace_info->trace_history_overflowed = 0;
1441                                 
1442                                 (*last_target_p)->dbgmsg = NULL;
1443                                 (*last_target_p)->dbg_msg_enabled = 0;
1444                                                                 
1445                                 (*last_target_p)->type->target_command(cmd_ctx, cmd, args, argc, *last_target_p);
1446                                 
1447                                 found = 1;
1448                                 break;
1449                         }
1450                 }
1451         }
1452         
1453         /* no matching target found */
1454         if (!found)
1455         {
1456                 LOG_ERROR("target '%s' not found", args[0]);
1457                 return ERROR_COMMAND_SYNTAX_ERROR;
1458         }
1459
1460         return ERROR_OK;
1461 }
1462
1463 int target_invoke_script(struct command_context_s *cmd_ctx, target_t *target, char *name)
1464 {
1465         return command_run_linef(cmd_ctx, " if {[catch {info body target_%s_%d} t]==0} {target_%s_%d}", 
1466         name, get_num_by_target(target),
1467         name, get_num_by_target(target));
1468 }
1469
1470 int handle_target_script_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1471 {
1472         target_t *target = NULL;
1473         
1474         if (argc < 3)
1475         {
1476                 LOG_ERROR("incomplete target_script command");
1477                 return ERROR_COMMAND_SYNTAX_ERROR;
1478         }
1479         
1480         target = get_target_by_num(strtoul(args[0], NULL, 0));
1481         
1482         if (!target)
1483         {
1484                 return ERROR_COMMAND_SYNTAX_ERROR;
1485         }
1486         
1487         const char *event=args[1];
1488         if (strcmp("reset", event)==0)
1489         {
1490                 /* synonymous */
1491                 event="post_reset";
1492         }
1493                         
1494         /* Define a tcl procedure which we'll invoke upon some event */
1495         command_run_linef(cmd_ctx, 
1496         "proc target_%s_%d {} {"
1497         "openocd {script %s}" 
1498         "}",
1499         event,
1500         get_num_by_target(target),
1501         args[2]);
1502         
1503         return ERROR_OK;
1504 }
1505
1506 int handle_run_and_halt_time_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1507 {
1508         target_t *target = NULL;
1509         
1510         if (argc < 2)
1511         {
1512                 return ERROR_COMMAND_SYNTAX_ERROR;
1513         }
1514         
1515         target = get_target_by_num(strtoul(args[0], NULL, 0));
1516         if (!target)
1517         {
1518                 return ERROR_COMMAND_SYNTAX_ERROR;
1519         }
1520         
1521         target->run_and_halt_time = strtoul(args[1], NULL, 0);
1522         
1523         return ERROR_OK;
1524 }
1525
1526 int handle_working_area_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1527 {
1528         target_t *target = NULL;
1529         
1530         if ((argc < 4) || (argc > 5))
1531         {
1532                 return ERROR_COMMAND_SYNTAX_ERROR;
1533         }
1534         
1535         target = get_target_by_num(strtoul(args[0], NULL, 0));
1536         if (!target)
1537         {
1538                 return ERROR_COMMAND_SYNTAX_ERROR;
1539         }
1540         target_free_all_working_areas(target);
1541         
1542         target->working_area_phys = target->working_area_virt = strtoul(args[1], NULL, 0);
1543         if (argc == 5)
1544         {
1545                 target->working_area_virt = strtoul(args[4], NULL, 0);
1546         }
1547         target->working_area_size = strtoul(args[2], NULL, 0);
1548         
1549         if (strcmp(args[3], "backup") == 0)
1550         {
1551                 target->backup_working_area = 1;
1552         }
1553         else if (strcmp(args[3], "nobackup") == 0)
1554         {
1555                 target->backup_working_area = 0;
1556         }
1557         else
1558         {
1559                 LOG_ERROR("unrecognized <backup|nobackup> argument (%s)", args[3]);
1560                 return ERROR_COMMAND_SYNTAX_ERROR;
1561         }
1562         
1563         return ERROR_OK;
1564 }
1565
1566
1567 /* process target state changes */
1568 int handle_target(void *priv)
1569 {
1570         target_t *target = targets;
1571         
1572         while (target)
1573         {
1574                 if (target_continous_poll)
1575                 {
1576                         /* polling may fail silently until the target has been examined */
1577                         target_poll(target);
1578                 }
1579         
1580                 target = target->next;
1581         }
1582         
1583         return ERROR_OK;
1584 }
1585
1586 int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1587 {
1588         target_t *target;
1589         reg_t *reg = NULL;
1590         int count = 0;
1591         char *value;
1592         
1593         LOG_DEBUG("-");
1594         
1595         target = get_current_target(cmd_ctx);
1596         
1597         /* list all available registers for the current target */
1598         if (argc == 0)
1599         {
1600                 reg_cache_t *cache = target->reg_cache;
1601                 
1602                 count = 0;
1603                 while(cache)
1604                 {
1605                         int i;
1606                         for (i = 0; i < cache->num_regs; i++)
1607                         {
1608                                 value = buf_to_str(cache->reg_list[i].value, cache->reg_list[i].size, 16);
1609                                 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);
1610                                 free(value);
1611                         }
1612                         cache = cache->next;
1613                 }
1614                 
1615                 return ERROR_OK;
1616         }
1617         
1618         /* access a single register by its ordinal number */
1619         if ((args[0][0] >= '0') && (args[0][0] <= '9'))
1620         {
1621                 int num = strtoul(args[0], NULL, 0);
1622                 reg_cache_t *cache = target->reg_cache;
1623                 
1624                 count = 0;
1625                 while(cache)
1626                 {
1627                         int i;
1628                         for (i = 0; i < cache->num_regs; i++)
1629                         {
1630                                 if (count++ == num)
1631                                 {
1632                                         reg = &cache->reg_list[i];
1633                                         break;
1634                                 }
1635                         }
1636                         if (reg)
1637                                 break;
1638                         cache = cache->next;
1639                 }
1640                 
1641                 if (!reg)
1642                 {
1643                         command_print(cmd_ctx, "%i is out of bounds, the current target has only %i registers (0 - %i)", num, count, count - 1);
1644                         return ERROR_OK;
1645                 }
1646         } else /* access a single register by its name */
1647         {
1648                 reg = register_get_by_name(target->reg_cache, args[0], 1);
1649                 
1650                 if (!reg)
1651                 {
1652                         command_print(cmd_ctx, "register %s not found in current target", args[0]);
1653                         return ERROR_OK;
1654                 }
1655         }
1656
1657         /* display a register */
1658         if ((argc == 1) || ((argc == 2) && !((args[1][0] >= '0') && (args[1][0] <= '9'))))
1659         {
1660                 if ((argc == 2) && (strcmp(args[1], "force") == 0))
1661                         reg->valid = 0;
1662                 
1663                 if (reg->valid == 0)
1664                 {
1665                         reg_arch_type_t *arch_type = register_get_arch_type(reg->arch_type);
1666                         if (arch_type == NULL)
1667                         {
1668                                 LOG_ERROR("BUG: encountered unregistered arch type");
1669                                 return ERROR_OK;
1670                         }
1671                         arch_type->get(reg);
1672                 }
1673                 value = buf_to_str(reg->value, reg->size, 16);
1674                 command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, reg->size, value);
1675                 free(value);
1676                 return ERROR_OK;
1677         }
1678         
1679         /* set register value */
1680         if (argc == 2)
1681         {
1682                 u8 *buf = malloc(CEIL(reg->size, 8));
1683                 str_to_buf(args[1], strlen(args[1]), buf, reg->size, 0);
1684
1685                 reg_arch_type_t *arch_type = register_get_arch_type(reg->arch_type);
1686                 if (arch_type == NULL)
1687                 {
1688                         LOG_ERROR("BUG: encountered unregistered arch type");
1689                         return ERROR_OK;
1690                 }
1691                 
1692                 arch_type->set(reg, buf);
1693                 
1694                 value = buf_to_str(reg->value, reg->size, 16);
1695                 command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, reg->size, value);
1696                 free(value);
1697                 
1698                 free(buf);
1699                 
1700                 return ERROR_OK;
1701         }
1702         
1703         command_print(cmd_ctx, "usage: reg <#|name> [value]");
1704         
1705         return ERROR_OK;
1706 }
1707
1708 static int wait_state(struct command_context_s *cmd_ctx, char *cmd, enum target_state state, int ms);
1709
1710 int handle_poll_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1711 {
1712         target_t *target = get_current_target(cmd_ctx);
1713
1714         if (argc == 0)
1715         {
1716                 target_poll(target);
1717                 target_arch_state(target);
1718         }
1719         else
1720         {
1721                 if (strcmp(args[0], "on") == 0)
1722                 {
1723                         target_continous_poll = 1;
1724                 }
1725                 else if (strcmp(args[0], "off") == 0)
1726                 {
1727                         target_continous_poll = 0;
1728                 }
1729                 else
1730                 {
1731                         command_print(cmd_ctx, "arg is \"on\" or \"off\"");
1732                 }
1733         }
1734         
1735         
1736         return ERROR_OK;
1737 }
1738
1739 int handle_wait_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1740 {
1741         int ms = 5000;
1742         
1743         if (argc > 0)
1744         {
1745                 char *end;
1746
1747                 ms = strtoul(args[0], &end, 0) * 1000;
1748                 if (*end)
1749                 {
1750                         command_print(cmd_ctx, "usage: %s [seconds]", cmd);
1751                         return ERROR_OK;
1752                 }
1753         }
1754
1755         return wait_state(cmd_ctx, cmd, TARGET_HALTED, ms); 
1756 }
1757
1758 static int wait_state(struct command_context_s *cmd_ctx, char *cmd, enum target_state state, int ms)
1759 {
1760         int retval;
1761         struct timeval timeout, now;
1762         int once=1;
1763         gettimeofday(&timeout, NULL);
1764         timeval_add_time(&timeout, 0, ms * 1000);
1765         
1766         target_t *target = get_current_target(cmd_ctx);
1767         for (;;)
1768         {
1769                 if ((retval=target_poll(target))!=ERROR_OK)
1770                         return retval;
1771                 target_call_timer_callbacks_now();
1772                 if (target->state == state)
1773                 {
1774                         break;
1775                 }
1776                 if (once)
1777                 {
1778                         once=0;
1779                         command_print(cmd_ctx, "waiting for target %s...", target_state_strings[state]);
1780                 }
1781                 
1782                 gettimeofday(&now, NULL);
1783                 if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
1784                 {
1785                         LOG_ERROR("timed out while waiting for target %s", target_state_strings[state]);
1786                         break;
1787                 }
1788         }
1789         
1790         return ERROR_OK;
1791 }
1792
1793 int handle_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1794 {
1795         int retval;
1796         target_t *target = get_current_target(cmd_ctx);
1797
1798         LOG_DEBUG("-");
1799
1800         if ((retval = target_halt(target)) != ERROR_OK)
1801         {
1802                 return retval;
1803         }
1804         
1805         return handle_wait_halt_command(cmd_ctx, cmd, args, argc);
1806 }
1807
1808 int handle_soft_reset_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1809 {
1810         target_t *target = get_current_target(cmd_ctx);
1811         
1812         LOG_USER("requesting target halt and executing a soft reset");
1813         
1814         target->type->soft_reset_halt(target);
1815         
1816         return ERROR_OK;
1817 }
1818
1819 int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1820 {
1821         target_t *target = get_current_target(cmd_ctx);
1822         enum target_reset_mode reset_mode = target->reset_mode;
1823         enum target_reset_mode save = target->reset_mode;
1824         
1825         LOG_DEBUG("-");
1826         
1827         if (argc >= 1)
1828         {
1829                 if (strcmp("run", args[0]) == 0)
1830                         reset_mode = RESET_RUN;
1831                 else if (strcmp("halt", args[0]) == 0)
1832                         reset_mode = RESET_HALT;
1833                 else if (strcmp("init", args[0]) == 0)
1834                         reset_mode = RESET_INIT;
1835                 else if (strcmp("run_and_halt", args[0]) == 0)
1836                 {
1837                         reset_mode = RESET_RUN_AND_HALT;
1838                         if (argc >= 2)
1839                         {
1840                                 target->run_and_halt_time = strtoul(args[1], NULL, 0);
1841                         }
1842                 }
1843                 else if (strcmp("run_and_init", args[0]) == 0)
1844                 {
1845                         reset_mode = RESET_RUN_AND_INIT;
1846                         if (argc >= 2)
1847                         {
1848                                 target->run_and_halt_time = strtoul(args[1], NULL, 0);
1849                         }
1850                 }
1851                 else
1852                 {
1853                         command_print(cmd_ctx, "usage: reset ['run', 'halt', 'init', 'run_and_halt', 'run_and_init]");
1854                         return ERROR_OK;
1855                 }
1856         }
1857         
1858         /* temporarily modify mode of current reset target */
1859         target->reset_mode = reset_mode;
1860
1861         /* reset *all* targets */
1862         target_process_reset(cmd_ctx);
1863         
1864         /* Restore default reset mode for this target */
1865     target->reset_mode = save;
1866         
1867         return ERROR_OK;
1868 }
1869
1870 int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1871 {
1872         int retval;
1873         target_t *target = get_current_target(cmd_ctx);
1874         
1875         target_invoke_script(cmd_ctx, target, "pre_resume");
1876         
1877         if (argc == 0)
1878                 retval = target_resume(target, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
1879         else if (argc == 1)
1880                 retval = target_resume(target, 0, strtoul(args[0], NULL, 0), 1, 0); /* addr = args[0], handle breakpoints, not debugging */
1881         else
1882         {
1883                 return ERROR_COMMAND_SYNTAX_ERROR;
1884         }
1885         
1886         return retval;
1887 }
1888
1889 int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1890 {
1891         target_t *target = get_current_target(cmd_ctx);
1892         
1893         LOG_DEBUG("-");
1894         
1895         if (argc == 0)
1896                 target->type->step(target, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
1897
1898         if (argc == 1)
1899                 target->type->step(target, 0, strtoul(args[0], NULL, 0), 1); /* addr = args[0], handle breakpoints */
1900         
1901         return ERROR_OK;
1902 }
1903
1904 int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1905 {
1906         const int line_bytecnt = 32;
1907         int count = 1;
1908         int size = 4;
1909         u32 address = 0;
1910         int line_modulo;
1911         int i;
1912
1913         char output[128];
1914         int output_len;
1915
1916         int retval;
1917
1918         u8 *buffer;
1919         target_t *target = get_current_target(cmd_ctx);
1920
1921         if (argc < 1)
1922                 return ERROR_OK;
1923
1924         if (argc == 2)
1925                 count = strtoul(args[1], NULL, 0);
1926
1927         address = strtoul(args[0], NULL, 0);
1928         
1929
1930         switch (cmd[2])
1931         {
1932                 case 'w':
1933                         size = 4; line_modulo = line_bytecnt / 4;
1934                         break;
1935                 case 'h':
1936                         size = 2; line_modulo = line_bytecnt / 2;
1937                         break;
1938                 case 'b':
1939                         size = 1; line_modulo = line_bytecnt / 1;
1940                         break;
1941                 default:
1942                         return ERROR_OK;
1943         }
1944
1945         buffer = calloc(count, size);
1946         retval  = target->type->read_memory(target, address, size, count, buffer);
1947         if (retval == ERROR_OK)
1948         {
1949                 output_len = 0;
1950         
1951                 for (i = 0; i < count; i++)
1952                 {
1953                         if (i%line_modulo == 0)
1954                                 output_len += snprintf(output + output_len, 128 - output_len, "0x%8.8x: ", address + (i*size));
1955                         
1956                         switch (size)
1957                         {
1958                                 case 4:
1959                                         output_len += snprintf(output + output_len, 128 - output_len, "%8.8x ", target_buffer_get_u32(target, &buffer[i*4]));
1960                                         break;
1961                                 case 2:
1962                                         output_len += snprintf(output + output_len, 128 - output_len, "%4.4x ", target_buffer_get_u16(target, &buffer[i*2]));
1963                                         break;
1964                                 case 1:
1965                                         output_len += snprintf(output + output_len, 128 - output_len, "%2.2x ", buffer[i*1]);
1966                                         break;
1967                         }
1968         
1969                         if ((i%line_modulo == line_modulo-1) || (i == count - 1))
1970                         {
1971                                 command_print(cmd_ctx, output);
1972                                 output_len = 0;
1973                         }
1974                 }
1975         }
1976
1977         free(buffer);
1978         
1979         return retval;
1980 }
1981
1982 int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1983 {
1984         u32 address = 0;
1985         u32 value = 0;
1986         int count = 1;
1987         int i;
1988         int wordsize;
1989         target_t *target = get_current_target(cmd_ctx);
1990         u8 value_buf[4];
1991
1992          if ((argc < 2) || (argc > 3))
1993                 return ERROR_COMMAND_SYNTAX_ERROR;
1994
1995         address = strtoul(args[0], NULL, 0);
1996         value = strtoul(args[1], NULL, 0);
1997         if (argc == 3)
1998                 count = strtoul(args[2], NULL, 0);
1999         
2000         switch (cmd[2])
2001         {
2002                 case 'w':
2003                         wordsize = 4;
2004                         target_buffer_set_u32(target, value_buf, value);
2005                         break;
2006                 case 'h':
2007                         wordsize = 2;
2008                         target_buffer_set_u16(target, value_buf, value);
2009                         break;
2010                 case 'b':
2011                         wordsize = 1;
2012                         value_buf[0] = value;
2013                         break;
2014                 default:
2015                         return ERROR_COMMAND_SYNTAX_ERROR;
2016         }
2017         for (i=0; i<count; i++)
2018         {
2019                 int retval;
2020                 switch (wordsize)
2021                 {
2022                         case 4:
2023                                 retval = target->type->write_memory(target, address + i*wordsize, 4, 1, value_buf);
2024                                 break;
2025                         case 2:
2026                                 retval = target->type->write_memory(target, address + i*wordsize, 2, 1, value_buf);
2027                                 break;
2028                         case 1:
2029                                 retval = target->type->write_memory(target, address + i*wordsize, 1, 1, value_buf);
2030                         break;
2031                         default:
2032                         return ERROR_OK;
2033                 }
2034                 if (retval!=ERROR_OK)
2035                 {
2036                         return retval;
2037                 }
2038         }
2039
2040         return ERROR_OK;
2041
2042 }
2043
2044 int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2045 {
2046         u8 *buffer;
2047         u32 buf_cnt;
2048         u32 image_size;
2049         int i;
2050         int retval;
2051
2052         image_t image;  
2053         
2054         duration_t duration;
2055         char *duration_text;
2056         
2057         target_t *target = get_current_target(cmd_ctx);
2058
2059         if (argc < 1)
2060         {
2061                 command_print(cmd_ctx, "usage: load_image <filename> [address] [type]");
2062                 return ERROR_OK;
2063         }
2064         
2065         /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */
2066         if (argc >= 2)
2067         {
2068                 image.base_address_set = 1;
2069                 image.base_address = strtoul(args[1], NULL, 0);
2070         }
2071         else
2072         {
2073                 image.base_address_set = 0;
2074         }
2075         
2076         image.start_address_set = 0;
2077
2078         duration_start_measure(&duration);
2079         
2080         if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK)
2081         {
2082                 return ERROR_OK;
2083         }
2084         
2085         image_size = 0x0;
2086         retval = ERROR_OK;
2087         for (i = 0; i < image.num_sections; i++)
2088         {
2089                 buffer = malloc(image.sections[i].size);
2090                 if (buffer == NULL)
2091                 {
2092                         command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size);
2093                         break;
2094                 }
2095                 
2096                 if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
2097                 {
2098                         free(buffer);
2099                         break;
2100                 }
2101                 if ((retval = target_write_buffer(target, image.sections[i].base_address, buf_cnt, buffer)) != ERROR_OK)
2102                 {
2103                         free(buffer);
2104                         break;
2105                 }
2106                 image_size += buf_cnt;
2107                 command_print(cmd_ctx, "%u byte written at address 0x%8.8x", buf_cnt, image.sections[i].base_address);
2108                 
2109                 free(buffer);
2110         }
2111
2112         duration_stop_measure(&duration, &duration_text);
2113         if (retval==ERROR_OK)
2114         {
2115                 command_print(cmd_ctx, "downloaded %u byte in %s", image_size, duration_text);
2116         }
2117         free(duration_text);
2118         
2119         image_close(&image);
2120
2121         return retval;
2122
2123 }
2124
2125 int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2126 {
2127         fileio_t fileio;
2128         
2129         u32 address;
2130         u32 size;
2131         u8 buffer[560];
2132         int retval=ERROR_OK;
2133         
2134         duration_t duration;
2135         char *duration_text;
2136         
2137         target_t *target = get_current_target(cmd_ctx);
2138
2139         if (argc != 3)
2140         {
2141                 command_print(cmd_ctx, "usage: dump_image <filename> <address> <size>");
2142                 return ERROR_OK;
2143         }
2144
2145         address = strtoul(args[1], NULL, 0);
2146         size = strtoul(args[2], NULL, 0);
2147
2148         if ((address & 3) || (size & 3))
2149         {
2150                 command_print(cmd_ctx, "only 32-bit aligned address and size are supported");
2151                 return ERROR_OK;
2152         }
2153         
2154         if (fileio_open(&fileio, args[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
2155         {
2156                 return ERROR_OK;
2157         }
2158         
2159         duration_start_measure(&duration);
2160         
2161         while (size > 0)
2162         {
2163                 u32 size_written;
2164                 u32 this_run_size = (size > 560) ? 560 : size;
2165                 
2166                 retval = target->type->read_memory(target, address, 4, this_run_size / 4, buffer);
2167                 if (retval != ERROR_OK)
2168                 {
2169                         break;
2170                 }
2171                 
2172                 retval = fileio_write(&fileio, this_run_size, buffer, &size_written);
2173                 if (retval != ERROR_OK)
2174                 {
2175                         break;
2176                 }
2177                 
2178                 size -= this_run_size;
2179                 address += this_run_size;
2180         }
2181
2182         fileio_close(&fileio);
2183
2184         duration_stop_measure(&duration, &duration_text);
2185         if (retval==ERROR_OK)
2186         {
2187                 command_print(cmd_ctx, "dumped %"PRIi64" byte in %s", fileio.size, duration_text);
2188         }
2189         free(duration_text);
2190         
2191         return ERROR_OK;
2192 }
2193
2194 int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2195 {
2196         u8 *buffer;
2197         u32 buf_cnt;
2198         u32 image_size;
2199         int i;
2200         int retval;
2201         u32 checksum = 0;
2202         u32 mem_checksum = 0;
2203
2204         image_t image;  
2205         
2206         duration_t duration;
2207         char *duration_text;
2208         
2209         target_t *target = get_current_target(cmd_ctx);
2210         
2211         if (argc < 1)
2212         {
2213                 return ERROR_COMMAND_SYNTAX_ERROR;
2214         }
2215         
2216         if (!target)
2217         {
2218                 LOG_ERROR("no target selected");
2219                 return ERROR_FAIL;
2220         }
2221         
2222         duration_start_measure(&duration);
2223         
2224         if (argc >= 2)
2225         {
2226                 image.base_address_set = 1;
2227                 image.base_address = strtoul(args[1], NULL, 0);
2228         }
2229         else
2230         {
2231                 image.base_address_set = 0;
2232                 image.base_address = 0x0;
2233         }
2234
2235         image.start_address_set = 0;
2236
2237         if ((retval=image_open(&image, args[0], (argc == 3) ? args[2] : NULL)) != ERROR_OK)
2238         {
2239                 return retval;
2240         }
2241         
2242         image_size = 0x0;
2243         retval=ERROR_OK;
2244         for (i = 0; i < image.num_sections; i++)
2245         {
2246                 buffer = malloc(image.sections[i].size);
2247                 if (buffer == NULL)
2248                 {
2249                         command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size);
2250                         break;
2251                 }
2252                 if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
2253                 {
2254                         free(buffer);
2255                         break;
2256                 }
2257                 
2258                 /* calculate checksum of image */
2259                 image_calculate_checksum( buffer, buf_cnt, &checksum );
2260                 
2261                 retval = target_checksum_memory(target, image.sections[i].base_address, buf_cnt, &mem_checksum);
2262                 if( retval != ERROR_OK )
2263                 {
2264                         free(buffer);
2265                         break;
2266                 }
2267                 
2268                 if( checksum != mem_checksum )
2269                 {
2270                         /* failed crc checksum, fall back to a binary compare */
2271                         u8 *data;
2272                         
2273                         command_print(cmd_ctx, "checksum mismatch - attempting binary compare");
2274                         
2275                         data = (u8*)malloc(buf_cnt);
2276                         
2277                         /* Can we use 32bit word accesses? */
2278                         int size = 1;
2279                         int count = buf_cnt;
2280                         if ((count % 4) == 0)
2281                         {
2282                                 size *= 4;
2283                                 count /= 4;
2284                         }
2285                         retval = target->type->read_memory(target, image.sections[i].base_address, size, count, data);
2286                         if (retval == ERROR_OK)
2287                         {
2288                                 int t;
2289                                 for (t = 0; t < buf_cnt; t++)
2290                                 {
2291                                         if (data[t] != buffer[t])
2292                                         {
2293                                                 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]);
2294                                                 free(data);
2295                                                 free(buffer);
2296                                                 retval=ERROR_FAIL;
2297                                                 goto done;
2298                                         }
2299                                 }
2300                         }
2301                         
2302                         free(data);
2303                 }
2304                 
2305                 free(buffer);
2306                 image_size += buf_cnt;
2307         }
2308 done:   
2309         duration_stop_measure(&duration, &duration_text);
2310         if (retval==ERROR_OK)
2311         {
2312                 command_print(cmd_ctx, "verified %u bytes in %s", image_size, duration_text);
2313         }
2314         free(duration_text);
2315         
2316         image_close(&image);
2317         
2318         return retval;
2319 }
2320
2321 int handle_bp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2322 {
2323         int retval;
2324         target_t *target = get_current_target(cmd_ctx);
2325
2326         if (argc == 0)
2327         {
2328                 breakpoint_t *breakpoint = target->breakpoints;
2329
2330                 while (breakpoint)
2331                 {
2332                         if (breakpoint->type == BKPT_SOFT)
2333                         {
2334                                 char* buf = buf_to_str(breakpoint->orig_instr, breakpoint->length, 16);
2335                                 command_print(cmd_ctx, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint->address, breakpoint->length, breakpoint->set, buf);
2336                                 free(buf);
2337                         }
2338                         else
2339                         {
2340                                 command_print(cmd_ctx, "0x%8.8x, 0x%x, %i", breakpoint->address, breakpoint->length, breakpoint->set);
2341                         }
2342                         breakpoint = breakpoint->next;
2343                 }
2344         }
2345         else if (argc >= 2)
2346         {
2347                 int hw = BKPT_SOFT;
2348                 u32 length = 0;
2349
2350                 length = strtoul(args[1], NULL, 0);
2351                 
2352                 if (argc >= 3)
2353                         if (strcmp(args[2], "hw") == 0)
2354                                 hw = BKPT_HARD;
2355
2356                 if ((retval = breakpoint_add(target, strtoul(args[0], NULL, 0), length, hw)) != ERROR_OK)
2357                 {
2358                         LOG_ERROR("Failure setting breakpoints");
2359                 }
2360                 else
2361                 {
2362                         command_print(cmd_ctx, "breakpoint added at address 0x%8.8x", strtoul(args[0], NULL, 0));
2363                 }
2364         }
2365         else
2366         {
2367                 command_print(cmd_ctx, "usage: bp <address> <length> ['hw']");
2368         }
2369
2370         return ERROR_OK;
2371 }
2372
2373 int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2374 {
2375         target_t *target = get_current_target(cmd_ctx);
2376
2377         if (argc > 0)
2378                 breakpoint_remove(target, strtoul(args[0], NULL, 0));
2379
2380         return ERROR_OK;
2381 }
2382
2383 int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2384 {
2385         target_t *target = get_current_target(cmd_ctx);
2386         int retval;
2387
2388         if (argc == 0)
2389         {
2390                 watchpoint_t *watchpoint = target->watchpoints;
2391
2392                 while (watchpoint)
2393                 {
2394                         command_print(cmd_ctx, "address: 0x%8.8x, len: 0x%8.8x, r/w/a: %i, value: 0x%8.8x, mask: 0x%8.8x", watchpoint->address, watchpoint->length, watchpoint->rw, watchpoint->value, watchpoint->mask);
2395                         watchpoint = watchpoint->next;
2396                 }
2397         } 
2398         else if (argc >= 2)
2399         {
2400                 enum watchpoint_rw type = WPT_ACCESS;
2401                 u32 data_value = 0x0;
2402                 u32 data_mask = 0xffffffff;
2403                 
2404                 if (argc >= 3)
2405                 {
2406                         switch(args[2][0])
2407                         {
2408                                 case 'r':
2409                                         type = WPT_READ;
2410                                         break;
2411                                 case 'w':
2412                                         type = WPT_WRITE;
2413                                         break;
2414                                 case 'a':
2415                                         type = WPT_ACCESS;
2416                                         break;
2417                                 default:
2418                                         command_print(cmd_ctx, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2419                                         return ERROR_OK;
2420                         }
2421                 }
2422                 if (argc >= 4)
2423                 {
2424                         data_value = strtoul(args[3], NULL, 0);
2425                 }
2426                 if (argc >= 5)
2427                 {
2428                         data_mask = strtoul(args[4], NULL, 0);
2429                 }
2430                 
2431                 if ((retval = watchpoint_add(target, strtoul(args[0], NULL, 0),
2432                                 strtoul(args[1], NULL, 0), type, data_value, data_mask)) != ERROR_OK)
2433                 {
2434                         LOG_ERROR("Failure setting breakpoints");
2435                 }
2436         }
2437         else
2438         {
2439                 command_print(cmd_ctx, "usage: wp <address> <length> [r/w/a] [value] [mask]");
2440         }
2441                 
2442         return ERROR_OK;
2443 }
2444
2445 int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2446 {
2447         target_t *target = get_current_target(cmd_ctx);
2448
2449         if (argc > 0)
2450                 watchpoint_remove(target, strtoul(args[0], NULL, 0));
2451         
2452         return ERROR_OK;
2453 }
2454
2455 int handle_virt2phys_command(command_context_t *cmd_ctx, char *cmd, char **args, int argc)
2456 {
2457         int retval;
2458         target_t *target = get_current_target(cmd_ctx);
2459         u32 va;
2460         u32 pa;
2461
2462         if (argc != 1)
2463         {
2464                 return ERROR_COMMAND_SYNTAX_ERROR;
2465         }
2466         va = strtoul(args[0], NULL, 0);
2467
2468         retval = target->type->virt2phys(target, va, &pa);
2469         if (retval == ERROR_OK)
2470         {
2471                 command_print(cmd_ctx, "Physical address 0x%08x", pa);
2472         }
2473         else
2474         {
2475                 /* lower levels will have logged a detailed error which is 
2476                  * forwarded to telnet/GDB session.  
2477                  */
2478         }
2479         return retval;
2480 }
2481 static void writeLong(FILE *f, int l)
2482 {
2483         int i;
2484         for (i=0; i<4; i++)
2485         {
2486                 char c=(l>>(i*8))&0xff;
2487                 fwrite(&c, 1, 1, f); 
2488         }
2489         
2490 }
2491 static void writeString(FILE *f, char *s)
2492 {
2493         fwrite(s, 1, strlen(s), f); 
2494 }
2495
2496
2497
2498 // Dump a gmon.out histogram file.
2499 static void writeGmon(u32 *samples, int sampleNum, char *filename)
2500 {
2501         int i;
2502         FILE *f=fopen(filename, "w");
2503         if (f==NULL)
2504                 return;
2505         fwrite("gmon", 1, 4, f);
2506         writeLong(f, 0x00000001); // Version
2507         writeLong(f, 0); // padding
2508         writeLong(f, 0); // padding
2509         writeLong(f, 0); // padding
2510                                 
2511         fwrite("", 1, 1, f);  // GMON_TAG_TIME_HIST 
2512
2513         // figure out bucket size
2514         u32 min=samples[0];
2515         u32 max=samples[0];
2516         for (i=0; i<sampleNum; i++)
2517         {
2518                 if (min>samples[i])
2519                 {
2520                         min=samples[i];
2521                 }
2522                 if (max<samples[i])
2523                 {
2524                         max=samples[i];
2525                 }
2526         }
2527
2528         int addressSpace=(max-min+1);
2529         
2530         static int const maxBuckets=256*1024; // maximum buckets.
2531         int length=addressSpace;
2532         if (length > maxBuckets)
2533         {
2534                 length=maxBuckets; 
2535         }
2536         int *buckets=malloc(sizeof(int)*length);
2537         if (buckets==NULL)
2538         {
2539                 fclose(f);
2540                 return;
2541         }
2542         memset(buckets, 0, sizeof(int)*length);
2543         for (i=0; i<sampleNum;i++)
2544         {
2545                 u32 address=samples[i];
2546                 long long a=address-min;
2547                 long long b=length-1;
2548                 long long c=addressSpace-1;
2549                 int index=(a*b)/c; // danger!!!! int32 overflows 
2550                 buckets[index]++;
2551         }
2552         
2553         //                         append binary memory gmon.out &profile_hist_hdr ((char*)&profile_hist_hdr + sizeof(struct gmon_hist_hdr))
2554         writeLong(f, min);                                      // low_pc
2555         writeLong(f, max);              // high_pc
2556         writeLong(f, length);           // # of samples
2557         writeLong(f, 64000000);                         // 64MHz
2558         writeString(f, "seconds");
2559         for (i=0; i<(15-strlen("seconds")); i++)
2560         {
2561                 fwrite("", 1, 1, f);  // padding
2562         }
2563         writeString(f, "s");
2564                 
2565 //                         append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size)
2566         
2567         char *data=malloc(2*length);
2568         if (data!=NULL)
2569         {
2570                 for (i=0; i<length;i++)
2571                 {
2572                         int val;
2573                         val=buckets[i];
2574                         if (val>65535)
2575                         {
2576                                 val=65535;
2577                         }
2578                         data[i*2]=val&0xff;
2579                         data[i*2+1]=(val>>8)&0xff;
2580                 }
2581                 free(buckets);
2582                 fwrite(data, 1, length*2, f);
2583                 free(data);
2584         } else
2585         {
2586                 free(buckets);
2587         }
2588
2589         fclose(f);
2590 }
2591
2592 /* profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC */
2593 int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2594 {
2595         target_t *target = get_current_target(cmd_ctx);
2596         struct timeval timeout, now;
2597         
2598         gettimeofday(&timeout, NULL);
2599         if (argc!=2)
2600         {
2601                 return ERROR_COMMAND_SYNTAX_ERROR;
2602         }
2603         char *end;
2604         timeval_add_time(&timeout, strtoul(args[0], &end, 0), 0);
2605         if (*end) 
2606         {
2607                 return ERROR_OK;
2608         }
2609         
2610         command_print(cmd_ctx, "Starting profiling. Halting and resuming the target as often as we can...");
2611
2612         static const int maxSample=10000;
2613         u32 *samples=malloc(sizeof(u32)*maxSample);
2614         if (samples==NULL)
2615                 return ERROR_OK;
2616         
2617         int numSamples=0;
2618         int retval=ERROR_OK;
2619         // hopefully it is safe to cache! We want to stop/restart as quickly as possible.
2620         reg_t *reg = register_get_by_name(target->reg_cache, "pc", 1);
2621         
2622         for (;;)
2623         {
2624                 target_poll(target);
2625                 if (target->state == TARGET_HALTED)
2626                 {
2627                         u32 t=*((u32 *)reg->value);
2628                         samples[numSamples++]=t;
2629                         retval = target_resume(target, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2630                         target_poll(target);
2631                         usleep(10*1000); // sleep 10ms, i.e. <100 samples/second.
2632                 } else if (target->state == TARGET_RUNNING)
2633                 {
2634                         // We want to quickly sample the PC.
2635                         target_halt(target);
2636                 } else
2637                 {
2638                         command_print(cmd_ctx, "Target not halted or running");
2639                         retval=ERROR_OK;
2640                         break;
2641                 }
2642                 if (retval!=ERROR_OK)
2643                 {
2644                         break;
2645                 }
2646                 
2647                 gettimeofday(&now, NULL);
2648                 if ((numSamples>=maxSample) || ((now.tv_sec >= timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
2649                 {
2650                         command_print(cmd_ctx, "Profiling completed. %d samples.", numSamples);
2651                         target_poll(target);
2652                         if (target->state == TARGET_HALTED)
2653                         {
2654                                 target_resume(target, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */
2655                         }
2656                         target_poll(target);
2657                         writeGmon(samples, numSamples, args[1]);
2658                         command_print(cmd_ctx, "Wrote %s", args[1]);
2659                         break;
2660                 }
2661         }
2662         free(samples);
2663         
2664         return ERROR_OK;
2665 }