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

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)