Combine register lists of smp targets.
[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 * Copyright (C) 2013 Andes Technology *
18 * Hsiangkai Wang <hkwang@andestech.com> *
19 * *
20 * Copyright (C) 2013 Franck Jullien *
21 * elec4fun@gmail.com *
22 * *
23 * This program is free software; you can redistribute it and/or modify *
24 * it under the terms of the GNU General Public License as published by *
25 * the Free Software Foundation; either version 2 of the License, or *
26 * (at your option) any later version. *
27 * *
28 * This program is distributed in the hope that it will be useful, *
29 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
31 * GNU General Public License for more details. *
32 * *
33 * You should have received a copy of the GNU General Public License *
34 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
35 ***************************************************************************/
36
37 #ifdef HAVE_CONFIG_H
38 #include "config.h"
39 #endif
40
41 #include <target/breakpoints.h>
42 #include <target/target_request.h>
43 #include <target/register.h>
44 #include <target/target.h>
45 #include <target/target_type.h>
46 #include <target/semihosting_common.h>
47 #include "server.h"
48 #include <flash/nor/core.h>
49 #include "gdb_server.h"
50 #include <target/image.h>
51 #include <jtag/jtag.h>
52 #include "rtos/rtos.h"
53 #include "target/smp.h"
54
55 /**
56 * @file
57 * GDB server implementation.
58 *
59 * This implements the GDB Remote Serial Protocol, over TCP connections,
60 * giving GDB access to the JTAG or other hardware debugging facilities
61 * found in most modern embedded processors.
62 */
63
64 struct target_desc_format {
65 char *tdesc;
66 uint32_t tdesc_length;
67 };
68
69 /* private connection data for GDB */
70 struct gdb_connection {
71 char buffer[GDB_BUFFER_SIZE + 1]; /* Extra byte for null-termination */
72 char *buf_p;
73 int buf_cnt;
74 bool ctrl_c;
75 enum target_state frontend_state;
76 struct image *vflash_image;
77 bool closed;
78 bool busy;
79 int noack_mode;
80 /* set flag to true if you want the next stepi to return immediately.
81 * allowing GDB to pick up a fresh set of register values from the target
82 * without modifying the target state. */
83 bool sync;
84 /* We delay reporting memory write errors until next step/continue or memory
85 * write. This improves performance of gdb load significantly as the GDB packet
86 * can be replied immediately and a new GDB packet will be ready without delay
87 * (ca. 10% or so...). */
88 bool mem_write_error;
89 /* with extended-remote it seems we need to better emulate attach/detach.
90 * what this means is we reply with a W stop reply after a kill packet,
91 * normally we reply with a S reply via gdb_last_signal_packet.
92 * as a side note this behaviour only effects gdb > 6.8 */
93 bool attached;
94 /* set when extended protocol is used */
95 bool extended_protocol;
96 /* temporarily used for target description support */
97 struct target_desc_format target_desc;
98 /* temporarily used for thread list support */
99 char *thread_list;
100 };
101
102 #if 0
103 #define _DEBUG_GDB_IO_
104 #endif
105
106 static struct gdb_connection *current_gdb_connection;
107
108 static int gdb_breakpoint_override;
109 static enum breakpoint_type gdb_breakpoint_override_type;
110
111 static int gdb_error(struct connection *connection, int retval);
112 static char *gdb_port;
113 static char *gdb_port_next;
114
115 static void gdb_log_callback(void *priv, const char *file, unsigned line,
116 const char *function, const char *string);
117
118 static void gdb_sig_halted(struct connection *connection);
119
120 /* number of gdb connections, mainly to suppress gdb related debugging spam
121 * in helper/log.c when no gdb connections are actually active */
122 int gdb_actual_connections;
123
124 /* set if we are sending a memory map to gdb
125 * via qXfer:memory-map:read packet */
126 /* enabled by default*/
127 static int gdb_use_memory_map = 1;
128 /* enabled by default*/
129 static int gdb_flash_program = 1;
130
131 /* if set, data aborts cause an error to be reported in memory read packets
132 * see the code in gdb_read_memory_packet() for further explanations.
133 * Disabled by default.
134 */
135 static int gdb_report_data_abort;
136 /* If set, errors when accessing registers are reported to gdb. Disabled by
137 * default. */
138 static int gdb_report_register_access_error;
139
140 /* set if we are sending target descriptions to gdb
141 * via qXfer:features:read packet */
142 /* enabled by default */
143 static int gdb_use_target_description = 1;
144
145 /* current processing free-run type, used by file-I/O */
146 static char gdb_running_type;
147
148 static int gdb_last_signal(struct target *target)
149 {
150 switch (target->debug_reason) {
151 case DBG_REASON_DBGRQ:
152 return 0x2; /* SIGINT */
153 case DBG_REASON_BREAKPOINT:
154 case DBG_REASON_WATCHPOINT:
155 case DBG_REASON_WPTANDBKPT:
156 return 0x05; /* SIGTRAP */
157 case DBG_REASON_SINGLESTEP:
158 return 0x05; /* SIGTRAP */
159 case DBG_REASON_EXC_CATCH:
160 return 0x05;
161 case DBG_REASON_NOTHALTED:
162 return 0x0; /* no signal... shouldn't happen */
163 default:
164 LOG_USER("undefined debug reason %d - target needs reset",
165 target->debug_reason);
166 return 0x0;
167 }
168 }
169
170 static int check_pending(struct connection *connection,
171 int timeout_s, int *got_data)
172 {
173 /* a non-blocking socket will block if there is 0 bytes available on the socket,
174 * but return with as many bytes as are available immediately
175 */
176 struct timeval tv;
177 fd_set read_fds;
178 struct gdb_connection *gdb_con = connection->priv;
179 int t;
180 if (!got_data)
181 got_data = &t;
182 *got_data = 0;
183
184 if (gdb_con->buf_cnt > 0) {
185 *got_data = 1;
186 return ERROR_OK;
187 }
188
189 FD_ZERO(&read_fds);
190 FD_SET(connection->fd, &read_fds);
191
192 tv.tv_sec = timeout_s;
193 tv.tv_usec = 0;
194 if (socket_select(connection->fd + 1, &read_fds, NULL, NULL, &tv) == 0) {
195 /* This can typically be because a "monitor" command took too long
196 * before printing any progress messages
197 */
198 if (timeout_s > 0)
199 return ERROR_GDB_TIMEOUT;
200 else
201 return ERROR_OK;
202 }
203 *got_data = FD_ISSET(connection->fd, &read_fds) != 0;
204 return ERROR_OK;
205 }
206
207 static int gdb_get_char_inner(struct connection *connection, int *next_char)
208 {
209 struct gdb_connection *gdb_con = connection->priv;
210 int retval = ERROR_OK;
211
212 #ifdef _DEBUG_GDB_IO_
213 char *debug_buffer;
214 #endif
215 for (;; ) {
216 if (connection->service->type != CONNECTION_TCP)
217 gdb_con->buf_cnt = read(connection->fd, gdb_con->buffer, GDB_BUFFER_SIZE);
218 else {
219 retval = check_pending(connection, 1, NULL);
220 if (retval != ERROR_OK)
221 return retval;
222 gdb_con->buf_cnt = read_socket(connection->fd,
223 gdb_con->buffer,
224 GDB_BUFFER_SIZE);
225 }
226
227 if (gdb_con->buf_cnt > 0)
228 break;
229 if (gdb_con->buf_cnt == 0) {
230 LOG_DEBUG("GDB connection closed by the remote client");
231 gdb_con->closed = true;
232 return ERROR_SERVER_REMOTE_CLOSED;
233 }
234
235 #ifdef _WIN32
236 errno = WSAGetLastError();
237
238 switch (errno) {
239 case WSAEWOULDBLOCK:
240 usleep(1000);
241 break;
242 case WSAECONNABORTED:
243 gdb_con->closed = true;
244 return ERROR_SERVER_REMOTE_CLOSED;
245 case WSAECONNRESET:
246 gdb_con->closed = true;
247 return ERROR_SERVER_REMOTE_CLOSED;
248 default:
249 LOG_ERROR("read: %d", errno);
250 exit(-1);
251 }
252 #else
253 switch (errno) {
254 case EAGAIN:
255 usleep(1000);
256 break;
257 case ECONNABORTED:
258 gdb_con->closed = true;
259 return ERROR_SERVER_REMOTE_CLOSED;
260 case ECONNRESET:
261 gdb_con->closed = true;
262 return ERROR_SERVER_REMOTE_CLOSED;
263 default:
264 LOG_ERROR("read: %s", strerror(errno));
265 gdb_con->closed = true;
266 return ERROR_SERVER_REMOTE_CLOSED;
267 }
268 #endif
269 }
270
271 #ifdef _DEBUG_GDB_IO_
272 debug_buffer = strndup(gdb_con->buffer, gdb_con->buf_cnt);
273 LOG_DEBUG("received '%s'", debug_buffer);
274 free(debug_buffer);
275 #endif
276
277 gdb_con->buf_p = gdb_con->buffer;
278 gdb_con->buf_cnt--;
279 *next_char = *(gdb_con->buf_p++);
280 if (gdb_con->buf_cnt > 0)
281 connection->input_pending = true;
282 else
283 connection->input_pending = false;
284 #ifdef _DEBUG_GDB_IO_
285 LOG_DEBUG("returned char '%c' (0x%2.2x)", *next_char, *next_char);
286 #endif
287
288 return retval;
289 }
290
291 /**
292 * The cool thing about this fn is that it allows buf_p and buf_cnt to be
293 * held in registers in the inner loop.
294 *
295 * For small caches and embedded systems this is important!
296 */
297 static inline int gdb_get_char_fast(struct connection *connection,
298 int *next_char, char **buf_p, int *buf_cnt)
299 {
300 int retval = ERROR_OK;
301
302 if ((*buf_cnt)-- > 0) {
303 *next_char = **buf_p;
304 (*buf_p)++;
305 if (*buf_cnt > 0)
306 connection->input_pending = true;
307 else
308 connection->input_pending = false;
309
310 #ifdef _DEBUG_GDB_IO_
311 LOG_DEBUG("returned char '%c' (0x%2.2x)", *next_char, *next_char);
312 #endif
313
314 return ERROR_OK;
315 }
316
317 struct gdb_connection *gdb_con = connection->priv;
318 gdb_con->buf_p = *buf_p;
319 gdb_con->buf_cnt = *buf_cnt;
320 retval = gdb_get_char_inner(connection, next_char);
321 *buf_p = gdb_con->buf_p;
322 *buf_cnt = gdb_con->buf_cnt;
323
324 return retval;
325 }
326
327 static int gdb_get_char(struct connection *connection, int *next_char)
328 {
329 struct gdb_connection *gdb_con = connection->priv;
330 return gdb_get_char_fast(connection, next_char, &gdb_con->buf_p, &gdb_con->buf_cnt);
331 }
332
333 static int gdb_putback_char(struct connection *connection, int last_char)
334 {
335 struct gdb_connection *gdb_con = connection->priv;
336
337 if (gdb_con->buf_p > gdb_con->buffer) {
338 *(--gdb_con->buf_p) = last_char;
339 gdb_con->buf_cnt++;
340 } else
341 LOG_ERROR("BUG: couldn't put character back");
342
343 return ERROR_OK;
344 }
345
346 /* The only way we can detect that the socket is closed is the first time
347 * we write to it, we will fail. Subsequent write operations will
348 * succeed. Shudder! */
349 static int gdb_write(struct connection *connection, void *data, int len)
350 {
351 struct gdb_connection *gdb_con = connection->priv;
352 if (gdb_con->closed) {
353 LOG_DEBUG("GDB socket marked as closed, cannot write to it.");
354 return ERROR_SERVER_REMOTE_CLOSED;
355 }
356
357 if (connection_write(connection, data, len) == len)
358 return ERROR_OK;
359
360 LOG_WARNING("Error writing to GDB socket. Dropping the connection.");
361 gdb_con->closed = true;
362 return ERROR_SERVER_REMOTE_CLOSED;
363 }
364
365 static void gdb_log_incoming_packet(char *packet)
366 {
367 if (!LOG_LEVEL_IS(LOG_LVL_DEBUG))
368 return;
369
370 /* Avoid dumping non-printable characters to the terminal */
371 const unsigned packet_len = strlen(packet);
372 const char *nonprint = find_nonprint_char(packet, packet_len);
373 if (nonprint) {
374 /* Does packet at least have a prefix that is printable?
375 * Look within the first 50 chars of the packet. */
376 const char *colon = memchr(packet, ':', MIN(50, packet_len));
377 const bool packet_has_prefix = (colon);
378 const bool packet_prefix_printable = (packet_has_prefix && nonprint > colon);
379
380 if (packet_prefix_printable) {
381 const unsigned int prefix_len = colon - packet + 1; /* + 1 to include the ':' */
382 const unsigned int payload_len = packet_len - prefix_len;
383 LOG_DEBUG("received packet: %.*s<binary-data-%u-bytes>", prefix_len, packet, payload_len);
384 } else {
385 LOG_DEBUG("received packet: <binary-data-%u-bytes>", packet_len);
386 }
387 } else {
388 /* All chars printable, dump the packet as is */
389 LOG_DEBUG("received packet: %s", packet);
390 }
391 }
392
393 static void gdb_log_outgoing_packet(char *packet_buf, unsigned int packet_len, unsigned char checksum)
394 {
395 if (!LOG_LEVEL_IS(LOG_LVL_DEBUG))
396 return;
397
398 if (find_nonprint_char(packet_buf, packet_len))
399 LOG_DEBUG("sending packet: $<binary-data-%u-bytes>#%2.2x", packet_len, checksum);
400 else
401 LOG_DEBUG("sending packet: $%.*s#%2.2x'", packet_len, packet_buf, checksum);
402 }
403
404 static int gdb_put_packet_inner(struct connection *connection,
405 char *buffer, int len)
406 {
407 int i;
408 unsigned char my_checksum = 0;
409 int reply;
410 int retval;
411 struct gdb_connection *gdb_con = connection->priv;
412
413 for (i = 0; i < len; i++)
414 my_checksum += buffer[i];
415
416 #ifdef _DEBUG_GDB_IO_
417 /*
418 * At this point we should have nothing in the input queue from GDB,
419 * however sometimes '-' is sent even though we've already received
420 * an ACK (+) for everything we've sent off.
421 */
422 int gotdata;
423 for (;; ) {
424 retval = check_pending(connection, 0, &gotdata);
425 if (retval != ERROR_OK)
426 return retval;
427 if (!gotdata)
428 break;
429 retval = gdb_get_char(connection, &reply);
430 if (retval != ERROR_OK)
431 return retval;
432 if (reply == '$') {
433 /* fix a problem with some IAR tools */
434 gdb_putback_char(connection, reply);
435 LOG_DEBUG("Unexpected start of new packet");
436 break;
437 }
438
439 LOG_WARNING("Discard unexpected char %c", reply);
440 }
441 #endif
442
443 while (1) {
444 gdb_log_outgoing_packet(buffer, len, my_checksum);
445
446 char local_buffer[1024];
447 local_buffer[0] = '$';
448 if ((size_t)len + 4 <= sizeof(local_buffer)) {
449 /* performance gain on smaller packets by only a single call to gdb_write() */
450 memcpy(local_buffer + 1, buffer, len++);
451 len += snprintf(local_buffer + len, sizeof(local_buffer) - len, "#%02x", my_checksum);
452 retval = gdb_write(connection, local_buffer, len);
453 if (retval != ERROR_OK)
454 return retval;
455 } else {
456 /* larger packets are transmitted directly from caller supplied buffer
457 * by several calls to gdb_write() to avoid dynamic allocation */
458 snprintf(local_buffer + 1, sizeof(local_buffer) - 1, "#%02x", my_checksum);
459 retval = gdb_write(connection, local_buffer, 1);
460 if (retval != ERROR_OK)
461 return retval;
462 retval = gdb_write(connection, buffer, len);
463 if (retval != ERROR_OK)
464 return retval;
465 retval = gdb_write(connection, local_buffer + 1, 3);
466 if (retval != ERROR_OK)
467 return retval;
468 }
469
470 if (gdb_con->noack_mode)
471 break;
472
473 retval = gdb_get_char(connection, &reply);
474 if (retval != ERROR_OK)
475 return retval;
476
477 if (reply == '+')
478 break;
479 else if (reply == '-') {
480 /* Stop sending output packets for now */
481 log_remove_callback(gdb_log_callback, connection);
482 LOG_WARNING("negative reply, retrying");
483 } else if (reply == 0x3) {
484 gdb_con->ctrl_c = true;
485 retval = gdb_get_char(connection, &reply);
486 if (retval != ERROR_OK)
487 return retval;
488 if (reply == '+')
489 break;
490 else if (reply == '-') {
491 /* Stop sending output packets for now */
492 log_remove_callback(gdb_log_callback, connection);
493 LOG_WARNING("negative reply, retrying");
494 } else if (reply == '$') {
495 LOG_ERROR("GDB missing ack(1) - assumed good");
496 gdb_putback_char(connection, reply);
497 return ERROR_OK;
498 } else {
499 LOG_ERROR("unknown character(1) 0x%2.2x in reply, dropping connection", reply);
500 gdb_con->closed = true;
501 return ERROR_SERVER_REMOTE_CLOSED;
502 }
503 } else if (reply == '$') {
504 LOG_ERROR("GDB missing ack(2) - assumed good");
505 gdb_putback_char(connection, reply);
506 return ERROR_OK;
507 } else {
508 LOG_ERROR("unknown character(2) 0x%2.2x in reply, dropping connection",
509 reply);
510 gdb_con->closed = true;
511 return ERROR_SERVER_REMOTE_CLOSED;
512 }
513 }
514 if (gdb_con->closed)
515 return ERROR_SERVER_REMOTE_CLOSED;
516
517 return ERROR_OK;
518 }
519
520 int gdb_put_packet(struct connection *connection, char *buffer, int len)
521 {
522 struct gdb_connection *gdb_con = connection->priv;
523 gdb_con->busy = true;
524 int retval = gdb_put_packet_inner(connection, buffer, len);
525 gdb_con->busy = false;
526
527 /* we sent some data, reset timer for keep alive messages */
528 kept_alive();
529
530 return retval;
531 }
532
533 static inline int fetch_packet(struct connection *connection,
534 int *checksum_ok, int noack, int *len, char *buffer)
535 {
536 unsigned char my_checksum = 0;
537 char checksum[3];
538 int character;
539 int retval = ERROR_OK;
540
541 struct gdb_connection *gdb_con = connection->priv;
542 my_checksum = 0;
543 int count = 0;
544 count = 0;
545
546 /* move this over into local variables to use registers and give the
547 * more freedom to optimize */
548 char *buf_p = gdb_con->buf_p;
549 int buf_cnt = gdb_con->buf_cnt;
550
551 for (;; ) {
552 /* The common case is that we have an entire packet with no escape chars.
553 * We need to leave at least 2 bytes in the buffer to have
554 * gdb_get_char() update various bits and bobs correctly.
555 */
556 if ((buf_cnt > 2) && ((buf_cnt + count) < *len)) {
557 /* The compiler will struggle a bit with constant propagation and
558 * aliasing, so we help it by showing that these values do not
559 * change inside the loop
560 */
561 int i;
562 char *buf = buf_p;
563 int run = buf_cnt - 2;
564 i = 0;
565 int done = 0;
566 while (i < run) {
567 character = *buf++;
568 i++;
569 if (character == '#') {
570 /* Danger! character can be '#' when esc is
571 * used so we need an explicit boolean for done here. */
572 done = 1;
573 break;
574 }
575
576 if (character == '}') {
577 /* data transmitted in binary mode (X packet)
578 * uses 0x7d as escape character */
579 my_checksum += character & 0xff;
580 character = *buf++;
581 i++;
582 my_checksum += character & 0xff;
583 buffer[count++] = (character ^ 0x20) & 0xff;
584 } else {
585 my_checksum += character & 0xff;
586 buffer[count++] = character & 0xff;
587 }
588 }
589 buf_p += i;
590 buf_cnt -= i;
591 if (done)
592 break;
593 }
594 if (count > *len) {
595 LOG_ERROR("packet buffer too small");
596 retval = ERROR_GDB_BUFFER_TOO_SMALL;
597 break;
598 }
599
600 retval = gdb_get_char_fast(connection, &character, &buf_p, &buf_cnt);
601 if (retval != ERROR_OK)
602 break;
603
604 if (character == '#')
605 break;
606
607 if (character == '}') {
608 /* data transmitted in binary mode (X packet)
609 * uses 0x7d as escape character */
610 my_checksum += character & 0xff;
611
612 retval = gdb_get_char_fast(connection, &character, &buf_p, &buf_cnt);
613 if (retval != ERROR_OK)
614 break;
615
616 my_checksum += character & 0xff;
617 buffer[count++] = (character ^ 0x20) & 0xff;
618 } else {
619 my_checksum += character & 0xff;
620 buffer[count++] = character & 0xff;
621 }
622 }
623
624 gdb_con->buf_p = buf_p;
625 gdb_con->buf_cnt = buf_cnt;
626
627 if (retval != ERROR_OK)
628 return retval;
629
630 *len = count;
631
632 retval = gdb_get_char(connection, &character);
633 if (retval != ERROR_OK)
634 return retval;
635 checksum[0] = character;
636 retval = gdb_get_char(connection, &character);
637 if (retval != ERROR_OK)
638 return retval;
639 checksum[1] = character;
640 checksum[2] = 0;
641
642 if (!noack)
643 *checksum_ok = (my_checksum == strtoul(checksum, NULL, 16));
644
645 return ERROR_OK;
646 }
647
648 static int gdb_get_packet_inner(struct connection *connection,
649 char *buffer, int *len)
650 {
651 int character;
652 int retval;
653 struct gdb_connection *gdb_con = connection->priv;
654
655 while (1) {
656 do {
657 retval = gdb_get_char(connection, &character);
658 if (retval != ERROR_OK)
659 return retval;
660
661 #ifdef _DEBUG_GDB_IO_
662 LOG_DEBUG("character: '%c'", character);
663 #endif
664
665 switch (character) {
666 case '$':
667 break;
668 case '+':
669 /* According to the GDB documentation
670 * (https://sourceware.org/gdb/onlinedocs/gdb/Packet-Acknowledgment.html):
671 * "gdb sends a final `+` acknowledgment of the stub's `OK`
672 * response, which can be safely ignored by the stub."
673 * However OpenOCD server already is in noack mode at this
674 * point and instead of ignoring this it was emitting a
675 * warning. This code makes server ignore the first ACK
676 * that will be received after going into noack mode,
677 * warning only about subsequent ACK's. */
678 if (gdb_con->noack_mode > 1) {
679 LOG_WARNING("acknowledgment received, but no packet pending");
680 } else if (gdb_con->noack_mode) {
681 LOG_DEBUG("Received first acknowledgment after entering noack mode. Ignoring it.");
682 gdb_con->noack_mode = 2;
683 }
684 break;
685 case '-':
686 LOG_WARNING("negative acknowledgment, but no packet pending");
687 break;
688 case 0x3:
689 gdb_con->ctrl_c = true;
690 *len = 0;
691 return ERROR_OK;
692 default:
693 LOG_WARNING("ignoring character 0x%x", character);
694 break;
695 }
696 } while (character != '$');
697
698 int checksum_ok = 0;
699 /* explicit code expansion here to get faster inlined code in -O3 by not
700 * calculating checksum */
701 if (gdb_con->noack_mode) {
702 retval = fetch_packet(connection, &checksum_ok, 1, len, buffer);
703 if (retval != ERROR_OK)
704 return retval;
705 } else {
706 retval = fetch_packet(connection, &checksum_ok, 0, len, buffer);
707 if (retval != ERROR_OK)
708 return retval;
709 }
710
711 if (gdb_con->noack_mode) {
712 /* checksum is not checked in noack mode */
713 break;
714 }
715 if (checksum_ok) {
716 retval = gdb_write(connection, "+", 1);
717 if (retval != ERROR_OK)
718 return retval;
719 break;
720 }
721 }
722 if (gdb_con->closed)
723 return ERROR_SERVER_REMOTE_CLOSED;
724
725 return ERROR_OK;
726 }
727
728 static int gdb_get_packet(struct connection *connection, char *buffer, int *len)
729 {
730 struct gdb_connection *gdb_con = connection->priv;
731 gdb_con->busy = true;
732 int retval = gdb_get_packet_inner(connection, buffer, len);
733 gdb_con->busy = false;
734 return retval;
735 }
736
737 static int gdb_output_con(struct connection *connection, const char *line)
738 {
739 char *hex_buffer;
740 int bin_size;
741
742 bin_size = strlen(line);
743
744 hex_buffer = malloc(bin_size * 2 + 2);
745 if (!hex_buffer)
746 return ERROR_GDB_BUFFER_TOO_SMALL;
747
748 hex_buffer[0] = 'O';
749 size_t pkt_len = hexify(hex_buffer + 1, (const uint8_t *)line, bin_size,
750 bin_size * 2 + 1);
751 int retval = gdb_put_packet(connection, hex_buffer, pkt_len + 1);
752
753 free(hex_buffer);
754 return retval;
755 }
756
757 static int gdb_output(struct command_context *context, const char *line)
758 {
759 /* this will be dumped to the log and also sent as an O packet if possible */
760 LOG_USER_N("%s", line);
761 return ERROR_OK;
762 }
763
764 static void gdb_signal_reply(struct target *target, struct connection *connection)
765 {
766 struct gdb_connection *gdb_connection = connection->priv;
767 char sig_reply[65];
768 char stop_reason[32];
769 char current_thread[25];
770 int sig_reply_len;
771 int signal_var;
772
773 rtos_update_threads(target);
774
775 if (target->debug_reason == DBG_REASON_EXIT) {
776 sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), "W00");
777 } else {
778 struct target *ct;
779 if (target->rtos) {
780 target->rtos->current_threadid = target->rtos->current_thread;
781 target->rtos->gdb_target_for_threadid(connection, target->rtos->current_threadid, &ct);
782 } else {
783 ct = target;
784 }
785
786 if (gdb_connection->ctrl_c) {
787 signal_var = 0x2;
788 } else
789 signal_var = gdb_last_signal(ct);
790
791 stop_reason[0] = '\0';
792 if (ct->debug_reason == DBG_REASON_WATCHPOINT) {
793 enum watchpoint_rw hit_wp_type;
794 target_addr_t hit_wp_address;
795
796 if (watchpoint_hit(ct, &hit_wp_type, &hit_wp_address) == ERROR_OK) {
797
798 switch (hit_wp_type) {
799 case WPT_WRITE:
800 snprintf(stop_reason, sizeof(stop_reason),
801 "watch:%08" TARGET_PRIxADDR ";", hit_wp_address);
802 break;
803 case WPT_READ:
804 snprintf(stop_reason, sizeof(stop_reason),
805 "rwatch:%08" TARGET_PRIxADDR ";", hit_wp_address);
806 break;
807 case WPT_ACCESS:
808 snprintf(stop_reason, sizeof(stop_reason),
809 "awatch:%08" TARGET_PRIxADDR ";", hit_wp_address);
810 break;
811 default:
812 break;
813 }
814 }
815 }
816
817 current_thread[0] = '\0';
818 if (target->rtos)
819 snprintf(current_thread, sizeof(current_thread), "thread:%" PRIx64 ";",
820 target->rtos->current_thread);
821
822 sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), "T%2.2x%s%s",
823 signal_var, stop_reason, current_thread);
824
825 gdb_connection->ctrl_c = false;
826 }
827
828 gdb_put_packet(connection, sig_reply, sig_reply_len);
829 gdb_connection->frontend_state = TARGET_HALTED;
830 }
831
832 static void gdb_fileio_reply(struct target *target, struct connection *connection)
833 {
834 struct gdb_connection *gdb_connection = connection->priv;
835 char fileio_command[256];
836 int command_len;
837 bool program_exited = false;
838
839 if (strcmp(target->fileio_info->identifier, "open") == 0)
840 sprintf(fileio_command, "F%s,%" PRIx64 "/%" PRIx64 ",%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
841 target->fileio_info->param_1,
842 target->fileio_info->param_2 + 1, /* len + trailing zero */
843 target->fileio_info->param_3,
844 target->fileio_info->param_4);
845 else if (strcmp(target->fileio_info->identifier, "close") == 0)
846 sprintf(fileio_command, "F%s,%" PRIx64, target->fileio_info->identifier,
847 target->fileio_info->param_1);
848 else if (strcmp(target->fileio_info->identifier, "read") == 0)
849 sprintf(fileio_command, "F%s,%" PRIx64 ",%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
850 target->fileio_info->param_1,
851 target->fileio_info->param_2,
852 target->fileio_info->param_3);
853 else if (strcmp(target->fileio_info->identifier, "write") == 0)
854 sprintf(fileio_command, "F%s,%" PRIx64 ",%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
855 target->fileio_info->param_1,
856 target->fileio_info->param_2,
857 target->fileio_info->param_3);
858 else if (strcmp(target->fileio_info->identifier, "lseek") == 0)
859 sprintf(fileio_command, "F%s,%" PRIx64 ",%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
860 target->fileio_info->param_1,
861 target->fileio_info->param_2,
862 target->fileio_info->param_3);
863 else if (strcmp(target->fileio_info->identifier, "rename") == 0)
864 sprintf(fileio_command, "F%s,%" PRIx64 "/%" PRIx64 ",%" PRIx64 "/%" PRIx64, target->fileio_info->identifier,
865 target->fileio_info->param_1,
866 target->fileio_info->param_2 + 1, /* len + trailing zero */
867 target->fileio_info->param_3,
868 target->fileio_info->param_4 + 1); /* len + trailing zero */
869 else if (strcmp(target->fileio_info->identifier, "unlink") == 0)
870 sprintf(fileio_command, "F%s,%" PRIx64 "/%" PRIx64, target->fileio_info->identifier,
871 target->fileio_info->param_1,
872 target->fileio_info->param_2 + 1); /* len + trailing zero */
873 else if (strcmp(target->fileio_info->identifier, "stat") == 0)
874 sprintf(fileio_command, "F%s,%" PRIx64 "/%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
875 target->fileio_info->param_1,
876 target->fileio_info->param_2,
877 target->fileio_info->param_3);
878 else if (strcmp(target->fileio_info->identifier, "fstat") == 0)
879 sprintf(fileio_command, "F%s,%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
880 target->fileio_info->param_1,
881 target->fileio_info->param_2);
882 else if (strcmp(target->fileio_info->identifier, "gettimeofday") == 0)
883 sprintf(fileio_command, "F%s,%" PRIx64 ",%" PRIx64, target->fileio_info->identifier,
884 target->fileio_info->param_1,
885 target->fileio_info->param_2);
886 else if (strcmp(target->fileio_info->identifier, "isatty") == 0)
887 sprintf(fileio_command, "F%s,%" PRIx64, target->fileio_info->identifier,
888 target->fileio_info->param_1);
889 else if (strcmp(target->fileio_info->identifier, "system") == 0)
890 sprintf(fileio_command, "F%s,%" PRIx64 "/%" PRIx64, target->fileio_info->identifier,
891 target->fileio_info->param_1,
892 target->fileio_info->param_2 + 1); /* len + trailing zero */
893 else if (strcmp(target->fileio_info->identifier, "exit") == 0) {
894 /* If target hits exit syscall, report to GDB the program is terminated.
895 * In addition, let target run its own exit syscall handler. */
896 program_exited = true;
897 sprintf(fileio_command, "W%02" PRIx64, target->fileio_info->param_1);
898 } else {
899 LOG_DEBUG("Unknown syscall: %s", target->fileio_info->identifier);
900
901 /* encounter unknown syscall, continue */
902 gdb_connection->frontend_state = TARGET_RUNNING;
903 target_resume(target, 1, 0x0, 0, 0);
904 return;
905 }
906
907 command_len = strlen(fileio_command);
908 gdb_put_packet(connection, fileio_command, command_len);
909
910 if (program_exited) {
911 /* Use target_resume() to let target run its own exit syscall handler. */
912 gdb_connection->frontend_state = TARGET_RUNNING;
913 target_resume(target, 1, 0x0, 0, 0);
914 } else {
915 gdb_connection->frontend_state = TARGET_HALTED;
916 rtos_update_threads(target);
917 }
918 }
919
920 static void gdb_frontend_halted(struct target *target, struct connection *connection)
921 {
922 struct gdb_connection *gdb_connection = connection->priv;
923
924 /* In the GDB protocol when we are stepping or continuing execution,
925 * we have a lingering reply. Upon receiving a halted event
926 * when we have that lingering packet, we reply to the original
927 * step or continue packet.
928 *
929 * Executing monitor commands can bring the target in and
930 * out of the running state so we'll see lots of TARGET_EVENT_XXX
931 * that are to be ignored.
932 */
933 if (gdb_connection->frontend_state == TARGET_RUNNING) {
934 /* stop forwarding log packets! */
935 log_remove_callback(gdb_log_callback, connection);
936
937 /* check fileio first */
938 if (target_get_gdb_fileio_info(target, target->fileio_info) == ERROR_OK)
939 gdb_fileio_reply(target, connection);
940 else
941 gdb_signal_reply(target, connection);
942 }
943 }
944
945 static int gdb_target_callback_event_handler(struct target *target,
946 enum target_event event, void *priv)
947 {
948 struct connection *connection = priv;
949 struct gdb_service *gdb_service = connection->service->priv;
950
951 if (gdb_service->target != target)
952 return ERROR_OK;
953
954 switch (event) {
955 case TARGET_EVENT_GDB_HALT:
956 gdb_frontend_halted(target, connection);
957 break;
958 case TARGET_EVENT_HALTED:
959 target_call_event_callbacks(target, TARGET_EVENT_GDB_END);
960 break;
961 default:
962 break;
963 }
964
965 return ERROR_OK;
966 }
967
968 static int gdb_new_connection(struct connection *connection)
969 {
970 struct gdb_connection *gdb_connection = malloc(sizeof(struct gdb_connection));
971 struct target *target;
972 int retval;
973 int initial_ack;
974
975 target = get_target_from_connection(connection);
976 connection->priv = gdb_connection;
977 connection->cmd_ctx->current_target = target;
978
979 /* initialize gdb connection information */
980 gdb_connection->buf_p = gdb_connection->buffer;
981 gdb_connection->buf_cnt = 0;
982 gdb_connection->ctrl_c = false;
983 gdb_connection->frontend_state = TARGET_HALTED;
984 gdb_connection->vflash_image = NULL;
985 gdb_connection->closed = false;
986 gdb_connection->busy = false;
987 gdb_connection->noack_mode = 0;
988 gdb_connection->sync = false;
989 gdb_connection->mem_write_error = false;
990 gdb_connection->attached = true;
991 gdb_connection->extended_protocol = false;
992 gdb_connection->target_desc.tdesc = NULL;
993 gdb_connection->target_desc.tdesc_length = 0;
994 gdb_connection->thread_list = NULL;
995
996 /* send ACK to GDB for debug request */
997 gdb_write(connection, "+", 1);
998
999 /* output goes through gdb connection */
1000 command_set_output_handler(connection->cmd_ctx, gdb_output, connection);
1001
1002 /* we must remove all breakpoints registered to the target as a previous
1003 * GDB session could leave dangling breakpoints if e.g. communication
1004 * timed out.
1005 */
1006 breakpoint_clear_target(target);
1007 watchpoint_clear_target(target);
1008
1009 /* Since version 3.95 (gdb-19990504), with the exclusion of 6.5~6.8, GDB
1010 * sends an ACK at connection with the following comment in its source code:
1011 * "Ack any packet which the remote side has already sent."
1012 * LLDB does the same since the first gdb-remote implementation.
1013 * Remove the initial ACK from the incoming buffer.
1014 */
1015 retval = gdb_get_char(connection, &initial_ack);
1016 if (retval != ERROR_OK)
1017 return retval;
1018
1019 if (initial_ack != '+')
1020 gdb_putback_char(connection, initial_ack);
1021
1022 target_call_event_callbacks(target, TARGET_EVENT_GDB_ATTACH);
1023
1024 if (target->rtos) {
1025 /* clean previous rtos session if supported*/
1026 if (target->rtos->type->clean)
1027 target->rtos->type->clean(target);
1028
1029 /* update threads */
1030 rtos_update_threads(target);
1031 }
1032
1033 if (gdb_use_memory_map) {
1034 /* Connect must fail if the memory map can't be set up correctly.
1035 *
1036 * This will cause an auto_probe to be invoked, which is either
1037 * a no-op or it will fail when the target isn't ready(e.g. not halted).
1038 */
1039 for (unsigned int i = 0; i < flash_get_bank_count(); i++) {
1040 struct flash_bank *p;
1041 p = get_flash_bank_by_num_noprobe(i);
1042 if (p->target != target)
1043 continue;
1044 retval = get_flash_bank_by_num(i, &p);
1045 if (retval != ERROR_OK) {
1046 LOG_ERROR("Connect failed. Consider setting up a gdb-attach event for the target "
1047 "to prepare target for GDB connect, or use 'gdb_memory_map disable'.");
1048 return retval;
1049 }
1050 }
1051 }
1052
1053 gdb_actual_connections++;
1054 log_printf_lf(all_targets->next ? LOG_LVL_INFO : LOG_LVL_DEBUG,
1055 __FILE__, __LINE__, __func__,
1056 "New GDB Connection: %d, Target %s, state: %s",
1057 gdb_actual_connections,
1058 target_name(target),
1059 target_state_name(target));
1060
1061 if (!target_was_examined(target)) {
1062 LOG_ERROR("Target %s not examined yet, refuse gdb connection %d!",
1063 target_name(target), gdb_actual_connections);
1064 gdb_actual_connections--;
1065 return ERROR_TARGET_NOT_EXAMINED;
1066 }
1067
1068 if (target->state != TARGET_HALTED)
1069 LOG_WARNING("GDB connection %d on target %s not halted",
1070 gdb_actual_connections, target_name(target));
1071
1072 /* DANGER! If we fail subsequently, we must remove this handler,
1073 * otherwise we occasionally see crashes as the timer can invoke the
1074 * callback fn.
1075 *
1076 * register callback to be informed about target events */
1077 target_register_event_callback(gdb_target_callback_event_handler, connection);
1078
1079 return ERROR_OK;
1080 }
1081
1082 static int gdb_connection_closed(struct connection *connection)
1083 {
1084 struct target *target;
1085 struct gdb_connection *gdb_connection = connection->priv;
1086
1087 target = get_target_from_connection(connection);
1088
1089 /* we're done forwarding messages. Tear down callback before
1090 * cleaning up connection.
1091 */
1092 log_remove_callback(gdb_log_callback, connection);
1093
1094 gdb_actual_connections--;
1095 LOG_DEBUG("GDB Close, Target: %s, state: %s, gdb_actual_connections=%d",
1096 target_name(target),
1097 target_state_name(target),
1098 gdb_actual_connections);
1099
1100 /* see if an image built with vFlash commands is left */
1101 if (gdb_connection->vflash_image) {
1102 image_close(gdb_connection->vflash_image);
1103 free(gdb_connection->vflash_image);
1104 gdb_connection->vflash_image = NULL;
1105 }
1106
1107 /* if this connection registered a debug-message receiver delete it */
1108 delete_debug_msg_receiver(connection->cmd_ctx, target);
1109
1110 free(connection->priv);
1111 connection->priv = NULL;
1112
1113 target_unregister_event_callback(gdb_target_callback_event_handler, connection);
1114
1115 target_call_event_callbacks(target, TARGET_EVENT_GDB_END);
1116
1117 target_call_event_callbacks(target, TARGET_EVENT_GDB_DETACH);
1118
1119 return ERROR_OK;
1120 }
1121
1122 static void gdb_send_error(struct connection *connection, uint8_t the_error)
1123 {
1124 char err[4];
1125 snprintf(err, 4, "E%2.2X", the_error);
1126 gdb_put_packet(connection, err, 3);
1127 }
1128
1129 static int gdb_last_signal_packet(struct connection *connection,
1130 char const *packet, int packet_size)
1131 {
1132 struct target *target = get_target_from_connection(connection);
1133 struct gdb_connection *gdb_con = connection->priv;
1134 char sig_reply[4];
1135 int signal_var;
1136
1137 if (!gdb_con->attached) {
1138 /* if we are here we have received a kill packet
1139 * reply W stop reply otherwise gdb gets very unhappy */
1140 gdb_put_packet(connection, "W00", 3);
1141 return ERROR_OK;
1142 }
1143
1144 signal_var = gdb_last_signal(target);
1145
1146 snprintf(sig_reply, 4, "S%2.2x", signal_var);
1147 gdb_put_packet(connection, sig_reply, 3);
1148
1149 return ERROR_OK;
1150 }
1151
1152 static inline int gdb_reg_pos(struct target *target, int pos, int len)
1153 {
1154 if (target->endianness == TARGET_LITTLE_ENDIAN)
1155 return pos;
1156 else
1157 return len - 1 - pos;
1158 }
1159
1160 /* Convert register to string of bytes. NB! The # of bits in the
1161 * register might be non-divisible by 8(a byte), in which
1162 * case an entire byte is shown.
1163 *
1164 * NB! the format on the wire is the target endianness
1165 *
1166 * The format of reg->value is little endian
1167 *
1168 */
1169 static void gdb_str_to_target(struct target *target,
1170 char *tstr, struct reg *reg)
1171 {
1172 int i;
1173
1174 uint8_t *buf;
1175 int buf_len;
1176 buf = reg->value;
1177 buf_len = DIV_ROUND_UP(reg->size, 8);
1178
1179 for (i = 0; i < buf_len; i++) {
1180 int j = gdb_reg_pos(target, i, buf_len);
1181 tstr += sprintf(tstr, "%02x", buf[j]);
1182 }
1183 }
1184
1185 /* copy over in register buffer */
1186 static void gdb_target_to_reg(struct target *target,
1187 char const *tstr, int str_len, uint8_t *bin)
1188 {
1189 if (str_len % 2) {
1190 LOG_ERROR("BUG: gdb value with uneven number of characters encountered");
1191 exit(-1);
1192 }
1193
1194 int i;
1195 for (i = 0; i < str_len; i += 2) {
1196 unsigned t;
1197 if (sscanf(tstr + i, "%02x", &t) != 1) {
1198 LOG_ERROR("BUG: unable to convert register value");
1199 exit(-1);
1200 }
1201
1202 int j = gdb_reg_pos(target, i/2, str_len/2);
1203 bin[j] = t;
1204 }
1205 }
1206
1207 static int gdb_get_registers_packet(struct connection *connection,
1208 char const *packet, int packet_size)
1209 {
1210 struct target *target = get_target_from_connection(connection);
1211 struct reg **reg_list;
1212 int reg_list_size;
1213 int retval;
1214 int reg_packet_size = 0;
1215 char *reg_packet;
1216 char *reg_packet_p;
1217 int i;
1218
1219 #ifdef _DEBUG_GDB_IO_
1220 LOG_DEBUG("-");
1221 #endif
1222
1223 if ((target->rtos) && (rtos_get_gdb_reg_list(connection) == ERROR_OK))
1224 return ERROR_OK;
1225
1226 retval = target_get_gdb_reg_list(target, &reg_list, &reg_list_size,
1227 REG_CLASS_GENERAL);
1228 if (retval != ERROR_OK)
1229 return gdb_error(connection, retval);
1230
1231 for (i = 0; i < reg_list_size; i++) {
1232 if (!reg_list[i] || reg_list[i]->exist == false || reg_list[i]->hidden)
1233 continue;
1234 reg_packet_size += DIV_ROUND_UP(reg_list[i]->size, 8) * 2;
1235 }
1236
1237 assert(reg_packet_size > 0);
1238
1239 reg_packet = malloc(reg_packet_size + 1); /* plus one for string termination null */
1240 if (!reg_packet)
1241 return ERROR_FAIL;
1242
1243 reg_packet_p = reg_packet;
1244
1245 for (i = 0; i < reg_list_size; i++) {
1246 if (!reg_list[i] || reg_list[i]->exist == false || reg_list[i]->hidden)
1247 continue;
1248 if (!reg_list[i]->valid) {
1249 retval = reg_list[i]->type->get(reg_list[i]);
1250 if (retval != ERROR_OK && gdb_report_register_access_error) {
1251 LOG_DEBUG("Couldn't get register %s.", reg_list[i]->name);
1252 free(reg_packet);
1253 free(reg_list);
1254 return gdb_error(connection, retval);
1255 }
1256 }
1257 gdb_str_to_target(target, reg_packet_p, reg_list[i]);
1258 reg_packet_p += DIV_ROUND_UP(reg_list[i]->size, 8) * 2;
1259 }
1260
1261 #ifdef _DEBUG_GDB_IO_
1262 {
1263 char *reg_packet_p_debug;
1264 reg_packet_p_debug = strndup(reg_packet, reg_packet_size);
1265 LOG_DEBUG("reg_packet: %s", reg_packet_p_debug);
1266 free(reg_packet_p_debug);
1267 }
1268 #endif
1269
1270 gdb_put_packet(connection, reg_packet, reg_packet_size);
1271 free(reg_packet);
1272
1273 free(reg_list);
1274
1275 return ERROR_OK;
1276 }
1277
1278 static int gdb_set_registers_packet(struct connection *connection,
1279 char const *packet, int packet_size)
1280 {
1281 struct target *target = get_target_from_connection(connection);
1282 int i;
1283 struct reg **reg_list;
1284 int reg_list_size;
1285 int retval;
1286 char const *packet_p;
1287
1288 #ifdef _DEBUG_GDB_IO_
1289 LOG_DEBUG("-");
1290 #endif
1291
1292 /* skip command character */
1293 packet++;
1294 packet_size--;
1295
1296 if (packet_size % 2) {
1297 LOG_WARNING("GDB set_registers packet with uneven characters received, dropping connection");
1298 return ERROR_SERVER_REMOTE_CLOSED;
1299 }
1300
1301 retval = target_get_gdb_reg_list(target, &reg_list, &reg_list_size,
1302 REG_CLASS_GENERAL);
1303 if (retval != ERROR_OK)
1304 return gdb_error(connection, retval);
1305
1306 packet_p = packet;
1307 for (i = 0; i < reg_list_size; i++) {
1308 uint8_t *bin_buf;
1309 int chars = (DIV_ROUND_UP(reg_list[i]->size, 8) * 2);
1310
1311 if (packet_p + chars > packet + packet_size)
1312 LOG_ERROR("BUG: register packet is too small for registers");
1313
1314 bin_buf = malloc(DIV_ROUND_UP(reg_list[i]->size, 8));
1315 gdb_target_to_reg(target, packet_p, chars, bin_buf);
1316
1317 retval = reg_list[i]->type->set(reg_list[i], bin_buf);
1318 if (retval != ERROR_OK && gdb_report_register_access_error) {
1319 LOG_DEBUG("Couldn't set register %s.", reg_list[i]->name);
1320 free(reg_list);
1321 free(bin_buf);
1322 return gdb_error(connection, retval);
1323 }
1324
1325 /* advance packet pointer */
1326 packet_p += chars;
1327
1328 free(bin_buf);
1329 }
1330
1331 /* free struct reg *reg_list[] array allocated by get_gdb_reg_list */
1332 free(reg_list);
1333
1334 gdb_put_packet(connection, "OK", 2);
1335
1336 return ERROR_OK;
1337 }
1338
1339 static int gdb_get_register_packet(struct connection *connection,
1340 char const *packet, int packet_size)
1341 {
1342 struct target *target = get_target_from_connection(connection);
1343 char *reg_packet;
1344 int reg_num = strtoul(packet + 1, NULL, 16);
1345 struct reg **reg_list;
1346 int reg_list_size;
1347 int retval;
1348
1349 #ifdef _DEBUG_GDB_IO_
1350 LOG_DEBUG("-");
1351 #endif
1352
1353 if ((target->rtos) && (rtos_get_gdb_reg(connection, reg_num) == ERROR_OK))
1354 return ERROR_OK;
1355
1356 retval = target_get_gdb_reg_list_noread(target, &reg_list, &reg_list_size,
1357 REG_CLASS_ALL);
1358 if (retval != ERROR_OK)
1359 return gdb_error(connection, retval);
1360
1361 if (reg_list_size <= reg_num) {
1362 LOG_ERROR("gdb requested a non-existing register (reg_num=%d)", reg_num);
1363 return ERROR_SERVER_REMOTE_CLOSED;
1364 }
1365
1366 if (!reg_list[reg_num]->valid) {
1367 retval = reg_list[reg_num]->type->get(reg_list[reg_num]);
1368 if (retval != ERROR_OK && gdb_report_register_access_error) {
1369 LOG_DEBUG("Couldn't get register %s.", reg_list[reg_num]->name);
1370 free(reg_list);
1371 return gdb_error(connection, retval);
1372 }
1373 }
1374
1375 reg_packet = calloc(DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2 + 1, 1); /* plus one for string termination null */
1376
1377 gdb_str_to_target(target, reg_packet, reg_list[reg_num]);
1378
1379 gdb_put_packet(connection, reg_packet, DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2);
1380
1381 free(reg_list);
1382 free(reg_packet);
1383
1384 return ERROR_OK;
1385 }
1386
1387 static int gdb_set_register_packet(struct connection *connection,
1388 char const *packet, int packet_size)
1389 {
1390 struct target *target = get_target_from_connection(connection);
1391 char *separator;
1392 int reg_num = strtoul(packet + 1, &separator, 16);
1393 struct reg **reg_list;
1394 int reg_list_size;
1395 int retval;
1396
1397 #ifdef _DEBUG_GDB_IO_
1398 LOG_DEBUG("-");
1399 #endif
1400
1401 if (*separator != '=') {
1402 LOG_ERROR("GDB 'set register packet', but no '=' following the register number");
1403 return ERROR_SERVER_REMOTE_CLOSED;
1404 }
1405 size_t chars = strlen(separator + 1);
1406 uint8_t *bin_buf = malloc(chars / 2);
1407 gdb_target_to_reg(target, separator + 1, chars, bin_buf);
1408
1409 if ((target->rtos) &&
1410 (rtos_set_reg(connection, reg_num, bin_buf) == ERROR_OK)) {
1411 free(bin_buf);
1412 gdb_put_packet(connection, "OK", 2);
1413 return ERROR_OK;
1414 }
1415
1416 retval = target_get_gdb_reg_list_noread(target, &reg_list, &reg_list_size,
1417 REG_CLASS_ALL);
1418 if (retval != ERROR_OK) {
1419 free(bin_buf);
1420 return gdb_error(connection, retval);
1421 }
1422
1423 if (reg_list_size <= reg_num) {
1424 LOG_ERROR("gdb requested a non-existing register (reg_num=%d)", reg_num);
1425 free(bin_buf);
1426 free(reg_list);
1427 return ERROR_SERVER_REMOTE_CLOSED;
1428 }
1429
1430 if (chars != (DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2)) {
1431 LOG_ERROR("gdb sent %zu bits for a %" PRIu32 "-bit register (%s)",
1432 chars * 4, reg_list[reg_num]->size, reg_list[reg_num]->name);
1433 free(bin_buf);
1434 free(reg_list);
1435 return ERROR_SERVER_REMOTE_CLOSED;
1436 }
1437
1438 gdb_target_to_reg(target, separator + 1, chars, bin_buf);
1439
1440 retval = reg_list[reg_num]->type->set(reg_list[reg_num], bin_buf);
1441 if (retval != ERROR_OK && gdb_report_register_access_error) {
1442 LOG_DEBUG("Couldn't set register %s.", reg_list[reg_num]->name);
1443 free(bin_buf);
1444 free(reg_list);
1445 return gdb_error(connection, retval);
1446 }
1447
1448 gdb_put_packet(connection, "OK", 2);
1449
1450 free(bin_buf);
1451 free(reg_list);
1452
1453 return ERROR_OK;
1454 }
1455
1456 /* No attempt is made to translate the "retval" to
1457 * GDB speak. This has to be done at the calling
1458 * site as no mapping really exists.
1459 */
1460 static int gdb_error(struct connection *connection, int retval)
1461 {
1462 LOG_DEBUG("Reporting %i to GDB as generic error", retval);
1463 gdb_send_error(connection, EFAULT);
1464 return ERROR_OK;
1465 }
1466
1467 /* We don't have to worry about the default 2 second timeout for GDB packets,
1468 * because GDB breaks up large memory reads into smaller reads.
1469 */
1470 static int gdb_read_memory_packet(struct connection *connection,
1471 char const *packet, int packet_size)
1472 {
1473 struct target *target = get_target_from_connection(connection);
1474 char *separator;
1475 uint64_t addr = 0;
1476 uint32_t len = 0;
1477
1478 uint8_t *buffer;
1479 char *hex_buffer;
1480
1481 int retval = ERROR_OK;
1482
1483 /* skip command character */
1484 packet++;
1485
1486 addr = strtoull(packet, &separator, 16);
1487
1488 if (*separator != ',') {
1489 LOG_ERROR("incomplete read memory packet received, dropping connection");
1490 return ERROR_SERVER_REMOTE_CLOSED;
1491 }
1492
1493 len = strtoul(separator + 1, NULL, 16);
1494
1495 if (!len) {
1496 LOG_WARNING("invalid read memory packet received (len == 0)");
1497 gdb_put_packet(connection, "", 0);
1498 return ERROR_OK;
1499 }
1500
1501 buffer = malloc(len);
1502
1503 LOG_DEBUG("addr: 0x%16.16" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
1504
1505 retval = ERROR_NOT_IMPLEMENTED;
1506 if (target->rtos)
1507 retval = rtos_read_buffer(target, addr, len, buffer);
1508 if (retval == ERROR_NOT_IMPLEMENTED)
1509 retval = target_read_buffer(target, addr, len, buffer);
1510
1511 if ((retval != ERROR_OK) && !gdb_report_data_abort) {
1512 /* TODO : Here we have to lie and send back all zero's lest stack traces won't work.
1513 * At some point this might be fixed in GDB, in which case this code can be removed.
1514 *
1515 * OpenOCD developers are acutely aware of this problem, but there is nothing
1516 * gained by involving the user in this problem that hopefully will get resolved
1517 * eventually
1518 *
1519 * http://sourceware.org/cgi-bin/gnatsweb.pl? \
1520 * cmd = view%20audit-trail&database = gdb&pr = 2395
1521 *
1522 * For now, the default is to fix up things to make current GDB versions work.
1523 * This can be overwritten using the gdb_report_data_abort <'enable'|'disable'> command.
1524 */
1525 memset(buffer, 0, len);
1526 retval = ERROR_OK;
1527 }
1528
1529 if (retval == ERROR_OK) {
1530 hex_buffer = malloc(len * 2 + 1);
1531
1532 size_t pkt_len = hexify(hex_buffer, buffer, len, len * 2 + 1);
1533
1534 gdb_put_packet(connection, hex_buffer, pkt_len);
1535
1536 free(hex_buffer);
1537 } else
1538 retval = gdb_error(connection, retval);
1539
1540 free(buffer);
1541
1542 return retval;
1543 }
1544
1545 static int gdb_write_memory_packet(struct connection *connection,
1546 char const *packet, int packet_size)
1547 {
1548 struct target *target = get_target_from_connection(connection);
1549 char *separator;
1550 uint64_t addr = 0;
1551 uint32_t len = 0;
1552
1553 uint8_t *buffer;
1554 int retval;
1555
1556 /* skip command character */
1557 packet++;
1558
1559 addr = strtoull(packet, &separator, 16);
1560
1561 if (*separator != ',') {
1562 LOG_ERROR("incomplete write memory packet received, dropping connection");
1563 return ERROR_SERVER_REMOTE_CLOSED;
1564 }
1565
1566 len = strtoul(separator + 1, &separator, 16);
1567
1568 if (*(separator++) != ':') {
1569 LOG_ERROR("incomplete write memory packet received, dropping connection");
1570 return ERROR_SERVER_REMOTE_CLOSED;
1571 }
1572
1573 buffer = malloc(len);
1574
1575 LOG_DEBUG("addr: 0x%" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
1576
1577 if (unhexify(buffer, separator, len) != len)
1578 LOG_ERROR("unable to decode memory packet");
1579
1580 retval = ERROR_NOT_IMPLEMENTED;
1581 if (target->rtos)
1582 retval = rtos_write_buffer(target, addr, len, buffer);
1583 if (retval == ERROR_NOT_IMPLEMENTED)
1584 retval = target_write_buffer(target, addr, len, buffer);
1585
1586 if (retval == ERROR_OK)
1587 gdb_put_packet(connection, "OK", 2);
1588 else
1589 retval = gdb_error(connection, retval);
1590
1591 free(buffer);
1592
1593 return retval;
1594 }
1595
1596 static int gdb_write_memory_binary_packet(struct connection *connection,
1597 char const *packet, int packet_size)
1598 {
1599 struct target *target = get_target_from_connection(connection);
1600 char *separator;
1601 uint64_t addr = 0;
1602 uint32_t len = 0;
1603
1604 int retval = ERROR_OK;
1605 /* Packets larger than fast_limit bytes will be acknowledged instantly on
1606 * the assumption that we're in a download and it's important to go as fast
1607 * as possible. */
1608 uint32_t fast_limit = 8;
1609
1610 /* skip command character */
1611 packet++;
1612
1613 addr = strtoull(packet, &separator, 16);
1614
1615 if (*separator != ',') {
1616 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1617 return ERROR_SERVER_REMOTE_CLOSED;
1618 }
1619
1620 len = strtoul(separator + 1, &separator, 16);
1621
1622 if (*(separator++) != ':') {
1623 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1624 return ERROR_SERVER_REMOTE_CLOSED;
1625 }
1626
1627 struct gdb_connection *gdb_connection = connection->priv;
1628
1629 if (gdb_connection->mem_write_error)
1630 retval = ERROR_FAIL;
1631
1632 if (retval == ERROR_OK) {
1633 if (len >= fast_limit) {
1634 /* By replying the packet *immediately* GDB will send us a new packet
1635 * while we write the last one to the target.
1636 * We only do this for larger writes, so that users who do something like:
1637 * p *((int*)0xdeadbeef)=8675309
1638 * will get immediate feedback that that write failed.
1639 */
1640 gdb_put_packet(connection, "OK", 2);
1641 }
1642 } else {
1643 retval = gdb_error(connection, retval);
1644 /* now that we have reported the memory write error, we can clear the condition */
1645 gdb_connection->mem_write_error = false;
1646 if (retval != ERROR_OK)
1647 return retval;
1648 }
1649
1650 if (len) {
1651 LOG_DEBUG("addr: 0x%" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
1652
1653 retval = ERROR_NOT_IMPLEMENTED;
1654 if (target->rtos)
1655 retval = rtos_write_buffer(target, addr, len, (uint8_t *)separator);
1656 if (retval == ERROR_NOT_IMPLEMENTED)
1657 retval = target_write_buffer(target, addr, len, (uint8_t *)separator);
1658
1659 if (retval != ERROR_OK)
1660 gdb_connection->mem_write_error = true;
1661 }
1662
1663 if (len < fast_limit) {
1664 if (retval != ERROR_OK) {
1665 gdb_error(connection, retval);
1666 gdb_connection->mem_write_error = false;
1667 } else {
1668 gdb_put_packet(connection, "OK", 2);
1669 }
1670 }
1671
1672 return ERROR_OK;
1673 }
1674
1675 static int gdb_step_continue_packet(struct connection *connection,
1676 char const *packet, int packet_size)
1677 {
1678 struct target *target = get_target_from_connection(connection);
1679 int current = 0;
1680 uint64_t address = 0x0;
1681 int retval = ERROR_OK;
1682
1683 LOG_DEBUG("-");
1684
1685 if (packet_size > 1)
1686 address = strtoull(packet + 1, NULL, 16);
1687 else
1688 current = 1;
1689
1690 gdb_running_type = packet[0];
1691 if (packet[0] == 'c') {
1692 LOG_DEBUG("continue");
1693 /* resume at current address, don't handle breakpoints, not debugging */
1694 retval = target_resume(target, current, address, 0, 0);
1695 } else if (packet[0] == 's') {
1696 LOG_DEBUG("step");
1697 /* step at current or address, don't handle breakpoints */
1698 retval = target_step(target, current, address, 0);
1699 }
1700 return retval;
1701 }
1702
1703 static int gdb_breakpoint_watchpoint_packet(struct connection *connection,
1704 char const *packet, int packet_size)
1705 {
1706 struct target *target = get_target_from_connection(connection);
1707 int type;
1708 enum breakpoint_type bp_type = BKPT_SOFT /* dummy init to avoid warning */;
1709 enum watchpoint_rw wp_type = WPT_READ /* dummy init to avoid warning */;
1710 uint64_t address;
1711 uint32_t size;
1712 char *separator;
1713 int retval;
1714
1715 LOG_DEBUG("[%s]", target_name(target));
1716
1717 type = strtoul(packet + 1, &separator, 16);
1718
1719 if (type == 0) /* memory breakpoint */
1720 bp_type = BKPT_SOFT;
1721 else if (type == 1) /* hardware breakpoint */
1722 bp_type = BKPT_HARD;
1723 else if (type == 2) /* write watchpoint */
1724 wp_type = WPT_WRITE;
1725 else if (type == 3) /* read watchpoint */
1726 wp_type = WPT_READ;
1727 else if (type == 4) /* access watchpoint */
1728 wp_type = WPT_ACCESS;
1729 else {
1730 LOG_ERROR("invalid gdb watch/breakpoint type(%d), dropping connection", type);
1731 return ERROR_SERVER_REMOTE_CLOSED;
1732 }
1733
1734 if (gdb_breakpoint_override && ((bp_type == BKPT_SOFT) || (bp_type == BKPT_HARD)))
1735 bp_type = gdb_breakpoint_override_type;
1736
1737 if (*separator != ',') {
1738 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1739 return ERROR_SERVER_REMOTE_CLOSED;
1740 }
1741
1742 address = strtoull(separator + 1, &separator, 16);
1743
1744 if (*separator != ',') {
1745 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1746 return ERROR_SERVER_REMOTE_CLOSED;
1747 }
1748
1749 size = strtoul(separator + 1, &separator, 16);
1750
1751 switch (type) {
1752 case 0:
1753 case 1:
1754 if (packet[0] == 'Z') {
1755 retval = breakpoint_add(target, address, size, bp_type);
1756 if (retval != ERROR_OK) {
1757 retval = gdb_error(connection, retval);
1758 if (retval != ERROR_OK)
1759 return retval;
1760 } else
1761 gdb_put_packet(connection, "OK", 2);
1762 } else {
1763 breakpoint_remove(target, address);
1764 gdb_put_packet(connection, "OK", 2);
1765 }
1766 break;
1767 case 2:
1768 case 3:
1769 case 4:
1770 {
1771 if (packet[0] == 'Z') {
1772 retval = watchpoint_add(target, address, size, wp_type, 0, 0xffffffffu);
1773 if (retval != ERROR_OK) {
1774 retval = gdb_error(connection, retval);
1775 if (retval != ERROR_OK)
1776 return retval;
1777 } else
1778 gdb_put_packet(connection, "OK", 2);
1779 } else {
1780 watchpoint_remove(target, address);
1781 gdb_put_packet(connection, "OK", 2);
1782 }
1783 break;
1784 }
1785 default:
1786 break;
1787 }
1788
1789 return ERROR_OK;
1790 }
1791
1792 /* print out a string and allocate more space as needed,
1793 * mainly used for XML at this point
1794 */
1795 static __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6))) void xml_printf(int *retval,
1796 char **xml, int *pos, int *size, const char *fmt, ...)
1797 {
1798 if (*retval != ERROR_OK)
1799 return;
1800 int first = 1;
1801
1802 for (;; ) {
1803 if ((!*xml) || (!first)) {
1804 /* start by 0 to exercise all the code paths.
1805 * Need minimum 2 bytes to fit 1 char and 0 terminator. */
1806
1807 *size = *size * 2 + 2;
1808 char *t = *xml;
1809 *xml = realloc(*xml, *size);
1810 if (!*xml) {
1811 free(t);
1812 *retval = ERROR_SERVER_REMOTE_CLOSED;
1813 return;
1814 }
1815 }
1816
1817 va_list ap;
1818 int ret;
1819 va_start(ap, fmt);
1820 ret = vsnprintf(*xml + *pos, *size - *pos, fmt, ap);
1821 va_end(ap);
1822 if ((ret > 0) && ((ret + 1) < *size - *pos)) {
1823 *pos += ret;
1824 return;
1825 }
1826 /* there was just enough or not enough space, allocate more. */
1827 first = 0;
1828 }
1829 }
1830
1831 static int decode_xfer_read(char const *buf, char **annex, int *ofs, unsigned int *len)
1832 {
1833 /* Locate the annex. */
1834 const char *annex_end = strchr(buf, ':');
1835 if (!annex_end)
1836 return ERROR_FAIL;
1837
1838 /* After the read marker and annex, qXfer looks like a
1839 * traditional 'm' packet. */
1840 char *separator;
1841 *ofs = strtoul(annex_end + 1, &separator, 16);
1842
1843 if (*separator != ',')
1844 return ERROR_FAIL;
1845
1846 *len = strtoul(separator + 1, NULL, 16);
1847
1848 /* Extract the annex if needed */
1849 if (annex) {
1850 *annex = strndup(buf, annex_end - buf);
1851 if (!*annex)
1852 return ERROR_FAIL;
1853 }
1854
1855 return ERROR_OK;
1856 }
1857
1858 static int compare_bank(const void *a, const void *b)
1859 {
1860 struct flash_bank *b1, *b2;
1861 b1 = *((struct flash_bank **)a);
1862 b2 = *((struct flash_bank **)b);
1863
1864 if (b1->base == b2->base)
1865 return 0;
1866 else if (b1->base > b2->base)
1867 return 1;
1868 else
1869 return -1;
1870 }
1871
1872 static int gdb_memory_map(struct connection *connection,
1873 char const *packet, int packet_size)
1874 {
1875 /* We get away with only specifying flash here. Regions that are not
1876 * specified are treated as if we provided no memory map(if not we
1877 * could detect the holes and mark them as RAM).
1878 * Normally we only execute this code once, but no big deal if we
1879 * have to regenerate it a couple of times.
1880 */
1881
1882 struct target *target = get_target_from_connection(connection);
1883 struct flash_bank *p;
1884 char *xml = NULL;
1885 int size = 0;
1886 int pos = 0;
1887 int retval = ERROR_OK;
1888 struct flash_bank **banks;
1889 int offset;
1890 int length;
1891 char *separator;
1892 target_addr_t ram_start = 0;
1893 unsigned int target_flash_banks = 0;
1894
1895 /* skip command character */
1896 packet += 23;
1897
1898 offset = strtoul(packet, &separator, 16);
1899 length = strtoul(separator + 1, &separator, 16);
1900
1901 xml_printf(&retval, &xml, &pos, &size, "<memory-map>\n");
1902
1903 /* Sort banks in ascending order. We need to report non-flash
1904 * memory as ram (or rather read/write) by default for GDB, since
1905 * it has no concept of non-cacheable read/write memory (i/o etc).
1906 */
1907 banks = malloc(sizeof(struct flash_bank *)*flash_get_bank_count());
1908
1909 for (unsigned int i = 0; i < flash_get_bank_count(); i++) {
1910 p = get_flash_bank_by_num_noprobe(i);
1911 if (p->target != target)
1912 continue;
1913 retval = get_flash_bank_by_num(i, &p);
1914 if (retval != ERROR_OK) {
1915 free(banks);
1916 gdb_error(connection, retval);
1917 return retval;
1918 }
1919 banks[target_flash_banks++] = p;
1920 }
1921
1922 qsort(banks, target_flash_banks, sizeof(struct flash_bank *),
1923 compare_bank);
1924
1925 for (unsigned int i = 0; i < target_flash_banks; i++) {
1926 unsigned sector_size = 0;
1927 unsigned group_len = 0;
1928
1929 p = banks[i];
1930
1931 if (ram_start < p->base)
1932 xml_printf(&retval, &xml, &pos, &size,
1933 "<memory type=\"ram\" start=\"" TARGET_ADDR_FMT "\" "
1934 "length=\"" TARGET_ADDR_FMT "\"/>\n",
1935 ram_start, p->base - ram_start);
1936
1937 /* Report adjacent groups of same-size sectors. So for
1938 * example top boot CFI flash will list an initial region
1939 * with several large sectors (maybe 128KB) and several
1940 * smaller ones at the end (maybe 32KB). STR7 will have
1941 * regions with 8KB, 32KB, and 64KB sectors; etc.
1942 */
1943 for (unsigned int j = 0; j < p->num_sectors; j++) {
1944
1945 /* Maybe start a new group of sectors. */
1946 if (sector_size == 0) {
1947 if (p->sectors[j].offset + p->sectors[j].size > p->size) {
1948 LOG_WARNING("The flash sector at offset 0x%08" PRIx32
1949 " overflows the end of %s bank.",
1950 p->sectors[j].offset, p->name);
1951 LOG_WARNING("The rest of bank will not show in gdb memory map.");
1952 break;
1953 }
1954 target_addr_t start;
1955 start = p->base + p->sectors[j].offset;
1956 xml_printf(&retval, &xml, &pos, &size,
1957 "<memory type=\"flash\" "
1958 "start=\"" TARGET_ADDR_FMT "\" ",
1959 start);
1960 sector_size = p->sectors[j].size;
1961 group_len = sector_size;
1962 } else {
1963 group_len += sector_size; /* equal to p->sectors[j].size */
1964 }
1965
1966 /* Does this finish a group of sectors?
1967 * If not, continue an already-started group.
1968 */
1969 if (j < p->num_sectors - 1
1970 && p->sectors[j + 1].size == sector_size
1971 && p->sectors[j + 1].offset == p->sectors[j].offset + sector_size
1972 && p->sectors[j + 1].offset + p->sectors[j + 1].size <= p->size)
1973 continue;
1974
1975 xml_printf(&retval, &xml, &pos, &size,
1976 "length=\"0x%x\">\n"
1977 "<property name=\"blocksize\">"
1978 "0x%x</property>\n"
1979 "</memory>\n",
1980 group_len,
1981 sector_size);
1982 sector_size = 0;
1983 }
1984
1985 ram_start = p->base + p->size;
1986 }
1987
1988 if (ram_start != 0)
1989 xml_printf(&retval, &xml, &pos, &size,
1990 "<memory type=\"ram\" start=\"" TARGET_ADDR_FMT "\" "
1991 "length=\"" TARGET_ADDR_FMT "\"/>\n",
1992 ram_start, target_address_max(target) - ram_start + 1);
1993 /* ELSE a flash chip could be at the very end of the address space, in
1994 * which case ram_start will be precisely 0 */
1995
1996 free(banks);
1997
1998 xml_printf(&retval, &xml, &pos, &size, "</memory-map>\n");
1999
2000 if (retval != ERROR_OK) {
2001 free(xml);
2002 gdb_error(connection, retval);
2003 return retval;
2004 }
2005
2006 if (offset + length > pos)
2007 length = pos - offset;
2008
2009 char *t = malloc(length + 1);
2010 t[0] = 'l';
2011 memcpy(t + 1, xml + offset, length);
2012 gdb_put_packet(connection, t, length + 1);
2013
2014 free(t);
2015 free(xml);
2016 return ERROR_OK;
2017 }
2018
2019 static const char *gdb_get_reg_type_name(enum reg_type type)
2020 {
2021 switch (type) {
2022 case REG_TYPE_BOOL:
2023 return "bool";
2024 case REG_TYPE_INT:
2025 return "int";
2026 case REG_TYPE_INT8:
2027 return "int8";
2028 case REG_TYPE_INT16:
2029 return "int16";
2030 case REG_TYPE_INT32:
2031 return "int32";
2032 case REG_TYPE_INT64:
2033 return "int64";
2034 case REG_TYPE_INT128:
2035 return "int128";
2036 case REG_TYPE_UINT:
2037 return "uint";
2038 case REG_TYPE_UINT8:
2039 return "uint8";
2040 case REG_TYPE_UINT16:
2041 return "uint16";
2042 case REG_TYPE_UINT32:
2043 return "uint32";
2044 case REG_TYPE_UINT64:
2045 return "uint64";
2046 case REG_TYPE_UINT128:
2047 return "uint128";
2048 case REG_TYPE_CODE_PTR:
2049 return "code_ptr";
2050 case REG_TYPE_DATA_PTR:
2051 return "data_ptr";
2052 case REG_TYPE_FLOAT:
2053 return "float";
2054 case REG_TYPE_IEEE_SINGLE:
2055 return "ieee_single";
2056 case REG_TYPE_IEEE_DOUBLE:
2057 return "ieee_double";
2058 case REG_TYPE_ARCH_DEFINED:
2059 return "int"; /* return arbitrary string to avoid compile warning. */
2060 }
2061
2062 return "int"; /* "int" as default value */
2063 }
2064
2065 static int lookup_add_arch_defined_types(char const **arch_defined_types_list[], const char *type_id,
2066 int *num_arch_defined_types)
2067 {
2068 int tbl_sz = *num_arch_defined_types;
2069
2070 if (type_id && (strcmp(type_id, ""))) {
2071 for (int j = 0; j < (tbl_sz + 1); j++) {
2072 if (!((*arch_defined_types_list)[j])) {
2073 (*arch_defined_types_list)[tbl_sz++] = type_id;
2074 *arch_defined_types_list = realloc(*arch_defined_types_list,
2075 sizeof(char *) * (tbl_sz + 1));
2076 (*arch_defined_types_list)[tbl_sz] = NULL;
2077 *num_arch_defined_types = tbl_sz;
2078 return 1;
2079 } else {
2080 if (!strcmp((*arch_defined_types_list)[j], type_id))
2081 return 0;
2082 }
2083 }
2084 }
2085
2086 return -1;
2087 }
2088
2089 static int gdb_generate_reg_type_description(struct target *target,
2090 char **tdesc, int *pos, int *size, struct reg_data_type *type,
2091 char const **arch_defined_types_list[], int *num_arch_defined_types)
2092 {
2093 int retval = ERROR_OK;
2094
2095 if (type->type_class == REG_TYPE_CLASS_VECTOR) {
2096 struct reg_data_type *data_type = type->reg_type_vector->type;
2097 if (data_type->type == REG_TYPE_ARCH_DEFINED) {
2098 if (lookup_add_arch_defined_types(arch_defined_types_list, data_type->id,
2099 num_arch_defined_types))
2100 gdb_generate_reg_type_description(target, tdesc, pos, size, data_type,
2101 arch_defined_types_list,
2102 num_arch_defined_types);
2103 }
2104 /* <vector id="id" type="type" count="count"/> */
2105 xml_printf(&retval, tdesc, pos, size,
2106 "<vector id=\"%s\" type=\"%s\" count=\"%" PRIu32 "\"/>\n",
2107 type->id, type->reg_type_vector->type->id,
2108 type->reg_type_vector->count);
2109
2110 } else if (type->type_class == REG_TYPE_CLASS_UNION) {
2111 struct reg_data_type_union_field *field;
2112 field = type->reg_type_union->fields;
2113 while (field) {
2114 struct reg_data_type *data_type = field->type;
2115 if (data_type->type == REG_TYPE_ARCH_DEFINED) {
2116 if (lookup_add_arch_defined_types(arch_defined_types_list, data_type->id,
2117 num_arch_defined_types))
2118 gdb_generate_reg_type_description(target, tdesc, pos, size, data_type,
2119 arch_defined_types_list,
2120 num_arch_defined_types);
2121 }
2122
2123 field = field->next;
2124 }
2125 /* <union id="id">
2126 * <field name="name" type="type"/> ...
2127 * </union> */
2128 xml_printf(&retval, tdesc, pos, size,
2129 "<union id=\"%s\">\n",
2130 type->id);
2131
2132 field = type->reg_type_union->fields;
2133 while (field) {
2134 xml_printf(&retval, tdesc, pos, size,
2135 "<field name=\"%s\" type=\"%s\"/>\n",
2136 field->name, field->type->id);
2137
2138 field = field->next;
2139 }
2140
2141 xml_printf(&retval, tdesc, pos, size,
2142 "</union>\n");
2143
2144 } else if (type->type_class == REG_TYPE_CLASS_STRUCT) {
2145 struct reg_data_type_struct_field *field;
2146 field = type->reg_type_struct->fields;
2147
2148 if (field->use_bitfields) {
2149 /* <struct id="id" size="size">
2150 * <field name="name" start="start" end="end"/> ...
2151 * </struct> */
2152 xml_printf(&retval, tdesc, pos, size,
2153 "<struct id=\"%s\" size=\"%" PRIu32 "\">\n",
2154 type->id, type->reg_type_struct->size);
2155 while (field) {
2156 xml_printf(&retval, tdesc, pos, size,
2157 "<field name=\"%s\" start=\"%" PRIu32 "\" end=\"%" PRIu32 "\" type=\"%s\" />\n",
2158 field->name, field->bitfield->start, field->bitfield->end,
2159 gdb_get_reg_type_name(field->bitfield->type));
2160
2161 field = field->next;
2162 }
2163 } else {
2164 while (field) {
2165 struct reg_data_type *data_type = field->type;
2166 if (data_type->type == REG_TYPE_ARCH_DEFINED) {
2167 if (lookup_add_arch_defined_types(arch_defined_types_list, data_type->id,
2168 num_arch_defined_types))
2169 gdb_generate_reg_type_description(target, tdesc, pos, size, data_type,
2170 arch_defined_types_list,
2171 num_arch_defined_types);
2172 }
2173 }
2174
2175 /* <struct id="id">
2176 * <field name="name" type="type"/> ...
2177 * </struct> */
2178 xml_printf(&retval, tdesc, pos, size,
2179 "<struct id=\"%s\">\n",
2180 type->id);
2181 while (field) {
2182 xml_printf(&retval, tdesc, pos, size,
2183 "<field name=\"%s\" type=\"%s\"/>\n",
2184 field->name, field->type->id);
2185
2186 field = field->next;
2187 }
2188 }
2189
2190 xml_printf(&retval, tdesc, pos, size,
2191 "</struct>\n");
2192
2193 } else if (type->type_class == REG_TYPE_CLASS_FLAGS) {
2194 /* <flags id="id" size="size">
2195 * <field name="name" start="start" end="end"/> ...
2196 * </flags> */
2197 xml_printf(&retval, tdesc, pos, size,
2198 "<flags id=\"%s\" size=\"%" PRIu32 "\">\n",
2199 type->id, type->reg_type_flags->size);
2200
2201 struct reg_data_type_flags_field *field;
2202 field = type->reg_type_flags->fields;
2203 while (field) {
2204 xml_printf(&retval, tdesc, pos, size,
2205 "<field name=\"%s\" start=\"%" PRIu32 "\" end=\"%" PRIu32 "\" type=\"%s\" />\n",
2206 field->name, field->bitfield->start, field->bitfield->end,
2207 gdb_get_reg_type_name(field->bitfield->type));
2208
2209 field = field->next;
2210 }
2211
2212 xml_printf(&retval, tdesc, pos, size,
2213 "</flags>\n");
2214
2215 }
2216
2217 return ERROR_OK;
2218 }
2219
2220 /* Get a list of available target registers features. feature_list must
2221 * be freed by caller.
2222 */
2223 static int get_reg_features_list(struct target *target, char const **feature_list[], int *feature_list_size,
2224 struct reg **reg_list, int reg_list_size)
2225 {
2226 int tbl_sz = 0;
2227
2228 /* Start with only one element */
2229 *feature_list = calloc(1, sizeof(char *));
2230
2231 for (int i = 0; i < reg_list_size; i++) {
2232 if (reg_list[i]->exist == false || reg_list[i]->hidden)
2233 continue;
2234
2235 if (reg_list[i]->feature
2236 && reg_list[i]->feature->name
2237 && (strcmp(reg_list[i]->feature->name, ""))) {
2238 /* We found a feature, check if the feature is already in the
2239 * table. If not, allocate a new entry for the table and
2240 * put the new feature in it.
2241 */
2242 for (int j = 0; j < (tbl_sz + 1); j++) {
2243 if (!((*feature_list)[j])) {
2244 (*feature_list)[tbl_sz++] = reg_list[i]->feature->name;
2245 *feature_list = realloc(*feature_list, sizeof(char *) * (tbl_sz + 1));
2246 (*feature_list)[tbl_sz] = NULL;
2247 break;
2248 } else {
2249 if (!strcmp((*feature_list)[j], reg_list[i]->feature->name))
2250 break;
2251 }
2252 }
2253 }
2254 }
2255
2256 if (feature_list_size)
2257 *feature_list_size = tbl_sz;
2258
2259 return ERROR_OK;
2260 }
2261
2262 /* Create a register list that's the union of all the registers of the SMP
2263 * group this target is in. If the target is not part of an SMP group, this
2264 * returns the same as target_get_gdb_reg_list_noread().
2265 */
2266 static int smp_reg_list_noread(struct target *target,
2267 struct reg **combined_list[], int *combined_list_size,
2268 enum target_register_class reg_class)
2269 {
2270 if (!target->smp)
2271 return target_get_gdb_reg_list_noread(target, combined_list,
2272 combined_list_size, REG_CLASS_ALL);
2273
2274 unsigned int combined_allocated = 256;
2275 *combined_list = malloc(combined_allocated * sizeof(struct reg *));
2276 if (*combined_list == NULL) {
2277 LOG_ERROR("malloc(%zu) failed", combined_allocated * sizeof(struct reg *));
2278 return ERROR_FAIL;
2279 }
2280 *combined_list_size = 0;
2281
2282 struct target_list *head;
2283 foreach_smp_target(head, target->head) {
2284 struct reg **reg_list = NULL;
2285 int reg_list_size;
2286 int result = target_get_gdb_reg_list_noread(head->target, &reg_list,
2287 &reg_list_size, reg_class);
2288 if (result != ERROR_OK) {
2289 free(*combined_list);
2290 return result;
2291 }
2292 for (int i = 0; i < reg_list_size; i++) {
2293 bool found = false;
2294 struct reg *a = reg_list[i];
2295 if (a->exist) {
2296 /* Nested loop makes this O(n^2), but this entire function with
2297 * 5 RISC-V targets takes just 2ms on my computer. Fast enough
2298 * for me. */
2299 for (int j = 0; j < *combined_list_size; j++) {
2300 struct reg *b = (*combined_list)[j];
2301 if (!strcmp(a->name, b->name)) {
2302 found = true;
2303 if (a->size != b->size) {
2304 LOG_ERROR("SMP register %s is %d bits on one "
2305 "target, but %d bits on another target.",
2306 a->name, a->size, b->size);
2307 free(reg_list);
2308 free(*combined_list);
2309 return ERROR_FAIL;
2310 }
2311 break;
2312 }
2313 }
2314 if (!found) {
2315 LOG_DEBUG("[%s] %s not found in combined list", target_name(target), a->name);
2316 if (*combined_list_size >= (int) combined_allocated) {
2317 combined_allocated *= 2;
2318 *combined_list = realloc(*combined_list, combined_allocated * sizeof(struct reg *));
2319 if (*combined_list == NULL) {
2320 LOG_ERROR("realloc(%zu) failed", combined_allocated * sizeof(struct reg *));
2321 return ERROR_FAIL;
2322 }
2323 }
2324 (*combined_list)[*combined_list_size] = a;
2325 (*combined_list_size)++;
2326 }
2327 }
2328 }
2329 free(reg_list);
2330 }
2331
2332 /* Now warn the user about any registers that weren't found in every target. */
2333 foreach_smp_target(head, target->head) {
2334 struct reg **reg_list = NULL;
2335 int reg_list_size;
2336 int result = target_get_gdb_reg_list_noread(head->target, &reg_list,
2337 &reg_list_size, reg_class);
2338 if (result != ERROR_OK) {
2339 free(*combined_list);
2340 return result;
2341 }
2342 for (int i = 0; i < *combined_list_size; i++) {
2343 bool found = false;
2344 struct reg *a = (*combined_list)[i];
2345 for (int j = 0; j < reg_list_size; j++) {
2346 struct reg *b = reg_list[j];
2347 if (b->exist && !strcmp(a->name, b->name)) {
2348 found = true;
2349 break;
2350 }
2351 }
2352 if (!found) {
2353 LOG_WARNING("Register %s does not exist in %s, which is part of an SMP group where "
2354 "this register does exist.",
2355 a->name, target_name(head->target));
2356 }
2357 }
2358 free(reg_list);
2359 }
2360
2361 return ERROR_OK;
2362 }
2363
2364 static int gdb_generate_target_description(struct target *target, char **tdesc_out)
2365 {
2366 int retval = ERROR_OK;
2367 struct reg **reg_list = NULL;
2368 int reg_list_size;
2369 char const *architecture;
2370 char const **features = NULL;
2371 int feature_list_size = 0;
2372 char *tdesc = NULL;
2373 int pos = 0;
2374 int size = 0;
2375
2376
2377 retval = smp_reg_list_noread(target, &reg_list, &reg_list_size,
2378 REG_CLASS_ALL);
2379
2380 if (retval != ERROR_OK) {
2381 LOG_ERROR("get register list failed");
2382 retval = ERROR_FAIL;
2383 goto error;
2384 }
2385
2386 if (reg_list_size <= 0) {
2387 LOG_ERROR("get register list failed");
2388 retval = ERROR_FAIL;
2389 goto error;
2390 }
2391
2392 /* Get a list of available target registers features */
2393 retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size);
2394 if (retval != ERROR_OK) {
2395 LOG_ERROR("Can't get the registers feature list");
2396 retval = ERROR_FAIL;
2397 goto error;
2398 }
2399
2400 /* If we found some features associated with registers, create sections */
2401 int current_feature = 0;
2402
2403 xml_printf(&retval, &tdesc, &pos, &size,
2404 "<?xml version=\"1.0\"?>\n"
2405 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">\n"
2406 "<target version=\"1.0\">\n");
2407
2408 /* generate architecture element if supported by target */
2409 architecture = target_get_gdb_arch(target);
2410 if (architecture)
2411 xml_printf(&retval, &tdesc, &pos, &size,
2412 "<architecture>%s</architecture>\n", architecture);
2413
2414 /* generate target description according to register list */
2415 if (features) {
2416 while (features[current_feature]) {
2417 char const **arch_defined_types = NULL;
2418 int num_arch_defined_types = 0;
2419
2420 arch_defined_types = calloc(1, sizeof(char *));
2421 xml_printf(&retval, &tdesc, &pos, &size,
2422 "<feature name=\"%s\">\n",
2423 features[current_feature]);
2424
2425 int i;
2426 for (i = 0; i < reg_list_size; i++) {
2427
2428 if (reg_list[i]->exist == false || reg_list[i]->hidden)
2429 continue;
2430
2431 if (strcmp(reg_list[i]->feature->name, features[current_feature]))
2432 continue;
2433
2434 const char *type_str;
2435 if (reg_list[i]->reg_data_type) {
2436 if (reg_list[i]->reg_data_type->type == REG_TYPE_ARCH_DEFINED) {
2437 /* generate <type... first, if there are architecture-defined types. */
2438 if (lookup_add_arch_defined_types(&arch_defined_types,
2439 reg_list[i]->reg_data_type->id,
2440 &num_arch_defined_types))
2441 gdb_generate_reg_type_description(target, &tdesc, &pos, &size,
2442 reg_list[i]->reg_data_type,
2443 &arch_defined_types,
2444 &num_arch_defined_types);
2445
2446 type_str = reg_list[i]->reg_data_type->id;
2447 } else {
2448 /* predefined type */
2449 type_str = gdb_get_reg_type_name(
2450 reg_list[i]->reg_data_type->type);
2451 }
2452 } else {
2453 /* Default type is "int" */
2454 type_str = "int";
2455 }
2456
2457 xml_printf(&retval, &tdesc, &pos, &size,
2458 "<reg name=\"%s\"", reg_list[i]->name);
2459 xml_printf(&retval, &tdesc, &pos, &size,
2460 " bitsize=\"%" PRIu32 "\"", reg_list[i]->size);
2461 xml_printf(&retval, &tdesc, &pos, &size,
2462 " regnum=\"%" PRIu32 "\"", reg_list[i]->number);
2463 if (reg_list[i]->caller_save)
2464 xml_printf(&retval, &tdesc, &pos, &size,
2465 " save-restore=\"yes\"");
2466 else
2467 xml_printf(&retval, &tdesc, &pos, &size,
2468 " save-restore=\"no\"");
2469
2470 xml_printf(&retval, &tdesc, &pos, &size,
2471 " type=\"%s\"", type_str);
2472
2473 if (reg_list[i]->group)
2474 xml_printf(&retval, &tdesc, &pos, &size,
2475 " group=\"%s\"", reg_list[i]->group);
2476
2477 xml_printf(&retval, &tdesc, &pos, &size,
2478 "/>\n");
2479 }
2480
2481 xml_printf(&retval, &tdesc, &pos, &size,
2482 "</feature>\n");
2483
2484 current_feature++;
2485 free(arch_defined_types);
2486 }
2487 }
2488
2489 xml_printf(&retval, &tdesc, &pos, &size,
2490 "</target>\n");
2491
2492 error:
2493 free(features);
2494 free(reg_list);
2495
2496 if (retval == ERROR_OK)
2497 *tdesc_out = tdesc;
2498 else
2499 free(tdesc);
2500
2501 return retval;
2502 }
2503
2504 static int gdb_get_target_description_chunk(struct target *target, struct target_desc_format *target_desc,
2505 char **chunk, int32_t offset, uint32_t length)
2506 {
2507 if (!target_desc) {
2508 LOG_ERROR("Unable to Generate Target Description");
2509 return ERROR_FAIL;
2510 }
2511
2512 char *tdesc = target_desc->tdesc;
2513 uint32_t tdesc_length = target_desc->tdesc_length;
2514
2515 if (!tdesc) {
2516 int retval = gdb_generate_target_description(target, &tdesc);
2517 if (retval != ERROR_OK) {
2518 LOG_ERROR("Unable to Generate Target Description");
2519 return ERROR_FAIL;
2520 }
2521
2522 tdesc_length = strlen(tdesc);
2523 }
2524
2525 char transfer_type;
2526
2527 if (length < (tdesc_length - offset))
2528 transfer_type = 'm';
2529 else
2530 transfer_type = 'l';
2531
2532 *chunk = malloc(length + 2);
2533 if (!*chunk) {
2534 LOG_ERROR("Unable to allocate memory");
2535 return ERROR_FAIL;
2536 }
2537
2538 (*chunk)[0] = transfer_type;
2539 if (transfer_type == 'm') {
2540 strncpy((*chunk) + 1, tdesc + offset, length);
2541 (*chunk)[1 + length] = '\0';
2542 } else {
2543 strncpy((*chunk) + 1, tdesc + offset, tdesc_length - offset);
2544 (*chunk)[1 + (tdesc_length - offset)] = '\0';
2545
2546 /* After gdb-server sends out last chunk, invalidate tdesc. */
2547 free(tdesc);
2548 tdesc = NULL;
2549 tdesc_length = 0;
2550 }
2551
2552 target_desc->tdesc = tdesc;
2553 target_desc->tdesc_length = tdesc_length;
2554
2555 return ERROR_OK;
2556 }
2557
2558 static int gdb_target_description_supported(struct target *target, int *supported)
2559 {
2560 int retval = ERROR_OK;
2561 struct reg **reg_list = NULL;
2562 int reg_list_size = 0;
2563 char const **features = NULL;
2564 int feature_list_size = 0;
2565
2566 char const *architecture = target_get_gdb_arch(target);
2567
2568 retval = target_get_gdb_reg_list_noread(target, &reg_list,
2569 &reg_list_size, REG_CLASS_ALL);
2570 if (retval != ERROR_OK) {
2571 LOG_ERROR("get register list failed");
2572 goto error;
2573 }
2574
2575 if (reg_list_size <= 0) {
2576 LOG_ERROR("get register list failed");
2577 retval = ERROR_FAIL;
2578 goto error;
2579 }
2580
2581 /* Get a list of available target registers features */
2582 retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size);
2583 if (retval != ERROR_OK) {
2584 LOG_ERROR("Can't get the registers feature list");
2585 goto error;
2586 }
2587
2588 if (supported) {
2589 if (architecture || feature_list_size)
2590 *supported = 1;
2591 else
2592 *supported = 0;
2593 }
2594
2595 error:
2596 free(features);
2597
2598 free(reg_list);
2599
2600 return retval;
2601 }
2602
2603 static int gdb_generate_thread_list(struct target *target, char **thread_list_out)
2604 {
2605 struct rtos *rtos = target->rtos;
2606 int retval = ERROR_OK;
2607 char *thread_list = NULL;
2608 int pos = 0;
2609 int size = 0;
2610
2611 xml_printf(&retval, &thread_list, &pos, &size,
2612 "<?xml version=\"1.0\"?>\n"
2613 "<threads>\n");
2614
2615 if (rtos) {
2616 for (int i = 0; i < rtos->thread_count; i++) {
2617 struct thread_detail *thread_detail = &rtos->thread_details[i];
2618
2619 if (!thread_detail->exists)
2620 continue;
2621
2622 xml_printf(&retval, &thread_list, &pos, &size,
2623 "<thread id=\"%" PRIx64 "\">", thread_detail->threadid);
2624
2625 if (thread_detail->thread_name_str)
2626 xml_printf(&retval, &thread_list, &pos, &size,
2627 "Name: %s", thread_detail->thread_name_str);
2628
2629 if (thread_detail->extra_info_str) {
2630 if (thread_detail->thread_name_str)
2631 xml_printf(&retval, &thread_list, &pos, &size,
2632 ", ");
2633 xml_printf(&retval, &thread_list, &pos, &size,
2634 "%s", thread_detail->extra_info_str);
2635 }
2636
2637 xml_printf(&retval, &thread_list, &pos, &size,
2638 "</thread>\n");
2639 }
2640 }
2641
2642 xml_printf(&retval, &thread_list, &pos, &size,
2643 "</threads>\n");
2644
2645 if (retval == ERROR_OK)
2646 *thread_list_out = thread_list;
2647 else
2648 free(thread_list);
2649
2650 return retval;
2651 }
2652
2653 static int gdb_get_thread_list_chunk(struct target *target, char **thread_list,
2654 char **chunk, int32_t offset, uint32_t length)
2655 {
2656 if (!*thread_list) {
2657 int retval = gdb_generate_thread_list(target, thread_list);
2658 if (retval != ERROR_OK) {
2659 LOG_ERROR("Unable to Generate Thread List");
2660 return ERROR_FAIL;
2661 }
2662 }
2663
2664 size_t thread_list_length = strlen(*thread_list);
2665 char transfer_type;
2666
2667 length = MIN(length, thread_list_length - offset);
2668 if (length < (thread_list_length - offset))
2669 transfer_type = 'm';
2670 else
2671 transfer_type = 'l';
2672
2673 *chunk = malloc(length + 2 + 3);
2674 /* Allocating extra 3 bytes prevents false positive valgrind report
2675 * of strlen(chunk) word access:
2676 * Invalid read of size 4
2677 * Address 0x4479934 is 44 bytes inside a block of size 45 alloc'd */
2678 if (!*chunk) {
2679 LOG_ERROR("Unable to allocate memory");
2680 return ERROR_FAIL;
2681 }
2682
2683 (*chunk)[0] = transfer_type;
2684 strncpy((*chunk) + 1, (*thread_list) + offset, length);
2685 (*chunk)[1 + length] = '\0';
2686
2687 /* After gdb-server sends out last chunk, invalidate thread list. */
2688 if (transfer_type == 'l') {
2689 free(*thread_list);
2690 *thread_list = NULL;
2691 }
2692
2693 return ERROR_OK;
2694 }
2695
2696 static int gdb_query_packet(struct connection *connection,
2697 char const *packet, int packet_size)
2698 {
2699 struct command_context *cmd_ctx = connection->cmd_ctx;
2700 struct gdb_connection *gdb_connection = connection->priv;
2701 struct target *target = get_target_from_connection(connection);
2702
2703 if (strncmp(packet, "qRcmd,", 6) == 0) {
2704 if (packet_size > 6) {
2705 char *cmd;
2706 cmd = malloc((packet_size - 6) / 2 + 1);
2707 size_t len = unhexify((uint8_t *)cmd, packet + 6, (packet_size - 6) / 2);
2708 cmd[len] = 0;
2709
2710 /* We want to print all debug output to GDB connection */
2711 log_add_callback(gdb_log_callback, connection);
2712 target_call_timer_callbacks_now();
2713 /* some commands need to know the GDB connection, make note of current
2714 * GDB connection. */
2715 current_gdb_connection = gdb_connection;
2716 command_run_line(cmd_ctx, cmd);
2717 current_gdb_connection = NULL;
2718 target_call_timer_callbacks_now();
2719 log_remove_callback(gdb_log_callback, connection);
2720 free(cmd);
2721 }
2722 gdb_put_packet(connection, "OK", 2);
2723 return ERROR_OK;
2724 } else if (strncmp(packet, "qCRC:", 5) == 0) {
2725 if (packet_size > 5) {
2726 int retval;
2727 char gdb_reply[10];
2728 char *separator;
2729 uint32_t checksum;
2730 target_addr_t addr = 0;
2731 uint32_t len = 0;
2732
2733 /* skip command character */
2734 packet += 5;
2735
2736 addr = strtoull(packet, &separator, 16);
2737
2738 if (*separator != ',') {
2739 LOG_ERROR("incomplete read memory packet received, dropping connection");
2740 return ERROR_SERVER_REMOTE_CLOSED;
2741 }
2742
2743 len = strtoul(separator + 1, NULL, 16);
2744
2745 retval = target_checksum_memory(target, addr, len, &checksum);
2746
2747 if (retval == ERROR_OK) {
2748 snprintf(gdb_reply, 10, "C%8.8" PRIx32 "", checksum);
2749 gdb_put_packet(connection, gdb_reply, 9);
2750 } else {
2751 retval = gdb_error(connection, retval);
2752 if (retval != ERROR_OK)
2753 return retval;
2754 }
2755
2756 return ERROR_OK;
2757 }
2758 } else if (strncmp(packet, "qSupported", 10) == 0) {
2759 /* we currently support packet size and qXfer:memory-map:read (if enabled)
2760 * qXfer:features:read is supported for some targets */
2761 int retval = ERROR_OK;
2762 char *buffer = NULL;
2763 int pos = 0;
2764 int size = 0;
2765 int gdb_target_desc_supported = 0;
2766
2767 /* we need to test that the target supports target descriptions */
2768 retval = gdb_target_description_supported(target, &gdb_target_desc_supported);
2769 if (retval != ERROR_OK) {
2770 LOG_INFO("Failed detecting Target Description Support, disabling");
2771 gdb_target_desc_supported = 0;
2772 }
2773
2774 /* support may be disabled globally */
2775 if (gdb_use_target_description == 0) {
2776 if (gdb_target_desc_supported)
2777 LOG_WARNING("Target Descriptions Supported, but disabled");
2778 gdb_target_desc_supported = 0;
2779 }
2780
2781 xml_printf(&retval,
2782 &buffer,
2783 &pos,
2784 &size,
2785 "PacketSize=%x;qXfer:memory-map:read%c;qXfer:features:read%c;qXfer:threads:read+;QStartNoAckMode+;vContSupported+",
2786 GDB_BUFFER_SIZE,
2787 ((gdb_use_memory_map == 1) && (flash_get_bank_count() > 0)) ? '+' : '-',
2788 (gdb_target_desc_supported == 1) ? '+' : '-');
2789
2790 if (retval != ERROR_OK) {
2791 gdb_send_error(connection, 01);
2792 return ERROR_OK;
2793 }
2794
2795 gdb_put_packet(connection, buffer, strlen(buffer));
2796 free(buffer);
2797
2798 return ERROR_OK;
2799 } else if ((strncmp(packet, "qXfer:memory-map:read::", 23) == 0)
2800 && (flash_get_bank_count() > 0))
2801 return gdb_memory_map(connection, packet, packet_size);
2802 else if (strncmp(packet, "qXfer:features:read:", 20) == 0) {
2803 char *xml = NULL;
2804 int retval = ERROR_OK;
2805
2806 int offset;
2807 unsigned int length;
2808
2809 /* skip command character */
2810 packet += 20;
2811
2812 if (decode_xfer_read(packet, NULL, &offset, &length) < 0) {
2813 gdb_send_error(connection, 01);
2814 return ERROR_OK;
2815 }
2816
2817 /* Target should prepare correct target description for annex.
2818 * The first character of returned xml is 'm' or 'l'. 'm' for
2819 * there are *more* chunks to transfer. 'l' for it is the *last*
2820 * chunk of target description.
2821 */
2822 retval = gdb_get_target_description_chunk(target, &gdb_connection->target_desc,
2823 &xml, offset, length);
2824 if (retval != ERROR_OK) {
2825 gdb_error(connection, retval);
2826 return retval;
2827 }
2828
2829 gdb_put_packet(connection, xml, strlen(xml));
2830
2831 free(xml);
2832 return ERROR_OK;
2833 } else if (strncmp(packet, "qXfer:threads:read:", 19) == 0) {
2834 char *xml = NULL;
2835 int retval = ERROR_OK;
2836
2837 int offset;
2838 unsigned int length;
2839
2840 /* skip command character */
2841 packet += 19;
2842
2843 if (decode_xfer_read(packet, NULL, &offset, &length) < 0) {
2844 gdb_send_error(connection, 01);
2845 return ERROR_OK;
2846 }
2847
2848 /* Target should prepare correct thread list for annex.
2849 * The first character of returned xml is 'm' or 'l'. 'm' for
2850 * there are *more* chunks to transfer. 'l' for it is the *last*
2851 * chunk of target description.
2852 */
2853 retval = gdb_get_thread_list_chunk(target, &gdb_connection->thread_list,
2854 &xml, offset, length);
2855 if (retval != ERROR_OK) {
2856 gdb_error(connection, retval);
2857 return retval;
2858 }
2859
2860 gdb_put_packet(connection, xml, strlen(xml));
2861
2862 free(xml);
2863 return ERROR_OK;
2864 } else if (strncmp(packet, "QStartNoAckMode", 15) == 0) {
2865 gdb_connection->noack_mode = 1;
2866 gdb_put_packet(connection, "OK", 2);
2867 return ERROR_OK;
2868 }
2869
2870 gdb_put_packet(connection, "", 0);
2871 return ERROR_OK;
2872 }
2873
2874 static bool gdb_handle_vcont_packet(struct connection *connection, const char *packet, int packet_size)
2875 {
2876 struct gdb_connection *gdb_connection = connection->priv;
2877 struct target *target = get_target_from_connection(connection);
2878 const char *parse = packet;
2879 int retval;
2880
2881 /* query for vCont supported */
2882 if (parse[0] == '?') {
2883 if (target->type->step) {
2884 /* gdb doesn't accept c without C and s without S */
2885 gdb_put_packet(connection, "vCont;c;C;s;S", 13);
2886 return true;
2887 }
2888 return false;
2889 }
2890
2891 if (parse[0] == ';') {
2892 ++parse;
2893 --packet_size;
2894 }
2895
2896 /* simple case, a continue packet */
2897 if (parse[0] == 'c') {
2898 gdb_running_type = 'c';
2899 LOG_DEBUG("target %s continue", target_name(target));
2900 log_add_callback(gdb_log_callback, connection);
2901 retval = target_resume(target, 1, 0, 0, 0);
2902 if (retval == ERROR_TARGET_NOT_HALTED)
2903 LOG_INFO("target %s was not halted when resume was requested", target_name(target));
2904
2905 /* poll target in an attempt to make its internal state consistent */
2906 if (retval != ERROR_OK) {
2907 retval = target_poll(target);
2908 if (retval != ERROR_OK)
2909 LOG_DEBUG("error polling target %s after failed resume", target_name(target));
2910 }
2911
2912 /*
2913 * We don't report errors to gdb here, move frontend_state to
2914 * TARGET_RUNNING to stay in sync with gdb's expectation of the
2915 * target state
2916 */
2917 gdb_connection->frontend_state = TARGET_RUNNING;
2918 target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
2919
2920 return true;
2921 }
2922
2923 /* single-step or step-over-breakpoint */
2924 if (parse[0] == 's') {
2925 gdb_running_type = 's';
2926 bool fake_step = false;
2927
2928 if (strncmp(parse, "s:", 2) == 0) {
2929 struct target *ct = target;
2930 int current_pc = 1;
2931 int64_t thread_id;
2932 char *endp;
2933
2934 parse += 2;
2935 packet_size -= 2;
2936
2937 thread_id = strtoll(parse, &endp, 16);
2938 if (endp) {
2939 packet_size -= endp - parse;
2940 parse = endp;
2941 }
2942
2943 if (target->rtos) {
2944 /* FIXME: why is this necessary? rtos state should be up-to-date here already! */
2945 rtos_update_threads(target);
2946
2947 target->rtos->gdb_target_for_threadid(connection, thread_id, &ct);
2948
2949 /*
2950 * check if the thread to be stepped is the current rtos thread
2951 * if not, we must fake the step
2952 */
2953 if (target->rtos->current_thread != thread_id)
2954 fake_step = true;
2955 }
2956
2957 if (parse[0] == ';') {
2958 ++parse;
2959 --packet_size;
2960
2961 if (parse[0] == 'c') {
2962 parse += 1;
2963
2964 /* check if thread-id follows */
2965 if (parse[0] == ':') {
2966 int64_t tid;
2967 parse += 1;
2968
2969 tid = strtoll(parse, &endp, 16);
2970 if (tid == thread_id) {
2971 /*
2972 * Special case: only step a single thread (core),
2973 * keep the other threads halted. Currently, only
2974 * aarch64 target understands it. Other target types don't
2975 * care (nobody checks the actual value of 'current')
2976 * and it doesn't really matter. This deserves
2977 * a symbolic constant and a formal interface documentation
2978 * at a later time.
2979 */
2980 LOG_DEBUG("request to step current core only");
2981 /* uncomment after checking that indeed other targets are safe */
2982 /*current_pc = 2;*/
2983 }
2984 }
2985 }
2986 }
2987
2988 LOG_DEBUG("target %s single-step thread %"PRIx64, target_name(ct), thread_id);
2989 log_add_callback(gdb_log_callback, connection);
2990 target_call_event_callbacks(ct, TARGET_EVENT_GDB_START);
2991
2992 /*
2993 * work around an annoying gdb behaviour: when the current thread
2994 * is changed in gdb, it assumes that the target can follow and also
2995 * make the thread current. This is an assumption that cannot hold
2996 * for a real target running a multi-threading OS. We just fake
2997 * the step to not trigger an internal error in gdb. See
2998 * https://sourceware.org/bugzilla/show_bug.cgi?id=22925 for details
2999 */
3000 if (fake_step) {
3001 int sig_reply_len;
3002 char sig_reply[128];
3003
3004 LOG_DEBUG("fake step thread %"PRIx64, thread_id);
3005
3006 sig_reply_len = snprintf(sig_reply, sizeof(sig_reply),
3007 "T05thread:%016"PRIx64";", thread_id);
3008
3009 gdb_put_packet(connection, sig_reply, sig_reply_len);
3010 log_remove_callback(gdb_log_callback, connection);
3011
3012 return true;
3013 }
3014
3015 /* support for gdb_sync command */
3016 if (gdb_connection->sync) {
3017 gdb_connection->sync = false;
3018 if (ct->state == TARGET_HALTED) {
3019 LOG_DEBUG("stepi ignored. GDB will now fetch the register state "
3020 "from the target.");
3021 gdb_sig_halted(connection);
3022 log_remove_callback(gdb_log_callback, connection);
3023 } else
3024 gdb_connection->frontend_state = TARGET_RUNNING;
3025 return true;
3026 }
3027
3028 retval = target_step(ct, current_pc, 0, 0);
3029 if (retval == ERROR_TARGET_NOT_HALTED)
3030 LOG_INFO("target %s was not halted when step was requested", target_name(ct));
3031
3032 /* if step was successful send a reply back to gdb */
3033 if (retval == ERROR_OK) {
3034 retval = target_poll(ct);
3035 if (retval != ERROR_OK)
3036 LOG_DEBUG("error polling target %s after successful step", target_name(ct));
3037 /* send back signal information */
3038 gdb_signal_reply(ct, connection);
3039 /* stop forwarding log packets! */
3040 log_remove_callback(gdb_log_callback, connection);
3041 } else
3042 gdb_connection->frontend_state = TARGET_RUNNING;
3043 } else {
3044 LOG_ERROR("Unknown vCont packet");
3045 return false;
3046 }
3047 return true;
3048 }
3049
3050 return false;
3051 }
3052
3053 static char *next_hex_encoded_field(const char **str, char sep)
3054 {
3055 size_t hexlen;
3056 const char *hex = *str;
3057 if (hex[0] == '\0')
3058 return NULL;
3059
3060 const char *end = strchr(hex, sep);
3061 if (!end)
3062 hexlen = strlen(hex);
3063 else
3064 hexlen = end - hex;
3065 *str = hex + hexlen + 1;
3066
3067 if (hexlen % 2 != 0) {
3068 /* Malformed hex data */
3069 return NULL;
3070 }
3071
3072 size_t count = hexlen / 2;
3073 char *decoded = malloc(count + 1);
3074 if (!decoded)
3075 return NULL;
3076
3077 size_t converted = unhexify((void *)decoded, hex, count);
3078 if (converted != count) {
3079 free(decoded);
3080 return NULL;
3081 }
3082
3083 decoded[count] = '\0';
3084 return decoded;
3085 }
3086
3087 /* handle extended restart packet */
3088 static void gdb_restart_inferior(struct connection *connection, const char *packet, int packet_size)
3089 {
3090 struct gdb_connection *gdb_con = connection->priv;
3091 struct target *target = get_target_from_connection(connection);
3092
3093 breakpoint_clear_target(target);
3094 watchpoint_clear_target(target);
3095 command_run_linef(connection->cmd_ctx, "ocd_gdb_restart %s",
3096 target_name(target));
3097 /* set connection as attached after reset */
3098 gdb_con->attached = true;
3099 /* info rtos parts */
3100 gdb_thread_packet(connection, packet, packet_size);
3101 }
3102
3103 static bool gdb_handle_vrun_packet(struct connection *connection, const char *packet, int packet_size)
3104 {
3105 struct target *target = get_target_from_connection(connection);
3106 const char *parse = packet;
3107
3108 /* Skip "vRun" */
3109 parse += 4;
3110
3111 if (parse[0] != ';')
3112 return false;
3113 parse++;
3114
3115 /* Skip first field "filename"; don't know what to do with it. */
3116 free(next_hex_encoded_field(&parse, ';'));
3117
3118 char *cmdline = next_hex_encoded_field(&parse, ';');
3119 while (cmdline) {
3120 char *arg = next_hex_encoded_field(&parse, ';');
3121 if (!arg)
3122 break;
3123 char *new_cmdline = alloc_printf("%s %s", cmdline, arg);
3124 free(cmdline);
3125 free(arg);
3126 cmdline = new_cmdline;
3127 }
3128
3129 if (cmdline) {
3130 if (target->semihosting) {
3131 LOG_INFO("GDB set inferior command line to '%s'", cmdline);
3132 free(target->semihosting->cmdline);
3133 target->semihosting->cmdline = cmdline;
3134 } else {
3135 LOG_INFO("GDB set inferior command line to '%s' but semihosting is unavailable", cmdline);
3136 free(cmdline);
3137 }
3138 }
3139
3140 gdb_restart_inferior(connection, packet, packet_size);
3141 gdb_put_packet(connection, "S00", 3);
3142 return true;
3143 }
3144
3145 static int gdb_v_packet(struct connection *connection,
3146 char const *packet, int packet_size)
3147 {
3148 struct gdb_connection *gdb_connection = connection->priv;
3149 int result;
3150
3151 struct target *target = get_target_from_connection(connection);
3152
3153 if (strncmp(packet, "vCont", 5) == 0) {
3154 bool handled;
3155
3156 packet += 5;
3157 packet_size -= 5;
3158
3159 handled = gdb_handle_vcont_packet(connection, packet, packet_size);
3160 if (!handled)
3161 gdb_put_packet(connection, "", 0);
3162
3163 return ERROR_OK;
3164 }
3165
3166 if (strncmp(packet, "vRun", 4) == 0) {
3167 bool handled;
3168
3169 handled = gdb_handle_vrun_packet(connection, packet, packet_size);
3170 if (!handled)
3171 gdb_put_packet(connection, "", 0);
3172
3173 return ERROR_OK;
3174 }
3175
3176 /* if flash programming disabled - send a empty reply */
3177
3178 if (gdb_flash_program == 0) {
3179 gdb_put_packet(connection, "", 0);
3180 return ERROR_OK;
3181 }
3182
3183 if (strncmp(packet, "vFlashErase:", 12) == 0) {
3184 unsigned long addr;
3185 unsigned long length;
3186
3187 char const *parse = packet + 12;
3188 if (*parse == '\0') {
3189 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3190 return ERROR_SERVER_REMOTE_CLOSED;
3191 }
3192
3193 addr = strtoul(parse, (char **)&parse, 16);
3194
3195 if (*(parse++) != ',' || *parse == '\0') {
3196 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3197 return ERROR_SERVER_REMOTE_CLOSED;
3198 }
3199
3200 length = strtoul(parse, (char **)&parse, 16);
3201
3202 if (*parse != '\0') {
3203 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3204 return ERROR_SERVER_REMOTE_CLOSED;
3205 }
3206
3207 /* assume all sectors need erasing - stops any problems
3208 * when flash_write is called multiple times */
3209 flash_set_dirty();
3210
3211 /* perform any target specific operations before the erase */
3212 target_call_event_callbacks(target,
3213 TARGET_EVENT_GDB_FLASH_ERASE_START);
3214
3215 /* vFlashErase:addr,length messages require region start and
3216 * end to be "block" aligned ... if padding is ever needed,
3217 * GDB will have become dangerously confused.
3218 */
3219 result = flash_erase_address_range(target, false, addr,
3220 length);
3221
3222 /* perform any target specific operations after the erase */
3223 target_call_event_callbacks(target,
3224 TARGET_EVENT_GDB_FLASH_ERASE_END);
3225
3226 /* perform erase */
3227 if (result != ERROR_OK) {
3228 /* GDB doesn't evaluate the actual error number returned,
3229 * treat a failed erase as an I/O error
3230 */
3231 gdb_send_error(connection, EIO);
3232 LOG_ERROR("flash_erase returned %i", result);
3233 } else
3234 gdb_put_packet(connection, "OK", 2);
3235
3236 return ERROR_OK;
3237 }
3238
3239 if (strncmp(packet, "vFlashWrite:", 12) == 0) {
3240 int retval;
3241 unsigned long addr;
3242 unsigned long length;
3243 char const *parse = packet + 12;
3244
3245 if (*parse == '\0') {
3246 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3247 return ERROR_SERVER_REMOTE_CLOSED;
3248 }
3249 addr = strtoul(parse, (char **)&parse, 16);
3250 if (*(parse++) != ':') {
3251 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3252 return ERROR_SERVER_REMOTE_CLOSED;
3253 }
3254 length = packet_size - (parse - packet);
3255
3256 /* create a new image if there isn't already one */
3257 if (!gdb_connection->vflash_image) {
3258 gdb_connection->vflash_image = malloc(sizeof(struct image));
3259 image_open(gdb_connection->vflash_image, "", "build");
3260 }
3261
3262 /* create new section with content from packet buffer */
3263 retval = image_add_section(gdb_connection->vflash_image,
3264 addr, length, 0x0, (uint8_t const *)parse);
3265 if (retval != ERROR_OK)
3266 return retval;
3267
3268 gdb_put_packet(connection, "OK", 2);
3269
3270 return ERROR_OK;
3271 }
3272
3273 if (strncmp(packet, "vFlashDone", 10) == 0) {
3274 uint32_t written;
3275
3276 /* process the flashing buffer. No need to erase as GDB
3277 * always issues a vFlashErase first. */
3278 target_call_event_callbacks(target,
3279 TARGET_EVENT_GDB_FLASH_WRITE_START);
3280 result = flash_write(target, gdb_connection->vflash_image,
3281 &written, false);
3282 target_call_event_callbacks(target,
3283 TARGET_EVENT_GDB_FLASH_WRITE_END);
3284 if (result != ERROR_OK) {
3285 if (result == ERROR_FLASH_DST_OUT_OF_BANK)
3286 gdb_put_packet(connection, "E.memtype", 9);
3287 else
3288 gdb_send_error(connection, EIO);
3289 } else {
3290 LOG_DEBUG("wrote %u bytes from vFlash image to flash", (unsigned)written);
3291 gdb_put_packet(connection, "OK", 2);
3292 }
3293
3294 image_close(gdb_connection->vflash_image);
3295 free(gdb_connection->vflash_image);
3296 gdb_connection->vflash_image = NULL;
3297
3298 return ERROR_OK;
3299 }
3300
3301 gdb_put_packet(connection, "", 0);
3302 return ERROR_OK;
3303 }
3304
3305 static int gdb_detach(struct connection *connection)
3306 {
3307 /*
3308 * Only reply "OK" to GDB
3309 * it will close the connection and this will trigger a call to
3310 * gdb_connection_closed() that will in turn trigger the event
3311 * TARGET_EVENT_GDB_DETACH
3312 */
3313 return gdb_put_packet(connection, "OK", 2);
3314 }
3315
3316 /* The format of 'F' response packet is
3317 * Fretcode,errno,Ctrl-C flag;call-specific attachment
3318 */
3319 static int gdb_fileio_response_packet(struct connection *connection,
3320 char const *packet, int packet_size)
3321 {
3322 struct target *target = get_target_from_connection(connection);
3323 char *separator;
3324 char *parsing_point;
3325 int fileio_retcode = strtoul(packet + 1, &separator, 16);
3326 int fileio_errno = 0;
3327 bool fileio_ctrl_c = false;
3328 int retval;
3329
3330 LOG_DEBUG("-");
3331
3332 if (*separator == ',') {
3333 parsing_point = separator + 1;
3334 fileio_errno = strtoul(parsing_point, &separator, 16);
3335 if (*separator == ',') {
3336 if (*(separator + 1) == 'C') {
3337 /* TODO: process ctrl-c */
3338 fileio_ctrl_c = true;
3339 }
3340 }
3341 }
3342
3343 LOG_DEBUG("File-I/O response, retcode: 0x%x, errno: 0x%x, ctrl-c: %s",
3344 fileio_retcode, fileio_errno, fileio_ctrl_c ? "true" : "false");
3345
3346 retval = target_gdb_fileio_end(target, fileio_retcode, fileio_errno, fileio_ctrl_c);
3347 if (retval != ERROR_OK)
3348 return ERROR_FAIL;
3349
3350 /* After File-I/O ends, keep continue or step */
3351 if (gdb_running_type == 'c')
3352 retval = target_resume(target, 1, 0x0, 0, 0);
3353 else if (gdb_running_type == 's')
3354 retval = target_step(target, 1, 0x0, 0);
3355 else
3356 retval = ERROR_FAIL;
3357
3358 if (retval != ERROR_OK)
3359 return ERROR_FAIL;
3360
3361 return ERROR_OK;
3362 }
3363
3364 static void gdb_log_callback(void *priv, const char *file, unsigned line,
3365 const char *function, const char *string)
3366 {
3367 struct connection *connection = priv;
3368 struct gdb_connection *gdb_con = connection->priv;
3369
3370 if (gdb_con->busy) {
3371 /* do not reply this using the O packet */
3372 return;
3373 }
3374
3375 gdb_output_con(connection, string);
3376 }
3377
3378 static void gdb_sig_halted(struct connection *connection)
3379 {
3380 char sig_reply[4];
3381 snprintf(sig_reply, 4, "T%2.2x", 2);
3382 gdb_put_packet(connection, sig_reply, 3);
3383 }
3384
3385 static int gdb_input_inner(struct connection *connection)
3386 {
3387 /* Do not allocate this on the stack */
3388 static char gdb_packet_buffer[GDB_BUFFER_SIZE + 1]; /* Extra byte for null-termination */
3389
3390 struct target *target;
3391 char const *packet = gdb_packet_buffer;
3392 int packet_size;
3393 int retval;
3394 struct gdb_connection *gdb_con = connection->priv;
3395 static bool warn_use_ext;
3396
3397 target = get_target_from_connection(connection);
3398
3399 /* drain input buffer. If one of the packets fail, then an error
3400 * packet is replied, if applicable.
3401 *
3402 * This loop will terminate and the error code is returned.
3403 *
3404 * The calling fn will check if this error is something that
3405 * can be recovered from, or if the connection must be closed.
3406 *
3407 * If the error is recoverable, this fn is called again to
3408 * drain the rest of the buffer.
3409 */
3410 do {
3411 packet_size = GDB_BUFFER_SIZE;
3412 retval = gdb_get_packet(connection, gdb_packet_buffer, &packet_size);
3413 if (retval != ERROR_OK)
3414 return retval;
3415
3416 /* terminate with zero */
3417 gdb_packet_buffer[packet_size] = '\0';
3418
3419 gdb_log_incoming_packet(gdb_packet_buffer);
3420
3421 if (packet_size > 0) {
3422 retval = ERROR_OK;
3423 switch (packet[0]) {
3424 case 'T': /* Is thread alive? */
3425 gdb_thread_packet(connection, packet, packet_size);
3426 break;
3427 case 'H': /* Set current thread ( 'c' for step and continue,
3428 * 'g' for all other operations ) */
3429 gdb_thread_packet(connection, packet, packet_size);
3430 break;
3431 case 'q':
3432 case 'Q':
3433 retval = gdb_thread_packet(connection, packet, packet_size);
3434 if (retval == GDB_THREAD_PACKET_NOT_CONSUMED)
3435 retval = gdb_query_packet(connection, packet, packet_size);
3436 break;
3437 case 'g':
3438 retval = gdb_get_registers_packet(connection, packet, packet_size);
3439 break;
3440 case 'G':
3441 retval = gdb_set_registers_packet(connection, packet, packet_size);
3442 break;
3443 case 'p':
3444 retval = gdb_get_register_packet(connection, packet, packet_size);
3445 break;
3446 case 'P':
3447 retval = gdb_set_register_packet(connection, packet, packet_size);
3448 break;
3449 case 'm':
3450 retval = gdb_read_memory_packet(connection, packet, packet_size);
3451 break;
3452 case 'M':
3453 retval = gdb_write_memory_packet(connection, packet, packet_size);
3454 break;
3455 case 'z':
3456 case 'Z':
3457 retval = gdb_breakpoint_watchpoint_packet(connection, packet, packet_size);
3458 break;
3459 case '?':
3460 gdb_last_signal_packet(connection, packet, packet_size);
3461 /* '?' is sent after the eventual '!' */
3462 if (!warn_use_ext && !gdb_con->extended_protocol) {
3463 warn_use_ext = true;
3464 LOG_WARNING("Prefer GDB command \"target extended-remote :%s\" instead of \"target remote :%s\"",
3465 connection->service->port, connection->service->port);
3466 }
3467 break;
3468 case 'c':
3469 case 's':
3470 {
3471 gdb_thread_packet(connection, packet, packet_size);
3472 log_add_callback(gdb_log_callback, connection);
3473
3474 if (gdb_con->mem_write_error) {
3475 LOG_ERROR("Memory write failure!");
3476
3477 /* now that we have reported the memory write error,
3478 * we can clear the condition */
3479 gdb_con->mem_write_error = false;
3480 }
3481
3482 bool nostep = false;
3483 bool already_running = false;
3484 if (target->state == TARGET_RUNNING) {
3485 LOG_WARNING("WARNING! The target is already running. "
3486 "All changes GDB did to registers will be discarded! "
3487 "Waiting for target to halt.");
3488 already_running = true;
3489 } else if (target->state != TARGET_HALTED) {
3490 LOG_WARNING("The target is not in the halted nor running stated, "
3491 "stepi/continue ignored.");
3492 nostep = true;
3493 } else if ((packet[0] == 's') && gdb_con->sync) {
3494 /* Hmm..... when you issue a continue in GDB, then a "stepi" is
3495 * sent by GDB first to OpenOCD, thus defeating the check to
3496 * make only the single stepping have the sync feature...
3497 */
3498 nostep = true;
3499 LOG_DEBUG("stepi ignored. GDB will now fetch the register state "
3500 "from the target.");
3501 }
3502 gdb_con->sync = false;
3503
3504 if (!already_running && nostep) {
3505 /* Either the target isn't in the halted state, then we can't
3506 * step/continue. This might be early setup, etc.
3507 *
3508 * Or we want to allow GDB to pick up a fresh set of
3509 * register values without modifying the target state.
3510 *
3511 */
3512 gdb_sig_halted(connection);
3513
3514 /* stop forwarding log packets! */
3515 log_remove_callback(gdb_log_callback, connection);
3516 } else {
3517 /* We're running/stepping, in which case we can
3518 * forward log output until the target is halted
3519 */
3520 gdb_con->frontend_state = TARGET_RUNNING;
3521 target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
3522
3523 if (!already_running) {
3524 /* Here we don't want packet processing to stop even if this fails,
3525 * so we use a local variable instead of retval. */
3526 retval = gdb_step_continue_packet(connection, packet, packet_size);
3527 if (retval != ERROR_OK) {
3528 /* we'll never receive a halted
3529 * condition... issue a false one..
3530 */
3531 gdb_frontend_halted(target, connection);
3532 }
3533 }
3534 }
3535 }
3536 break;
3537 case 'v':
3538 retval = gdb_v_packet(connection, packet, packet_size);
3539 break;
3540 case 'D':
3541 retval = gdb_detach(connection);
3542 break;
3543 case 'X':
3544 retval = gdb_write_memory_binary_packet(connection, packet, packet_size);
3545 if (retval != ERROR_OK)
3546 return retval;
3547 break;
3548 case 'k':
3549 if (gdb_con->extended_protocol) {
3550 gdb_con->attached = false;
3551 break;
3552 }
3553 gdb_put_packet(connection, "OK", 2);
3554 return ERROR_SERVER_REMOTE_CLOSED;
3555 case '!':
3556 /* handle extended remote protocol */
3557 gdb_con->extended_protocol = true;
3558 gdb_put_packet(connection, "OK", 2);
3559 break;
3560 case 'R':
3561 /* handle extended restart packet */
3562 gdb_restart_inferior(connection, packet, packet_size);
3563 break;
3564
3565 case 'j':
3566 /* packet supported only by smp target i.e cortex_a.c*/
3567 /* handle smp packet replying coreid played to gbd */
3568 gdb_read_smp_packet(connection, packet, packet_size);
3569 break;
3570
3571 case 'J':
3572 /* packet supported only by smp target i.e cortex_a.c */
3573 /* handle smp packet setting coreid to be played at next
3574 * resume to gdb */
3575 gdb_write_smp_packet(connection, packet, packet_size);
3576 break;
3577
3578 case 'F':
3579 /* File-I/O extension */
3580 /* After gdb uses host-side syscall to complete target file
3581 * I/O, gdb sends host-side syscall return value to target
3582 * by 'F' packet.
3583 * The format of 'F' response packet is
3584 * Fretcode,errno,Ctrl-C flag;call-specific attachment
3585 */
3586 gdb_con->frontend_state = TARGET_RUNNING;
3587 log_add_callback(gdb_log_callback, connection);
3588 gdb_fileio_response_packet(connection, packet, packet_size);
3589 break;
3590
3591 default:
3592 /* ignore unknown packets */
3593 LOG_DEBUG("ignoring 0x%2.2x packet", packet[0]);
3594 gdb_put_packet(connection, "", 0);
3595 break;
3596 }
3597
3598 /* if a packet handler returned an error, exit input loop */
3599 if (retval != ERROR_OK)
3600 return retval;
3601 }
3602
3603 if (gdb_con->ctrl_c) {
3604 if (target->state == TARGET_RUNNING) {
3605 struct target *t = target;
3606 if (target->rtos)
3607 target->rtos->gdb_target_for_threadid(connection, target->rtos->current_threadid, &t);
3608 retval = target_halt(t);
3609 if (retval == ERROR_OK)
3610 retval = target_poll(t);
3611 if (retval != ERROR_OK)
3612 target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
3613 gdb_con->ctrl_c = false;
3614 } else {
3615 LOG_INFO("The target is not running when halt was requested, stopping GDB.");
3616 target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
3617 }
3618 }
3619
3620 } while (gdb_con->buf_cnt > 0);
3621
3622 return ERROR_OK;
3623 }
3624
3625 static int gdb_input(struct connection *connection)
3626 {
3627 int retval = gdb_input_inner(connection);
3628 struct gdb_connection *gdb_con = connection->priv;
3629 if (retval == ERROR_SERVER_REMOTE_CLOSED)
3630 return retval;
3631
3632 /* logging does not propagate the error, yet can set the gdb_con->closed flag */
3633 if (gdb_con->closed)
3634 return ERROR_SERVER_REMOTE_CLOSED;
3635
3636 /* we'll recover from any other errors(e.g. temporary timeouts, etc.) */
3637 return ERROR_OK;
3638 }
3639
3640 static int gdb_target_start(struct target *target, const char *port)
3641 {
3642 struct gdb_service *gdb_service;
3643 int ret;
3644 gdb_service = malloc(sizeof(struct gdb_service));
3645
3646 if (!gdb_service)
3647 return -ENOMEM;
3648
3649 LOG_INFO("starting gdb server for %s on %s", target_name(target), port);
3650
3651 gdb_service->target = target;
3652 gdb_service->core[0] = -1;
3653 gdb_service->core[1] = -1;
3654 target->gdb_service = gdb_service;
3655
3656 ret = add_service("gdb",
3657 port, target->gdb_max_connections, &gdb_new_connection, &gdb_input,
3658 &gdb_connection_closed, gdb_service);
3659 /* initialize all targets gdb service with the same pointer */
3660 {
3661 struct target_list *head;
3662 struct target *curr;
3663 head = target->head;
3664 while (head) {
3665 curr = head->target;
3666 if (curr != target)
3667 curr->gdb_service = gdb_service;
3668 head = head->next;
3669 }
3670 }
3671 return ret;
3672 }
3673
3674 static int gdb_target_add_one(struct target *target)
3675 {
3676 /* one gdb instance per smp list */
3677 if ((target->smp) && (target->gdb_service))
3678 return ERROR_OK;
3679
3680 /* skip targets that cannot handle a gdb connections (e.g. mem_ap) */
3681 if (!target_supports_gdb_connection(target)) {
3682 LOG_DEBUG("skip gdb server for target %s", target_name(target));
3683 return ERROR_OK;
3684 }
3685
3686 if (target->gdb_port_override) {
3687 if (strcmp(target->gdb_port_override, "disabled") == 0) {
3688 LOG_INFO("gdb port disabled");
3689 return ERROR_OK;
3690 }
3691 return gdb_target_start(target, target->gdb_port_override);
3692 }
3693
3694 if (strcmp(gdb_port, "disabled") == 0) {
3695 LOG_INFO("gdb port disabled");
3696 return ERROR_OK;
3697 }
3698
3699 int retval = gdb_target_start(target, gdb_port_next);
3700 if (retval == ERROR_OK) {
3701 /* save the port number so can be queried with
3702 * $target_name cget -gdb-port
3703 */
3704 target->gdb_port_override = strdup(gdb_port_next);
3705
3706 long portnumber;
3707 /* If we can parse the port number
3708 * then we increment the port number for the next target.
3709 */
3710 char *end;
3711 portnumber = strtol(gdb_port_next, &end, 0);
3712 if (!*end) {
3713 if (parse_long(gdb_port_next, &portnumber) == ERROR_OK) {
3714 free(gdb_port_next);
3715 if (portnumber) {
3716 gdb_port_next = alloc_printf("%ld", portnumber+1);
3717 } else {
3718 /* Don't increment if gdb_port is 0, since we're just
3719 * trying to allocate an unused port. */
3720 gdb_port_next = strdup("0");
3721 }
3722 }
3723 }
3724 }
3725 return retval;
3726 }
3727
3728 int gdb_target_add_all(struct target *target)
3729 {
3730 if (!target) {
3731 LOG_WARNING("gdb services need one or more targets defined");
3732 return ERROR_OK;
3733 }
3734
3735 while (target) {
3736 int retval = gdb_target_add_one(target);
3737 if (retval != ERROR_OK)
3738 return retval;
3739
3740 target = target->next;
3741 }
3742
3743 return ERROR_OK;
3744 }
3745
3746 COMMAND_HANDLER(handle_gdb_sync_command)
3747 {
3748 if (CMD_ARGC != 0)
3749 return ERROR_COMMAND_SYNTAX_ERROR;
3750
3751 if (!current_gdb_connection) {
3752 command_print(CMD,
3753 "gdb_sync command can only be run from within gdb using \"monitor gdb_sync\"");
3754 return ERROR_FAIL;
3755 }
3756
3757 current_gdb_connection->sync = true;
3758
3759 return ERROR_OK;
3760 }
3761
3762 /* daemon configuration command gdb_port */
3763 COMMAND_HANDLER(handle_gdb_port_command)
3764 {
3765 int retval = CALL_COMMAND_HANDLER(server_pipe_command, &gdb_port);
3766 if (retval == ERROR_OK) {
3767 free(gdb_port_next);
3768 gdb_port_next = strdup(gdb_port);
3769 }
3770 return retval;
3771 }
3772
3773 COMMAND_HANDLER(handle_gdb_memory_map_command)
3774 {
3775 if (CMD_ARGC != 1)
3776 return ERROR_COMMAND_SYNTAX_ERROR;
3777
3778 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_use_memory_map);
3779 return ERROR_OK;
3780 }
3781
3782 COMMAND_HANDLER(handle_gdb_flash_program_command)
3783 {
3784 if (CMD_ARGC != 1)
3785 return ERROR_COMMAND_SYNTAX_ERROR;
3786
3787 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_flash_program);
3788 return ERROR_OK;
3789 }
3790
3791 COMMAND_HANDLER(handle_gdb_report_data_abort_command)
3792 {
3793 if (CMD_ARGC != 1)
3794 return ERROR_COMMAND_SYNTAX_ERROR;
3795
3796 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_report_data_abort);
3797 return ERROR_OK;
3798 }
3799
3800 COMMAND_HANDLER(handle_gdb_report_register_access_error)
3801 {
3802 if (CMD_ARGC != 1)
3803 return ERROR_COMMAND_SYNTAX_ERROR;
3804
3805 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_report_register_access_error);
3806 return ERROR_OK;
3807 }
3808
3809 /* gdb_breakpoint_override */
3810 COMMAND_HANDLER(handle_gdb_breakpoint_override_command)
3811 {
3812 if (CMD_ARGC == 0) {
3813 /* nothing */
3814 } else if (CMD_ARGC == 1) {
3815 gdb_breakpoint_override = 1;
3816 if (strcmp(CMD_ARGV[0], "hard") == 0)
3817 gdb_breakpoint_override_type = BKPT_HARD;
3818 else if (strcmp(CMD_ARGV[0], "soft") == 0)
3819 gdb_breakpoint_override_type = BKPT_SOFT;
3820 else if (strcmp(CMD_ARGV[0], "disable") == 0)
3821 gdb_breakpoint_override = 0;
3822 } else
3823 return ERROR_COMMAND_SYNTAX_ERROR;
3824 if (gdb_breakpoint_override)
3825 LOG_USER("force %s breakpoints",
3826 (gdb_breakpoint_override_type == BKPT_HARD) ? "hard" : "soft");
3827 else
3828 LOG_USER("breakpoint type is not overridden");
3829
3830 return ERROR_OK;
3831 }
3832
3833 COMMAND_HANDLER(handle_gdb_target_description_command)
3834 {
3835 if (CMD_ARGC != 1)
3836 return ERROR_COMMAND_SYNTAX_ERROR;
3837
3838 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_use_target_description);
3839 return ERROR_OK;
3840 }
3841
3842 COMMAND_HANDLER(handle_gdb_save_tdesc_command)
3843 {
3844 char *tdesc;
3845 uint32_t tdesc_length;
3846 struct target *target = get_current_target(CMD_CTX);
3847
3848 int retval = gdb_generate_target_description(target, &tdesc);
3849 if (retval != ERROR_OK) {
3850 LOG_ERROR("Unable to Generate Target Description");
3851 return ERROR_FAIL;
3852 }
3853
3854 tdesc_length = strlen(tdesc);
3855
3856 struct fileio *fileio;
3857 size_t size_written;
3858
3859 char *tdesc_filename = alloc_printf("%s.xml", target_type_name(target));
3860 if (!tdesc_filename) {
3861 retval = ERROR_FAIL;
3862 goto out;
3863 }
3864
3865 retval = fileio_open(&fileio, tdesc_filename, FILEIO_WRITE, FILEIO_TEXT);
3866
3867 if (retval != ERROR_OK) {
3868 LOG_ERROR("Can't open %s for writing", tdesc_filename);
3869 goto out;
3870 }
3871
3872 retval = fileio_write(fileio, tdesc_length, tdesc, &size_written);
3873
3874 fileio_close(fileio);
3875
3876 if (retval != ERROR_OK)
3877 LOG_ERROR("Error while writing the tdesc file");
3878
3879 out:
3880 free(tdesc_filename);
3881 free(tdesc);
3882
3883 return retval;
3884 }
3885
3886 static const struct command_registration gdb_command_handlers[] = {
3887 {
3888 .name = "gdb_sync",
3889 .handler = handle_gdb_sync_command,
3890 .mode = COMMAND_ANY,
3891 .help = "next stepi will return immediately allowing "
3892 "GDB to fetch register state without affecting "
3893 "target state",
3894 .usage = ""
3895 },
3896 {
3897 .name = "gdb_port",
3898 .handler = handle_gdb_port_command,
3899 .mode = COMMAND_CONFIG,
3900 .help = "Normally gdb listens to a TCP/IP port. Each subsequent GDB "
3901 "server listens for the next port number after the "
3902 "base port number specified. "
3903 "No arguments reports GDB port. \"pipe\" means listen to stdin "
3904 "output to stdout, an integer is base port number, \"disabled\" disables "
3905 "port. Any other string is are interpreted as named pipe to listen to. "
3906 "Output pipe is the same name as input pipe, but with 'o' appended.",
3907 .usage = "[port_num]",
3908 },
3909 {
3910 .name = "gdb_memory_map",
3911 .handler = handle_gdb_memory_map_command,
3912 .mode = COMMAND_CONFIG,
3913 .help = "enable or disable memory map",
3914 .usage = "('enable'|'disable')"
3915 },
3916 {
3917 .name = "gdb_flash_program",
3918 .handler = handle_gdb_flash_program_command,
3919 .mode = COMMAND_CONFIG,
3920 .help = "enable or disable flash program",
3921 .usage = "('enable'|'disable')"
3922 },
3923 {
3924 .name = "gdb_report_data_abort",
3925 .handler = handle_gdb_report_data_abort_command,
3926 .mode = COMMAND_CONFIG,
3927 .help = "enable or disable reporting data aborts",
3928 .usage = "('enable'|'disable')"
3929 },
3930 {
3931 .name = "gdb_report_register_access_error",
3932 .handler = handle_gdb_report_register_access_error,
3933 .mode = COMMAND_CONFIG,
3934 .help = "enable or disable reporting register access errors",
3935 .usage = "('enable'|'disable')"
3936 },
3937 {
3938 .name = "gdb_breakpoint_override",
3939 .handler = handle_gdb_breakpoint_override_command,
3940 .mode = COMMAND_ANY,
3941 .help = "Display or specify type of breakpoint "
3942 "to be used by gdb 'break' commands.",
3943 .usage = "('hard'|'soft'|'disable')"
3944 },
3945 {
3946 .name = "gdb_target_description",
3947 .handler = handle_gdb_target_description_command,
3948 .mode = COMMAND_CONFIG,
3949 .help = "enable or disable target description",
3950 .usage = "('enable'|'disable')"
3951 },
3952 {
3953 .name = "gdb_save_tdesc",
3954 .handler = handle_gdb_save_tdesc_command,
3955 .mode = COMMAND_EXEC,
3956 .help = "Save the target description file",
3957 .usage = "",
3958 },
3959 COMMAND_REGISTRATION_DONE
3960 };
3961
3962 int gdb_register_commands(struct command_context *cmd_ctx)
3963 {
3964 gdb_port = strdup("3333");
3965 gdb_port_next = strdup("3333");
3966 return register_commands(cmd_ctx, NULL, gdb_command_handlers);
3967 }
3968
3969 void gdb_service_free(void)
3970 {
3971 free(gdb_port);
3972 free(gdb_port_next);
3973 }

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)