gdb_server: check target examined while combining reg list
[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 struct reg **local_list = malloc(combined_allocated * sizeof(struct reg *));
2276 if (!local_list) {
2277 LOG_ERROR("malloc(%zu) failed", combined_allocated * sizeof(struct reg *));
2278 return ERROR_FAIL;
2279 }
2280 unsigned int local_list_size = 0;
2281
2282 struct target_list *head;
2283 foreach_smp_target(head, target->smp_targets) {
2284 if (!target_was_examined(head->target))
2285 continue;
2286
2287 struct reg **reg_list = NULL;
2288 int reg_list_size;
2289 int result = target_get_gdb_reg_list_noread(head->target, &reg_list,
2290 &reg_list_size, reg_class);
2291 if (result != ERROR_OK) {
2292 free(local_list);
2293 return result;
2294 }
2295 for (int i = 0; i < reg_list_size; i++) {
2296 bool found = false;
2297 struct reg *a = reg_list[i];
2298 if (a->exist) {
2299 /* Nested loop makes this O(n^2), but this entire function with
2300 * 5 RISC-V targets takes just 2ms on my computer. Fast enough
2301 * for me. */
2302 for (unsigned int j = 0; j < local_list_size; j++) {
2303 struct reg *b = local_list[j];
2304 if (!strcmp(a->name, b->name)) {
2305 found = true;
2306 if (a->size != b->size) {
2307 LOG_ERROR("SMP register %s is %d bits on one "
2308 "target, but %d bits on another target.",
2309 a->name, a->size, b->size);
2310 free(reg_list);
2311 free(local_list);
2312 return ERROR_FAIL;
2313 }
2314 break;
2315 }
2316 }
2317 if (!found) {
2318 LOG_DEBUG("[%s] %s not found in combined list", target_name(target), a->name);
2319 if (local_list_size >= combined_allocated) {
2320 combined_allocated *= 2;
2321 local_list = realloc(local_list, combined_allocated * sizeof(struct reg *));
2322 if (!local_list) {
2323 LOG_ERROR("realloc(%zu) failed", combined_allocated * sizeof(struct reg *));
2324 return ERROR_FAIL;
2325 }
2326 }
2327 local_list[local_list_size] = a;
2328 local_list_size++;
2329 }
2330 }
2331 }
2332 free(reg_list);
2333 }
2334
2335 if (local_list_size == 0) {
2336 LOG_ERROR("Unable to get register list");
2337 free(local_list);
2338 return ERROR_FAIL;
2339 }
2340
2341 /* Now warn the user about any registers that weren't found in every target. */
2342 foreach_smp_target(head, target->smp_targets) {
2343 if (!target_was_examined(head->target))
2344 continue;
2345
2346 struct reg **reg_list = NULL;
2347 int reg_list_size;
2348 int result = target_get_gdb_reg_list_noread(head->target, &reg_list,
2349 &reg_list_size, reg_class);
2350 if (result != ERROR_OK) {
2351 free(local_list);
2352 return result;
2353 }
2354 for (unsigned int i = 0; i < local_list_size; i++) {
2355 bool found = false;
2356 struct reg *a = local_list[i];
2357 for (int j = 0; j < reg_list_size; j++) {
2358 struct reg *b = reg_list[j];
2359 if (b->exist && !strcmp(a->name, b->name)) {
2360 found = true;
2361 break;
2362 }
2363 }
2364 if (!found) {
2365 LOG_WARNING("Register %s does not exist in %s, which is part of an SMP group where "
2366 "this register does exist.",
2367 a->name, target_name(head->target));
2368 }
2369 }
2370 free(reg_list);
2371 }
2372
2373 *combined_list = local_list;
2374 *combined_list_size = local_list_size;
2375 return ERROR_OK;
2376 }
2377
2378 static int gdb_generate_target_description(struct target *target, char **tdesc_out)
2379 {
2380 int retval = ERROR_OK;
2381 struct reg **reg_list = NULL;
2382 int reg_list_size;
2383 char const *architecture;
2384 char const **features = NULL;
2385 int feature_list_size = 0;
2386 char *tdesc = NULL;
2387 int pos = 0;
2388 int size = 0;
2389
2390
2391 retval = smp_reg_list_noread(target, &reg_list, &reg_list_size,
2392 REG_CLASS_ALL);
2393
2394 if (retval != ERROR_OK) {
2395 LOG_ERROR("get register list failed");
2396 retval = ERROR_FAIL;
2397 goto error;
2398 }
2399
2400 if (reg_list_size <= 0) {
2401 LOG_ERROR("get register list failed");
2402 retval = ERROR_FAIL;
2403 goto error;
2404 }
2405
2406 /* Get a list of available target registers features */
2407 retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size);
2408 if (retval != ERROR_OK) {
2409 LOG_ERROR("Can't get the registers feature list");
2410 retval = ERROR_FAIL;
2411 goto error;
2412 }
2413
2414 /* If we found some features associated with registers, create sections */
2415 int current_feature = 0;
2416
2417 xml_printf(&retval, &tdesc, &pos, &size,
2418 "<?xml version=\"1.0\"?>\n"
2419 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">\n"
2420 "<target version=\"1.0\">\n");
2421
2422 /* generate architecture element if supported by target */
2423 architecture = target_get_gdb_arch(target);
2424 if (architecture)
2425 xml_printf(&retval, &tdesc, &pos, &size,
2426 "<architecture>%s</architecture>\n", architecture);
2427
2428 /* generate target description according to register list */
2429 if (features) {
2430 while (features[current_feature]) {
2431 char const **arch_defined_types = NULL;
2432 int num_arch_defined_types = 0;
2433
2434 arch_defined_types = calloc(1, sizeof(char *));
2435 xml_printf(&retval, &tdesc, &pos, &size,
2436 "<feature name=\"%s\">\n",
2437 features[current_feature]);
2438
2439 int i;
2440 for (i = 0; i < reg_list_size; i++) {
2441
2442 if (reg_list[i]->exist == false || reg_list[i]->hidden)
2443 continue;
2444
2445 if (strcmp(reg_list[i]->feature->name, features[current_feature]))
2446 continue;
2447
2448 const char *type_str;
2449 if (reg_list[i]->reg_data_type) {
2450 if (reg_list[i]->reg_data_type->type == REG_TYPE_ARCH_DEFINED) {
2451 /* generate <type... first, if there are architecture-defined types. */
2452 if (lookup_add_arch_defined_types(&arch_defined_types,
2453 reg_list[i]->reg_data_type->id,
2454 &num_arch_defined_types))
2455 gdb_generate_reg_type_description(target, &tdesc, &pos, &size,
2456 reg_list[i]->reg_data_type,
2457 &arch_defined_types,
2458 &num_arch_defined_types);
2459
2460 type_str = reg_list[i]->reg_data_type->id;
2461 } else {
2462 /* predefined type */
2463 type_str = gdb_get_reg_type_name(
2464 reg_list[i]->reg_data_type->type);
2465 }
2466 } else {
2467 /* Default type is "int" */
2468 type_str = "int";
2469 }
2470
2471 xml_printf(&retval, &tdesc, &pos, &size,
2472 "<reg name=\"%s\"", reg_list[i]->name);
2473 xml_printf(&retval, &tdesc, &pos, &size,
2474 " bitsize=\"%" PRIu32 "\"", reg_list[i]->size);
2475 xml_printf(&retval, &tdesc, &pos, &size,
2476 " regnum=\"%" PRIu32 "\"", reg_list[i]->number);
2477 if (reg_list[i]->caller_save)
2478 xml_printf(&retval, &tdesc, &pos, &size,
2479 " save-restore=\"yes\"");
2480 else
2481 xml_printf(&retval, &tdesc, &pos, &size,
2482 " save-restore=\"no\"");
2483
2484 xml_printf(&retval, &tdesc, &pos, &size,
2485 " type=\"%s\"", type_str);
2486
2487 if (reg_list[i]->group)
2488 xml_printf(&retval, &tdesc, &pos, &size,
2489 " group=\"%s\"", reg_list[i]->group);
2490
2491 xml_printf(&retval, &tdesc, &pos, &size,
2492 "/>\n");
2493 }
2494
2495 xml_printf(&retval, &tdesc, &pos, &size,
2496 "</feature>\n");
2497
2498 current_feature++;
2499 free(arch_defined_types);
2500 }
2501 }
2502
2503 xml_printf(&retval, &tdesc, &pos, &size,
2504 "</target>\n");
2505
2506 error:
2507 free(features);
2508 free(reg_list);
2509
2510 if (retval == ERROR_OK)
2511 *tdesc_out = tdesc;
2512 else
2513 free(tdesc);
2514
2515 return retval;
2516 }
2517
2518 static int gdb_get_target_description_chunk(struct target *target, struct target_desc_format *target_desc,
2519 char **chunk, int32_t offset, uint32_t length)
2520 {
2521 if (!target_desc) {
2522 LOG_ERROR("Unable to Generate Target Description");
2523 return ERROR_FAIL;
2524 }
2525
2526 char *tdesc = target_desc->tdesc;
2527 uint32_t tdesc_length = target_desc->tdesc_length;
2528
2529 if (!tdesc) {
2530 int retval = gdb_generate_target_description(target, &tdesc);
2531 if (retval != ERROR_OK) {
2532 LOG_ERROR("Unable to Generate Target Description");
2533 return ERROR_FAIL;
2534 }
2535
2536 tdesc_length = strlen(tdesc);
2537 }
2538
2539 char transfer_type;
2540
2541 if (length < (tdesc_length - offset))
2542 transfer_type = 'm';
2543 else
2544 transfer_type = 'l';
2545
2546 *chunk = malloc(length + 2);
2547 if (!*chunk) {
2548 LOG_ERROR("Unable to allocate memory");
2549 return ERROR_FAIL;
2550 }
2551
2552 (*chunk)[0] = transfer_type;
2553 if (transfer_type == 'm') {
2554 strncpy((*chunk) + 1, tdesc + offset, length);
2555 (*chunk)[1 + length] = '\0';
2556 } else {
2557 strncpy((*chunk) + 1, tdesc + offset, tdesc_length - offset);
2558 (*chunk)[1 + (tdesc_length - offset)] = '\0';
2559
2560 /* After gdb-server sends out last chunk, invalidate tdesc. */
2561 free(tdesc);
2562 tdesc = NULL;
2563 tdesc_length = 0;
2564 }
2565
2566 target_desc->tdesc = tdesc;
2567 target_desc->tdesc_length = tdesc_length;
2568
2569 return ERROR_OK;
2570 }
2571
2572 static int gdb_target_description_supported(struct target *target, int *supported)
2573 {
2574 int retval = ERROR_OK;
2575 struct reg **reg_list = NULL;
2576 int reg_list_size = 0;
2577 char const **features = NULL;
2578 int feature_list_size = 0;
2579
2580 char const *architecture = target_get_gdb_arch(target);
2581
2582 retval = target_get_gdb_reg_list_noread(target, &reg_list,
2583 &reg_list_size, REG_CLASS_ALL);
2584 if (retval != ERROR_OK) {
2585 LOG_ERROR("get register list failed");
2586 goto error;
2587 }
2588
2589 if (reg_list_size <= 0) {
2590 LOG_ERROR("get register list failed");
2591 retval = ERROR_FAIL;
2592 goto error;
2593 }
2594
2595 /* Get a list of available target registers features */
2596 retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size);
2597 if (retval != ERROR_OK) {
2598 LOG_ERROR("Can't get the registers feature list");
2599 goto error;
2600 }
2601
2602 if (supported) {
2603 if (architecture || feature_list_size)
2604 *supported = 1;
2605 else
2606 *supported = 0;
2607 }
2608
2609 error:
2610 free(features);
2611
2612 free(reg_list);
2613
2614 return retval;
2615 }
2616
2617 static int gdb_generate_thread_list(struct target *target, char **thread_list_out)
2618 {
2619 struct rtos *rtos = target->rtos;
2620 int retval = ERROR_OK;
2621 char *thread_list = NULL;
2622 int pos = 0;
2623 int size = 0;
2624
2625 xml_printf(&retval, &thread_list, &pos, &size,
2626 "<?xml version=\"1.0\"?>\n"
2627 "<threads>\n");
2628
2629 if (rtos) {
2630 for (int i = 0; i < rtos->thread_count; i++) {
2631 struct thread_detail *thread_detail = &rtos->thread_details[i];
2632
2633 if (!thread_detail->exists)
2634 continue;
2635
2636 if (thread_detail->thread_name_str)
2637 xml_printf(&retval, &thread_list, &pos, &size,
2638 "<thread id=\"%" PRIx64 "\" name=\"%s\">",
2639 thread_detail->threadid,
2640 thread_detail->thread_name_str);
2641 else
2642 xml_printf(&retval, &thread_list, &pos, &size,
2643 "<thread id=\"%" PRIx64 "\">", thread_detail->threadid);
2644
2645 if (thread_detail->thread_name_str)
2646 xml_printf(&retval, &thread_list, &pos, &size,
2647 "Name: %s", thread_detail->thread_name_str);
2648
2649 if (thread_detail->extra_info_str) {
2650 if (thread_detail->thread_name_str)
2651 xml_printf(&retval, &thread_list, &pos, &size,
2652 ", ");
2653 xml_printf(&retval, &thread_list, &pos, &size,
2654 "%s", thread_detail->extra_info_str);
2655 }
2656
2657 xml_printf(&retval, &thread_list, &pos, &size,
2658 "</thread>\n");
2659 }
2660 }
2661
2662 xml_printf(&retval, &thread_list, &pos, &size,
2663 "</threads>\n");
2664
2665 if (retval == ERROR_OK)
2666 *thread_list_out = thread_list;
2667 else
2668 free(thread_list);
2669
2670 return retval;
2671 }
2672
2673 static int gdb_get_thread_list_chunk(struct target *target, char **thread_list,
2674 char **chunk, int32_t offset, uint32_t length)
2675 {
2676 if (!*thread_list) {
2677 int retval = gdb_generate_thread_list(target, thread_list);
2678 if (retval != ERROR_OK) {
2679 LOG_ERROR("Unable to Generate Thread List");
2680 return ERROR_FAIL;
2681 }
2682 }
2683
2684 size_t thread_list_length = strlen(*thread_list);
2685 char transfer_type;
2686
2687 length = MIN(length, thread_list_length - offset);
2688 if (length < (thread_list_length - offset))
2689 transfer_type = 'm';
2690 else
2691 transfer_type = 'l';
2692
2693 *chunk = malloc(length + 2 + 3);
2694 /* Allocating extra 3 bytes prevents false positive valgrind report
2695 * of strlen(chunk) word access:
2696 * Invalid read of size 4
2697 * Address 0x4479934 is 44 bytes inside a block of size 45 alloc'd */
2698 if (!*chunk) {
2699 LOG_ERROR("Unable to allocate memory");
2700 return ERROR_FAIL;
2701 }
2702
2703 (*chunk)[0] = transfer_type;
2704 strncpy((*chunk) + 1, (*thread_list) + offset, length);
2705 (*chunk)[1 + length] = '\0';
2706
2707 /* After gdb-server sends out last chunk, invalidate thread list. */
2708 if (transfer_type == 'l') {
2709 free(*thread_list);
2710 *thread_list = NULL;
2711 }
2712
2713 return ERROR_OK;
2714 }
2715
2716 static int gdb_query_packet(struct connection *connection,
2717 char const *packet, int packet_size)
2718 {
2719 struct command_context *cmd_ctx = connection->cmd_ctx;
2720 struct gdb_connection *gdb_connection = connection->priv;
2721 struct target *target = get_target_from_connection(connection);
2722
2723 if (strncmp(packet, "qRcmd,", 6) == 0) {
2724 if (packet_size > 6) {
2725 char *cmd;
2726 cmd = malloc((packet_size - 6) / 2 + 1);
2727 size_t len = unhexify((uint8_t *)cmd, packet + 6, (packet_size - 6) / 2);
2728 cmd[len] = 0;
2729
2730 /* We want to print all debug output to GDB connection */
2731 log_add_callback(gdb_log_callback, connection);
2732 target_call_timer_callbacks_now();
2733 /* some commands need to know the GDB connection, make note of current
2734 * GDB connection. */
2735 current_gdb_connection = gdb_connection;
2736 command_run_line(cmd_ctx, cmd);
2737 current_gdb_connection = NULL;
2738 target_call_timer_callbacks_now();
2739 log_remove_callback(gdb_log_callback, connection);
2740 free(cmd);
2741 }
2742 gdb_put_packet(connection, "OK", 2);
2743 return ERROR_OK;
2744 } else if (strncmp(packet, "qCRC:", 5) == 0) {
2745 if (packet_size > 5) {
2746 int retval;
2747 char gdb_reply[10];
2748 char *separator;
2749 uint32_t checksum;
2750 target_addr_t addr = 0;
2751 uint32_t len = 0;
2752
2753 /* skip command character */
2754 packet += 5;
2755
2756 addr = strtoull(packet, &separator, 16);
2757
2758 if (*separator != ',') {
2759 LOG_ERROR("incomplete read memory packet received, dropping connection");
2760 return ERROR_SERVER_REMOTE_CLOSED;
2761 }
2762
2763 len = strtoul(separator + 1, NULL, 16);
2764
2765 retval = target_checksum_memory(target, addr, len, &checksum);
2766
2767 if (retval == ERROR_OK) {
2768 snprintf(gdb_reply, 10, "C%8.8" PRIx32 "", checksum);
2769 gdb_put_packet(connection, gdb_reply, 9);
2770 } else {
2771 retval = gdb_error(connection, retval);
2772 if (retval != ERROR_OK)
2773 return retval;
2774 }
2775
2776 return ERROR_OK;
2777 }
2778 } else if (strncmp(packet, "qSupported", 10) == 0) {
2779 /* we currently support packet size and qXfer:memory-map:read (if enabled)
2780 * qXfer:features:read is supported for some targets */
2781 int retval = ERROR_OK;
2782 char *buffer = NULL;
2783 int pos = 0;
2784 int size = 0;
2785 int gdb_target_desc_supported = 0;
2786
2787 /* we need to test that the target supports target descriptions */
2788 retval = gdb_target_description_supported(target, &gdb_target_desc_supported);
2789 if (retval != ERROR_OK) {
2790 LOG_INFO("Failed detecting Target Description Support, disabling");
2791 gdb_target_desc_supported = 0;
2792 }
2793
2794 /* support may be disabled globally */
2795 if (gdb_use_target_description == 0) {
2796 if (gdb_target_desc_supported)
2797 LOG_WARNING("Target Descriptions Supported, but disabled");
2798 gdb_target_desc_supported = 0;
2799 }
2800
2801 xml_printf(&retval,
2802 &buffer,
2803 &pos,
2804 &size,
2805 "PacketSize=%x;qXfer:memory-map:read%c;qXfer:features:read%c;qXfer:threads:read+;QStartNoAckMode+;vContSupported+",
2806 GDB_BUFFER_SIZE,
2807 ((gdb_use_memory_map == 1) && (flash_get_bank_count() > 0)) ? '+' : '-',
2808 (gdb_target_desc_supported == 1) ? '+' : '-');
2809
2810 if (retval != ERROR_OK) {
2811 gdb_send_error(connection, 01);
2812 return ERROR_OK;
2813 }
2814
2815 gdb_put_packet(connection, buffer, strlen(buffer));
2816 free(buffer);
2817
2818 return ERROR_OK;
2819 } else if ((strncmp(packet, "qXfer:memory-map:read::", 23) == 0)
2820 && (flash_get_bank_count() > 0))
2821 return gdb_memory_map(connection, packet, packet_size);
2822 else if (strncmp(packet, "qXfer:features:read:", 20) == 0) {
2823 char *xml = NULL;
2824 int retval = ERROR_OK;
2825
2826 int offset;
2827 unsigned int length;
2828
2829 /* skip command character */
2830 packet += 20;
2831
2832 if (decode_xfer_read(packet, NULL, &offset, &length) < 0) {
2833 gdb_send_error(connection, 01);
2834 return ERROR_OK;
2835 }
2836
2837 /* Target should prepare correct target description for annex.
2838 * The first character of returned xml is 'm' or 'l'. 'm' for
2839 * there are *more* chunks to transfer. 'l' for it is the *last*
2840 * chunk of target description.
2841 */
2842 retval = gdb_get_target_description_chunk(target, &gdb_connection->target_desc,
2843 &xml, offset, length);
2844 if (retval != ERROR_OK) {
2845 gdb_error(connection, retval);
2846 return retval;
2847 }
2848
2849 gdb_put_packet(connection, xml, strlen(xml));
2850
2851 free(xml);
2852 return ERROR_OK;
2853 } else if (strncmp(packet, "qXfer:threads:read:", 19) == 0) {
2854 char *xml = NULL;
2855 int retval = ERROR_OK;
2856
2857 int offset;
2858 unsigned int length;
2859
2860 /* skip command character */
2861 packet += 19;
2862
2863 if (decode_xfer_read(packet, NULL, &offset, &length) < 0) {
2864 gdb_send_error(connection, 01);
2865 return ERROR_OK;
2866 }
2867
2868 /* Target should prepare correct thread list for annex.
2869 * The first character of returned xml is 'm' or 'l'. 'm' for
2870 * there are *more* chunks to transfer. 'l' for it is the *last*
2871 * chunk of target description.
2872 */
2873 retval = gdb_get_thread_list_chunk(target, &gdb_connection->thread_list,
2874 &xml, offset, length);
2875 if (retval != ERROR_OK) {
2876 gdb_error(connection, retval);
2877 return retval;
2878 }
2879
2880 gdb_put_packet(connection, xml, strlen(xml));
2881
2882 free(xml);
2883 return ERROR_OK;
2884 } else if (strncmp(packet, "QStartNoAckMode", 15) == 0) {
2885 gdb_connection->noack_mode = 1;
2886 gdb_put_packet(connection, "OK", 2);
2887 return ERROR_OK;
2888 }
2889
2890 gdb_put_packet(connection, "", 0);
2891 return ERROR_OK;
2892 }
2893
2894 static bool gdb_handle_vcont_packet(struct connection *connection, const char *packet, int packet_size)
2895 {
2896 struct gdb_connection *gdb_connection = connection->priv;
2897 struct target *target = get_target_from_connection(connection);
2898 const char *parse = packet;
2899 int retval;
2900
2901 /* query for vCont supported */
2902 if (parse[0] == '?') {
2903 if (target->type->step) {
2904 /* gdb doesn't accept c without C and s without S */
2905 gdb_put_packet(connection, "vCont;c;C;s;S", 13);
2906 return true;
2907 }
2908 return false;
2909 }
2910
2911 if (parse[0] == ';') {
2912 ++parse;
2913 --packet_size;
2914 }
2915
2916 /* simple case, a continue packet */
2917 if (parse[0] == 'c') {
2918 gdb_running_type = 'c';
2919 LOG_DEBUG("target %s continue", target_name(target));
2920 log_add_callback(gdb_log_callback, connection);
2921 retval = target_resume(target, 1, 0, 0, 0);
2922 if (retval == ERROR_TARGET_NOT_HALTED)
2923 LOG_INFO("target %s was not halted when resume was requested", target_name(target));
2924
2925 /* poll target in an attempt to make its internal state consistent */
2926 if (retval != ERROR_OK) {
2927 retval = target_poll(target);
2928 if (retval != ERROR_OK)
2929 LOG_DEBUG("error polling target %s after failed resume", target_name(target));
2930 }
2931
2932 /*
2933 * We don't report errors to gdb here, move frontend_state to
2934 * TARGET_RUNNING to stay in sync with gdb's expectation of the
2935 * target state
2936 */
2937 gdb_connection->frontend_state = TARGET_RUNNING;
2938 target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
2939
2940 return true;
2941 }
2942
2943 /* single-step or step-over-breakpoint */
2944 if (parse[0] == 's') {
2945 gdb_running_type = 's';
2946 bool fake_step = false;
2947
2948 if (strncmp(parse, "s:", 2) == 0) {
2949 struct target *ct = target;
2950 int current_pc = 1;
2951 int64_t thread_id;
2952 char *endp;
2953
2954 parse += 2;
2955 packet_size -= 2;
2956
2957 thread_id = strtoll(parse, &endp, 16);
2958 if (endp) {
2959 packet_size -= endp - parse;
2960 parse = endp;
2961 }
2962
2963 if (target->rtos) {
2964 /* FIXME: why is this necessary? rtos state should be up-to-date here already! */
2965 rtos_update_threads(target);
2966
2967 target->rtos->gdb_target_for_threadid(connection, thread_id, &ct);
2968
2969 /*
2970 * check if the thread to be stepped is the current rtos thread
2971 * if not, we must fake the step
2972 */
2973 if (target->rtos->current_thread != thread_id)
2974 fake_step = true;
2975 }
2976
2977 if (parse[0] == ';') {
2978 ++parse;
2979 --packet_size;
2980
2981 if (parse[0] == 'c') {
2982 parse += 1;
2983
2984 /* check if thread-id follows */
2985 if (parse[0] == ':') {
2986 int64_t tid;
2987 parse += 1;
2988
2989 tid = strtoll(parse, &endp, 16);
2990 if (tid == thread_id) {
2991 /*
2992 * Special case: only step a single thread (core),
2993 * keep the other threads halted. Currently, only
2994 * aarch64 target understands it. Other target types don't
2995 * care (nobody checks the actual value of 'current')
2996 * and it doesn't really matter. This deserves
2997 * a symbolic constant and a formal interface documentation
2998 * at a later time.
2999 */
3000 LOG_DEBUG("request to step current core only");
3001 /* uncomment after checking that indeed other targets are safe */
3002 /*current_pc = 2;*/
3003 }
3004 }
3005 }
3006 }
3007
3008 LOG_DEBUG("target %s single-step thread %"PRIx64, target_name(ct), thread_id);
3009 log_add_callback(gdb_log_callback, connection);
3010 target_call_event_callbacks(ct, TARGET_EVENT_GDB_START);
3011
3012 /*
3013 * work around an annoying gdb behaviour: when the current thread
3014 * is changed in gdb, it assumes that the target can follow and also
3015 * make the thread current. This is an assumption that cannot hold
3016 * for a real target running a multi-threading OS. We just fake
3017 * the step to not trigger an internal error in gdb. See
3018 * https://sourceware.org/bugzilla/show_bug.cgi?id=22925 for details
3019 */
3020 if (fake_step) {
3021 int sig_reply_len;
3022 char sig_reply[128];
3023
3024 LOG_DEBUG("fake step thread %"PRIx64, thread_id);
3025
3026 sig_reply_len = snprintf(sig_reply, sizeof(sig_reply),
3027 "T05thread:%016"PRIx64";", thread_id);
3028
3029 gdb_put_packet(connection, sig_reply, sig_reply_len);
3030 log_remove_callback(gdb_log_callback, connection);
3031
3032 return true;
3033 }
3034
3035 /* support for gdb_sync command */
3036 if (gdb_connection->sync) {
3037 gdb_connection->sync = false;
3038 if (ct->state == TARGET_HALTED) {
3039 LOG_DEBUG("stepi ignored. GDB will now fetch the register state "
3040 "from the target.");
3041 gdb_sig_halted(connection);
3042 log_remove_callback(gdb_log_callback, connection);
3043 } else
3044 gdb_connection->frontend_state = TARGET_RUNNING;
3045 return true;
3046 }
3047
3048 retval = target_step(ct, current_pc, 0, 0);
3049 if (retval == ERROR_TARGET_NOT_HALTED)
3050 LOG_INFO("target %s was not halted when step was requested", target_name(ct));
3051
3052 /* if step was successful send a reply back to gdb */
3053 if (retval == ERROR_OK) {
3054 retval = target_poll(ct);
3055 if (retval != ERROR_OK)
3056 LOG_DEBUG("error polling target %s after successful step", target_name(ct));
3057 /* send back signal information */
3058 gdb_signal_reply(ct, connection);
3059 /* stop forwarding log packets! */
3060 log_remove_callback(gdb_log_callback, connection);
3061 } else
3062 gdb_connection->frontend_state = TARGET_RUNNING;
3063 } else {
3064 LOG_ERROR("Unknown vCont packet");
3065 return false;
3066 }
3067 return true;
3068 }
3069
3070 return false;
3071 }
3072
3073 static char *next_hex_encoded_field(const char **str, char sep)
3074 {
3075 size_t hexlen;
3076 const char *hex = *str;
3077 if (hex[0] == '\0')
3078 return NULL;
3079
3080 const char *end = strchr(hex, sep);
3081 if (!end)
3082 hexlen = strlen(hex);
3083 else
3084 hexlen = end - hex;
3085 *str = hex + hexlen + 1;
3086
3087 if (hexlen % 2 != 0) {
3088 /* Malformed hex data */
3089 return NULL;
3090 }
3091
3092 size_t count = hexlen / 2;
3093 char *decoded = malloc(count + 1);
3094 if (!decoded)
3095 return NULL;
3096
3097 size_t converted = unhexify((void *)decoded, hex, count);
3098 if (converted != count) {
3099 free(decoded);
3100 return NULL;
3101 }
3102
3103 decoded[count] = '\0';
3104 return decoded;
3105 }
3106
3107 /* handle extended restart packet */
3108 static void gdb_restart_inferior(struct connection *connection, const char *packet, int packet_size)
3109 {
3110 struct gdb_connection *gdb_con = connection->priv;
3111 struct target *target = get_target_from_connection(connection);
3112
3113 breakpoint_clear_target(target);
3114 watchpoint_clear_target(target);
3115 command_run_linef(connection->cmd_ctx, "ocd_gdb_restart %s",
3116 target_name(target));
3117 /* set connection as attached after reset */
3118 gdb_con->attached = true;
3119 /* info rtos parts */
3120 gdb_thread_packet(connection, packet, packet_size);
3121 }
3122
3123 static bool gdb_handle_vrun_packet(struct connection *connection, const char *packet, int packet_size)
3124 {
3125 struct target *target = get_target_from_connection(connection);
3126 const char *parse = packet;
3127
3128 /* Skip "vRun" */
3129 parse += 4;
3130
3131 if (parse[0] != ';')
3132 return false;
3133 parse++;
3134
3135 /* Skip first field "filename"; don't know what to do with it. */
3136 free(next_hex_encoded_field(&parse, ';'));
3137
3138 char *cmdline = next_hex_encoded_field(&parse, ';');
3139 while (cmdline) {
3140 char *arg = next_hex_encoded_field(&parse, ';');
3141 if (!arg)
3142 break;
3143 char *new_cmdline = alloc_printf("%s %s", cmdline, arg);
3144 free(cmdline);
3145 free(arg);
3146 cmdline = new_cmdline;
3147 }
3148
3149 if (cmdline) {
3150 if (target->semihosting) {
3151 LOG_INFO("GDB set inferior command line to '%s'", cmdline);
3152 free(target->semihosting->cmdline);
3153 target->semihosting->cmdline = cmdline;
3154 } else {
3155 LOG_INFO("GDB set inferior command line to '%s' but semihosting is unavailable", cmdline);
3156 free(cmdline);
3157 }
3158 }
3159
3160 gdb_restart_inferior(connection, packet, packet_size);
3161 gdb_put_packet(connection, "S00", 3);
3162 return true;
3163 }
3164
3165 static int gdb_v_packet(struct connection *connection,
3166 char const *packet, int packet_size)
3167 {
3168 struct gdb_connection *gdb_connection = connection->priv;
3169 int result;
3170
3171 struct target *target = get_target_from_connection(connection);
3172
3173 if (strncmp(packet, "vCont", 5) == 0) {
3174 bool handled;
3175
3176 packet += 5;
3177 packet_size -= 5;
3178
3179 handled = gdb_handle_vcont_packet(connection, packet, packet_size);
3180 if (!handled)
3181 gdb_put_packet(connection, "", 0);
3182
3183 return ERROR_OK;
3184 }
3185
3186 if (strncmp(packet, "vRun", 4) == 0) {
3187 bool handled;
3188
3189 handled = gdb_handle_vrun_packet(connection, packet, packet_size);
3190 if (!handled)
3191 gdb_put_packet(connection, "", 0);
3192
3193 return ERROR_OK;
3194 }
3195
3196 /* if flash programming disabled - send a empty reply */
3197
3198 if (gdb_flash_program == 0) {
3199 gdb_put_packet(connection, "", 0);
3200 return ERROR_OK;
3201 }
3202
3203 if (strncmp(packet, "vFlashErase:", 12) == 0) {
3204 unsigned long addr;
3205 unsigned long length;
3206
3207 char const *parse = packet + 12;
3208 if (*parse == '\0') {
3209 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3210 return ERROR_SERVER_REMOTE_CLOSED;
3211 }
3212
3213 addr = strtoul(parse, (char **)&parse, 16);
3214
3215 if (*(parse++) != ',' || *parse == '\0') {
3216 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3217 return ERROR_SERVER_REMOTE_CLOSED;
3218 }
3219
3220 length = strtoul(parse, (char **)&parse, 16);
3221
3222 if (*parse != '\0') {
3223 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3224 return ERROR_SERVER_REMOTE_CLOSED;
3225 }
3226
3227 /* assume all sectors need erasing - stops any problems
3228 * when flash_write is called multiple times */
3229 flash_set_dirty();
3230
3231 /* perform any target specific operations before the erase */
3232 target_call_event_callbacks(target,
3233 TARGET_EVENT_GDB_FLASH_ERASE_START);
3234
3235 /* vFlashErase:addr,length messages require region start and
3236 * end to be "block" aligned ... if padding is ever needed,
3237 * GDB will have become dangerously confused.
3238 */
3239 result = flash_erase_address_range(target, false, addr,
3240 length);
3241
3242 /* perform any target specific operations after the erase */
3243 target_call_event_callbacks(target,
3244 TARGET_EVENT_GDB_FLASH_ERASE_END);
3245
3246 /* perform erase */
3247 if (result != ERROR_OK) {
3248 /* GDB doesn't evaluate the actual error number returned,
3249 * treat a failed erase as an I/O error
3250 */
3251 gdb_send_error(connection, EIO);
3252 LOG_ERROR("flash_erase returned %i", result);
3253 } else
3254 gdb_put_packet(connection, "OK", 2);
3255
3256 return ERROR_OK;
3257 }
3258
3259 if (strncmp(packet, "vFlashWrite:", 12) == 0) {
3260 int retval;
3261 unsigned long addr;
3262 unsigned long length;
3263 char const *parse = packet + 12;
3264
3265 if (*parse == '\0') {
3266 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3267 return ERROR_SERVER_REMOTE_CLOSED;
3268 }
3269 addr = strtoul(parse, (char **)&parse, 16);
3270 if (*(parse++) != ':') {
3271 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3272 return ERROR_SERVER_REMOTE_CLOSED;
3273 }
3274 length = packet_size - (parse - packet);
3275
3276 /* create a new image if there isn't already one */
3277 if (!gdb_connection->vflash_image) {
3278 gdb_connection->vflash_image = malloc(sizeof(struct image));
3279 image_open(gdb_connection->vflash_image, "", "build");
3280 }
3281
3282 /* create new section with content from packet buffer */
3283 retval = image_add_section(gdb_connection->vflash_image,
3284 addr, length, 0x0, (uint8_t const *)parse);
3285 if (retval != ERROR_OK)
3286 return retval;
3287
3288 gdb_put_packet(connection, "OK", 2);
3289
3290 return ERROR_OK;
3291 }
3292
3293 if (strncmp(packet, "vFlashDone", 10) == 0) {
3294 uint32_t written;
3295
3296 /* process the flashing buffer. No need to erase as GDB
3297 * always issues a vFlashErase first. */
3298 target_call_event_callbacks(target,
3299 TARGET_EVENT_GDB_FLASH_WRITE_START);
3300 result = flash_write(target, gdb_connection->vflash_image,
3301 &written, false);
3302 target_call_event_callbacks(target,
3303 TARGET_EVENT_GDB_FLASH_WRITE_END);
3304 if (result != ERROR_OK) {
3305 if (result == ERROR_FLASH_DST_OUT_OF_BANK)
3306 gdb_put_packet(connection, "E.memtype", 9);
3307 else
3308 gdb_send_error(connection, EIO);
3309 } else {
3310 LOG_DEBUG("wrote %u bytes from vFlash image to flash", (unsigned)written);
3311 gdb_put_packet(connection, "OK", 2);
3312 }
3313
3314 image_close(gdb_connection->vflash_image);
3315 free(gdb_connection->vflash_image);
3316 gdb_connection->vflash_image = NULL;
3317
3318 return ERROR_OK;
3319 }
3320
3321 gdb_put_packet(connection, "", 0);
3322 return ERROR_OK;
3323 }
3324
3325 static int gdb_detach(struct connection *connection)
3326 {
3327 /*
3328 * Only reply "OK" to GDB
3329 * it will close the connection and this will trigger a call to
3330 * gdb_connection_closed() that will in turn trigger the event
3331 * TARGET_EVENT_GDB_DETACH
3332 */
3333 return gdb_put_packet(connection, "OK", 2);
3334 }
3335
3336 /* The format of 'F' response packet is
3337 * Fretcode,errno,Ctrl-C flag;call-specific attachment
3338 */
3339 static int gdb_fileio_response_packet(struct connection *connection,
3340 char const *packet, int packet_size)
3341 {
3342 struct target *target = get_target_from_connection(connection);
3343 char *separator;
3344 char *parsing_point;
3345 int fileio_retcode = strtoul(packet + 1, &separator, 16);
3346 int fileio_errno = 0;
3347 bool fileio_ctrl_c = false;
3348 int retval;
3349
3350 LOG_DEBUG("-");
3351
3352 if (*separator == ',') {
3353 parsing_point = separator + 1;
3354 fileio_errno = strtoul(parsing_point, &separator, 16);
3355 if (*separator == ',') {
3356 if (*(separator + 1) == 'C') {
3357 /* TODO: process ctrl-c */
3358 fileio_ctrl_c = true;
3359 }
3360 }
3361 }
3362
3363 LOG_DEBUG("File-I/O response, retcode: 0x%x, errno: 0x%x, ctrl-c: %s",
3364 fileio_retcode, fileio_errno, fileio_ctrl_c ? "true" : "false");
3365
3366 retval = target_gdb_fileio_end(target, fileio_retcode, fileio_errno, fileio_ctrl_c);
3367 if (retval != ERROR_OK)
3368 return ERROR_FAIL;
3369
3370 /* After File-I/O ends, keep continue or step */
3371 if (gdb_running_type == 'c')
3372 retval = target_resume(target, 1, 0x0, 0, 0);
3373 else if (gdb_running_type == 's')
3374 retval = target_step(target, 1, 0x0, 0);
3375 else
3376 retval = ERROR_FAIL;
3377
3378 if (retval != ERROR_OK)
3379 return ERROR_FAIL;
3380
3381 return ERROR_OK;
3382 }
3383
3384 static void gdb_log_callback(void *priv, const char *file, unsigned line,
3385 const char *function, const char *string)
3386 {
3387 struct connection *connection = priv;
3388 struct gdb_connection *gdb_con = connection->priv;
3389
3390 if (gdb_con->busy) {
3391 /* do not reply this using the O packet */
3392 return;
3393 }
3394
3395 gdb_output_con(connection, string);
3396 }
3397
3398 static void gdb_sig_halted(struct connection *connection)
3399 {
3400 char sig_reply[4];
3401 snprintf(sig_reply, 4, "T%2.2x", 2);
3402 gdb_put_packet(connection, sig_reply, 3);
3403 }
3404
3405 static int gdb_input_inner(struct connection *connection)
3406 {
3407 /* Do not allocate this on the stack */
3408 static char gdb_packet_buffer[GDB_BUFFER_SIZE + 1]; /* Extra byte for null-termination */
3409
3410 struct target *target;
3411 char const *packet = gdb_packet_buffer;
3412 int packet_size;
3413 int retval;
3414 struct gdb_connection *gdb_con = connection->priv;
3415 static bool warn_use_ext;
3416
3417 target = get_target_from_connection(connection);
3418
3419 /* drain input buffer. If one of the packets fail, then an error
3420 * packet is replied, if applicable.
3421 *
3422 * This loop will terminate and the error code is returned.
3423 *
3424 * The calling fn will check if this error is something that
3425 * can be recovered from, or if the connection must be closed.
3426 *
3427 * If the error is recoverable, this fn is called again to
3428 * drain the rest of the buffer.
3429 */
3430 do {
3431 packet_size = GDB_BUFFER_SIZE;
3432 retval = gdb_get_packet(connection, gdb_packet_buffer, &packet_size);
3433 if (retval != ERROR_OK)
3434 return retval;
3435
3436 /* terminate with zero */
3437 gdb_packet_buffer[packet_size] = '\0';
3438
3439 gdb_log_incoming_packet(gdb_packet_buffer);
3440
3441 if (packet_size > 0) {
3442 retval = ERROR_OK;
3443 switch (packet[0]) {
3444 case 'T': /* Is thread alive? */
3445 gdb_thread_packet(connection, packet, packet_size);
3446 break;
3447 case 'H': /* Set current thread ( 'c' for step and continue,
3448 * 'g' for all other operations ) */
3449 gdb_thread_packet(connection, packet, packet_size);
3450 break;
3451 case 'q':
3452 case 'Q':
3453 retval = gdb_thread_packet(connection, packet, packet_size);
3454 if (retval == GDB_THREAD_PACKET_NOT_CONSUMED)
3455 retval = gdb_query_packet(connection, packet, packet_size);
3456 break;
3457 case 'g':
3458 retval = gdb_get_registers_packet(connection, packet, packet_size);
3459 break;
3460 case 'G':
3461 retval = gdb_set_registers_packet(connection, packet, packet_size);
3462 break;
3463 case 'p':
3464 retval = gdb_get_register_packet(connection, packet, packet_size);
3465 break;
3466 case 'P':
3467 retval = gdb_set_register_packet(connection, packet, packet_size);
3468 break;
3469 case 'm':
3470 retval = gdb_read_memory_packet(connection, packet, packet_size);
3471 break;
3472 case 'M':
3473 retval = gdb_write_memory_packet(connection, packet, packet_size);
3474 break;
3475 case 'z':
3476 case 'Z':
3477 retval = gdb_breakpoint_watchpoint_packet(connection, packet, packet_size);
3478 break;
3479 case '?':
3480 gdb_last_signal_packet(connection, packet, packet_size);
3481 /* '?' is sent after the eventual '!' */
3482 if (!warn_use_ext && !gdb_con->extended_protocol) {
3483 warn_use_ext = true;
3484 LOG_WARNING("Prefer GDB command \"target extended-remote :%s\" instead of \"target remote :%s\"",
3485 connection->service->port, connection->service->port);
3486 }
3487 break;
3488 case 'c':
3489 case 's':
3490 {
3491 gdb_thread_packet(connection, packet, packet_size);
3492 log_add_callback(gdb_log_callback, connection);
3493
3494 if (gdb_con->mem_write_error) {
3495 LOG_ERROR("Memory write failure!");
3496
3497 /* now that we have reported the memory write error,
3498 * we can clear the condition */
3499 gdb_con->mem_write_error = false;
3500 }
3501
3502 bool nostep = false;
3503 bool already_running = false;
3504 if (target->state == TARGET_RUNNING) {
3505 LOG_WARNING("WARNING! The target is already running. "
3506 "All changes GDB did to registers will be discarded! "
3507 "Waiting for target to halt.");
3508 already_running = true;
3509 } else if (target->state != TARGET_HALTED) {
3510 LOG_WARNING("The target is not in the halted nor running stated, "
3511 "stepi/continue ignored.");
3512 nostep = true;
3513 } else if ((packet[0] == 's') && gdb_con->sync) {
3514 /* Hmm..... when you issue a continue in GDB, then a "stepi" is
3515 * sent by GDB first to OpenOCD, thus defeating the check to
3516 * make only the single stepping have the sync feature...
3517 */
3518 nostep = true;
3519 LOG_DEBUG("stepi ignored. GDB will now fetch the register state "
3520 "from the target.");
3521 }
3522 gdb_con->sync = false;
3523
3524 if (!already_running && nostep) {
3525 /* Either the target isn't in the halted state, then we can't
3526 * step/continue. This might be early setup, etc.
3527 *
3528 * Or we want to allow GDB to pick up a fresh set of
3529 * register values without modifying the target state.
3530 *
3531 */
3532 gdb_sig_halted(connection);
3533
3534 /* stop forwarding log packets! */
3535 log_remove_callback(gdb_log_callback, connection);
3536 } else {
3537 /* We're running/stepping, in which case we can
3538 * forward log output until the target is halted
3539 */
3540 gdb_con->frontend_state = TARGET_RUNNING;
3541 target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
3542
3543 if (!already_running) {
3544 /* Here we don't want packet processing to stop even if this fails,
3545 * so we use a local variable instead of retval. */
3546 retval = gdb_step_continue_packet(connection, packet, packet_size);
3547 if (retval != ERROR_OK) {
3548 /* we'll never receive a halted
3549 * condition... issue a false one..
3550 */
3551 gdb_frontend_halted(target, connection);
3552 }
3553 }
3554 }
3555 }
3556 break;
3557 case 'v':
3558 retval = gdb_v_packet(connection, packet, packet_size);
3559 break;
3560 case 'D':
3561 retval = gdb_detach(connection);
3562 break;
3563 case 'X':
3564 retval = gdb_write_memory_binary_packet(connection, packet, packet_size);
3565 if (retval != ERROR_OK)
3566 return retval;
3567 break;
3568 case 'k':
3569 if (gdb_con->extended_protocol) {
3570 gdb_con->attached = false;
3571 break;
3572 }
3573 gdb_put_packet(connection, "OK", 2);
3574 return ERROR_SERVER_REMOTE_CLOSED;
3575 case '!':
3576 /* handle extended remote protocol */
3577 gdb_con->extended_protocol = true;
3578 gdb_put_packet(connection, "OK", 2);
3579 break;
3580 case 'R':
3581 /* handle extended restart packet */
3582 gdb_restart_inferior(connection, packet, packet_size);
3583 break;
3584
3585 case 'j':
3586 /* packet supported only by smp target i.e cortex_a.c*/
3587 /* handle smp packet replying coreid played to gbd */
3588 gdb_read_smp_packet(connection, packet, packet_size);
3589 break;
3590
3591 case 'J':
3592 /* packet supported only by smp target i.e cortex_a.c */
3593 /* handle smp packet setting coreid to be played at next
3594 * resume to gdb */
3595 gdb_write_smp_packet(connection, packet, packet_size);
3596 break;
3597
3598 case 'F':
3599 /* File-I/O extension */
3600 /* After gdb uses host-side syscall to complete target file
3601 * I/O, gdb sends host-side syscall return value to target
3602 * by 'F' packet.
3603 * The format of 'F' response packet is
3604 * Fretcode,errno,Ctrl-C flag;call-specific attachment
3605 */
3606 gdb_con->frontend_state = TARGET_RUNNING;
3607 log_add_callback(gdb_log_callback, connection);
3608 gdb_fileio_response_packet(connection, packet, packet_size);
3609 break;
3610
3611 default:
3612 /* ignore unknown packets */
3613 LOG_DEBUG("ignoring 0x%2.2x packet", packet[0]);
3614 gdb_put_packet(connection, "", 0);
3615 break;
3616 }
3617
3618 /* if a packet handler returned an error, exit input loop */
3619 if (retval != ERROR_OK)
3620 return retval;
3621 }
3622
3623 if (gdb_con->ctrl_c) {
3624 if (target->state == TARGET_RUNNING) {
3625 struct target *t = target;
3626 if (target->rtos)
3627 target->rtos->gdb_target_for_threadid(connection, target->rtos->current_threadid, &t);
3628 retval = target_halt(t);
3629 if (retval == ERROR_OK)
3630 retval = target_poll(t);
3631 if (retval != ERROR_OK)
3632 target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
3633 gdb_con->ctrl_c = false;
3634 } else {
3635 LOG_INFO("The target is not running when halt was requested, stopping GDB.");
3636 target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
3637 }
3638 }
3639
3640 } while (gdb_con->buf_cnt > 0);
3641
3642 return ERROR_OK;
3643 }
3644
3645 static int gdb_input(struct connection *connection)
3646 {
3647 int retval = gdb_input_inner(connection);
3648 struct gdb_connection *gdb_con = connection->priv;
3649 if (retval == ERROR_SERVER_REMOTE_CLOSED)
3650 return retval;
3651
3652 /* logging does not propagate the error, yet can set the gdb_con->closed flag */
3653 if (gdb_con->closed)
3654 return ERROR_SERVER_REMOTE_CLOSED;
3655
3656 /* we'll recover from any other errors(e.g. temporary timeouts, etc.) */
3657 return ERROR_OK;
3658 }
3659
3660 static int gdb_target_start(struct target *target, const char *port)
3661 {
3662 struct gdb_service *gdb_service;
3663 int ret;
3664 gdb_service = malloc(sizeof(struct gdb_service));
3665
3666 if (!gdb_service)
3667 return -ENOMEM;
3668
3669 LOG_INFO("starting gdb server for %s on %s", target_name(target), port);
3670
3671 gdb_service->target = target;
3672 gdb_service->core[0] = -1;
3673 gdb_service->core[1] = -1;
3674 target->gdb_service = gdb_service;
3675
3676 ret = add_service("gdb",
3677 port, target->gdb_max_connections, &gdb_new_connection, &gdb_input,
3678 &gdb_connection_closed, gdb_service);
3679 /* initialize all targets gdb service with the same pointer */
3680 {
3681 struct target_list *head;
3682 foreach_smp_target(head, target->smp_targets) {
3683 struct target *curr = head->target;
3684 if (curr != target)
3685 curr->gdb_service = gdb_service;
3686 }
3687 }
3688 return ret;
3689 }
3690
3691 static int gdb_target_add_one(struct target *target)
3692 {
3693 /* one gdb instance per smp list */
3694 if ((target->smp) && (target->gdb_service))
3695 return ERROR_OK;
3696
3697 /* skip targets that cannot handle a gdb connections (e.g. mem_ap) */
3698 if (!target_supports_gdb_connection(target)) {
3699 LOG_DEBUG("skip gdb server for target %s", target_name(target));
3700 return ERROR_OK;
3701 }
3702
3703 if (target->gdb_port_override) {
3704 if (strcmp(target->gdb_port_override, "disabled") == 0) {
3705 LOG_INFO("gdb port disabled");
3706 return ERROR_OK;
3707 }
3708 return gdb_target_start(target, target->gdb_port_override);
3709 }
3710
3711 if (strcmp(gdb_port, "disabled") == 0) {
3712 LOG_INFO("gdb port disabled");
3713 return ERROR_OK;
3714 }
3715
3716 int retval = gdb_target_start(target, gdb_port_next);
3717 if (retval == ERROR_OK) {
3718 /* save the port number so can be queried with
3719 * $target_name cget -gdb-port
3720 */
3721 target->gdb_port_override = strdup(gdb_port_next);
3722
3723 long portnumber;
3724 /* If we can parse the port number
3725 * then we increment the port number for the next target.
3726 */
3727 char *end;
3728 portnumber = strtol(gdb_port_next, &end, 0);
3729 if (!*end) {
3730 if (parse_long(gdb_port_next, &portnumber) == ERROR_OK) {
3731 free(gdb_port_next);
3732 if (portnumber) {
3733 gdb_port_next = alloc_printf("%ld", portnumber+1);
3734 } else {
3735 /* Don't increment if gdb_port is 0, since we're just
3736 * trying to allocate an unused port. */
3737 gdb_port_next = strdup("0");
3738 }
3739 }
3740 }
3741 }
3742 return retval;
3743 }
3744
3745 int gdb_target_add_all(struct target *target)
3746 {
3747 if (!target) {
3748 LOG_WARNING("gdb services need one or more targets defined");
3749 return ERROR_OK;
3750 }
3751
3752 while (target) {
3753 int retval = gdb_target_add_one(target);
3754 if (retval != ERROR_OK)
3755 return retval;
3756
3757 target = target->next;
3758 }
3759
3760 return ERROR_OK;
3761 }
3762
3763 COMMAND_HANDLER(handle_gdb_sync_command)
3764 {
3765 if (CMD_ARGC != 0)
3766 return ERROR_COMMAND_SYNTAX_ERROR;
3767
3768 if (!current_gdb_connection) {
3769 command_print(CMD,
3770 "gdb_sync command can only be run from within gdb using \"monitor gdb_sync\"");
3771 return ERROR_FAIL;
3772 }
3773
3774 current_gdb_connection->sync = true;
3775
3776 return ERROR_OK;
3777 }
3778
3779 /* daemon configuration command gdb_port */
3780 COMMAND_HANDLER(handle_gdb_port_command)
3781 {
3782 int retval = CALL_COMMAND_HANDLER(server_pipe_command, &gdb_port);
3783 if (retval == ERROR_OK) {
3784 free(gdb_port_next);
3785 gdb_port_next = strdup(gdb_port);
3786 }
3787 return retval;
3788 }
3789
3790 COMMAND_HANDLER(handle_gdb_memory_map_command)
3791 {
3792 if (CMD_ARGC != 1)
3793 return ERROR_COMMAND_SYNTAX_ERROR;
3794
3795 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_use_memory_map);
3796 return ERROR_OK;
3797 }
3798
3799 COMMAND_HANDLER(handle_gdb_flash_program_command)
3800 {
3801 if (CMD_ARGC != 1)
3802 return ERROR_COMMAND_SYNTAX_ERROR;
3803
3804 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_flash_program);
3805 return ERROR_OK;
3806 }
3807
3808 COMMAND_HANDLER(handle_gdb_report_data_abort_command)
3809 {
3810 if (CMD_ARGC != 1)
3811 return ERROR_COMMAND_SYNTAX_ERROR;
3812
3813 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_report_data_abort);
3814 return ERROR_OK;
3815 }
3816
3817 COMMAND_HANDLER(handle_gdb_report_register_access_error)
3818 {
3819 if (CMD_ARGC != 1)
3820 return ERROR_COMMAND_SYNTAX_ERROR;
3821
3822 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_report_register_access_error);
3823 return ERROR_OK;
3824 }
3825
3826 /* gdb_breakpoint_override */
3827 COMMAND_HANDLER(handle_gdb_breakpoint_override_command)
3828 {
3829 if (CMD_ARGC == 0) {
3830 /* nothing */
3831 } else if (CMD_ARGC == 1) {
3832 gdb_breakpoint_override = 1;
3833 if (strcmp(CMD_ARGV[0], "hard") == 0)
3834 gdb_breakpoint_override_type = BKPT_HARD;
3835 else if (strcmp(CMD_ARGV[0], "soft") == 0)
3836 gdb_breakpoint_override_type = BKPT_SOFT;
3837 else if (strcmp(CMD_ARGV[0], "disable") == 0)
3838 gdb_breakpoint_override = 0;
3839 } else
3840 return ERROR_COMMAND_SYNTAX_ERROR;
3841 if (gdb_breakpoint_override)
3842 LOG_USER("force %s breakpoints",
3843 (gdb_breakpoint_override_type == BKPT_HARD) ? "hard" : "soft");
3844 else
3845 LOG_USER("breakpoint type is not overridden");
3846
3847 return ERROR_OK;
3848 }
3849
3850 COMMAND_HANDLER(handle_gdb_target_description_command)
3851 {
3852 if (CMD_ARGC != 1)
3853 return ERROR_COMMAND_SYNTAX_ERROR;
3854
3855 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_use_target_description);
3856 return ERROR_OK;
3857 }
3858
3859 COMMAND_HANDLER(handle_gdb_save_tdesc_command)
3860 {
3861 char *tdesc;
3862 uint32_t tdesc_length;
3863 struct target *target = get_current_target(CMD_CTX);
3864
3865 int retval = gdb_generate_target_description(target, &tdesc);
3866 if (retval != ERROR_OK) {
3867 LOG_ERROR("Unable to Generate Target Description");
3868 return ERROR_FAIL;
3869 }
3870
3871 tdesc_length = strlen(tdesc);
3872
3873 struct fileio *fileio;
3874 size_t size_written;
3875
3876 char *tdesc_filename = alloc_printf("%s.xml", target_type_name(target));
3877 if (!tdesc_filename) {
3878 retval = ERROR_FAIL;
3879 goto out;
3880 }
3881
3882 retval = fileio_open(&fileio, tdesc_filename, FILEIO_WRITE, FILEIO_TEXT);
3883
3884 if (retval != ERROR_OK) {
3885 LOG_ERROR("Can't open %s for writing", tdesc_filename);
3886 goto out;
3887 }
3888
3889 retval = fileio_write(fileio, tdesc_length, tdesc, &size_written);
3890
3891 fileio_close(fileio);
3892
3893 if (retval != ERROR_OK)
3894 LOG_ERROR("Error while writing the tdesc file");
3895
3896 out:
3897 free(tdesc_filename);
3898 free(tdesc);
3899
3900 return retval;
3901 }
3902
3903 static const struct command_registration gdb_command_handlers[] = {
3904 {
3905 .name = "gdb_sync",
3906 .handler = handle_gdb_sync_command,
3907 .mode = COMMAND_ANY,
3908 .help = "next stepi will return immediately allowing "
3909 "GDB to fetch register state without affecting "
3910 "target state",
3911 .usage = ""
3912 },
3913 {
3914 .name = "gdb_port",
3915 .handler = handle_gdb_port_command,
3916 .mode = COMMAND_CONFIG,
3917 .help = "Normally gdb listens to a TCP/IP port. Each subsequent GDB "
3918 "server listens for the next port number after the "
3919 "base port number specified. "
3920 "No arguments reports GDB port. \"pipe\" means listen to stdin "
3921 "output to stdout, an integer is base port number, \"disabled\" disables "
3922 "port. Any other string is are interpreted as named pipe to listen to. "
3923 "Output pipe is the same name as input pipe, but with 'o' appended.",
3924 .usage = "[port_num]",
3925 },
3926 {
3927 .name = "gdb_memory_map",
3928 .handler = handle_gdb_memory_map_command,
3929 .mode = COMMAND_CONFIG,
3930 .help = "enable or disable memory map",
3931 .usage = "('enable'|'disable')"
3932 },
3933 {
3934 .name = "gdb_flash_program",
3935 .handler = handle_gdb_flash_program_command,
3936 .mode = COMMAND_CONFIG,
3937 .help = "enable or disable flash program",
3938 .usage = "('enable'|'disable')"
3939 },
3940 {
3941 .name = "gdb_report_data_abort",
3942 .handler = handle_gdb_report_data_abort_command,
3943 .mode = COMMAND_CONFIG,
3944 .help = "enable or disable reporting data aborts",
3945 .usage = "('enable'|'disable')"
3946 },
3947 {
3948 .name = "gdb_report_register_access_error",
3949 .handler = handle_gdb_report_register_access_error,
3950 .mode = COMMAND_CONFIG,
3951 .help = "enable or disable reporting register access errors",
3952 .usage = "('enable'|'disable')"
3953 },
3954 {
3955 .name = "gdb_breakpoint_override",
3956 .handler = handle_gdb_breakpoint_override_command,
3957 .mode = COMMAND_ANY,
3958 .help = "Display or specify type of breakpoint "
3959 "to be used by gdb 'break' commands.",
3960 .usage = "('hard'|'soft'|'disable')"
3961 },
3962 {
3963 .name = "gdb_target_description",
3964 .handler = handle_gdb_target_description_command,
3965 .mode = COMMAND_CONFIG,
3966 .help = "enable or disable target description",
3967 .usage = "('enable'|'disable')"
3968 },
3969 {
3970 .name = "gdb_save_tdesc",
3971 .handler = handle_gdb_save_tdesc_command,
3972 .mode = COMMAND_EXEC,
3973 .help = "Save the target description file",
3974 .usage = "",
3975 },
3976 COMMAND_REGISTRATION_DONE
3977 };
3978
3979 int gdb_register_commands(struct command_context *cmd_ctx)
3980 {
3981 gdb_port = strdup("3333");
3982 gdb_port_next = strdup("3333");
3983 return register_commands(cmd_ctx, NULL, gdb_command_handlers);
3984 }
3985
3986 void gdb_service_free(void)
3987 {
3988 free(gdb_port);
3989 free(gdb_port_next);
3990 }

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)