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

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)