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

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)