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

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)