]> git.sur5r.net Git - openocd/blob - src/server/gdb_server.c
Centralize error handling for buggy register handling
[openocd] / src / server / gdb_server.c
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
5  *   Copyright (C) 2007,2008 Ã˜yvind Harboe                                 *
6  *   oyvind.harboe@zylin.com                                               *
7  *                                                                         *
8  *   Copyright (C) 2008 by Spencer Oliver                                  *
9  *   spen@spen-soft.co.uk                                                  *
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  *   This program is distributed in the hope that it will be useful,       *
17  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
19  *   GNU General Public License for more details.                          *
20  *                                                                         *
21  *   You should have received a copy of the GNU General Public License     *
22  *   along with this program; if not, write to the                         *
23  *   Free Software Foundation, Inc.,                                       *
24  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
25  ***************************************************************************/
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #endif
29
30 #include "replacements.h"
31
32 #include "gdb_server.h"
33
34 #include "server.h"
35 #include "log.h"
36 #include "binarybuffer.h"
37 #include "jtag.h"
38 #include "breakpoints.h"
39 #include "flash.h"
40 #include "target_request.h"
41 #include "configuration.h"
42
43 #include <string.h>
44 #include <errno.h>
45 #include <unistd.h>
46 #include <stdlib.h>
47
48 #if 0
49 #define _DEBUG_GDB_IO_
50 #endif
51
52 static int gdb_breakpoint_override;
53 static enum breakpoint_type gdb_breakpoint_override_type;
54
55 extern int gdb_error(connection_t *connection, int retval);
56 static unsigned short gdb_port;
57 static const char *DIGITS = "0123456789abcdef";
58
59 static void gdb_log_callback(void *priv, const char *file, int line,
60                 const char *function, const char *string);
61
62 enum gdb_detach_mode
63 {
64         GDB_DETACH_RESUME,
65         GDB_DETACH_RESET,
66         GDB_DETACH_HALT,
67         GDB_DETACH_NOTHING
68 };
69
70 /* target behaviour on gdb detach */
71 enum gdb_detach_mode detach_mode = GDB_DETACH_RESUME;
72
73 /* set if we are sending a memory map to gdb
74  * via qXfer:memory-map:read packet */
75 /* enabled by default*/
76 int gdb_use_memory_map = 1;
77 /* enabled by default*/
78 int gdb_flash_program = 1;
79
80 /* if set, data aborts cause an error to be reported in memory read packets
81  * see the code in gdb_read_memory_packet() for further explanations */
82 int gdb_report_data_abort = 0;
83
84 int gdb_last_signal(target_t *target)
85 {
86         switch (target->debug_reason)
87         {
88                 case DBG_REASON_DBGRQ:
89                         return 0x2; /* SIGINT */
90                 case DBG_REASON_BREAKPOINT:
91                 case DBG_REASON_WATCHPOINT:
92                 case DBG_REASON_WPTANDBKPT:
93                         return 0x05; /* SIGTRAP */
94                 case DBG_REASON_SINGLESTEP:
95                         return 0x05; /* SIGTRAP */
96                 case DBG_REASON_NOTHALTED:
97                         return 0x0; /* no signal... shouldn't happen */
98                 default:
99                         LOG_USER("undefined debug reason %d - target needs reset", target->debug_reason);
100                         return 0x0;
101         }
102 }
103
104 int check_pending(connection_t *connection, int timeout_s, int *got_data)
105 {
106         /* a non-blocking socket will block if there is 0 bytes available on the socket,
107          * but return with as many bytes as are available immediately
108          */
109         struct timeval tv;
110         fd_set read_fds;
111         gdb_connection_t *gdb_con = connection->priv;
112         int t;
113         if (got_data==NULL)
114                 got_data=&t;
115         *got_data=0;
116
117         if (gdb_con->buf_cnt>0)
118         {
119                 *got_data = 1;
120                 return ERROR_OK;
121         }
122
123         FD_ZERO(&read_fds);
124         FD_SET(connection->fd, &read_fds);
125
126         tv.tv_sec = timeout_s;
127         tv.tv_usec = 0;
128         if (select(connection->fd + 1, &read_fds, NULL, NULL, &tv) == 0)
129         {
130                 /* This can typically be because a "monitor" command took too long
131                  * before printing any progress messages
132                  */
133                 if (timeout_s>0)
134                 {
135                         return ERROR_GDB_TIMEOUT;
136                 } else
137                 {
138                         return ERROR_OK;
139                 }
140         }
141         *got_data=FD_ISSET(connection->fd, &read_fds)!=0;
142         return ERROR_OK;
143 }
144
145 int gdb_get_char(connection_t *connection, int* next_char)
146 {
147         gdb_connection_t *gdb_con = connection->priv;
148         int retval=ERROR_OK;
149
150 #ifdef _DEBUG_GDB_IO_
151         char *debug_buffer;
152 #endif
153
154         if (gdb_con->buf_cnt-- > 0)
155         {
156                 *next_char = *(gdb_con->buf_p++);
157                 if (gdb_con->buf_cnt > 0)
158                         connection->input_pending = 1;
159                 else
160                         connection->input_pending = 0;
161
162 #ifdef _DEBUG_GDB_IO_
163                 LOG_DEBUG("returned char '%c' (0x%2.2x)", *next_char, *next_char);
164 #endif
165
166                 return ERROR_OK;
167         }
168
169         for (;;)
170         {
171                 retval=check_pending(connection, 1, NULL);
172                 if (retval!=ERROR_OK)
173                         return retval;
174                 gdb_con->buf_cnt = read_socket(connection->fd, gdb_con->buffer, GDB_BUFFER_SIZE);
175                 if (gdb_con->buf_cnt > 0)
176                 {
177                         break;
178                 }
179                 if (gdb_con->buf_cnt == 0)
180                 {
181                         gdb_con->closed = 1;
182                         return ERROR_SERVER_REMOTE_CLOSED;
183                 }
184
185 #ifdef _WIN32
186                 errno = WSAGetLastError();
187
188                 switch(errno)
189                 {
190                         case WSAEWOULDBLOCK:
191                                 usleep(1000);
192                                 break;
193                         case WSAECONNABORTED:
194                                 gdb_con->closed = 1;
195                                 return ERROR_SERVER_REMOTE_CLOSED;
196                         case WSAECONNRESET:
197                                 gdb_con->closed = 1;
198                                 return ERROR_SERVER_REMOTE_CLOSED;
199                         default:
200                                 LOG_ERROR("read: %d", errno);
201                                 exit(-1);
202                 }
203 #else
204                 switch(errno)
205                 {
206                         case EAGAIN:
207                                 usleep(1000);
208                                 break;
209                         case ECONNABORTED:
210                                 gdb_con->closed = 1;
211                                 return ERROR_SERVER_REMOTE_CLOSED;
212                         case ECONNRESET:
213                                 gdb_con->closed = 1;
214                                 return ERROR_SERVER_REMOTE_CLOSED;
215                         default:
216                                 LOG_ERROR("read: %s", strerror(errno));
217                                 gdb_con->closed = 1;
218                                 return ERROR_SERVER_REMOTE_CLOSED;
219                 }
220 #endif
221         }
222
223 #ifdef _DEBUG_GDB_IO_
224         debug_buffer = malloc(gdb_con->buf_cnt + 1);
225         memcpy(debug_buffer, gdb_con->buffer, gdb_con->buf_cnt);
226         debug_buffer[gdb_con->buf_cnt] = 0;
227         LOG_DEBUG("received '%s'", debug_buffer);
228         free(debug_buffer);
229 #endif
230
231         gdb_con->buf_p = gdb_con->buffer;
232         gdb_con->buf_cnt--;
233         *next_char = *(gdb_con->buf_p++);
234         if (gdb_con->buf_cnt > 0)
235                 connection->input_pending = 1;
236         else
237                 connection->input_pending = 0;
238 #ifdef _DEBUG_GDB_IO_
239         LOG_DEBUG("returned char '%c' (0x%2.2x)", *next_char, *next_char);
240 #endif
241
242         return retval;
243 }
244
245 int gdb_putback_char(connection_t *connection, int last_char)
246 {
247         gdb_connection_t *gdb_con = connection->priv;
248
249         if (gdb_con->buf_p > gdb_con->buffer)
250         {
251                 *(--gdb_con->buf_p) = last_char;
252                 gdb_con->buf_cnt++;
253         }
254         else
255         {
256                 LOG_ERROR("BUG: couldn't put character back");
257         }
258
259         return ERROR_OK;
260 }
261
262 /* The only way we can detect that the socket is closed is the first time
263  * we write to it, we will fail. Subsequent write operations will
264  * succeed. Shudder! */
265 int gdb_write(connection_t *connection, void *data, int len)
266 {
267         gdb_connection_t *gdb_con = connection->priv;
268         if (gdb_con->closed)
269                 return ERROR_SERVER_REMOTE_CLOSED;
270
271         if (write_socket(connection->fd, data, len) == len)
272         {
273                 return ERROR_OK;
274         }
275         gdb_con->closed = 1;
276         return ERROR_SERVER_REMOTE_CLOSED;
277 }
278
279 int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
280 {
281         int i;
282         unsigned char my_checksum = 0;
283 #ifdef _DEBUG_GDB_IO_
284         char *debug_buffer;
285 #endif
286         int reply;
287         int retval;
288         gdb_connection_t *gdb_con = connection->priv;
289
290         for (i = 0; i < len; i++)
291                 my_checksum += buffer[i];
292
293 #ifdef _DEBUG_GDB_IO_
294         /*
295          * At this point we should have nothing in the input queue from GDB,
296          * however sometimes '-' is sent even though we've already received
297          * an ACK (+) for everything we've sent off.
298          */
299         int gotdata;
300         for (;;)
301         {
302                 if ((retval=check_pending(connection, 0, &gotdata))!=ERROR_OK)
303                         return retval;
304                 if (!gotdata)
305                         break;
306                 if ((retval = gdb_get_char(connection, &reply)) != ERROR_OK)
307                         return retval;
308                 LOG_WARNING("Discard unexpected char %c", reply);
309         }
310 #endif
311
312         while (1)
313         {
314 #ifdef _DEBUG_GDB_IO_
315                 debug_buffer = malloc(len + 1);
316                 memcpy(debug_buffer, buffer, len);
317                 debug_buffer[len] = 0;
318                 LOG_DEBUG("sending packet '$%s#%2.2x'", debug_buffer, my_checksum);
319                 free(debug_buffer);
320 #endif
321
322                 char local_buffer[1024];
323                 local_buffer[0] = '$';
324                 if (len+4 <= sizeof(local_buffer))
325                 {
326                         /* performance gain on smaller packets by only a single call to gdb_write() */
327                         memcpy(local_buffer+1, buffer, len++);
328                         local_buffer[len++] = '#';
329                         local_buffer[len++] = DIGITS[(my_checksum >> 4) & 0xf];
330                         local_buffer[len++] = DIGITS[my_checksum & 0xf];
331                         gdb_write(connection, local_buffer, len);
332                 }
333                 else
334                 {
335                         /* larger packets are transmitted directly from caller supplied buffer
336                            by several calls to gdb_write() to avoid dynamic allocation */
337                         local_buffer[1] = '#';
338                         local_buffer[2] = DIGITS[(my_checksum >> 4) & 0xf];
339                         local_buffer[3] = DIGITS[my_checksum & 0xf];
340                         gdb_write(connection, local_buffer, 1);
341                         gdb_write(connection, buffer, len);
342                         gdb_write(connection, local_buffer+1, 3);
343                 }
344
345                 if (gdb_con->noack_mode)
346                         break;
347
348                 if ((retval = gdb_get_char(connection, &reply)) != ERROR_OK)
349                         return retval;
350
351                 if (reply == '+')
352                         break;
353                 else if (reply == '-')
354                 {
355                         /* Stop sending output packets for now */
356                         log_remove_callback(gdb_log_callback, connection);
357                         LOG_WARNING("negative reply, retrying");
358                 }
359                 else if (reply == 0x3)
360                 {
361                         gdb_con->ctrl_c = 1;
362                         if ((retval = gdb_get_char(connection, &reply)) != ERROR_OK)
363                                 return retval;
364                         if (reply == '+')
365                                 break;
366                         else if (reply == '-')
367                         {
368                                 /* Stop sending output packets for now */
369                                 log_remove_callback(gdb_log_callback, connection);
370                                 LOG_WARNING("negative reply, retrying");
371                         }
372                         else
373                         {
374                                 LOG_ERROR("unknown character 0x%2.2x in reply, dropping connection", reply);
375                                 gdb_con->closed=1;
376                                 return ERROR_SERVER_REMOTE_CLOSED;
377                         }
378                 }
379                 else
380                 {
381                         LOG_ERROR("unknown character 0x%2.2x in reply, dropping connection", reply);
382                         gdb_con->closed=1;
383                         return ERROR_SERVER_REMOTE_CLOSED;
384                 }
385         }
386         if (gdb_con->closed)
387                 return ERROR_SERVER_REMOTE_CLOSED;
388
389         return ERROR_OK;
390 }
391
392 int gdb_put_packet(connection_t *connection, char *buffer, int len)
393 {
394         gdb_connection_t *gdb_con = connection->priv;
395         gdb_con->busy = 1;
396         int retval = gdb_put_packet_inner(connection, buffer, len);
397         gdb_con->busy = 0;
398
399         /* we sent some data, reset timer for keep alive messages */
400         kept_alive();
401
402         return retval;
403 }
404
405 static __inline__ int fetch_packet(connection_t *connection, int *checksum_ok, int noack, int *len, char *buffer)
406 {
407         unsigned char my_checksum = 0;
408         char checksum[3];
409         int character;
410         int retval;
411
412         gdb_connection_t *gdb_con = connection->priv;
413         my_checksum = 0;
414         int count = 0;
415         count = 0;
416         for (;;)
417         {
418                 /* The common case is that we have an entire packet with no escape chars.
419                  * We need to leave at least 2 bytes in the buffer to have
420                  * gdb_get_char() update various bits and bobs correctly.
421                  */
422                 if ((gdb_con->buf_cnt > 2) && ((gdb_con->buf_cnt+count) < *len))
423                 {
424                         /* The compiler will struggle a bit with constant propagation and
425                          * aliasing, so we help it by showing that these values do not
426                          * change inside the loop
427                          */
428                         int i;
429                         char *buf = gdb_con->buf_p;
430                         int run = gdb_con->buf_cnt - 2;
431                         i = 0;
432                         int done = 0;
433                         while (i < run)
434                         {
435                                 character = *buf++;
436                                 i++;
437                                 if (character == '#')
438                                 {
439                                         /* Danger! character can be '#' when esc is
440                                          * used so we need an explicit boolean for done here.
441                                          */
442                                         done = 1;
443                                         break;
444                                 }
445
446                                 if (character == '}')
447                                 {
448                                         /* data transmitted in binary mode (X packet)
449                                          * uses 0x7d as escape character */
450                                         my_checksum += character & 0xff;
451                                         character = *buf++;
452                                         i++;
453                                         my_checksum += character & 0xff;
454                                         buffer[count++] = (character ^ 0x20) & 0xff;
455                                 }
456                                 else
457                                 {
458                                         my_checksum += character & 0xff;
459                                         buffer[count++] = character & 0xff;
460                                 }
461                         }
462                         gdb_con->buf_p += i;
463                         gdb_con->buf_cnt -= i;
464                         if (done)
465                                 break;
466                 }
467                 if (count > *len)
468                 {
469                         LOG_ERROR("packet buffer too small");
470                         return ERROR_GDB_BUFFER_TOO_SMALL;
471                 }
472
473                 if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
474                         return retval;
475
476                 if (character == '#')
477                         break;
478
479                 if (character == '}')
480                 {
481                         /* data transmitted in binary mode (X packet)
482                          * uses 0x7d as escape character */
483                         my_checksum += character & 0xff;
484                         if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
485                                 return retval;
486                         my_checksum += character & 0xff;
487                         buffer[count++] = (character ^ 0x20) & 0xff;
488                 }
489                 else
490                 {
491                         my_checksum += character & 0xff;
492                         buffer[count++] = character & 0xff;
493                 }
494         }
495
496         *len = count;
497
498         if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
499                 return retval;
500         checksum[0] = character;
501         if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
502                 return retval;
503         checksum[1] = character;
504         checksum[2] = 0;
505
506         if (!noack)
507         {
508                 *checksum_ok=(my_checksum == strtoul(checksum, NULL, 16));
509         }
510
511         return ERROR_OK;
512 }
513
514 int gdb_get_packet_inner(connection_t *connection, char *buffer, int *len)
515 {
516         int character;
517         int retval;
518         gdb_connection_t *gdb_con = connection->priv;
519
520         while (1)
521         {
522                 do
523                 {
524                         if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
525                                 return retval;
526
527 #ifdef _DEBUG_GDB_IO_
528                         LOG_DEBUG("character: '%c'", character);
529 #endif
530
531                         switch (character)
532                         {
533                                 case '$':
534                                         break;
535                                 case '+':
536                                         /* gdb sends a dummy ack '+' at every remote connect - see remote_start_remote (remote.c)
537                                          * incase anyone tries to debug why they receive this warning every time */
538                                         LOG_WARNING("acknowledgment received, but no packet pending");
539                                         break;
540                                 case '-':
541                                         LOG_WARNING("negative acknowledgment, but no packet pending");
542                                         break;
543                                 case 0x3:
544                                         gdb_con->ctrl_c = 1;
545                                         *len = 0;
546                                         return ERROR_OK;
547                                 default:
548                                         LOG_WARNING("ignoring character 0x%x", character);
549                                         break;
550                         }
551                 } while (character != '$');
552
553
554
555                 int checksum_ok;
556                 /* explicit code expansion here to get faster inlined code in -O3 by not
557                  * calculating checksum
558                  */
559                 if (gdb_con->noack_mode)
560                 {
561                         if ((retval=fetch_packet(connection, &checksum_ok, 1, len, buffer))!=ERROR_OK)
562                                 return retval;
563                 } else
564                 {
565                         if ((retval=fetch_packet(connection, &checksum_ok, 0, len, buffer))!=ERROR_OK)
566                                 return retval;
567                 }
568
569                 if (gdb_con->noack_mode)
570                 {
571                         /* checksum is not checked in noack mode */
572                         break;
573                 }
574                 if (checksum_ok)
575                 {
576                         gdb_write(connection, "+", 1);
577                         break;
578                 }
579         }
580         if (gdb_con->closed)
581                 return ERROR_SERVER_REMOTE_CLOSED;
582
583         return ERROR_OK;
584 }
585
586 int gdb_get_packet(connection_t *connection, char *buffer, int *len)
587 {
588         gdb_connection_t *gdb_con = connection->priv;
589         gdb_con->busy = 1;
590         int retval = gdb_get_packet_inner(connection, buffer, len);
591         gdb_con->busy = 0;
592         return retval;
593 }
594
595 int gdb_output_con(connection_t *connection, const char* line)
596 {
597         char *hex_buffer;
598         int i, bin_size;
599
600         bin_size = strlen(line);
601
602         hex_buffer = malloc(bin_size*2 + 2);
603         if (hex_buffer == NULL)
604                 return ERROR_GDB_BUFFER_TOO_SMALL;
605
606         hex_buffer[0] = 'O';
607         for (i=0; i<bin_size; i++)
608                 snprintf(hex_buffer + 1 + i*2, 3, "%2.2x", line[i]);
609         hex_buffer[bin_size*2+1] = 0;
610
611         gdb_put_packet(connection, hex_buffer, bin_size*2 + 1);
612
613         free(hex_buffer);
614         return ERROR_OK;
615 }
616
617 int gdb_output(struct command_context_s *context, const char* line)
618 {
619         /* this will be dumped to the log and also sent as an O packet if possible */
620         LOG_USER_N("%s", line);
621         return ERROR_OK;
622 }
623
624
625 static void gdb_frontend_halted(struct target_s *target, connection_t *connection)
626 {
627         gdb_connection_t *gdb_connection = connection->priv;
628
629         /* In the GDB protocol when we are stepping or coninuing execution,
630          * we have a lingering reply. Upon receiving a halted event
631          * when we have that lingering packet, we reply to the original
632          * step or continue packet.
633          *
634          * Executing monitor commands can bring the target in and
635          * out of the running state so we'll see lots of TARGET_EVENT_XXX
636          * that are to be ignored.
637          */
638         if (gdb_connection->frontend_state == TARGET_RUNNING)
639         {
640                 char sig_reply[4];
641                 int signal;
642                 /* stop forwarding log packets! */
643                 log_remove_callback(gdb_log_callback, connection);
644
645                 if (gdb_connection->ctrl_c)
646                 {
647                         signal = 0x2;
648                         gdb_connection->ctrl_c = 0;
649                 }
650                 else
651                 {
652                         signal = gdb_last_signal(target);
653                 }
654
655                 snprintf(sig_reply, 4, "T%2.2x", signal);
656                 gdb_put_packet(connection, sig_reply, 3);
657                 gdb_connection->frontend_state = TARGET_HALTED;
658         }
659 }
660
661 int gdb_target_callback_event_handler(struct target_s *target, enum target_event event, void *priv)
662 {
663         connection_t *connection = priv;
664
665         target_handle_event( target, event );
666         switch (event)
667         {
668                 case TARGET_EVENT_EARLY_HALTED:
669                         gdb_frontend_halted(target, connection);
670                         break;
671                 case TARGET_EVENT_GDB_FLASH_ERASE_START:
672                         target_handle_event( target, TARGET_EVENT_OLD_gdb_program_config );
673                         jtag_execute_queue();
674                         break;
675                 default:
676                         break;
677         }
678
679         return ERROR_OK;
680 }
681
682
683 int gdb_new_connection(connection_t *connection)
684 {
685         gdb_connection_t *gdb_connection = malloc(sizeof(gdb_connection_t));
686         gdb_service_t *gdb_service = connection->service->priv;
687         int retval;
688         int initial_ack;
689
690         connection->priv = gdb_connection;
691
692         /* initialize gdb connection information */
693         gdb_connection->buf_p = gdb_connection->buffer;
694         gdb_connection->buf_cnt = 0;
695         gdb_connection->ctrl_c = 0;
696         gdb_connection->frontend_state = TARGET_HALTED;
697         gdb_connection->vflash_image = NULL;
698         gdb_connection->closed = 0;
699         gdb_connection->busy = 0;
700         gdb_connection->noack_mode = 0;
701
702         /* send ACK to GDB for debug request */
703         gdb_write(connection, "+", 1);
704
705         /* output goes through gdb connection */
706         command_set_output_handler(connection->cmd_ctx, gdb_output, connection);
707
708         /* we must remove all breakpoints registered to the target as a previous
709          * GDB session could leave dangling breakpoints if e.g. communication
710          * timed out.
711          */
712         breakpoint_clear_target(gdb_service->target);
713         watchpoint_clear_target(gdb_service->target);
714
715         /* register callback to be informed about target events */
716         target_register_event_callback(gdb_target_callback_event_handler, connection);
717
718         /* a gdb session just attached, try to put the target in halt mode.
719          *
720          * DANGER!!!!
721          *
722          * If the halt fails(e.g. target needs a reset, JTAG communication not
723          * working, etc.), then the GDB connect will succeed as
724          * the get_gdb_reg_list() will lie and return a register list with
725          * dummy values.
726          *
727          * This allows GDB monitor commands to be run from a GDB init script to
728          * initialize the target
729          *
730          * Also, since the halt() is asynchronous target connect will be
731          * instantaneous and thus avoiding annoying timeout problems during
732          * connect.
733          */
734         target_halt(gdb_service->target);
735         /* FIX!!!! could extended-remote work better here?
736          *
737          *  wait a tiny bit for halted state or we just continue. The
738          * GDB register packet will then contain garbage
739          */
740         target_wait_state(gdb_service->target, TARGET_HALTED, 500);
741
742         /* remove the initial ACK from the incoming buffer */
743         if ((retval = gdb_get_char(connection, &initial_ack)) != ERROR_OK)
744                 return retval;
745
746         /* FIX!!!??? would we actually ever receive a + here???
747          * Not observed.
748          */
749         if (initial_ack != '+')
750                 gdb_putback_char(connection, initial_ack);
751         target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_ATTACH );
752         return ERROR_OK;
753 }
754
755 int gdb_connection_closed(connection_t *connection)
756 {
757         gdb_service_t *gdb_service = connection->service->priv;
758         gdb_connection_t *gdb_connection = connection->priv;
759
760         /* see if an image built with vFlash commands is left */
761         if (gdb_connection->vflash_image)
762         {
763                 image_close(gdb_connection->vflash_image);
764                 free(gdb_connection->vflash_image);
765                 gdb_connection->vflash_image = NULL;
766         }
767
768         /* if this connection registered a debug-message receiver delete it */
769         delete_debug_msg_receiver(connection->cmd_ctx, gdb_service->target);
770
771         if (connection->priv)
772         {
773                 free(connection->priv);
774                 connection->priv = NULL;
775         }
776         else
777         {
778                 LOG_ERROR("BUG: connection->priv == NULL");
779         }
780
781         target_unregister_event_callback(gdb_target_callback_event_handler, connection);
782         log_remove_callback(gdb_log_callback, connection);
783
784         target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_DETACH );
785         return ERROR_OK;
786 }
787
788 void gdb_send_error(connection_t *connection, u8 the_error)
789 {
790         char err[4];
791         snprintf(err, 4, "E%2.2X", the_error );
792         gdb_put_packet(connection, err, 3);
793 }
794
795 int gdb_last_signal_packet(connection_t *connection, target_t *target, char* packet, int packet_size)
796 {
797         char sig_reply[4];
798         int signal;
799
800         signal = gdb_last_signal(target);
801
802         snprintf(sig_reply, 4, "S%2.2x", signal);
803         gdb_put_packet(connection, sig_reply, 3);
804
805         return ERROR_OK;
806 }
807
808 /* Convert register to string of bits. NB! The # of bits in the
809  * register might be non-divisible by 8(a byte), in which
810  * case an entire byte is shown. */
811 void gdb_str_to_target(target_t *target, char *tstr, reg_t *reg)
812 {
813         int i;
814
815         u8 *buf;
816         int buf_len;
817         buf = reg->value;
818         buf_len = CEIL(reg->size, 8);
819
820         for (i = 0; i < buf_len; i++)
821         {
822                 tstr[i*2]   = DIGITS[(buf[i]>>4) & 0xf];
823                 tstr[i*2+1] = DIGITS[buf[i]&0xf];
824         }
825 }
826
827 void gdb_target_to_str(target_t *target, char *tstr, char *str)
828 {
829         int str_len = strlen(tstr);
830         int i;
831
832         if (str_len % 2)
833         {
834                 LOG_ERROR("BUG: gdb value with uneven number of characters encountered");
835                 exit(-1);
836         }
837
838         for (i = 0; i < str_len; i+=2)
839         {
840                 str[str_len - i - 1] = tstr[i + 1];
841                 str[str_len - i - 2] = tstr[i];
842         }
843 }
844
845 int gdb_get_registers_packet(connection_t *connection, target_t *target, char* packet, int packet_size)
846 {
847         reg_t **reg_list;
848         int reg_list_size;
849         int retval;
850         int reg_packet_size = 0;
851         char *reg_packet;
852         char *reg_packet_p;
853         int i;
854
855 #ifdef _DEBUG_GDB_IO_
856         LOG_DEBUG("-");
857 #endif
858
859         if ((retval = target->type->get_gdb_reg_list(target, &reg_list, &reg_list_size)) != ERROR_OK)
860         {
861                 return gdb_error(connection, retval);
862         }
863
864         for (i = 0; i < reg_list_size; i++)
865         {
866                 reg_packet_size += reg_list[i]->size;
867         }
868
869         reg_packet = malloc(CEIL(reg_packet_size, 8) * 2);
870         reg_packet_p = reg_packet;
871
872         for (i = 0; i < reg_list_size; i++)
873         {
874                 gdb_str_to_target(target, reg_packet_p, reg_list[i]);
875                 reg_packet_p += CEIL(reg_list[i]->size, 8) * 2;
876         }
877
878 #ifdef _DEBUG_GDB_IO_
879         {
880                 char *reg_packet_p;
881                 reg_packet_p = strndup(reg_packet, CEIL(reg_packet_size, 8) * 2);
882                 LOG_DEBUG("reg_packet: %s", reg_packet_p);
883                 free(reg_packet_p);
884         }
885 #endif
886
887         gdb_put_packet(connection, reg_packet, CEIL(reg_packet_size, 8) * 2);
888         free(reg_packet);
889
890         free(reg_list);
891
892         return ERROR_OK;
893 }
894
895 int gdb_set_registers_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
896 {
897         int i;
898         reg_t **reg_list;
899         int reg_list_size;
900         int retval;
901         char *packet_p;
902
903 #ifdef _DEBUG_GDB_IO_
904         LOG_DEBUG("-");
905 #endif
906
907         /* skip command character */
908         packet++;
909         packet_size--;
910
911         if (packet_size % 2)
912         {
913                 LOG_WARNING("GDB set_registers packet with uneven characters received, dropping connection");
914                 return ERROR_SERVER_REMOTE_CLOSED;
915         }
916
917         if ((retval = target->type->get_gdb_reg_list(target, &reg_list, &reg_list_size)) != ERROR_OK)
918         {
919                 return gdb_error(connection, retval);
920         }
921
922         packet_p = packet;
923         for (i = 0; i < reg_list_size; i++)
924         {
925                 u8 *bin_buf;
926                 char *hex_buf;
927                 reg_arch_type_t *arch_type;
928
929                 /* convert from GDB-string (target-endian) to hex-string (big-endian) */
930                 hex_buf = malloc(CEIL(reg_list[i]->size, 8) * 2);
931                 gdb_target_to_str(target, packet_p, hex_buf);
932
933                 /* convert hex-string to binary buffer */
934                 bin_buf = malloc(CEIL(reg_list[i]->size, 8));
935                 str_to_buf(hex_buf, CEIL(reg_list[i]->size, 8) * 2, bin_buf, reg_list[i]->size, 16);
936
937                 /* get register arch_type, and call set method */
938                 arch_type = register_get_arch_type(reg_list[i]->arch_type);
939
940                 arch_type->set(reg_list[i], bin_buf);
941
942                 /* advance packet pointer */
943                 packet_p += (CEIL(reg_list[i]->size, 8) * 2);
944
945                 free(bin_buf);
946                 free(hex_buf);
947         }
948
949         /* free reg_t *reg_list[] array allocated by get_gdb_reg_list */
950         free(reg_list);
951
952         gdb_put_packet(connection, "OK", 2);
953
954         return ERROR_OK;
955 }
956
957 int gdb_get_register_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
958 {
959         char *reg_packet;
960         int reg_num = strtoul(packet + 1, NULL, 16);
961         reg_t **reg_list;
962         int reg_list_size;
963         int retval;
964
965 #ifdef _DEBUG_GDB_IO_
966         LOG_DEBUG("-");
967 #endif
968
969         if ((retval = target->type->get_gdb_reg_list(target, &reg_list, &reg_list_size)) != ERROR_OK)
970         {
971                 return gdb_error(connection, retval);
972         }
973
974         if (reg_list_size <= reg_num)
975         {
976                 LOG_ERROR("gdb requested a non-existing register");
977                 exit(-1);
978         }
979
980         reg_packet = malloc(CEIL(reg_list[reg_num]->size, 8) * 2);
981
982         gdb_str_to_target(target, reg_packet, reg_list[reg_num]);
983
984         gdb_put_packet(connection, reg_packet, CEIL(reg_list[reg_num]->size, 8) * 2);
985
986         free(reg_list);
987         free(reg_packet);
988
989         return ERROR_OK;
990 }
991
992 int gdb_set_register_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
993 {
994         char *separator;
995         char *hex_buf;
996         u8 *bin_buf;
997         int reg_num = strtoul(packet + 1, &separator, 16);
998         reg_t **reg_list;
999         int reg_list_size;
1000         int retval;
1001         reg_arch_type_t *arch_type;
1002
1003         LOG_DEBUG("-");
1004
1005         if ((retval = target->type->get_gdb_reg_list(target, &reg_list, &reg_list_size)) != ERROR_OK)
1006         {
1007                 return gdb_error(connection, retval);
1008         }
1009
1010         if (reg_list_size < reg_num)
1011         {
1012                 LOG_ERROR("gdb requested a non-existing register");
1013                 return ERROR_SERVER_REMOTE_CLOSED;
1014         }
1015
1016         if (*separator != '=')
1017         {
1018                 LOG_ERROR("GDB 'set register packet', but no '=' following the register number");
1019                 return ERROR_SERVER_REMOTE_CLOSED;
1020         }
1021
1022         /* convert from GDB-string (target-endian) to hex-string (big-endian) */
1023         hex_buf = malloc(CEIL(reg_list[reg_num]->size, 8) * 2);
1024         gdb_target_to_str(target, separator + 1, hex_buf);
1025
1026         /* convert hex-string to binary buffer */
1027         bin_buf = malloc(CEIL(reg_list[reg_num]->size, 8));
1028         str_to_buf(hex_buf, CEIL(reg_list[reg_num]->size, 8) * 2, bin_buf, reg_list[reg_num]->size, 16);
1029
1030         /* get register arch_type, and call set method */
1031         arch_type = register_get_arch_type(reg_list[reg_num]->arch_type);
1032         arch_type->set(reg_list[reg_num], bin_buf);
1033
1034         gdb_put_packet(connection, "OK", 2);
1035
1036         free(bin_buf);
1037         free(hex_buf);
1038         free(reg_list);
1039
1040         return ERROR_OK;
1041 }
1042
1043 int gdb_error(connection_t *connection, int retval)
1044 {
1045         switch (retval)
1046         {
1047                 case ERROR_TARGET_DATA_ABORT:
1048                         gdb_send_error(connection, EIO);
1049                         break;
1050                 case ERROR_TARGET_TRANSLATION_FAULT:
1051                         gdb_send_error(connection, EFAULT);
1052                         break;
1053                 case ERROR_TARGET_UNALIGNED_ACCESS:
1054                         gdb_send_error(connection, EFAULT);
1055                         break;
1056                 case ERROR_TARGET_NOT_HALTED:
1057                         gdb_send_error(connection, EFAULT);
1058                         break;
1059                 default:
1060                         /* This could be that the target reset itself. */
1061                         LOG_ERROR("unexpected error %i", retval);
1062                         gdb_send_error(connection, EFAULT);
1063                         break;
1064         }
1065
1066         return ERROR_OK;
1067 }
1068
1069 /* We don't have to worry about the default 2 second timeout for GDB packets,
1070  * because GDB breaks up large memory reads into smaller reads.
1071  *
1072  * 8191 bytes by the looks of it. Why 8191 bytes instead of 8192?????
1073  */
1074 int gdb_read_memory_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1075 {
1076         char *separator;
1077         u32 addr = 0;
1078         u32 len = 0;
1079
1080         u8 *buffer;
1081         char *hex_buffer;
1082
1083         int retval = ERROR_OK;
1084
1085         /* skip command character */
1086         packet++;
1087
1088         addr = strtoul(packet, &separator, 16);
1089
1090         if (*separator != ',')
1091         {
1092                 LOG_ERROR("incomplete read memory packet received, dropping connection");
1093                 return ERROR_SERVER_REMOTE_CLOSED;
1094         }
1095
1096         len = strtoul(separator+1, NULL, 16);
1097
1098         buffer = malloc(len);
1099
1100         LOG_DEBUG("addr: 0x%8.8x, len: 0x%8.8x", addr, len);
1101
1102         retval = target_read_buffer(target, addr, len, buffer);
1103
1104         if ((retval == ERROR_TARGET_DATA_ABORT) && (!gdb_report_data_abort))
1105         {
1106                 /* TODO : Here we have to lie and send back all zero's lest stack traces won't work.
1107                  * At some point this might be fixed in GDB, in which case this code can be removed.
1108                  *
1109                  * OpenOCD developers are acutely aware of this problem, but there is nothing
1110                  * gained by involving the user in this problem that hopefully will get resolved
1111                  * eventually
1112                  *
1113                  * http://sourceware.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gdb&pr=2395
1114                  *
1115                  * For now, the default is to fix up things to make current GDB versions work.
1116                  * This can be overwritten using the gdb_report_data_abort <'enable'|'disable'> command.
1117                  */
1118                 memset(buffer, 0, len);
1119                 retval = ERROR_OK;
1120         }
1121
1122         if (retval == ERROR_OK)
1123         {
1124                 hex_buffer = malloc(len * 2 + 1);
1125
1126                 int i;
1127                 for (i = 0; i < len; i++)
1128                 {
1129                         u8 t = buffer[i];
1130                         hex_buffer[2 * i] = DIGITS[(t >> 4) & 0xf];
1131                         hex_buffer[2 * i + 1] = DIGITS[t & 0xf];
1132                 }
1133
1134                 gdb_put_packet(connection, hex_buffer, len * 2);
1135
1136                 free(hex_buffer);
1137         }
1138         else
1139         {
1140                 retval = gdb_error(connection, retval);
1141         }
1142
1143         free(buffer);
1144
1145         return retval;
1146 }
1147
1148 int gdb_write_memory_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1149 {
1150         char *separator;
1151         u32 addr = 0;
1152         u32 len = 0;
1153
1154         u8 *buffer;
1155
1156         int i;
1157         int retval;
1158
1159         /* skip command character */
1160         packet++;
1161
1162         addr = strtoul(packet, &separator, 16);
1163
1164         if (*separator != ',')
1165         {
1166                 LOG_ERROR("incomplete write memory packet received, dropping connection");
1167                 return ERROR_SERVER_REMOTE_CLOSED;
1168         }
1169
1170         len = strtoul(separator+1, &separator, 16);
1171
1172         if (*(separator++) != ':')
1173         {
1174                 LOG_ERROR("incomplete write memory packet received, dropping connection");
1175                 return ERROR_SERVER_REMOTE_CLOSED;
1176         }
1177
1178         buffer = malloc(len);
1179
1180         LOG_DEBUG("addr: 0x%8.8x, len: 0x%8.8x", addr, len);
1181
1182         for (i=0; i<len; i++)
1183         {
1184                 u32 tmp;
1185                 sscanf(separator + 2*i, "%2x", &tmp);
1186                 buffer[i] = tmp;
1187         }
1188
1189         retval = target_write_buffer(target, addr, len, buffer);
1190
1191         if (retval == ERROR_OK)
1192         {
1193                 gdb_put_packet(connection, "OK", 2);
1194         }
1195         else
1196         {
1197                 retval = gdb_error(connection, retval);
1198         }
1199
1200         free(buffer);
1201
1202         return retval;
1203 }
1204
1205 int gdb_write_memory_binary_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1206 {
1207         char *separator;
1208         u32 addr = 0;
1209         u32 len = 0;
1210
1211         int retval;
1212
1213         /* skip command character */
1214         packet++;
1215
1216         addr = strtoul(packet, &separator, 16);
1217
1218         if (*separator != ',')
1219         {
1220                 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1221                 return ERROR_SERVER_REMOTE_CLOSED;
1222         }
1223
1224         len = strtoul(separator+1, &separator, 16);
1225
1226         if (*(separator++) != ':')
1227         {
1228                 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1229                 return ERROR_SERVER_REMOTE_CLOSED;
1230         }
1231
1232         retval = ERROR_OK;
1233         if (len)
1234         {
1235                 LOG_DEBUG("addr: 0x%8.8x, len: 0x%8.8x", addr, len);
1236
1237                 retval = target_write_buffer(target, addr, len, (u8*)separator);
1238         }
1239
1240         if (retval == ERROR_OK)
1241         {
1242                 gdb_put_packet(connection, "OK", 2);
1243         }
1244         else
1245         {
1246                 if ((retval = gdb_error(connection, retval)) != ERROR_OK)
1247                         return retval;
1248         }
1249
1250         return ERROR_OK;
1251 }
1252
1253 int gdb_step_continue_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1254 {
1255         int current = 0;
1256         u32 address = 0x0;
1257         int retval=ERROR_OK;
1258
1259         LOG_DEBUG("-");
1260
1261         if (packet_size > 1)
1262         {
1263                 packet[packet_size] = 0;
1264                 address = strtoul(packet + 1, NULL, 16);
1265         }
1266         else
1267         {
1268                 current = 1;
1269         }
1270
1271         if (packet[0] == 'c')
1272         {
1273                 LOG_DEBUG("continue");
1274                 target_handle_event( target, TARGET_EVENT_OLD_pre_resume );
1275                 retval=target_resume(target, current, address, 0, 0); /* resume at current address, don't handle breakpoints, not debugging */
1276         }
1277         else if (packet[0] == 's')
1278         {
1279                 LOG_DEBUG("step");
1280                 retval=target->type->step(target, current, address, 0); /* step at current or address, don't handle breakpoints */
1281         }
1282         return retval;
1283 }
1284
1285 int gdb_breakpoint_watchpoint_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1286 {
1287         int type;
1288         enum breakpoint_type bp_type = BKPT_SOFT /* dummy init to avoid warning */;
1289         enum watchpoint_rw wp_type;
1290         u32 address;
1291         u32 size;
1292         char *separator;
1293         int retval;
1294
1295         LOG_DEBUG("-");
1296
1297         type = strtoul(packet + 1, &separator, 16);
1298
1299         if (type == 0)  /* memory breakpoint */
1300                 bp_type = BKPT_SOFT;
1301         else if (type == 1) /* hardware breakpoint */
1302                 bp_type = BKPT_HARD;
1303         else if (type == 2) /* write watchpoint */
1304                 wp_type = WPT_WRITE;
1305         else if (type == 3) /* read watchpoint */
1306                 wp_type = WPT_READ;
1307         else if (type == 4) /* access watchpoint */
1308                 wp_type = WPT_ACCESS;
1309
1310         if (gdb_breakpoint_override&&((bp_type==BKPT_SOFT)||(bp_type==BKPT_HARD)))
1311         {
1312                 bp_type=gdb_breakpoint_override_type;
1313         }
1314
1315         if (*separator != ',')
1316         {
1317                 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1318                 return ERROR_SERVER_REMOTE_CLOSED;
1319         }
1320
1321         address = strtoul(separator+1, &separator, 16);
1322
1323         if (*separator != ',')
1324         {
1325                 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1326                 return ERROR_SERVER_REMOTE_CLOSED;
1327         }
1328
1329         size = strtoul(separator+1, &separator, 16);
1330
1331         switch (type)
1332         {
1333                 case 0:
1334                 case 1:
1335                         if (packet[0] == 'Z')
1336                         {
1337                                 if ((retval = breakpoint_add(target, address, size, bp_type)) != ERROR_OK)
1338                                 {
1339                                         if ((retval = gdb_error(connection, retval)) != ERROR_OK)
1340                                                 return retval;
1341                                 }
1342                                 else
1343                                 {
1344                                         gdb_put_packet(connection, "OK", 2);
1345                                 }
1346                         }
1347                         else
1348                         {
1349                                 breakpoint_remove(target, address);
1350                                 gdb_put_packet(connection, "OK", 2);
1351                         }
1352                         break;
1353                 case 2:
1354                 case 3:
1355                 case 4:
1356                 {
1357                         if (packet[0] == 'Z')
1358                         {
1359                                 if ((retval = watchpoint_add(target, address, size, type-2, 0, 0xffffffffu)) != ERROR_OK)
1360                                 {
1361                                         if ((retval = gdb_error(connection, retval)) != ERROR_OK)
1362                                                 return retval;
1363                                 }
1364                                 else
1365                                 {
1366                                         gdb_put_packet(connection, "OK", 2);
1367                                 }
1368                         }
1369                         else
1370                         {
1371                                 watchpoint_remove(target, address);
1372                                 gdb_put_packet(connection, "OK", 2);
1373                         }
1374                         break;
1375                 }
1376                 default:
1377                         break;
1378         }
1379
1380         return ERROR_OK;
1381 }
1382
1383 /* print out a string and allocate more space as needed, mainly used for XML at this point */
1384 void xml_printf(int *retval, char **xml, int *pos, int *size, const char *fmt, ...)
1385 {
1386         if (*retval != ERROR_OK)
1387         {
1388                 return;
1389         }
1390         int first = 1;
1391
1392         for (;;)
1393         {
1394                 if ((*xml == NULL) || (!first))
1395                 {
1396                         /* start by 0 to exercise all the code paths.
1397                          * Need minimum 2 bytes to fit 1 char and 0 terminator. */
1398
1399                         *size = *size * 2 + 2;
1400                         char *t = *xml;
1401                         *xml = realloc(*xml, *size);
1402                         if (*xml == NULL)
1403                         {
1404                                 if (t)
1405                                         free(t);
1406                                 *retval = ERROR_SERVER_REMOTE_CLOSED;
1407                                 return;
1408                         }
1409                 }
1410
1411                 va_list ap;
1412                 int ret;
1413                 va_start(ap, fmt);
1414                 ret = vsnprintf(*xml + *pos, *size - *pos, fmt, ap);
1415                 va_end(ap);
1416                 if ((ret > 0) && ((ret + 1) < *size - *pos))
1417                 {
1418                         *pos += ret;
1419                         return;
1420                 }
1421                 /* there was just enough or not enough space, allocate more. */
1422                 first = 0;
1423         }
1424 }
1425
1426 static int decode_xfer_read(char *buf, char **annex, int *ofs, unsigned int *len)
1427 {
1428         char *separator;
1429
1430         /* Extract and NUL-terminate the annex. */
1431         *annex = buf;
1432         while (*buf && *buf != ':')
1433                 buf++;
1434         if (*buf == '\0')
1435                 return -1;
1436         *buf++ = 0;
1437
1438         /* After the read marker and annex, qXfer looks like a
1439          * traditional 'm' packet. */
1440
1441         *ofs = strtoul(buf, &separator, 16);
1442
1443         if (*separator != ',')
1444                 return -1;
1445
1446         *len = strtoul(separator+1, NULL, 16);
1447
1448         return 0;
1449 }
1450
1451 int gdb_calc_blocksize(flash_bank_t *bank)
1452 {
1453         int i;
1454         int block_size = 0xffffffff;
1455
1456         /* loop through all sectors and return smallest sector size */
1457
1458         for (i = 0; i < bank->num_sectors; i++)
1459         {
1460                 if (bank->sectors[i].size < block_size)
1461                         block_size = bank->sectors[i].size;
1462         }
1463
1464         return block_size;
1465 }
1466
1467 static int compare_bank (const void * a, const void * b)
1468 {
1469         flash_bank_t *b1, *b2;
1470         b1=*((flash_bank_t **)a);
1471         b2=*((flash_bank_t **)b);
1472
1473         if (b1->base==b2->base)
1474         {
1475                 return 0;
1476         } else if (b1->base>b2->base)
1477         {
1478                 return 1;
1479         } else
1480         {
1481                 return -1;
1482         }
1483 }
1484
1485 int gdb_query_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1486 {
1487         command_context_t *cmd_ctx = connection->cmd_ctx;
1488         gdb_connection_t *gdb_connection = connection->priv;
1489
1490         if (strstr(packet, "qRcmd,"))
1491         {
1492                 if (packet_size > 6)
1493                 {
1494                         char *cmd;
1495                         int i;
1496                         cmd = malloc((packet_size - 6)/2 + 1);
1497                         for (i=0; i < (packet_size - 6)/2; i++)
1498                         {
1499                                 u32 tmp;
1500                                 sscanf(packet + 6 + 2*i, "%2x", &tmp);
1501                                 cmd[i] = tmp;
1502                         }
1503                         cmd[(packet_size - 6)/2] = 0x0;
1504
1505                         /* We want to print all debug output to GDB connection */
1506                         log_add_callback(gdb_log_callback, connection);
1507                         target_call_timer_callbacks_now();
1508                         command_run_line(cmd_ctx, cmd);
1509                         target_call_timer_callbacks_now();
1510                         log_remove_callback(gdb_log_callback, connection);
1511                         free(cmd);
1512                 }
1513                 gdb_put_packet(connection, "OK", 2);
1514                 return ERROR_OK;
1515         }
1516         else if (strstr(packet, "qCRC:"))
1517         {
1518                 if (packet_size > 5)
1519                 {
1520                         int retval;
1521                         char gdb_reply[10];
1522                         char *separator;
1523                         u32 checksum;
1524                         u32 addr = 0;
1525                         u32 len = 0;
1526
1527                         /* skip command character */
1528                         packet += 5;
1529
1530                         addr = strtoul(packet, &separator, 16);
1531
1532                         if (*separator != ',')
1533                         {
1534                                 LOG_ERROR("incomplete read memory packet received, dropping connection");
1535                                 return ERROR_SERVER_REMOTE_CLOSED;
1536                         }
1537
1538                         len = strtoul(separator + 1, NULL, 16);
1539
1540                         retval = target_checksum_memory(target, addr, len, &checksum);
1541
1542                         if (retval == ERROR_OK)
1543                         {
1544                                 snprintf(gdb_reply, 10, "C%8.8x", checksum);
1545                                 gdb_put_packet(connection, gdb_reply, 9);
1546                         }
1547                         else
1548                         {
1549                                 if ((retval = gdb_error(connection, retval)) != ERROR_OK)
1550                                         return retval;
1551                         }
1552
1553                         return ERROR_OK;
1554                 }
1555         }
1556         else if (strstr(packet, "qSupported"))
1557         {
1558                 /* we currently support packet size and qXfer:memory-map:read (if enabled)
1559                  * disable qXfer:features:read for the moment */
1560                 int retval = ERROR_OK;
1561                 char *buffer = NULL;
1562                 int pos = 0;
1563                 int size = 0;
1564
1565                 xml_printf(&retval, &buffer, &pos, &size,
1566                                 "PacketSize=%x;qXfer:memory-map:read%c;qXfer:features:read-;QStartNoAckMode+",
1567                                 (GDB_BUFFER_SIZE - 1), ((gdb_use_memory_map == 1)&&(flash_get_bank_count()>0)) ? '+' : '-');
1568
1569                 if (retval != ERROR_OK)
1570                 {
1571                         gdb_send_error(connection, 01);
1572                         return ERROR_OK;
1573                 }
1574
1575                 gdb_put_packet(connection, buffer, strlen(buffer));
1576                 free(buffer);
1577
1578                 return ERROR_OK;
1579         }
1580         else if (strstr(packet, "qXfer:memory-map:read::")&&(flash_get_bank_count()>0))
1581         {
1582                 /* We get away with only specifying flash here. Regions that are not
1583                  * specified are treated as if we provided no memory map(if not we
1584                  * could detect the holes and mark them as RAM).
1585                  * Normally we only execute this code once, but no big deal if we
1586                  * have to regenerate it a couple of times. */
1587
1588                 flash_bank_t *p;
1589                 char *xml = NULL;
1590                 int size = 0;
1591                 int pos = 0;
1592                 int retval = ERROR_OK;
1593
1594                 int offset;
1595                 int length;
1596                 char *separator;
1597                 int blocksize;
1598
1599                 /* skip command character */
1600                 packet += 23;
1601
1602                 offset = strtoul(packet, &separator, 16);
1603                 length = strtoul(separator + 1, &separator, 16);
1604
1605                 xml_printf(&retval, &xml, &pos, &size, "<memory-map>\n");
1606
1607                 /*
1608                 sort banks in ascending order, we need to make non-flash memory be ram(or rather
1609                 read/write) by default for GDB.
1610                 GDB does not have a concept of non-cacheable read/write memory.
1611                  */
1612                 flash_bank_t **banks=malloc(sizeof(flash_bank_t *)*flash_get_bank_count());
1613                 int i;
1614
1615                 for (i=0; i<flash_get_bank_count(); i++)
1616                 {
1617                         p = get_flash_bank_by_num(i);
1618                         if (p == NULL)
1619                         {
1620                                 free(banks);
1621                                 retval = ERROR_FAIL;
1622                                 gdb_send_error(connection, retval);
1623                                 return retval;
1624                         }
1625                         banks[i]=p;
1626                 }
1627
1628                 qsort(banks, flash_get_bank_count(), sizeof(flash_bank_t *), compare_bank);
1629
1630                 u32 ram_start=0;
1631                 for (i=0; i<flash_get_bank_count(); i++)
1632                 {
1633                         p = banks[i];
1634
1635                         if (ram_start<p->base)
1636                         {
1637                                 xml_printf(&retval, &xml, &pos, &size, "<memory type=\"ram\" start=\"0x%x\" length=\"0x%x\"/>\n",
1638                                         ram_start, p->base-ram_start);
1639                         }
1640
1641                         /* if device has uneven sector sizes, eg. str7, lpc
1642                          * we pass the smallest sector size to gdb memory map */
1643                         blocksize = gdb_calc_blocksize(p);
1644
1645                         xml_printf(&retval, &xml, &pos, &size, "<memory type=\"flash\" start=\"0x%x\" length=\"0x%x\">\n" \
1646                                 "<property name=\"blocksize\">0x%x</property>\n" \
1647                                 "</memory>\n", \
1648                                 p->base, p->size, blocksize);
1649                         ram_start=p->base+p->size;
1650                 }
1651                 if (ram_start!=0)
1652                 {
1653                         xml_printf(&retval, &xml, &pos, &size, "<memory type=\"ram\" start=\"0x%x\" length=\"0x%x\"/>\n",
1654                                 ram_start, 0-ram_start);
1655                 } else
1656                 {
1657                         /* a flash chip could be at the very end of the 32 bit address space, in which case
1658                         ram_start will be precisely 0 */
1659                 }
1660
1661                 free(banks);
1662                 banks = NULL;
1663
1664                 xml_printf(&retval, &xml, &pos, &size, "</memory-map>\n");
1665
1666                 if (retval != ERROR_OK)
1667                 {
1668                         gdb_send_error(connection, retval);
1669                         return retval;
1670                 }
1671
1672                 if (offset + length > pos)
1673                 {
1674                         length = pos - offset;
1675                 }
1676
1677                 char *t = malloc(length + 1);
1678                 t[0] = 'l';
1679                 memcpy(t + 1, xml + offset, length);
1680                 gdb_put_packet(connection, t, length + 1);
1681
1682                 free(t);
1683                 free(xml);
1684                 return ERROR_OK;
1685         }
1686         else if (strstr(packet, "qXfer:features:read:"))
1687         {
1688                 char *xml = NULL;
1689                 int size = 0;
1690                 int pos = 0;
1691                 int retval = ERROR_OK;
1692
1693                 int offset;
1694                 unsigned int length;
1695                 char *annex;
1696
1697                 /* skip command character */
1698                 packet += 20;
1699
1700                 if (decode_xfer_read(packet, &annex, &offset, &length) < 0)
1701                 {
1702                         gdb_send_error(connection, 01);
1703                         return ERROR_OK;
1704                 }
1705
1706                 if (strcmp(annex, "target.xml") != 0)
1707                 {
1708                         gdb_send_error(connection, 01);
1709                         return ERROR_OK;
1710                 }
1711
1712                 xml_printf(&retval, &xml, &pos, &size, \
1713                         "l<target version=\"1.0\">\n<architecture>arm</architecture>\n</target>\n");
1714
1715                 if (retval != ERROR_OK)
1716                 {
1717                         gdb_send_error(connection, retval);
1718                         return retval;
1719                 }
1720
1721                 gdb_put_packet(connection, xml, strlen(xml));
1722
1723                 free(xml);
1724                 return ERROR_OK;
1725         }
1726         else if (strstr(packet, "QStartNoAckMode"))
1727         {
1728                 gdb_connection->noack_mode = 1;
1729                 gdb_put_packet(connection, "OK", 2);
1730                 return ERROR_OK;
1731         }
1732
1733         gdb_put_packet(connection, "", 0);
1734         return ERROR_OK;
1735 }
1736
1737 int gdb_v_packet(connection_t *connection, target_t *target, char *packet, int packet_size)
1738 {
1739         gdb_connection_t *gdb_connection = connection->priv;
1740         gdb_service_t *gdb_service = connection->service->priv;
1741         int result;
1742
1743         /* if flash programming disabled - send a empty reply */
1744
1745         if (gdb_flash_program == 0)
1746         {
1747                 gdb_put_packet(connection, "", 0);
1748                 return ERROR_OK;
1749         }
1750
1751         if (strstr(packet, "vFlashErase:"))
1752         {
1753                 unsigned long addr;
1754                 unsigned long length;
1755
1756                 char *parse = packet + 12;
1757                 if (*parse == '\0')
1758                 {
1759                         LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1760                         return ERROR_SERVER_REMOTE_CLOSED;
1761                 }
1762
1763                 addr = strtoul(parse, &parse, 16);
1764
1765                 if (*(parse++) != ',' || *parse == '\0')
1766                 {
1767                         LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1768                         return ERROR_SERVER_REMOTE_CLOSED;
1769                 }
1770
1771                 length = strtoul(parse, &parse, 16);
1772
1773                 if (*parse != '\0')
1774                 {
1775                         LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1776                         return ERROR_SERVER_REMOTE_CLOSED;
1777                 }
1778
1779                 /* assume all sectors need erasing - stops any problems
1780                  * when flash_write is called multiple times */
1781                 flash_set_dirty();
1782
1783                 /* perform any target specific operations before the erase */
1784                 target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_ERASE_START);
1785                 result = flash_erase_address_range(gdb_service->target, addr, length );
1786                 target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_ERASE_END);
1787
1788                 /* perform erase */
1789                 if (result != ERROR_OK)
1790                 {
1791                         /* GDB doesn't evaluate the actual error number returned,
1792                          * treat a failed erase as an I/O error
1793                          */
1794                         gdb_send_error(connection, EIO);
1795                         LOG_ERROR("flash_erase returned %i", result);
1796                 }
1797                 else
1798                         gdb_put_packet(connection, "OK", 2);
1799
1800                 return ERROR_OK;
1801         }
1802
1803         if (strstr(packet, "vFlashWrite:"))
1804         {
1805                 unsigned long addr;
1806                 unsigned long length;
1807                 char *parse = packet + 12;
1808
1809                 if (*parse == '\0')
1810                 {
1811                         LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1812                         return ERROR_SERVER_REMOTE_CLOSED;
1813                 }
1814                 addr = strtoul(parse, &parse, 16);
1815                 if (*(parse++) != ':')
1816                 {
1817                         LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1818                         return ERROR_SERVER_REMOTE_CLOSED;
1819                 }
1820                 length = packet_size - (parse - packet);
1821
1822                 /* create a new image if there isn't already one */
1823                 if (gdb_connection->vflash_image == NULL)
1824                 {
1825                         gdb_connection->vflash_image = malloc(sizeof(image_t));
1826                         image_open(gdb_connection->vflash_image, "", "build");
1827                 }
1828
1829                 /* create new section with content from packet buffer */
1830                 image_add_section(gdb_connection->vflash_image, addr, length, 0x0, (u8*)parse);
1831
1832                 gdb_put_packet(connection, "OK", 2);
1833
1834                 return ERROR_OK;
1835         }
1836
1837         if (!strcmp(packet, "vFlashDone"))
1838         {
1839                 u32 written;
1840
1841                 /* process the flashing buffer. No need to erase as GDB
1842                  * always issues a vFlashErase first. */
1843                 target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_WRITE_START);
1844                 result = flash_write(gdb_service->target, gdb_connection->vflash_image, &written, 0);
1845                 target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_WRITE_END);
1846                 if ( result != ERROR_OK)
1847                 {
1848                         if (result == ERROR_FLASH_DST_OUT_OF_BANK)
1849                                 gdb_put_packet(connection, "E.memtype", 9);
1850                         else
1851                                 gdb_send_error(connection, EIO);
1852                         }
1853                 else
1854                 {
1855                         LOG_DEBUG("wrote %u bytes from vFlash image to flash", written);
1856                         gdb_put_packet(connection, "OK", 2);
1857                 }
1858
1859                 image_close(gdb_connection->vflash_image);
1860                 free(gdb_connection->vflash_image);
1861                 gdb_connection->vflash_image = NULL;
1862
1863                 return ERROR_OK;
1864         }
1865
1866         gdb_put_packet(connection, "", 0);
1867         return ERROR_OK;
1868 }
1869
1870 int gdb_detach(connection_t *connection, target_t *target)
1871 {
1872
1873         switch( detach_mode )
1874         {
1875                 case GDB_DETACH_RESUME:
1876                         target_handle_event( target, TARGET_EVENT_OLD_pre_resume );
1877                         target_resume(target, 1, 0, 1, 0);
1878                         break;
1879
1880                 case GDB_DETACH_RESET:
1881                         /* FIX?? make this configurable?? */
1882                         target_process_reset(connection->cmd_ctx, RESET_HALT);
1883                         break;
1884
1885                 case GDB_DETACH_HALT:
1886                         target_halt(target);
1887                         break;
1888
1889                 case GDB_DETACH_NOTHING:
1890                         break;
1891         }
1892
1893         gdb_put_packet(connection, "OK", 2);
1894         return ERROR_OK;
1895 }
1896
1897 static void gdb_log_callback(void *priv, const char *file, int line,
1898                 const char *function, const char *string)
1899 {
1900         connection_t *connection = priv;
1901         gdb_connection_t *gdb_con = connection->priv;
1902
1903         if (gdb_con->busy)
1904         {
1905                 /* do not reply this using the O packet */
1906                 return;
1907         }
1908
1909         gdb_output_con(connection, string);
1910 }
1911
1912 /* Do not allocate this on the stack */
1913 char gdb_packet_buffer[GDB_BUFFER_SIZE];
1914
1915 static void gdb_sig_halted(connection_t *connection)
1916 {
1917         char sig_reply[4];
1918         snprintf(sig_reply, 4, "T%2.2x", 2);
1919         gdb_put_packet(connection, sig_reply, 3);
1920
1921 }
1922
1923 int gdb_input_inner(connection_t *connection)
1924 {
1925         gdb_service_t *gdb_service = connection->service->priv;
1926         target_t *target = gdb_service->target;
1927         char *packet=gdb_packet_buffer;
1928         int packet_size;
1929         int retval;
1930         gdb_connection_t *gdb_con = connection->priv;
1931         static int extended_protocol = 0;
1932
1933         /* drain input buffer */
1934         do
1935         {
1936                 packet_size = GDB_BUFFER_SIZE-1;
1937                 if ((retval = gdb_get_packet(connection, packet, &packet_size)) != ERROR_OK)
1938                 {
1939                         return retval;
1940                 }
1941
1942                 /* terminate with zero */
1943                 packet[packet_size] = 0;
1944
1945                 LOG_DEBUG("received packet: '%s'", packet);
1946
1947                 if (packet_size > 0)
1948                 {
1949                         retval = ERROR_OK;
1950                         switch (packet[0])
1951                         {
1952                                 case 'H':
1953                                         /* Hct... -- set thread
1954                                          * we don't have threads, send empty reply */
1955                                         gdb_put_packet(connection, NULL, 0);
1956                                         break;
1957                                 case 'q':
1958                                 case 'Q':
1959                                         retval = gdb_query_packet(connection, target, packet, packet_size);
1960                                         break;
1961                                 case 'g':
1962                                         retval = gdb_get_registers_packet(connection, target, packet, packet_size);
1963                                         break;
1964                                 case 'G':
1965                                         retval = gdb_set_registers_packet(connection, target, packet, packet_size);
1966                                         break;
1967                                 case 'p':
1968                                         retval = gdb_get_register_packet(connection, target, packet, packet_size);
1969                                         break;
1970                                 case 'P':
1971                                         retval = gdb_set_register_packet(connection, target, packet, packet_size);
1972                                         break;
1973                                 case 'm':
1974                                         retval = gdb_read_memory_packet(connection, target, packet, packet_size);
1975                                         break;
1976                                 case 'M':
1977                                         retval = gdb_write_memory_packet(connection, target, packet, packet_size);
1978                                         break;
1979                                 case 'z':
1980                                 case 'Z':
1981                                         retval = gdb_breakpoint_watchpoint_packet(connection, target, packet, packet_size);
1982                                         break;
1983                                 case '?':
1984                                         gdb_last_signal_packet(connection, target, packet, packet_size);
1985                                         break;
1986                                 case 'c':
1987                                 case 's':
1988                                         {
1989                                                 if (target->state != TARGET_HALTED)
1990                                                 {
1991                                                         /* If the target isn't in the halted state, then we can't
1992                                                          * step/continue. This might be early setup, etc.
1993                                                          */
1994                                                         gdb_sig_halted(connection);
1995                                                 } else
1996                                                 {
1997                                                         /* We're running/stepping, in which case we can
1998                                                          * forward log output until the target is halted
1999                                                          */
2000                                                         gdb_connection_t *gdb_con = connection->priv;
2001                                                         gdb_con->frontend_state = TARGET_RUNNING;
2002                                                         log_add_callback(gdb_log_callback, connection);
2003                                                         int retval=gdb_step_continue_packet(connection, target, packet, packet_size);
2004                                                         if (retval!=ERROR_OK)
2005                                                         {
2006                                                                 /* we'll never receive a halted condition... issue a false one.. */
2007                                                                 gdb_frontend_halted(target, connection);
2008                                                         }
2009                                                 }
2010                                         }
2011                                         break;
2012                                 case 'v':
2013                                         retval = gdb_v_packet(connection, target, packet, packet_size);
2014                                         break;
2015                                 case 'D':
2016                                         retval = gdb_detach(connection, target);
2017                                         extended_protocol = 0;
2018                                         break;
2019                                 case 'X':
2020                                         if ((retval = gdb_write_memory_binary_packet(connection, target, packet, packet_size)) != ERROR_OK)
2021                                                 return retval;
2022                                         break;
2023                                 case 'k':
2024                                         if (extended_protocol != 0)
2025                                                 break;
2026                                         gdb_put_packet(connection, "OK", 2);
2027                                         return ERROR_SERVER_REMOTE_CLOSED;
2028                                 case '!':
2029                                         /* handle extended remote protocol */
2030                                         extended_protocol = 1;
2031                                         gdb_put_packet(connection, "OK", 2);
2032                                         break;
2033                                 case 'R':
2034                                         /* handle extended restart packet */
2035                                         breakpoint_clear_target(gdb_service->target);
2036                                         watchpoint_clear_target(gdb_service->target);
2037                                         command_run_linef(connection->cmd_ctx, "ocd_gdb_restart %d", get_num_by_target(target));
2038                                         break;
2039                                 default:
2040                                         /* ignore unkown packets */
2041                                         LOG_DEBUG("ignoring 0x%2.2x packet", packet[0]);
2042                                         gdb_put_packet(connection, NULL, 0);
2043                                         break;
2044                         }
2045
2046                         /* if a packet handler returned an error, exit input loop */
2047                         if (retval != ERROR_OK)
2048                                 return retval;
2049                 }
2050
2051                 if (gdb_con->ctrl_c)
2052                 {
2053                         if (target->state == TARGET_RUNNING)
2054                         {
2055                                 target_halt(target);
2056                                 gdb_con->ctrl_c = 0;
2057                         }
2058                 }
2059
2060         } while (gdb_con->buf_cnt > 0);
2061
2062         return ERROR_OK;
2063 }
2064
2065 int gdb_input(connection_t *connection)
2066 {
2067         int retval = gdb_input_inner(connection);
2068         gdb_connection_t *gdb_con = connection->priv;
2069         if (retval == ERROR_SERVER_REMOTE_CLOSED)
2070                 return retval;
2071
2072         /* logging does not propagate the error, yet can set th gdb_con->closed flag */
2073         if (gdb_con->closed)
2074                 return ERROR_SERVER_REMOTE_CLOSED;
2075
2076         /* we'll recover from any other errors(e.g. temporary timeouts, etc.) */
2077         return ERROR_OK;
2078 }
2079
2080 int gdb_init(void)
2081 {
2082         gdb_service_t *gdb_service;
2083         target_t *target = all_targets;
2084
2085         if (!target)
2086         {
2087                 LOG_WARNING("no gdb ports allocated as no target has been specified");
2088                 return ERROR_OK;
2089         }
2090
2091         if (gdb_port == 0)
2092         {
2093                 LOG_WARNING("no gdb port specified, using default port 3333");
2094                 gdb_port = 3333;
2095         }
2096
2097         while (target)
2098         {
2099                 char service_name[8];
2100
2101                 snprintf(service_name, 8, "gdb-%2.2i", target->target_number);
2102
2103                 gdb_service = malloc(sizeof(gdb_service_t));
2104                 gdb_service->target = target;
2105
2106                 add_service("gdb", CONNECTION_GDB,
2107                             gdb_port + target->target_number,
2108                             1, gdb_new_connection, gdb_input,
2109                             gdb_connection_closed,
2110                             gdb_service);
2111
2112                 LOG_DEBUG("gdb service for target %s at port %i",
2113                           target->type->name,
2114                           gdb_port + target->target_number);
2115
2116                 target = target->next;
2117         }
2118
2119         return ERROR_OK;
2120 }
2121
2122 /* daemon configuration command gdb_port */
2123 int handle_gdb_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2124 {
2125         if (argc == 0)
2126                 return ERROR_OK;
2127
2128         /* only if the port wasn't overwritten by cmdline */
2129         if (gdb_port == 0)
2130                 gdb_port = strtoul(args[0], NULL, 0);
2131
2132         return ERROR_OK;
2133 }
2134
2135 int handle_gdb_detach_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2136 {
2137         if (argc == 1)
2138         {
2139                 if (strcmp(args[0], "resume") == 0)
2140                 {
2141                         detach_mode = GDB_DETACH_RESUME;
2142                         return ERROR_OK;
2143                 }
2144                 else if (strcmp(args[0], "reset") == 0)
2145                 {
2146                         detach_mode = GDB_DETACH_RESET;
2147                         return ERROR_OK;
2148                 }
2149                 else if (strcmp(args[0], "halt") == 0)
2150                 {
2151                         detach_mode = GDB_DETACH_HALT;
2152                         return ERROR_OK;
2153                 }
2154                 else if (strcmp(args[0], "nothing") == 0)
2155                 {
2156                         detach_mode = GDB_DETACH_NOTHING;
2157                         return ERROR_OK;
2158                 }
2159         }
2160
2161         LOG_WARNING("invalid gdb_detach configuration directive: %s", args[0]);
2162         return ERROR_OK;
2163 }
2164
2165 int handle_gdb_memory_map_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2166 {
2167         if (argc == 1)
2168         {
2169                 if (strcmp(args[0], "enable") == 0)
2170                 {
2171                         gdb_use_memory_map = 1;
2172                         return ERROR_OK;
2173                 }
2174                 else if (strcmp(args[0], "disable") == 0)
2175                 {
2176                         gdb_use_memory_map = 0;
2177                         return ERROR_OK;
2178                 }
2179         }
2180
2181         LOG_WARNING("invalid gdb_memory_map configuration directive: %s", args[0]);
2182         return ERROR_OK;
2183 }
2184
2185 int handle_gdb_flash_program_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2186 {
2187         if (argc == 1)
2188         {
2189                 if (strcmp(args[0], "enable") == 0)
2190                 {
2191                         gdb_flash_program = 1;
2192                         return ERROR_OK;
2193                 }
2194                 else if (strcmp(args[0], "disable") == 0)
2195                 {
2196                         gdb_flash_program = 0;
2197                         return ERROR_OK;
2198                 }
2199         }
2200
2201         LOG_WARNING("invalid gdb_memory_map configuration directive: %s", args[0]);
2202         return ERROR_OK;
2203 }
2204
2205 int handle_gdb_report_data_abort_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2206 {
2207         if (argc == 1)
2208         {
2209                 if (strcmp(args[0], "enable") == 0)
2210                 {
2211                         gdb_report_data_abort = 1;
2212                         return ERROR_OK;
2213                 }
2214                 else if (strcmp(args[0], "disable") == 0)
2215                 {
2216                         gdb_report_data_abort = 0;
2217                         return ERROR_OK;
2218                 }
2219         }
2220
2221         LOG_WARNING("invalid gdb_report_data_abort configuration directive: %s", args[0]);
2222         return ERROR_OK;
2223 }
2224
2225 /* daemon configuration command gdb_port */
2226 int handle_gdb_breakpoint_override_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2227 {
2228         if (argc == 0)
2229         {
2230
2231         } else if (argc==1)
2232         {
2233                 gdb_breakpoint_override = 1;
2234                 if (strcmp(args[0], "hard")==0)
2235                 {
2236                         gdb_breakpoint_override_type=BKPT_HARD;
2237                 } else if (strcmp(args[0], "soft")==0)
2238                 {
2239                         gdb_breakpoint_override_type=BKPT_SOFT;
2240                 } else if (strcmp(args[0], "disable") == 0)
2241                 {
2242                         gdb_breakpoint_override = 0;
2243                 }
2244         } else
2245         {
2246                 return ERROR_COMMAND_SYNTAX_ERROR;
2247         }
2248         if (gdb_breakpoint_override)
2249         {
2250                 LOG_USER("force %s breakpoints", (gdb_breakpoint_override_type==BKPT_HARD)?"hard":"soft");
2251         } else
2252         {
2253                 LOG_USER("breakpoint type is not overriden");
2254         }
2255
2256         return ERROR_OK;
2257 }
2258
2259
2260 int gdb_register_commands(command_context_t *command_context)
2261 {
2262         register_command(command_context, NULL, "gdb_port", handle_gdb_port_command,
2263                         COMMAND_CONFIG, "");
2264         register_command(command_context, NULL, "gdb_detach", handle_gdb_detach_command,
2265                         COMMAND_CONFIG, "");
2266         register_command(command_context, NULL, "gdb_memory_map", handle_gdb_memory_map_command,
2267                         COMMAND_CONFIG, "");
2268         register_command(command_context, NULL, "gdb_flash_program", handle_gdb_flash_program_command,
2269                         COMMAND_CONFIG, "");
2270         register_command(command_context, NULL, "gdb_report_data_abort", handle_gdb_report_data_abort_command,
2271                         COMMAND_CONFIG, "");
2272         register_command(command_context, NULL, "gdb_breakpoint_override", handle_gdb_breakpoint_override_command,
2273                         COMMAND_EXEC, "hard/soft/disabled - force breakpoint type for gdb 'break' commands."
2274                         "The raison d'etre for this option is to support GDB GUI's without "
2275                         "a hard/soft breakpoint concept where the default OpenOCD behaviour "
2276                         "is not sufficient");
2277         return ERROR_OK;
2278 }