openocd: src: replace the GPL-2.0-or-later license tag
[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 int chars = (DIV_ROUND_UP(reg_list[i]->size, 8) * 2);
1327
1328 if (packet_p + chars > packet + packet_size)
1329 LOG_ERROR("BUG: register packet is too small for registers");
1330
1331 bin_buf = malloc(DIV_ROUND_UP(reg_list[i]->size, 8));
1332 gdb_target_to_reg(target, packet_p, chars, bin_buf);
1333
1334 retval = reg_list[i]->type->set(reg_list[i], bin_buf);
1335 if (retval != ERROR_OK && gdb_report_register_access_error) {
1336 LOG_DEBUG("Couldn't set register %s.", reg_list[i]->name);
1337 free(reg_list);
1338 free(bin_buf);
1339 return gdb_error(connection, retval);
1340 }
1341
1342 /* advance packet pointer */
1343 packet_p += chars;
1344
1345 free(bin_buf);
1346 }
1347
1348 /* free struct reg *reg_list[] array allocated by get_gdb_reg_list */
1349 free(reg_list);
1350
1351 gdb_put_packet(connection, "OK", 2);
1352
1353 return ERROR_OK;
1354 }
1355
1356 static int gdb_get_register_packet(struct connection *connection,
1357 char const *packet, int packet_size)
1358 {
1359 struct target *target = get_target_from_connection(connection);
1360 char *reg_packet;
1361 int reg_num = strtoul(packet + 1, NULL, 16);
1362 struct reg **reg_list;
1363 int reg_list_size;
1364 int retval;
1365
1366 #ifdef _DEBUG_GDB_IO_
1367 LOG_DEBUG("-");
1368 #endif
1369
1370 if ((target->rtos) && (rtos_get_gdb_reg(connection, reg_num) == ERROR_OK))
1371 return ERROR_OK;
1372
1373 retval = target_get_gdb_reg_list_noread(target, &reg_list, &reg_list_size,
1374 REG_CLASS_ALL);
1375 if (retval != ERROR_OK)
1376 return gdb_error(connection, retval);
1377
1378 if (reg_list_size <= reg_num) {
1379 LOG_ERROR("gdb requested a non-existing register (reg_num=%d)", reg_num);
1380 return ERROR_SERVER_REMOTE_CLOSED;
1381 }
1382
1383 if (!reg_list[reg_num]->valid) {
1384 retval = reg_list[reg_num]->type->get(reg_list[reg_num]);
1385 if (retval != ERROR_OK && gdb_report_register_access_error) {
1386 LOG_DEBUG("Couldn't get register %s.", reg_list[reg_num]->name);
1387 free(reg_list);
1388 return gdb_error(connection, retval);
1389 }
1390 }
1391
1392 reg_packet = calloc(DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2 + 1, 1); /* plus one for string termination null */
1393
1394 gdb_str_to_target(target, reg_packet, reg_list[reg_num]);
1395
1396 gdb_put_packet(connection, reg_packet, DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2);
1397
1398 free(reg_list);
1399 free(reg_packet);
1400
1401 return ERROR_OK;
1402 }
1403
1404 static int gdb_set_register_packet(struct connection *connection,
1405 char const *packet, int packet_size)
1406 {
1407 struct target *target = get_target_from_connection(connection);
1408 char *separator;
1409 int reg_num = strtoul(packet + 1, &separator, 16);
1410 struct reg **reg_list;
1411 int reg_list_size;
1412 int retval;
1413
1414 #ifdef _DEBUG_GDB_IO_
1415 LOG_DEBUG("-");
1416 #endif
1417
1418 if (*separator != '=') {
1419 LOG_ERROR("GDB 'set register packet', but no '=' following the register number");
1420 return ERROR_SERVER_REMOTE_CLOSED;
1421 }
1422 size_t chars = strlen(separator + 1);
1423 uint8_t *bin_buf = malloc(chars / 2);
1424 gdb_target_to_reg(target, separator + 1, chars, bin_buf);
1425
1426 if ((target->rtos) &&
1427 (rtos_set_reg(connection, reg_num, bin_buf) == ERROR_OK)) {
1428 free(bin_buf);
1429 gdb_put_packet(connection, "OK", 2);
1430 return ERROR_OK;
1431 }
1432
1433 retval = target_get_gdb_reg_list_noread(target, &reg_list, &reg_list_size,
1434 REG_CLASS_ALL);
1435 if (retval != ERROR_OK) {
1436 free(bin_buf);
1437 return gdb_error(connection, retval);
1438 }
1439
1440 if (reg_list_size <= reg_num) {
1441 LOG_ERROR("gdb requested a non-existing register (reg_num=%d)", reg_num);
1442 free(bin_buf);
1443 free(reg_list);
1444 return ERROR_SERVER_REMOTE_CLOSED;
1445 }
1446
1447 if (chars != (DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2)) {
1448 LOG_ERROR("gdb sent %zu bits for a %" PRIu32 "-bit register (%s)",
1449 chars * 4, reg_list[reg_num]->size, reg_list[reg_num]->name);
1450 free(bin_buf);
1451 free(reg_list);
1452 return ERROR_SERVER_REMOTE_CLOSED;
1453 }
1454
1455 gdb_target_to_reg(target, separator + 1, chars, bin_buf);
1456
1457 retval = reg_list[reg_num]->type->set(reg_list[reg_num], bin_buf);
1458 if (retval != ERROR_OK && gdb_report_register_access_error) {
1459 LOG_DEBUG("Couldn't set register %s.", reg_list[reg_num]->name);
1460 free(bin_buf);
1461 free(reg_list);
1462 return gdb_error(connection, retval);
1463 }
1464
1465 gdb_put_packet(connection, "OK", 2);
1466
1467 free(bin_buf);
1468 free(reg_list);
1469
1470 return ERROR_OK;
1471 }
1472
1473 /* No attempt is made to translate the "retval" to
1474 * GDB speak. This has to be done at the calling
1475 * site as no mapping really exists.
1476 */
1477 static int gdb_error(struct connection *connection, int retval)
1478 {
1479 LOG_DEBUG("Reporting %i to GDB as generic error", retval);
1480 gdb_send_error(connection, EFAULT);
1481 return ERROR_OK;
1482 }
1483
1484 /* We don't have to worry about the default 2 second timeout for GDB packets,
1485 * because GDB breaks up large memory reads into smaller reads.
1486 */
1487 static int gdb_read_memory_packet(struct connection *connection,
1488 char const *packet, int packet_size)
1489 {
1490 struct target *target = get_target_from_connection(connection);
1491 char *separator;
1492 uint64_t addr = 0;
1493 uint32_t len = 0;
1494
1495 uint8_t *buffer;
1496 char *hex_buffer;
1497
1498 int retval = ERROR_OK;
1499
1500 /* skip command character */
1501 packet++;
1502
1503 addr = strtoull(packet, &separator, 16);
1504
1505 if (*separator != ',') {
1506 LOG_ERROR("incomplete read memory packet received, dropping connection");
1507 return ERROR_SERVER_REMOTE_CLOSED;
1508 }
1509
1510 len = strtoul(separator + 1, NULL, 16);
1511
1512 if (!len) {
1513 LOG_WARNING("invalid read memory packet received (len == 0)");
1514 gdb_put_packet(connection, "", 0);
1515 return ERROR_OK;
1516 }
1517
1518 buffer = malloc(len);
1519
1520 LOG_DEBUG("addr: 0x%16.16" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
1521
1522 retval = ERROR_NOT_IMPLEMENTED;
1523 if (target->rtos)
1524 retval = rtos_read_buffer(target, addr, len, buffer);
1525 if (retval == ERROR_NOT_IMPLEMENTED)
1526 retval = target_read_buffer(target, addr, len, buffer);
1527
1528 if ((retval != ERROR_OK) && !gdb_report_data_abort) {
1529 /* TODO : Here we have to lie and send back all zero's lest stack traces won't work.
1530 * At some point this might be fixed in GDB, in which case this code can be removed.
1531 *
1532 * OpenOCD developers are acutely aware of this problem, but there is nothing
1533 * gained by involving the user in this problem that hopefully will get resolved
1534 * eventually
1535 *
1536 * http://sourceware.org/cgi-bin/gnatsweb.pl? \
1537 * cmd = view%20audit-trail&database = gdb&pr = 2395
1538 *
1539 * For now, the default is to fix up things to make current GDB versions work.
1540 * This can be overwritten using the gdb_report_data_abort <'enable'|'disable'> command.
1541 */
1542 memset(buffer, 0, len);
1543 retval = ERROR_OK;
1544 }
1545
1546 if (retval == ERROR_OK) {
1547 hex_buffer = malloc(len * 2 + 1);
1548
1549 size_t pkt_len = hexify(hex_buffer, buffer, len, len * 2 + 1);
1550
1551 gdb_put_packet(connection, hex_buffer, pkt_len);
1552
1553 free(hex_buffer);
1554 } else
1555 retval = gdb_error(connection, retval);
1556
1557 free(buffer);
1558
1559 return retval;
1560 }
1561
1562 static int gdb_write_memory_packet(struct connection *connection,
1563 char const *packet, int packet_size)
1564 {
1565 struct target *target = get_target_from_connection(connection);
1566 char *separator;
1567 uint64_t addr = 0;
1568 uint32_t len = 0;
1569
1570 uint8_t *buffer;
1571 int retval;
1572
1573 /* skip command character */
1574 packet++;
1575
1576 addr = strtoull(packet, &separator, 16);
1577
1578 if (*separator != ',') {
1579 LOG_ERROR("incomplete write memory packet received, dropping connection");
1580 return ERROR_SERVER_REMOTE_CLOSED;
1581 }
1582
1583 len = strtoul(separator + 1, &separator, 16);
1584
1585 if (*(separator++) != ':') {
1586 LOG_ERROR("incomplete write memory packet received, dropping connection");
1587 return ERROR_SERVER_REMOTE_CLOSED;
1588 }
1589
1590 buffer = malloc(len);
1591
1592 LOG_DEBUG("addr: 0x%" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
1593
1594 if (unhexify(buffer, separator, len) != len)
1595 LOG_ERROR("unable to decode memory packet");
1596
1597 retval = ERROR_NOT_IMPLEMENTED;
1598 if (target->rtos)
1599 retval = rtos_write_buffer(target, addr, len, buffer);
1600 if (retval == ERROR_NOT_IMPLEMENTED)
1601 retval = target_write_buffer(target, addr, len, buffer);
1602
1603 if (retval == ERROR_OK)
1604 gdb_put_packet(connection, "OK", 2);
1605 else
1606 retval = gdb_error(connection, retval);
1607
1608 free(buffer);
1609
1610 return retval;
1611 }
1612
1613 static int gdb_write_memory_binary_packet(struct connection *connection,
1614 char const *packet, int packet_size)
1615 {
1616 struct target *target = get_target_from_connection(connection);
1617 char *separator;
1618 uint64_t addr = 0;
1619 uint32_t len = 0;
1620
1621 int retval = ERROR_OK;
1622 /* Packets larger than fast_limit bytes will be acknowledged instantly on
1623 * the assumption that we're in a download and it's important to go as fast
1624 * as possible. */
1625 uint32_t fast_limit = 8;
1626
1627 /* skip command character */
1628 packet++;
1629
1630 addr = strtoull(packet, &separator, 16);
1631
1632 if (*separator != ',') {
1633 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1634 return ERROR_SERVER_REMOTE_CLOSED;
1635 }
1636
1637 len = strtoul(separator + 1, &separator, 16);
1638
1639 if (*(separator++) != ':') {
1640 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1641 return ERROR_SERVER_REMOTE_CLOSED;
1642 }
1643
1644 struct gdb_connection *gdb_connection = connection->priv;
1645
1646 if (gdb_connection->mem_write_error)
1647 retval = ERROR_FAIL;
1648
1649 if (retval == ERROR_OK) {
1650 if (len >= fast_limit) {
1651 /* By replying the packet *immediately* GDB will send us a new packet
1652 * while we write the last one to the target.
1653 * We only do this for larger writes, so that users who do something like:
1654 * p *((int*)0xdeadbeef)=8675309
1655 * will get immediate feedback that that write failed.
1656 */
1657 gdb_put_packet(connection, "OK", 2);
1658 }
1659 } else {
1660 retval = gdb_error(connection, retval);
1661 /* now that we have reported the memory write error, we can clear the condition */
1662 gdb_connection->mem_write_error = false;
1663 if (retval != ERROR_OK)
1664 return retval;
1665 }
1666
1667 if (len) {
1668 LOG_DEBUG("addr: 0x%" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
1669
1670 retval = ERROR_NOT_IMPLEMENTED;
1671 if (target->rtos)
1672 retval = rtos_write_buffer(target, addr, len, (uint8_t *)separator);
1673 if (retval == ERROR_NOT_IMPLEMENTED)
1674 retval = target_write_buffer(target, addr, len, (uint8_t *)separator);
1675
1676 if (retval != ERROR_OK)
1677 gdb_connection->mem_write_error = true;
1678 }
1679
1680 if (len < fast_limit) {
1681 if (retval != ERROR_OK) {
1682 gdb_error(connection, retval);
1683 gdb_connection->mem_write_error = false;
1684 } else {
1685 gdb_put_packet(connection, "OK", 2);
1686 }
1687 }
1688
1689 return ERROR_OK;
1690 }
1691
1692 static int gdb_step_continue_packet(struct connection *connection,
1693 char const *packet, int packet_size)
1694 {
1695 struct target *target = get_target_from_connection(connection);
1696 int current = 0;
1697 uint64_t address = 0x0;
1698 int retval = ERROR_OK;
1699
1700 LOG_DEBUG("-");
1701
1702 if (packet_size > 1)
1703 address = strtoull(packet + 1, NULL, 16);
1704 else
1705 current = 1;
1706
1707 gdb_running_type = packet[0];
1708 if (packet[0] == 'c') {
1709 LOG_DEBUG("continue");
1710 /* resume at current address, don't handle breakpoints, not debugging */
1711 retval = target_resume(target, current, address, 0, 0);
1712 } else if (packet[0] == 's') {
1713 LOG_DEBUG("step");
1714 /* step at current or address, don't handle breakpoints */
1715 retval = target_step(target, current, address, 0);
1716 }
1717 return retval;
1718 }
1719
1720 static int gdb_breakpoint_watchpoint_packet(struct connection *connection,
1721 char const *packet, int packet_size)
1722 {
1723 struct target *target = get_target_from_connection(connection);
1724 int type;
1725 enum breakpoint_type bp_type = BKPT_SOFT /* dummy init to avoid warning */;
1726 enum watchpoint_rw wp_type = WPT_READ /* dummy init to avoid warning */;
1727 uint64_t address;
1728 uint32_t size;
1729 char *separator;
1730 int retval;
1731
1732 LOG_DEBUG("[%s]", target_name(target));
1733
1734 type = strtoul(packet + 1, &separator, 16);
1735
1736 if (type == 0) /* memory breakpoint */
1737 bp_type = BKPT_SOFT;
1738 else if (type == 1) /* hardware breakpoint */
1739 bp_type = BKPT_HARD;
1740 else if (type == 2) /* write watchpoint */
1741 wp_type = WPT_WRITE;
1742 else if (type == 3) /* read watchpoint */
1743 wp_type = WPT_READ;
1744 else if (type == 4) /* access watchpoint */
1745 wp_type = WPT_ACCESS;
1746 else {
1747 LOG_ERROR("invalid gdb watch/breakpoint type(%d), dropping connection", type);
1748 return ERROR_SERVER_REMOTE_CLOSED;
1749 }
1750
1751 if (gdb_breakpoint_override && ((bp_type == BKPT_SOFT) || (bp_type == BKPT_HARD)))
1752 bp_type = gdb_breakpoint_override_type;
1753
1754 if (*separator != ',') {
1755 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1756 return ERROR_SERVER_REMOTE_CLOSED;
1757 }
1758
1759 address = strtoull(separator + 1, &separator, 16);
1760
1761 if (*separator != ',') {
1762 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1763 return ERROR_SERVER_REMOTE_CLOSED;
1764 }
1765
1766 size = strtoul(separator + 1, &separator, 16);
1767
1768 switch (type) {
1769 case 0:
1770 case 1:
1771 if (packet[0] == 'Z') {
1772 retval = breakpoint_add(target, address, size, bp_type);
1773 if (retval != ERROR_OK) {
1774 retval = gdb_error(connection, retval);
1775 if (retval != ERROR_OK)
1776 return retval;
1777 } else
1778 gdb_put_packet(connection, "OK", 2);
1779 } else {
1780 breakpoint_remove(target, address);
1781 gdb_put_packet(connection, "OK", 2);
1782 }
1783 break;
1784 case 2:
1785 case 3:
1786 case 4:
1787 {
1788 if (packet[0] == 'Z') {
1789 retval = watchpoint_add(target, address, size, wp_type, 0, 0xffffffffu);
1790 if (retval != ERROR_OK) {
1791 retval = gdb_error(connection, retval);
1792 if (retval != ERROR_OK)
1793 return retval;
1794 } else
1795 gdb_put_packet(connection, "OK", 2);
1796 } else {
1797 watchpoint_remove(target, address);
1798 gdb_put_packet(connection, "OK", 2);
1799 }
1800 break;
1801 }
1802 default:
1803 break;
1804 }
1805
1806 return ERROR_OK;
1807 }
1808
1809 /* print out a string and allocate more space as needed,
1810 * mainly used for XML at this point
1811 */
1812 static __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6))) void xml_printf(int *retval,
1813 char **xml, int *pos, int *size, const char *fmt, ...)
1814 {
1815 if (*retval != ERROR_OK)
1816 return;
1817 int first = 1;
1818
1819 for (;; ) {
1820 if ((!*xml) || (!first)) {
1821 /* start by 0 to exercise all the code paths.
1822 * Need minimum 2 bytes to fit 1 char and 0 terminator. */
1823
1824 *size = *size * 2 + 2;
1825 char *t = *xml;
1826 *xml = realloc(*xml, *size);
1827 if (!*xml) {
1828 free(t);
1829 *retval = ERROR_SERVER_REMOTE_CLOSED;
1830 return;
1831 }
1832 }
1833
1834 va_list ap;
1835 int ret;
1836 va_start(ap, fmt);
1837 ret = vsnprintf(*xml + *pos, *size - *pos, fmt, ap);
1838 va_end(ap);
1839 if ((ret > 0) && ((ret + 1) < *size - *pos)) {
1840 *pos += ret;
1841 return;
1842 }
1843 /* there was just enough or not enough space, allocate more. */
1844 first = 0;
1845 }
1846 }
1847
1848 static int decode_xfer_read(char const *buf, char **annex, int *ofs, unsigned int *len)
1849 {
1850 /* Locate the annex. */
1851 const char *annex_end = strchr(buf, ':');
1852 if (!annex_end)
1853 return ERROR_FAIL;
1854
1855 /* After the read marker and annex, qXfer looks like a
1856 * traditional 'm' packet. */
1857 char *separator;
1858 *ofs = strtoul(annex_end + 1, &separator, 16);
1859
1860 if (*separator != ',')
1861 return ERROR_FAIL;
1862
1863 *len = strtoul(separator + 1, NULL, 16);
1864
1865 /* Extract the annex if needed */
1866 if (annex) {
1867 *annex = strndup(buf, annex_end - buf);
1868 if (!*annex)
1869 return ERROR_FAIL;
1870 }
1871
1872 return ERROR_OK;
1873 }
1874
1875 static int compare_bank(const void *a, const void *b)
1876 {
1877 struct flash_bank *b1, *b2;
1878 b1 = *((struct flash_bank **)a);
1879 b2 = *((struct flash_bank **)b);
1880
1881 if (b1->base == b2->base)
1882 return 0;
1883 else if (b1->base > b2->base)
1884 return 1;
1885 else
1886 return -1;
1887 }
1888
1889 static int gdb_memory_map(struct connection *connection,
1890 char const *packet, int packet_size)
1891 {
1892 /* We get away with only specifying flash here. Regions that are not
1893 * specified are treated as if we provided no memory map(if not we
1894 * could detect the holes and mark them as RAM).
1895 * Normally we only execute this code once, but no big deal if we
1896 * have to regenerate it a couple of times.
1897 */
1898
1899 struct target *target = get_target_from_connection(connection);
1900 struct flash_bank *p;
1901 char *xml = NULL;
1902 int size = 0;
1903 int pos = 0;
1904 int retval = ERROR_OK;
1905 struct flash_bank **banks;
1906 int offset;
1907 int length;
1908 char *separator;
1909 target_addr_t ram_start = 0;
1910 unsigned int target_flash_banks = 0;
1911
1912 /* skip command character */
1913 packet += 23;
1914
1915 offset = strtoul(packet, &separator, 16);
1916 length = strtoul(separator + 1, &separator, 16);
1917
1918 xml_printf(&retval, &xml, &pos, &size, "<memory-map>\n");
1919
1920 /* Sort banks in ascending order. We need to report non-flash
1921 * memory as ram (or rather read/write) by default for GDB, since
1922 * it has no concept of non-cacheable read/write memory (i/o etc).
1923 */
1924 banks = malloc(sizeof(struct flash_bank *)*flash_get_bank_count());
1925
1926 for (unsigned int i = 0; i < flash_get_bank_count(); i++) {
1927 p = get_flash_bank_by_num_noprobe(i);
1928 if (p->target != target)
1929 continue;
1930 retval = get_flash_bank_by_num(i, &p);
1931 if (retval != ERROR_OK) {
1932 free(banks);
1933 gdb_error(connection, retval);
1934 return retval;
1935 }
1936 banks[target_flash_banks++] = p;
1937 }
1938
1939 qsort(banks, target_flash_banks, sizeof(struct flash_bank *),
1940 compare_bank);
1941
1942 for (unsigned int i = 0; i < target_flash_banks; i++) {
1943 unsigned sector_size = 0;
1944 unsigned group_len = 0;
1945
1946 p = banks[i];
1947
1948 if (ram_start < p->base)
1949 xml_printf(&retval, &xml, &pos, &size,
1950 "<memory type=\"ram\" start=\"" TARGET_ADDR_FMT "\" "
1951 "length=\"" TARGET_ADDR_FMT "\"/>\n",
1952 ram_start, p->base - ram_start);
1953
1954 /* Report adjacent groups of same-size sectors. So for
1955 * example top boot CFI flash will list an initial region
1956 * with several large sectors (maybe 128KB) and several
1957 * smaller ones at the end (maybe 32KB). STR7 will have
1958 * regions with 8KB, 32KB, and 64KB sectors; etc.
1959 */
1960 for (unsigned int j = 0; j < p->num_sectors; j++) {
1961
1962 /* Maybe start a new group of sectors. */
1963 if (sector_size == 0) {
1964 if (p->sectors[j].offset + p->sectors[j].size > p->size) {
1965 LOG_WARNING("The flash sector at offset 0x%08" PRIx32
1966 " overflows the end of %s bank.",
1967 p->sectors[j].offset, p->name);
1968 LOG_WARNING("The rest of bank will not show in gdb memory map.");
1969 break;
1970 }
1971 target_addr_t start;
1972 start = p->base + p->sectors[j].offset;
1973 xml_printf(&retval, &xml, &pos, &size,
1974 "<memory type=\"flash\" "
1975 "start=\"" TARGET_ADDR_FMT "\" ",
1976 start);
1977 sector_size = p->sectors[j].size;
1978 group_len = sector_size;
1979 } else {
1980 group_len += sector_size; /* equal to p->sectors[j].size */
1981 }
1982
1983 /* Does this finish a group of sectors?
1984 * If not, continue an already-started group.
1985 */
1986 if (j < p->num_sectors - 1
1987 && p->sectors[j + 1].size == sector_size
1988 && p->sectors[j + 1].offset == p->sectors[j].offset + sector_size
1989 && p->sectors[j + 1].offset + p->sectors[j + 1].size <= p->size)
1990 continue;
1991
1992 xml_printf(&retval, &xml, &pos, &size,
1993 "length=\"0x%x\">\n"
1994 "<property name=\"blocksize\">"
1995 "0x%x</property>\n"
1996 "</memory>\n",
1997 group_len,
1998 sector_size);
1999 sector_size = 0;
2000 }
2001
2002 ram_start = p->base + p->size;
2003 }
2004
2005 if (ram_start != 0)
2006 xml_printf(&retval, &xml, &pos, &size,
2007 "<memory type=\"ram\" start=\"" TARGET_ADDR_FMT "\" "
2008 "length=\"" TARGET_ADDR_FMT "\"/>\n",
2009 ram_start, target_address_max(target) - ram_start + 1);
2010 /* ELSE a flash chip could be at the very end of the address space, in
2011 * which case ram_start will be precisely 0 */
2012
2013 free(banks);
2014
2015 xml_printf(&retval, &xml, &pos, &size, "</memory-map>\n");
2016
2017 if (retval != ERROR_OK) {
2018 free(xml);
2019 gdb_error(connection, retval);
2020 return retval;
2021 }
2022
2023 if (offset + length > pos)
2024 length = pos - offset;
2025
2026 char *t = malloc(length + 1);
2027 t[0] = 'l';
2028 memcpy(t + 1, xml + offset, length);
2029 gdb_put_packet(connection, t, length + 1);
2030
2031 free(t);
2032 free(xml);
2033 return ERROR_OK;
2034 }
2035
2036 static const char *gdb_get_reg_type_name(enum reg_type type)
2037 {
2038 switch (type) {
2039 case REG_TYPE_BOOL:
2040 return "bool";
2041 case REG_TYPE_INT:
2042 return "int";
2043 case REG_TYPE_INT8:
2044 return "int8";
2045 case REG_TYPE_INT16:
2046 return "int16";
2047 case REG_TYPE_INT32:
2048 return "int32";
2049 case REG_TYPE_INT64:
2050 return "int64";
2051 case REG_TYPE_INT128:
2052 return "int128";
2053 case REG_TYPE_UINT:
2054 return "uint";
2055 case REG_TYPE_UINT8:
2056 return "uint8";
2057 case REG_TYPE_UINT16:
2058 return "uint16";
2059 case REG_TYPE_UINT32:
2060 return "uint32";
2061 case REG_TYPE_UINT64:
2062 return "uint64";
2063 case REG_TYPE_UINT128:
2064 return "uint128";
2065 case REG_TYPE_CODE_PTR:
2066 return "code_ptr";
2067 case REG_TYPE_DATA_PTR:
2068 return "data_ptr";
2069 case REG_TYPE_FLOAT:
2070 return "float";
2071 case REG_TYPE_IEEE_SINGLE:
2072 return "ieee_single";
2073 case REG_TYPE_IEEE_DOUBLE:
2074 return "ieee_double";
2075 case REG_TYPE_ARCH_DEFINED:
2076 return "int"; /* return arbitrary string to avoid compile warning. */
2077 }
2078
2079 return "int"; /* "int" as default value */
2080 }
2081
2082 static int lookup_add_arch_defined_types(char const **arch_defined_types_list[], const char *type_id,
2083 int *num_arch_defined_types)
2084 {
2085 int tbl_sz = *num_arch_defined_types;
2086
2087 if (type_id && (strcmp(type_id, ""))) {
2088 for (int j = 0; j < (tbl_sz + 1); j++) {
2089 if (!((*arch_defined_types_list)[j])) {
2090 (*arch_defined_types_list)[tbl_sz++] = type_id;
2091 *arch_defined_types_list = realloc(*arch_defined_types_list,
2092 sizeof(char *) * (tbl_sz + 1));
2093 (*arch_defined_types_list)[tbl_sz] = NULL;
2094 *num_arch_defined_types = tbl_sz;
2095 return 1;
2096 } else {
2097 if (!strcmp((*arch_defined_types_list)[j], type_id))
2098 return 0;
2099 }
2100 }
2101 }
2102
2103 return -1;
2104 }
2105
2106 static int gdb_generate_reg_type_description(struct target *target,
2107 char **tdesc, int *pos, int *size, struct reg_data_type *type,
2108 char const **arch_defined_types_list[], int *num_arch_defined_types)
2109 {
2110 int retval = ERROR_OK;
2111
2112 if (type->type_class == REG_TYPE_CLASS_VECTOR) {
2113 struct reg_data_type *data_type = type->reg_type_vector->type;
2114 if (data_type->type == REG_TYPE_ARCH_DEFINED) {
2115 if (lookup_add_arch_defined_types(arch_defined_types_list, data_type->id,
2116 num_arch_defined_types))
2117 gdb_generate_reg_type_description(target, tdesc, pos, size, data_type,
2118 arch_defined_types_list,
2119 num_arch_defined_types);
2120 }
2121 /* <vector id="id" type="type" count="count"/> */
2122 xml_printf(&retval, tdesc, pos, size,
2123 "<vector id=\"%s\" type=\"%s\" count=\"%" PRIu32 "\"/>\n",
2124 type->id, type->reg_type_vector->type->id,
2125 type->reg_type_vector->count);
2126
2127 } else if (type->type_class == REG_TYPE_CLASS_UNION) {
2128 struct reg_data_type_union_field *field;
2129 field = type->reg_type_union->fields;
2130 while (field) {
2131 struct reg_data_type *data_type = field->type;
2132 if (data_type->type == REG_TYPE_ARCH_DEFINED) {
2133 if (lookup_add_arch_defined_types(arch_defined_types_list, data_type->id,
2134 num_arch_defined_types))
2135 gdb_generate_reg_type_description(target, tdesc, pos, size, data_type,
2136 arch_defined_types_list,
2137 num_arch_defined_types);
2138 }
2139
2140 field = field->next;
2141 }
2142 /* <union id="id">
2143 * <field name="name" type="type"/> ...
2144 * </union> */
2145 xml_printf(&retval, tdesc, pos, size,
2146 "<union id=\"%s\">\n",
2147 type->id);
2148
2149 field = type->reg_type_union->fields;
2150 while (field) {
2151 xml_printf(&retval, tdesc, pos, size,
2152 "<field name=\"%s\" type=\"%s\"/>\n",
2153 field->name, field->type->id);
2154
2155 field = field->next;
2156 }
2157
2158 xml_printf(&retval, tdesc, pos, size,
2159 "</union>\n");
2160
2161 } else if (type->type_class == REG_TYPE_CLASS_STRUCT) {
2162 struct reg_data_type_struct_field *field;
2163 field = type->reg_type_struct->fields;
2164
2165 if (field->use_bitfields) {
2166 /* <struct id="id" size="size">
2167 * <field name="name" start="start" end="end"/> ...
2168 * </struct> */
2169 xml_printf(&retval, tdesc, pos, size,
2170 "<struct id=\"%s\" size=\"%" PRIu32 "\">\n",
2171 type->id, type->reg_type_struct->size);
2172 while (field) {
2173 xml_printf(&retval, tdesc, pos, size,
2174 "<field name=\"%s\" start=\"%" PRIu32 "\" end=\"%" PRIu32 "\" type=\"%s\" />\n",
2175 field->name, field->bitfield->start, field->bitfield->end,
2176 gdb_get_reg_type_name(field->bitfield->type));
2177
2178 field = field->next;
2179 }
2180 } else {
2181 while (field) {
2182 struct reg_data_type *data_type = field->type;
2183 if (data_type->type == REG_TYPE_ARCH_DEFINED) {
2184 if (lookup_add_arch_defined_types(arch_defined_types_list, data_type->id,
2185 num_arch_defined_types))
2186 gdb_generate_reg_type_description(target, tdesc, pos, size, data_type,
2187 arch_defined_types_list,
2188 num_arch_defined_types);
2189 }
2190 }
2191
2192 /* <struct id="id">
2193 * <field name="name" type="type"/> ...
2194 * </struct> */
2195 xml_printf(&retval, tdesc, pos, size,
2196 "<struct id=\"%s\">\n",
2197 type->id);
2198 while (field) {
2199 xml_printf(&retval, tdesc, pos, size,
2200 "<field name=\"%s\" type=\"%s\"/>\n",
2201 field->name, field->type->id);
2202
2203 field = field->next;
2204 }
2205 }
2206
2207 xml_printf(&retval, tdesc, pos, size,
2208 "</struct>\n");
2209
2210 } else if (type->type_class == REG_TYPE_CLASS_FLAGS) {
2211 /* <flags id="id" size="size">
2212 * <field name="name" start="start" end="end"/> ...
2213 * </flags> */
2214 xml_printf(&retval, tdesc, pos, size,
2215 "<flags id=\"%s\" size=\"%" PRIu32 "\">\n",
2216 type->id, type->reg_type_flags->size);
2217
2218 struct reg_data_type_flags_field *field;
2219 field = type->reg_type_flags->fields;
2220 while (field) {
2221 xml_printf(&retval, tdesc, pos, size,
2222 "<field name=\"%s\" start=\"%" PRIu32 "\" end=\"%" PRIu32 "\" type=\"%s\" />\n",
2223 field->name, field->bitfield->start, field->bitfield->end,
2224 gdb_get_reg_type_name(field->bitfield->type));
2225
2226 field = field->next;
2227 }
2228
2229 xml_printf(&retval, tdesc, pos, size,
2230 "</flags>\n");
2231
2232 }
2233
2234 return ERROR_OK;
2235 }
2236
2237 /* Get a list of available target registers features. feature_list must
2238 * be freed by caller.
2239 */
2240 static int get_reg_features_list(struct target *target, char const **feature_list[], int *feature_list_size,
2241 struct reg **reg_list, int reg_list_size)
2242 {
2243 int tbl_sz = 0;
2244
2245 /* Start with only one element */
2246 *feature_list = calloc(1, sizeof(char *));
2247
2248 for (int i = 0; i < reg_list_size; i++) {
2249 if (reg_list[i]->exist == false || reg_list[i]->hidden)
2250 continue;
2251
2252 if (reg_list[i]->feature
2253 && reg_list[i]->feature->name
2254 && (strcmp(reg_list[i]->feature->name, ""))) {
2255 /* We found a feature, check if the feature is already in the
2256 * table. If not, allocate a new entry for the table and
2257 * put the new feature in it.
2258 */
2259 for (int j = 0; j < (tbl_sz + 1); j++) {
2260 if (!((*feature_list)[j])) {
2261 (*feature_list)[tbl_sz++] = reg_list[i]->feature->name;
2262 *feature_list = realloc(*feature_list, sizeof(char *) * (tbl_sz + 1));
2263 (*feature_list)[tbl_sz] = NULL;
2264 break;
2265 } else {
2266 if (!strcmp((*feature_list)[j], reg_list[i]->feature->name))
2267 break;
2268 }
2269 }
2270 }
2271 }
2272
2273 if (feature_list_size)
2274 *feature_list_size = tbl_sz;
2275
2276 return ERROR_OK;
2277 }
2278
2279 /* Create a register list that's the union of all the registers of the SMP
2280 * group this target is in. If the target is not part of an SMP group, this
2281 * returns the same as target_get_gdb_reg_list_noread().
2282 */
2283 static int smp_reg_list_noread(struct target *target,
2284 struct reg **combined_list[], int *combined_list_size,
2285 enum target_register_class reg_class)
2286 {
2287 if (!target->smp)
2288 return target_get_gdb_reg_list_noread(target, combined_list,
2289 combined_list_size, REG_CLASS_ALL);
2290
2291 unsigned int combined_allocated = 256;
2292 struct reg **local_list = malloc(combined_allocated * sizeof(struct reg *));
2293 if (!local_list) {
2294 LOG_ERROR("malloc(%zu) failed", combined_allocated * sizeof(struct reg *));
2295 return ERROR_FAIL;
2296 }
2297 unsigned int local_list_size = 0;
2298
2299 struct target_list *head;
2300 foreach_smp_target(head, target->smp_targets) {
2301 if (!target_was_examined(head->target))
2302 continue;
2303
2304 struct reg **reg_list = NULL;
2305 int reg_list_size;
2306 int result = target_get_gdb_reg_list_noread(head->target, &reg_list,
2307 &reg_list_size, reg_class);
2308 if (result != ERROR_OK) {
2309 free(local_list);
2310 return result;
2311 }
2312 for (int i = 0; i < reg_list_size; i++) {
2313 bool found = false;
2314 struct reg *a = reg_list[i];
2315 if (a->exist) {
2316 /* Nested loop makes this O(n^2), but this entire function with
2317 * 5 RISC-V targets takes just 2ms on my computer. Fast enough
2318 * for me. */
2319 for (unsigned int j = 0; j < local_list_size; j++) {
2320 struct reg *b = local_list[j];
2321 if (!strcmp(a->name, b->name)) {
2322 found = true;
2323 if (a->size != b->size) {
2324 LOG_ERROR("SMP register %s is %d bits on one "
2325 "target, but %d bits on another target.",
2326 a->name, a->size, b->size);
2327 free(reg_list);
2328 free(local_list);
2329 return ERROR_FAIL;
2330 }
2331 break;
2332 }
2333 }
2334 if (!found) {
2335 LOG_DEBUG("[%s] %s not found in combined list", target_name(target), a->name);
2336 if (local_list_size >= combined_allocated) {
2337 combined_allocated *= 2;
2338 local_list = realloc(local_list, combined_allocated * sizeof(struct reg *));
2339 if (!local_list) {
2340 LOG_ERROR("realloc(%zu) failed", combined_allocated * sizeof(struct reg *));
2341 return ERROR_FAIL;
2342 }
2343 }
2344 local_list[local_list_size] = a;
2345 local_list_size++;
2346 }
2347 }
2348 }
2349 free(reg_list);
2350 }
2351
2352 if (local_list_size == 0) {
2353 LOG_ERROR("Unable to get register list");
2354 free(local_list);
2355 return ERROR_FAIL;
2356 }
2357
2358 /* Now warn the user about any registers that weren't found in every target. */
2359 foreach_smp_target(head, target->smp_targets) {
2360 if (!target_was_examined(head->target))
2361 continue;
2362
2363 struct reg **reg_list = NULL;
2364 int reg_list_size;
2365 int result = target_get_gdb_reg_list_noread(head->target, &reg_list,
2366 &reg_list_size, reg_class);
2367 if (result != ERROR_OK) {
2368 free(local_list);
2369 return result;
2370 }
2371 for (unsigned int i = 0; i < local_list_size; i++) {
2372 bool found = false;
2373 struct reg *a = local_list[i];
2374 for (int j = 0; j < reg_list_size; j++) {
2375 struct reg *b = reg_list[j];
2376 if (b->exist && !strcmp(a->name, b->name)) {
2377 found = true;
2378 break;
2379 }
2380 }
2381 if (!found) {
2382 LOG_WARNING("Register %s does not exist in %s, which is part of an SMP group where "
2383 "this register does exist.",
2384 a->name, target_name(head->target));
2385 }
2386 }
2387 free(reg_list);
2388 }
2389
2390 *combined_list = local_list;
2391 *combined_list_size = local_list_size;
2392 return ERROR_OK;
2393 }
2394
2395 static int gdb_generate_target_description(struct target *target, char **tdesc_out)
2396 {
2397 int retval = ERROR_OK;
2398 struct reg **reg_list = NULL;
2399 int reg_list_size;
2400 char const *architecture;
2401 char const **features = NULL;
2402 int feature_list_size = 0;
2403 char *tdesc = NULL;
2404 int pos = 0;
2405 int size = 0;
2406
2407
2408 retval = smp_reg_list_noread(target, &reg_list, &reg_list_size,
2409 REG_CLASS_ALL);
2410
2411 if (retval != ERROR_OK) {
2412 LOG_ERROR("get register list failed");
2413 retval = ERROR_FAIL;
2414 goto error;
2415 }
2416
2417 if (reg_list_size <= 0) {
2418 LOG_ERROR("get register list failed");
2419 retval = ERROR_FAIL;
2420 goto error;
2421 }
2422
2423 /* Get a list of available target registers features */
2424 retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size);
2425 if (retval != ERROR_OK) {
2426 LOG_ERROR("Can't get the registers feature list");
2427 retval = ERROR_FAIL;
2428 goto error;
2429 }
2430
2431 /* If we found some features associated with registers, create sections */
2432 int current_feature = 0;
2433
2434 xml_printf(&retval, &tdesc, &pos, &size,
2435 "<?xml version=\"1.0\"?>\n"
2436 "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">\n"
2437 "<target version=\"1.0\">\n");
2438
2439 /* generate architecture element if supported by target */
2440 architecture = target_get_gdb_arch(target);
2441 if (architecture)
2442 xml_printf(&retval, &tdesc, &pos, &size,
2443 "<architecture>%s</architecture>\n", architecture);
2444
2445 /* generate target description according to register list */
2446 if (features) {
2447 while (features[current_feature]) {
2448 char const **arch_defined_types = NULL;
2449 int num_arch_defined_types = 0;
2450
2451 arch_defined_types = calloc(1, sizeof(char *));
2452 xml_printf(&retval, &tdesc, &pos, &size,
2453 "<feature name=\"%s\">\n",
2454 features[current_feature]);
2455
2456 int i;
2457 for (i = 0; i < reg_list_size; i++) {
2458
2459 if (reg_list[i]->exist == false || reg_list[i]->hidden)
2460 continue;
2461
2462 if (strcmp(reg_list[i]->feature->name, features[current_feature]))
2463 continue;
2464
2465 const char *type_str;
2466 if (reg_list[i]->reg_data_type) {
2467 if (reg_list[i]->reg_data_type->type == REG_TYPE_ARCH_DEFINED) {
2468 /* generate <type... first, if there are architecture-defined types. */
2469 if (lookup_add_arch_defined_types(&arch_defined_types,
2470 reg_list[i]->reg_data_type->id,
2471 &num_arch_defined_types))
2472 gdb_generate_reg_type_description(target, &tdesc, &pos, &size,
2473 reg_list[i]->reg_data_type,
2474 &arch_defined_types,
2475 &num_arch_defined_types);
2476
2477 type_str = reg_list[i]->reg_data_type->id;
2478 } else {
2479 /* predefined type */
2480 type_str = gdb_get_reg_type_name(
2481 reg_list[i]->reg_data_type->type);
2482 }
2483 } else {
2484 /* Default type is "int" */
2485 type_str = "int";
2486 }
2487
2488 xml_printf(&retval, &tdesc, &pos, &size,
2489 "<reg name=\"%s\"", reg_list[i]->name);
2490 xml_printf(&retval, &tdesc, &pos, &size,
2491 " bitsize=\"%" PRIu32 "\"", reg_list[i]->size);
2492 xml_printf(&retval, &tdesc, &pos, &size,
2493 " regnum=\"%" PRIu32 "\"", reg_list[i]->number);
2494 if (reg_list[i]->caller_save)
2495 xml_printf(&retval, &tdesc, &pos, &size,
2496 " save-restore=\"yes\"");
2497 else
2498 xml_printf(&retval, &tdesc, &pos, &size,
2499 " save-restore=\"no\"");
2500
2501 xml_printf(&retval, &tdesc, &pos, &size,
2502 " type=\"%s\"", type_str);
2503
2504 if (reg_list[i]->group)
2505 xml_printf(&retval, &tdesc, &pos, &size,
2506 " group=\"%s\"", reg_list[i]->group);
2507
2508 xml_printf(&retval, &tdesc, &pos, &size,
2509 "/>\n");
2510 }
2511
2512 xml_printf(&retval, &tdesc, &pos, &size,
2513 "</feature>\n");
2514
2515 current_feature++;
2516 free(arch_defined_types);
2517 }
2518 }
2519
2520 xml_printf(&retval, &tdesc, &pos, &size,
2521 "</target>\n");
2522
2523 error:
2524 free(features);
2525 free(reg_list);
2526
2527 if (retval == ERROR_OK)
2528 *tdesc_out = tdesc;
2529 else
2530 free(tdesc);
2531
2532 return retval;
2533 }
2534
2535 static int gdb_get_target_description_chunk(struct target *target, struct target_desc_format *target_desc,
2536 char **chunk, int32_t offset, uint32_t length)
2537 {
2538 if (!target_desc) {
2539 LOG_ERROR("Unable to Generate Target Description");
2540 return ERROR_FAIL;
2541 }
2542
2543 char *tdesc = target_desc->tdesc;
2544 uint32_t tdesc_length = target_desc->tdesc_length;
2545
2546 if (!tdesc) {
2547 int retval = gdb_generate_target_description(target, &tdesc);
2548 if (retval != ERROR_OK) {
2549 LOG_ERROR("Unable to Generate Target Description");
2550 return ERROR_FAIL;
2551 }
2552
2553 tdesc_length = strlen(tdesc);
2554 }
2555
2556 char transfer_type;
2557
2558 if (length < (tdesc_length - offset))
2559 transfer_type = 'm';
2560 else
2561 transfer_type = 'l';
2562
2563 *chunk = malloc(length + 2);
2564 if (!*chunk) {
2565 LOG_ERROR("Unable to allocate memory");
2566 return ERROR_FAIL;
2567 }
2568
2569 (*chunk)[0] = transfer_type;
2570 if (transfer_type == 'm') {
2571 strncpy((*chunk) + 1, tdesc + offset, length);
2572 (*chunk)[1 + length] = '\0';
2573 } else {
2574 strncpy((*chunk) + 1, tdesc + offset, tdesc_length - offset);
2575 (*chunk)[1 + (tdesc_length - offset)] = '\0';
2576
2577 /* After gdb-server sends out last chunk, invalidate tdesc. */
2578 free(tdesc);
2579 tdesc = NULL;
2580 tdesc_length = 0;
2581 }
2582
2583 target_desc->tdesc = tdesc;
2584 target_desc->tdesc_length = tdesc_length;
2585
2586 return ERROR_OK;
2587 }
2588
2589 static int gdb_target_description_supported(struct target *target, int *supported)
2590 {
2591 int retval = ERROR_OK;
2592 struct reg **reg_list = NULL;
2593 int reg_list_size = 0;
2594 char const **features = NULL;
2595 int feature_list_size = 0;
2596
2597 char const *architecture = target_get_gdb_arch(target);
2598
2599 retval = target_get_gdb_reg_list_noread(target, &reg_list,
2600 &reg_list_size, REG_CLASS_ALL);
2601 if (retval != ERROR_OK) {
2602 LOG_ERROR("get register list failed");
2603 goto error;
2604 }
2605
2606 if (reg_list_size <= 0) {
2607 LOG_ERROR("get register list failed");
2608 retval = ERROR_FAIL;
2609 goto error;
2610 }
2611
2612 /* Get a list of available target registers features */
2613 retval = get_reg_features_list(target, &features, &feature_list_size, reg_list, reg_list_size);
2614 if (retval != ERROR_OK) {
2615 LOG_ERROR("Can't get the registers feature list");
2616 goto error;
2617 }
2618
2619 if (supported) {
2620 if (architecture || feature_list_size)
2621 *supported = 1;
2622 else
2623 *supported = 0;
2624 }
2625
2626 error:
2627 free(features);
2628
2629 free(reg_list);
2630
2631 return retval;
2632 }
2633
2634 static int gdb_generate_thread_list(struct target *target, char **thread_list_out)
2635 {
2636 struct rtos *rtos = target->rtos;
2637 int retval = ERROR_OK;
2638 char *thread_list = NULL;
2639 int pos = 0;
2640 int size = 0;
2641
2642 xml_printf(&retval, &thread_list, &pos, &size,
2643 "<?xml version=\"1.0\"?>\n"
2644 "<threads>\n");
2645
2646 if (rtos) {
2647 for (int i = 0; i < rtos->thread_count; i++) {
2648 struct thread_detail *thread_detail = &rtos->thread_details[i];
2649
2650 if (!thread_detail->exists)
2651 continue;
2652
2653 if (thread_detail->thread_name_str)
2654 xml_printf(&retval, &thread_list, &pos, &size,
2655 "<thread id=\"%" PRIx64 "\" name=\"%s\">",
2656 thread_detail->threadid,
2657 thread_detail->thread_name_str);
2658 else
2659 xml_printf(&retval, &thread_list, &pos, &size,
2660 "<thread id=\"%" PRIx64 "\">", thread_detail->threadid);
2661
2662 if (thread_detail->thread_name_str)
2663 xml_printf(&retval, &thread_list, &pos, &size,
2664 "Name: %s", thread_detail->thread_name_str);
2665
2666 if (thread_detail->extra_info_str) {
2667 if (thread_detail->thread_name_str)
2668 xml_printf(&retval, &thread_list, &pos, &size,
2669 ", ");
2670 xml_printf(&retval, &thread_list, &pos, &size,
2671 "%s", thread_detail->extra_info_str);
2672 }
2673
2674 xml_printf(&retval, &thread_list, &pos, &size,
2675 "</thread>\n");
2676 }
2677 }
2678
2679 xml_printf(&retval, &thread_list, &pos, &size,
2680 "</threads>\n");
2681
2682 if (retval == ERROR_OK)
2683 *thread_list_out = thread_list;
2684 else
2685 free(thread_list);
2686
2687 return retval;
2688 }
2689
2690 static int gdb_get_thread_list_chunk(struct target *target, char **thread_list,
2691 char **chunk, int32_t offset, uint32_t length)
2692 {
2693 if (!*thread_list) {
2694 int retval = gdb_generate_thread_list(target, thread_list);
2695 if (retval != ERROR_OK) {
2696 LOG_ERROR("Unable to Generate Thread List");
2697 return ERROR_FAIL;
2698 }
2699 }
2700
2701 size_t thread_list_length = strlen(*thread_list);
2702 char transfer_type;
2703
2704 length = MIN(length, thread_list_length - offset);
2705 if (length < (thread_list_length - offset))
2706 transfer_type = 'm';
2707 else
2708 transfer_type = 'l';
2709
2710 *chunk = malloc(length + 2 + 3);
2711 /* Allocating extra 3 bytes prevents false positive valgrind report
2712 * of strlen(chunk) word access:
2713 * Invalid read of size 4
2714 * Address 0x4479934 is 44 bytes inside a block of size 45 alloc'd */
2715 if (!*chunk) {
2716 LOG_ERROR("Unable to allocate memory");
2717 return ERROR_FAIL;
2718 }
2719
2720 (*chunk)[0] = transfer_type;
2721 strncpy((*chunk) + 1, (*thread_list) + offset, length);
2722 (*chunk)[1 + length] = '\0';
2723
2724 /* After gdb-server sends out last chunk, invalidate thread list. */
2725 if (transfer_type == 'l') {
2726 free(*thread_list);
2727 *thread_list = NULL;
2728 }
2729
2730 return ERROR_OK;
2731 }
2732
2733 static int gdb_query_packet(struct connection *connection,
2734 char const *packet, int packet_size)
2735 {
2736 struct command_context *cmd_ctx = connection->cmd_ctx;
2737 struct gdb_connection *gdb_connection = connection->priv;
2738 struct target *target = get_target_from_connection(connection);
2739
2740 if (strncmp(packet, "qRcmd,", 6) == 0) {
2741 if (packet_size > 6) {
2742 Jim_Interp *interp = cmd_ctx->interp;
2743 char *cmd;
2744 cmd = malloc((packet_size - 6) / 2 + 1);
2745 size_t len = unhexify((uint8_t *)cmd, packet + 6, (packet_size - 6) / 2);
2746 cmd[len] = 0;
2747
2748 /* We want to print all debug output to GDB connection */
2749 gdb_connection->output_flag = GDB_OUTPUT_ALL;
2750 target_call_timer_callbacks_now();
2751 /* some commands need to know the GDB connection, make note of current
2752 * GDB connection. */
2753 current_gdb_connection = gdb_connection;
2754
2755 struct target *saved_target_override = cmd_ctx->current_target_override;
2756 cmd_ctx->current_target_override = NULL;
2757
2758 struct command_context *old_context = Jim_GetAssocData(interp, "context");
2759 Jim_DeleteAssocData(interp, "context");
2760 int retval = Jim_SetAssocData(interp, "context", NULL, cmd_ctx);
2761 if (retval == JIM_OK) {
2762 retval = Jim_EvalObj(interp, Jim_NewStringObj(interp, cmd, -1));
2763 Jim_DeleteAssocData(interp, "context");
2764 }
2765 int inner_retval = Jim_SetAssocData(interp, "context", NULL, old_context);
2766 if (retval == JIM_OK)
2767 retval = inner_retval;
2768
2769 cmd_ctx->current_target_override = saved_target_override;
2770
2771 current_gdb_connection = NULL;
2772 target_call_timer_callbacks_now();
2773 gdb_connection->output_flag = GDB_OUTPUT_NO;
2774 free(cmd);
2775 if (retval == JIM_RETURN)
2776 retval = interp->returnCode;
2777 int lenmsg;
2778 const char *cretmsg = Jim_GetString(Jim_GetResult(interp), &lenmsg);
2779 char *retmsg;
2780 if (lenmsg && cretmsg[lenmsg - 1] != '\n') {
2781 retmsg = alloc_printf("%s\n", cretmsg);
2782 lenmsg++;
2783 } else {
2784 retmsg = strdup(cretmsg);
2785 }
2786 if (!retmsg)
2787 return ERROR_GDB_BUFFER_TOO_SMALL;
2788
2789 if (retval == JIM_OK) {
2790 if (lenmsg) {
2791 char *hex_buffer = malloc(lenmsg * 2 + 1);
2792 if (!hex_buffer) {
2793 free(retmsg);
2794 return ERROR_GDB_BUFFER_TOO_SMALL;
2795 }
2796
2797 size_t pkt_len = hexify(hex_buffer, (const uint8_t *)retmsg, lenmsg,
2798 lenmsg * 2 + 1);
2799 gdb_put_packet(connection, hex_buffer, pkt_len);
2800 free(hex_buffer);
2801 } else {
2802 gdb_put_packet(connection, "OK", 2);
2803 }
2804 } else {
2805 if (lenmsg)
2806 gdb_output_con(connection, retmsg);
2807 gdb_send_error(connection, retval);
2808 }
2809 free(retmsg);
2810 return ERROR_OK;
2811 }
2812 gdb_put_packet(connection, "OK", 2);
2813 return ERROR_OK;
2814 } else if (strncmp(packet, "qCRC:", 5) == 0) {
2815 if (packet_size > 5) {
2816 int retval;
2817 char gdb_reply[10];
2818 char *separator;
2819 uint32_t checksum;
2820 target_addr_t addr = 0;
2821 uint32_t len = 0;
2822
2823 /* skip command character */
2824 packet += 5;
2825
2826 addr = strtoull(packet, &separator, 16);
2827
2828 if (*separator != ',') {
2829 LOG_ERROR("incomplete read memory packet received, dropping connection");
2830 return ERROR_SERVER_REMOTE_CLOSED;
2831 }
2832
2833 len = strtoul(separator + 1, NULL, 16);
2834
2835 retval = target_checksum_memory(target, addr, len, &checksum);
2836
2837 if (retval == ERROR_OK) {
2838 snprintf(gdb_reply, 10, "C%8.8" PRIx32 "", checksum);
2839 gdb_put_packet(connection, gdb_reply, 9);
2840 } else {
2841 retval = gdb_error(connection, retval);
2842 if (retval != ERROR_OK)
2843 return retval;
2844 }
2845
2846 return ERROR_OK;
2847 }
2848 } else if (strncmp(packet, "qSupported", 10) == 0) {
2849 /* we currently support packet size and qXfer:memory-map:read (if enabled)
2850 * qXfer:features:read is supported for some targets */
2851 int retval = ERROR_OK;
2852 char *buffer = NULL;
2853 int pos = 0;
2854 int size = 0;
2855 int gdb_target_desc_supported = 0;
2856
2857 /* we need to test that the target supports target descriptions */
2858 retval = gdb_target_description_supported(target, &gdb_target_desc_supported);
2859 if (retval != ERROR_OK) {
2860 LOG_INFO("Failed detecting Target Description Support, disabling");
2861 gdb_target_desc_supported = 0;
2862 }
2863
2864 /* support may be disabled globally */
2865 if (gdb_use_target_description == 0) {
2866 if (gdb_target_desc_supported)
2867 LOG_WARNING("Target Descriptions Supported, but disabled");
2868 gdb_target_desc_supported = 0;
2869 }
2870
2871 xml_printf(&retval,
2872 &buffer,
2873 &pos,
2874 &size,
2875 "PacketSize=%x;qXfer:memory-map:read%c;qXfer:features:read%c;qXfer:threads:read+;QStartNoAckMode+;vContSupported+",
2876 GDB_BUFFER_SIZE,
2877 ((gdb_use_memory_map == 1) && (flash_get_bank_count() > 0)) ? '+' : '-',
2878 (gdb_target_desc_supported == 1) ? '+' : '-');
2879
2880 if (retval != ERROR_OK) {
2881 gdb_send_error(connection, 01);
2882 return ERROR_OK;
2883 }
2884
2885 gdb_put_packet(connection, buffer, strlen(buffer));
2886 free(buffer);
2887
2888 return ERROR_OK;
2889 } else if ((strncmp(packet, "qXfer:memory-map:read::", 23) == 0)
2890 && (flash_get_bank_count() > 0))
2891 return gdb_memory_map(connection, packet, packet_size);
2892 else if (strncmp(packet, "qXfer:features:read:", 20) == 0) {
2893 char *xml = NULL;
2894 int retval = ERROR_OK;
2895
2896 int offset;
2897 unsigned int length;
2898
2899 /* skip command character */
2900 packet += 20;
2901
2902 if (decode_xfer_read(packet, NULL, &offset, &length) < 0) {
2903 gdb_send_error(connection, 01);
2904 return ERROR_OK;
2905 }
2906
2907 /* Target should prepare correct target description for annex.
2908 * The first character of returned xml is 'm' or 'l'. 'm' for
2909 * there are *more* chunks to transfer. 'l' for it is the *last*
2910 * chunk of target description.
2911 */
2912 retval = gdb_get_target_description_chunk(target, &gdb_connection->target_desc,
2913 &xml, offset, length);
2914 if (retval != ERROR_OK) {
2915 gdb_error(connection, retval);
2916 return retval;
2917 }
2918
2919 gdb_put_packet(connection, xml, strlen(xml));
2920
2921 free(xml);
2922 return ERROR_OK;
2923 } else if (strncmp(packet, "qXfer:threads:read:", 19) == 0) {
2924 char *xml = NULL;
2925 int retval = ERROR_OK;
2926
2927 int offset;
2928 unsigned int length;
2929
2930 /* skip command character */
2931 packet += 19;
2932
2933 if (decode_xfer_read(packet, NULL, &offset, &length) < 0) {
2934 gdb_send_error(connection, 01);
2935 return ERROR_OK;
2936 }
2937
2938 /* Target should prepare correct thread list for annex.
2939 * The first character of returned xml is 'm' or 'l'. 'm' for
2940 * there are *more* chunks to transfer. 'l' for it is the *last*
2941 * chunk of target description.
2942 */
2943 retval = gdb_get_thread_list_chunk(target, &gdb_connection->thread_list,
2944 &xml, offset, length);
2945 if (retval != ERROR_OK) {
2946 gdb_error(connection, retval);
2947 return retval;
2948 }
2949
2950 gdb_put_packet(connection, xml, strlen(xml));
2951
2952 free(xml);
2953 return ERROR_OK;
2954 } else if (strncmp(packet, "QStartNoAckMode", 15) == 0) {
2955 gdb_connection->noack_mode = 1;
2956 gdb_put_packet(connection, "OK", 2);
2957 return ERROR_OK;
2958 }
2959
2960 gdb_put_packet(connection, "", 0);
2961 return ERROR_OK;
2962 }
2963
2964 static bool gdb_handle_vcont_packet(struct connection *connection, const char *packet, int packet_size)
2965 {
2966 struct gdb_connection *gdb_connection = connection->priv;
2967 struct target *target = get_target_from_connection(connection);
2968 const char *parse = packet;
2969 int retval;
2970
2971 /* query for vCont supported */
2972 if (parse[0] == '?') {
2973 if (target->type->step) {
2974 /* gdb doesn't accept c without C and s without S */
2975 gdb_put_packet(connection, "vCont;c;C;s;S", 13);
2976 return true;
2977 }
2978 return false;
2979 }
2980
2981 if (parse[0] == ';') {
2982 ++parse;
2983 --packet_size;
2984 }
2985
2986 /* simple case, a continue packet */
2987 if (parse[0] == 'c') {
2988 gdb_running_type = 'c';
2989 LOG_DEBUG("target %s continue", target_name(target));
2990 gdb_connection->output_flag = GDB_OUTPUT_ALL;
2991 retval = target_resume(target, 1, 0, 0, 0);
2992 if (retval == ERROR_TARGET_NOT_HALTED)
2993 LOG_INFO("target %s was not halted when resume was requested", target_name(target));
2994
2995 /* poll target in an attempt to make its internal state consistent */
2996 if (retval != ERROR_OK) {
2997 retval = target_poll(target);
2998 if (retval != ERROR_OK)
2999 LOG_DEBUG("error polling target %s after failed resume", target_name(target));
3000 }
3001
3002 /*
3003 * We don't report errors to gdb here, move frontend_state to
3004 * TARGET_RUNNING to stay in sync with gdb's expectation of the
3005 * target state
3006 */
3007 gdb_connection->frontend_state = TARGET_RUNNING;
3008 target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
3009
3010 return true;
3011 }
3012
3013 /* single-step or step-over-breakpoint */
3014 if (parse[0] == 's') {
3015 gdb_running_type = 's';
3016 bool fake_step = false;
3017
3018 if (strncmp(parse, "s:", 2) == 0) {
3019 struct target *ct = target;
3020 int current_pc = 1;
3021 int64_t thread_id;
3022 char *endp;
3023
3024 parse += 2;
3025 packet_size -= 2;
3026
3027 thread_id = strtoll(parse, &endp, 16);
3028 if (endp) {
3029 packet_size -= endp - parse;
3030 parse = endp;
3031 }
3032
3033 if (target->rtos) {
3034 /* FIXME: why is this necessary? rtos state should be up-to-date here already! */
3035 rtos_update_threads(target);
3036
3037 target->rtos->gdb_target_for_threadid(connection, thread_id, &ct);
3038
3039 /*
3040 * check if the thread to be stepped is the current rtos thread
3041 * if not, we must fake the step
3042 */
3043 if (target->rtos->current_thread != thread_id)
3044 fake_step = true;
3045 }
3046
3047 if (parse[0] == ';') {
3048 ++parse;
3049 --packet_size;
3050
3051 if (parse[0] == 'c') {
3052 parse += 1;
3053
3054 /* check if thread-id follows */
3055 if (parse[0] == ':') {
3056 int64_t tid;
3057 parse += 1;
3058
3059 tid = strtoll(parse, &endp, 16);
3060 if (tid == thread_id) {
3061 /*
3062 * Special case: only step a single thread (core),
3063 * keep the other threads halted. Currently, only
3064 * aarch64 target understands it. Other target types don't
3065 * care (nobody checks the actual value of 'current')
3066 * and it doesn't really matter. This deserves
3067 * a symbolic constant and a formal interface documentation
3068 * at a later time.
3069 */
3070 LOG_DEBUG("request to step current core only");
3071 /* uncomment after checking that indeed other targets are safe */
3072 /*current_pc = 2;*/
3073 }
3074 }
3075 }
3076 }
3077
3078 LOG_DEBUG("target %s single-step thread %"PRIx64, target_name(ct), thread_id);
3079 gdb_connection->output_flag = GDB_OUTPUT_ALL;
3080 target_call_event_callbacks(ct, TARGET_EVENT_GDB_START);
3081
3082 /*
3083 * work around an annoying gdb behaviour: when the current thread
3084 * is changed in gdb, it assumes that the target can follow and also
3085 * make the thread current. This is an assumption that cannot hold
3086 * for a real target running a multi-threading OS. We just fake
3087 * the step to not trigger an internal error in gdb. See
3088 * https://sourceware.org/bugzilla/show_bug.cgi?id=22925 for details
3089 */
3090 if (fake_step) {
3091 int sig_reply_len;
3092 char sig_reply[128];
3093
3094 LOG_DEBUG("fake step thread %"PRIx64, thread_id);
3095
3096 sig_reply_len = snprintf(sig_reply, sizeof(sig_reply),
3097 "T05thread:%016"PRIx64";", thread_id);
3098
3099 gdb_put_packet(connection, sig_reply, sig_reply_len);
3100 gdb_connection->output_flag = GDB_OUTPUT_NO;
3101
3102 return true;
3103 }
3104
3105 /* support for gdb_sync command */
3106 if (gdb_connection->sync) {
3107 gdb_connection->sync = false;
3108 if (ct->state == TARGET_HALTED) {
3109 LOG_DEBUG("stepi ignored. GDB will now fetch the register state "
3110 "from the target.");
3111 gdb_sig_halted(connection);
3112 gdb_connection->output_flag = GDB_OUTPUT_NO;
3113 } else
3114 gdb_connection->frontend_state = TARGET_RUNNING;
3115 return true;
3116 }
3117
3118 retval = target_step(ct, current_pc, 0, 0);
3119 if (retval == ERROR_TARGET_NOT_HALTED)
3120 LOG_INFO("target %s was not halted when step was requested", target_name(ct));
3121
3122 /* if step was successful send a reply back to gdb */
3123 if (retval == ERROR_OK) {
3124 retval = target_poll(ct);
3125 if (retval != ERROR_OK)
3126 LOG_DEBUG("error polling target %s after successful step", target_name(ct));
3127 /* send back signal information */
3128 gdb_signal_reply(ct, connection);
3129 /* stop forwarding log packets! */
3130 gdb_connection->output_flag = GDB_OUTPUT_NO;
3131 } else
3132 gdb_connection->frontend_state = TARGET_RUNNING;
3133 } else {
3134 LOG_ERROR("Unknown vCont packet");
3135 return false;
3136 }
3137 return true;
3138 }
3139
3140 return false;
3141 }
3142
3143 static char *next_hex_encoded_field(const char **str, char sep)
3144 {
3145 size_t hexlen;
3146 const char *hex = *str;
3147 if (hex[0] == '\0')
3148 return NULL;
3149
3150 const char *end = strchr(hex, sep);
3151 if (!end)
3152 hexlen = strlen(hex);
3153 else
3154 hexlen = end - hex;
3155 *str = hex + hexlen + 1;
3156
3157 if (hexlen % 2 != 0) {
3158 /* Malformed hex data */
3159 return NULL;
3160 }
3161
3162 size_t count = hexlen / 2;
3163 char *decoded = malloc(count + 1);
3164 if (!decoded)
3165 return NULL;
3166
3167 size_t converted = unhexify((void *)decoded, hex, count);
3168 if (converted != count) {
3169 free(decoded);
3170 return NULL;
3171 }
3172
3173 decoded[count] = '\0';
3174 return decoded;
3175 }
3176
3177 /* handle extended restart packet */
3178 static void gdb_restart_inferior(struct connection *connection, const char *packet, int packet_size)
3179 {
3180 struct gdb_connection *gdb_con = connection->priv;
3181 struct target *target = get_target_from_connection(connection);
3182
3183 breakpoint_clear_target(target);
3184 watchpoint_clear_target(target);
3185 command_run_linef(connection->cmd_ctx, "ocd_gdb_restart %s",
3186 target_name(target));
3187 /* set connection as attached after reset */
3188 gdb_con->attached = true;
3189 /* info rtos parts */
3190 gdb_thread_packet(connection, packet, packet_size);
3191 }
3192
3193 static bool gdb_handle_vrun_packet(struct connection *connection, const char *packet, int packet_size)
3194 {
3195 struct target *target = get_target_from_connection(connection);
3196 const char *parse = packet;
3197
3198 /* Skip "vRun" */
3199 parse += 4;
3200
3201 if (parse[0] != ';')
3202 return false;
3203 parse++;
3204
3205 /* Skip first field "filename"; don't know what to do with it. */
3206 free(next_hex_encoded_field(&parse, ';'));
3207
3208 char *cmdline = next_hex_encoded_field(&parse, ';');
3209 while (cmdline) {
3210 char *arg = next_hex_encoded_field(&parse, ';');
3211 if (!arg)
3212 break;
3213 char *new_cmdline = alloc_printf("%s %s", cmdline, arg);
3214 free(cmdline);
3215 free(arg);
3216 cmdline = new_cmdline;
3217 }
3218
3219 if (cmdline) {
3220 if (target->semihosting) {
3221 LOG_INFO("GDB set inferior command line to '%s'", cmdline);
3222 free(target->semihosting->cmdline);
3223 target->semihosting->cmdline = cmdline;
3224 } else {
3225 LOG_INFO("GDB set inferior command line to '%s' but semihosting is unavailable", cmdline);
3226 free(cmdline);
3227 }
3228 }
3229
3230 gdb_restart_inferior(connection, packet, packet_size);
3231 gdb_put_packet(connection, "S00", 3);
3232 return true;
3233 }
3234
3235 static int gdb_v_packet(struct connection *connection,
3236 char const *packet, int packet_size)
3237 {
3238 struct gdb_connection *gdb_connection = connection->priv;
3239 int result;
3240
3241 struct target *target = get_target_from_connection(connection);
3242
3243 if (strncmp(packet, "vCont", 5) == 0) {
3244 bool handled;
3245
3246 packet += 5;
3247 packet_size -= 5;
3248
3249 handled = gdb_handle_vcont_packet(connection, packet, packet_size);
3250 if (!handled)
3251 gdb_put_packet(connection, "", 0);
3252
3253 return ERROR_OK;
3254 }
3255
3256 if (strncmp(packet, "vRun", 4) == 0) {
3257 bool handled;
3258
3259 handled = gdb_handle_vrun_packet(connection, packet, packet_size);
3260 if (!handled)
3261 gdb_put_packet(connection, "", 0);
3262
3263 return ERROR_OK;
3264 }
3265
3266 /* if flash programming disabled - send a empty reply */
3267
3268 if (gdb_flash_program == 0) {
3269 gdb_put_packet(connection, "", 0);
3270 return ERROR_OK;
3271 }
3272
3273 if (strncmp(packet, "vFlashErase:", 12) == 0) {
3274 unsigned long addr;
3275 unsigned long length;
3276
3277 char const *parse = packet + 12;
3278 if (*parse == '\0') {
3279 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3280 return ERROR_SERVER_REMOTE_CLOSED;
3281 }
3282
3283 addr = strtoul(parse, (char **)&parse, 16);
3284
3285 if (*(parse++) != ',' || *parse == '\0') {
3286 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3287 return ERROR_SERVER_REMOTE_CLOSED;
3288 }
3289
3290 length = strtoul(parse, (char **)&parse, 16);
3291
3292 if (*parse != '\0') {
3293 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3294 return ERROR_SERVER_REMOTE_CLOSED;
3295 }
3296
3297 /* assume all sectors need erasing - stops any problems
3298 * when flash_write is called multiple times */
3299 flash_set_dirty();
3300
3301 /* perform any target specific operations before the erase */
3302 target_call_event_callbacks(target,
3303 TARGET_EVENT_GDB_FLASH_ERASE_START);
3304
3305 /* vFlashErase:addr,length messages require region start and
3306 * end to be "block" aligned ... if padding is ever needed,
3307 * GDB will have become dangerously confused.
3308 */
3309 result = flash_erase_address_range(target, false, addr,
3310 length);
3311
3312 /* perform any target specific operations after the erase */
3313 target_call_event_callbacks(target,
3314 TARGET_EVENT_GDB_FLASH_ERASE_END);
3315
3316 /* perform erase */
3317 if (result != ERROR_OK) {
3318 /* GDB doesn't evaluate the actual error number returned,
3319 * treat a failed erase as an I/O error
3320 */
3321 gdb_send_error(connection, EIO);
3322 LOG_ERROR("flash_erase returned %i", result);
3323 } else
3324 gdb_put_packet(connection, "OK", 2);
3325
3326 return ERROR_OK;
3327 }
3328
3329 if (strncmp(packet, "vFlashWrite:", 12) == 0) {
3330 int retval;
3331 unsigned long addr;
3332 unsigned long length;
3333 char const *parse = packet + 12;
3334
3335 if (*parse == '\0') {
3336 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3337 return ERROR_SERVER_REMOTE_CLOSED;
3338 }
3339 addr = strtoul(parse, (char **)&parse, 16);
3340 if (*(parse++) != ':') {
3341 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
3342 return ERROR_SERVER_REMOTE_CLOSED;
3343 }
3344 length = packet_size - (parse - packet);
3345
3346 /* create a new image if there isn't already one */
3347 if (!gdb_connection->vflash_image) {
3348 gdb_connection->vflash_image = malloc(sizeof(struct image));
3349 image_open(gdb_connection->vflash_image, "", "build");
3350 }
3351
3352 /* create new section with content from packet buffer */
3353 retval = image_add_section(gdb_connection->vflash_image,
3354 addr, length, 0x0, (uint8_t const *)parse);
3355 if (retval != ERROR_OK)
3356 return retval;
3357
3358 gdb_put_packet(connection, "OK", 2);
3359
3360 return ERROR_OK;
3361 }
3362
3363 if (strncmp(packet, "vFlashDone", 10) == 0) {
3364 uint32_t written;
3365
3366 /* process the flashing buffer. No need to erase as GDB
3367 * always issues a vFlashErase first. */
3368 target_call_event_callbacks(target,
3369 TARGET_EVENT_GDB_FLASH_WRITE_START);
3370 result = flash_write(target, gdb_connection->vflash_image,
3371 &written, false);
3372 target_call_event_callbacks(target,
3373 TARGET_EVENT_GDB_FLASH_WRITE_END);
3374 if (result != ERROR_OK) {
3375 if (result == ERROR_FLASH_DST_OUT_OF_BANK)
3376 gdb_put_packet(connection, "E.memtype", 9);
3377 else
3378 gdb_send_error(connection, EIO);
3379 } else {
3380 LOG_DEBUG("wrote %u bytes from vFlash image to flash", (unsigned)written);
3381 gdb_put_packet(connection, "OK", 2);
3382 }
3383
3384 image_close(gdb_connection->vflash_image);
3385 free(gdb_connection->vflash_image);
3386 gdb_connection->vflash_image = NULL;
3387
3388 return ERROR_OK;
3389 }
3390
3391 gdb_put_packet(connection, "", 0);
3392 return ERROR_OK;
3393 }
3394
3395 static int gdb_detach(struct connection *connection)
3396 {
3397 /*
3398 * Only reply "OK" to GDB
3399 * it will close the connection and this will trigger a call to
3400 * gdb_connection_closed() that will in turn trigger the event
3401 * TARGET_EVENT_GDB_DETACH
3402 */
3403 return gdb_put_packet(connection, "OK", 2);
3404 }
3405
3406 /* The format of 'F' response packet is
3407 * Fretcode,errno,Ctrl-C flag;call-specific attachment
3408 */
3409 static int gdb_fileio_response_packet(struct connection *connection,
3410 char const *packet, int packet_size)
3411 {
3412 struct target *target = get_target_from_connection(connection);
3413 char *separator;
3414 char *parsing_point;
3415 int fileio_retcode = strtoul(packet + 1, &separator, 16);
3416 int fileio_errno = 0;
3417 bool fileio_ctrl_c = false;
3418 int retval;
3419
3420 LOG_DEBUG("-");
3421
3422 if (*separator == ',') {
3423 parsing_point = separator + 1;
3424 fileio_errno = strtoul(parsing_point, &separator, 16);
3425 if (*separator == ',') {
3426 if (*(separator + 1) == 'C') {
3427 /* TODO: process ctrl-c */
3428 fileio_ctrl_c = true;
3429 }
3430 }
3431 }
3432
3433 LOG_DEBUG("File-I/O response, retcode: 0x%x, errno: 0x%x, ctrl-c: %s",
3434 fileio_retcode, fileio_errno, fileio_ctrl_c ? "true" : "false");
3435
3436 retval = target_gdb_fileio_end(target, fileio_retcode, fileio_errno, fileio_ctrl_c);
3437 if (retval != ERROR_OK)
3438 return ERROR_FAIL;
3439
3440 /* After File-I/O ends, keep continue or step */
3441 if (gdb_running_type == 'c')
3442 retval = target_resume(target, 1, 0x0, 0, 0);
3443 else if (gdb_running_type == 's')
3444 retval = target_step(target, 1, 0x0, 0);
3445 else
3446 retval = ERROR_FAIL;
3447
3448 if (retval != ERROR_OK)
3449 return ERROR_FAIL;
3450
3451 return ERROR_OK;
3452 }
3453
3454 static void gdb_log_callback(void *priv, const char *file, unsigned line,
3455 const char *function, const char *string)
3456 {
3457 struct connection *connection = priv;
3458 struct gdb_connection *gdb_con = connection->priv;
3459
3460 if (gdb_con->output_flag == GDB_OUTPUT_NO)
3461 /* No out allowed */
3462 return;
3463
3464 if (gdb_con->busy) {
3465 /* do not reply this using the O packet */
3466 return;
3467 }
3468
3469 gdb_output_con(connection, string);
3470 }
3471
3472 static void gdb_sig_halted(struct connection *connection)
3473 {
3474 char sig_reply[4];
3475 snprintf(sig_reply, 4, "T%2.2x", 2);
3476 gdb_put_packet(connection, sig_reply, 3);
3477 }
3478
3479 static int gdb_input_inner(struct connection *connection)
3480 {
3481 /* Do not allocate this on the stack */
3482 static char gdb_packet_buffer[GDB_BUFFER_SIZE + 1]; /* Extra byte for null-termination */
3483
3484 struct target *target;
3485 char const *packet = gdb_packet_buffer;
3486 int packet_size;
3487 int retval;
3488 struct gdb_connection *gdb_con = connection->priv;
3489 static bool warn_use_ext;
3490
3491 target = get_target_from_connection(connection);
3492
3493 /* drain input buffer. If one of the packets fail, then an error
3494 * packet is replied, if applicable.
3495 *
3496 * This loop will terminate and the error code is returned.
3497 *
3498 * The calling fn will check if this error is something that
3499 * can be recovered from, or if the connection must be closed.
3500 *
3501 * If the error is recoverable, this fn is called again to
3502 * drain the rest of the buffer.
3503 */
3504 do {
3505 packet_size = GDB_BUFFER_SIZE;
3506 retval = gdb_get_packet(connection, gdb_packet_buffer, &packet_size);
3507 if (retval != ERROR_OK)
3508 return retval;
3509
3510 /* terminate with zero */
3511 gdb_packet_buffer[packet_size] = '\0';
3512
3513 if (packet_size > 0) {
3514
3515 gdb_log_incoming_packet(connection, gdb_packet_buffer);
3516
3517 retval = ERROR_OK;
3518 switch (packet[0]) {
3519 case 'T': /* Is thread alive? */
3520 gdb_thread_packet(connection, packet, packet_size);
3521 break;
3522 case 'H': /* Set current thread ( 'c' for step and continue,
3523 * 'g' for all other operations ) */
3524 gdb_thread_packet(connection, packet, packet_size);
3525 break;
3526 case 'q':
3527 case 'Q':
3528 retval = gdb_thread_packet(connection, packet, packet_size);
3529 if (retval == GDB_THREAD_PACKET_NOT_CONSUMED)
3530 retval = gdb_query_packet(connection, packet, packet_size);
3531 break;
3532 case 'g':
3533 retval = gdb_get_registers_packet(connection, packet, packet_size);
3534 break;
3535 case 'G':
3536 retval = gdb_set_registers_packet(connection, packet, packet_size);
3537 break;
3538 case 'p':
3539 retval = gdb_get_register_packet(connection, packet, packet_size);
3540 break;
3541 case 'P':
3542 retval = gdb_set_register_packet(connection, packet, packet_size);
3543 break;
3544 case 'm':
3545 retval = gdb_read_memory_packet(connection, packet, packet_size);
3546 break;
3547 case 'M':
3548 retval = gdb_write_memory_packet(connection, packet, packet_size);
3549 break;
3550 case 'z':
3551 case 'Z':
3552 retval = gdb_breakpoint_watchpoint_packet(connection, packet, packet_size);
3553 break;
3554 case '?':
3555 gdb_last_signal_packet(connection, packet, packet_size);
3556 /* '?' is sent after the eventual '!' */
3557 if (!warn_use_ext && !gdb_con->extended_protocol) {
3558 warn_use_ext = true;
3559 LOG_WARNING("Prefer GDB command \"target extended-remote :%s\" instead of \"target remote :%s\"",
3560 connection->service->port, connection->service->port);
3561 }
3562 break;
3563 case 'c':
3564 case 's':
3565 {
3566 gdb_thread_packet(connection, packet, packet_size);
3567 gdb_con->output_flag = GDB_OUTPUT_ALL;
3568
3569 if (gdb_con->mem_write_error) {
3570 LOG_ERROR("Memory write failure!");
3571
3572 /* now that we have reported the memory write error,
3573 * we can clear the condition */
3574 gdb_con->mem_write_error = false;
3575 }
3576
3577 bool nostep = false;
3578 bool already_running = false;
3579 if (target->state == TARGET_RUNNING) {
3580 LOG_WARNING("WARNING! The target is already running. "
3581 "All changes GDB did to registers will be discarded! "
3582 "Waiting for target to halt.");
3583 already_running = true;
3584 } else if (target->state != TARGET_HALTED) {
3585 LOG_WARNING("The target is not in the halted nor running stated, "
3586 "stepi/continue ignored.");
3587 nostep = true;
3588 } else if ((packet[0] == 's') && gdb_con->sync) {
3589 /* Hmm..... when you issue a continue in GDB, then a "stepi" is
3590 * sent by GDB first to OpenOCD, thus defeating the check to
3591 * make only the single stepping have the sync feature...
3592 */
3593 nostep = true;
3594 LOG_DEBUG("stepi ignored. GDB will now fetch the register state "
3595 "from the target.");
3596 }
3597 gdb_con->sync = false;
3598
3599 if (!already_running && nostep) {
3600 /* Either the target isn't in the halted state, then we can't
3601 * step/continue. This might be early setup, etc.
3602 *
3603 * Or we want to allow GDB to pick up a fresh set of
3604 * register values without modifying the target state.
3605 *
3606 */
3607 gdb_sig_halted(connection);
3608
3609 /* stop forwarding log packets! */
3610 gdb_con->output_flag = GDB_OUTPUT_NO;
3611 } else {
3612 /* We're running/stepping, in which case we can
3613 * forward log output until the target is halted
3614 */
3615 gdb_con->frontend_state = TARGET_RUNNING;
3616 target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
3617
3618 if (!already_running) {
3619 /* Here we don't want packet processing to stop even if this fails,
3620 * so we use a local variable instead of retval. */
3621 retval = gdb_step_continue_packet(connection, packet, packet_size);
3622 if (retval != ERROR_OK) {
3623 /* we'll never receive a halted
3624 * condition... issue a false one..
3625 */
3626 gdb_frontend_halted(target, connection);
3627 }
3628 }
3629 }
3630 }
3631 break;
3632 case 'v':
3633 retval = gdb_v_packet(connection, packet, packet_size);
3634 break;
3635 case 'D':
3636 retval = gdb_detach(connection);
3637 break;
3638 case 'X':
3639 retval = gdb_write_memory_binary_packet(connection, packet, packet_size);
3640 if (retval != ERROR_OK)
3641 return retval;
3642 break;
3643 case 'k':
3644 if (gdb_con->extended_protocol) {
3645 gdb_con->attached = false;
3646 break;
3647 }
3648 gdb_put_packet(connection, "OK", 2);
3649 return ERROR_SERVER_REMOTE_CLOSED;
3650 case '!':
3651 /* handle extended remote protocol */
3652 gdb_con->extended_protocol = true;
3653 gdb_put_packet(connection, "OK", 2);
3654 break;
3655 case 'R':
3656 /* handle extended restart packet */
3657 gdb_restart_inferior(connection, packet, packet_size);
3658 break;
3659
3660 case 'j':
3661 /* DEPRECATED */
3662 /* packet supported only by smp target i.e cortex_a.c*/
3663 /* handle smp packet replying coreid played to gbd */
3664 gdb_read_smp_packet(connection, packet, packet_size);
3665 break;
3666
3667 case 'J':
3668 /* DEPRECATED */
3669 /* packet supported only by smp target i.e cortex_a.c */
3670 /* handle smp packet setting coreid to be played at next
3671 * resume to gdb */
3672 gdb_write_smp_packet(connection, packet, packet_size);
3673 break;
3674
3675 case 'F':
3676 /* File-I/O extension */
3677 /* After gdb uses host-side syscall to complete target file
3678 * I/O, gdb sends host-side syscall return value to target
3679 * by 'F' packet.
3680 * The format of 'F' response packet is
3681 * Fretcode,errno,Ctrl-C flag;call-specific attachment
3682 */
3683 gdb_con->frontend_state = TARGET_RUNNING;
3684 gdb_con->output_flag = GDB_OUTPUT_ALL;
3685 gdb_fileio_response_packet(connection, packet, packet_size);
3686 break;
3687
3688 default:
3689 /* ignore unknown packets */
3690 LOG_DEBUG("ignoring 0x%2.2x packet", packet[0]);
3691 gdb_put_packet(connection, "", 0);
3692 break;
3693 }
3694
3695 /* if a packet handler returned an error, exit input loop */
3696 if (retval != ERROR_OK)
3697 return retval;
3698 }
3699
3700 if (gdb_con->ctrl_c) {
3701 if (target->state == TARGET_RUNNING) {
3702 struct target *t = target;
3703 if (target->rtos)
3704 target->rtos->gdb_target_for_threadid(connection, target->rtos->current_threadid, &t);
3705 retval = target_halt(t);
3706 if (retval == ERROR_OK)
3707 retval = target_poll(t);
3708 if (retval != ERROR_OK)
3709 target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
3710 gdb_con->ctrl_c = false;
3711 } else {
3712 LOG_INFO("The target is not running when halt was requested, stopping GDB.");
3713 target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
3714 }
3715 }
3716
3717 } while (gdb_con->buf_cnt > 0);
3718
3719 return ERROR_OK;
3720 }
3721
3722 static int gdb_input(struct connection *connection)
3723 {
3724 int retval = gdb_input_inner(connection);
3725 struct gdb_connection *gdb_con = connection->priv;
3726 if (retval == ERROR_SERVER_REMOTE_CLOSED)
3727 return retval;
3728
3729 /* logging does not propagate the error, yet can set the gdb_con->closed flag */
3730 if (gdb_con->closed)
3731 return ERROR_SERVER_REMOTE_CLOSED;
3732
3733 /* we'll recover from any other errors(e.g. temporary timeouts, etc.) */
3734 return ERROR_OK;
3735 }
3736
3737 static void gdb_keep_client_alive(struct connection *connection)
3738 {
3739 struct gdb_connection *gdb_con = connection->priv;
3740
3741 if (gdb_con->busy) {
3742 /* do not send packets, retry asap */
3743 return;
3744 }
3745
3746 switch (gdb_con->output_flag) {
3747 case GDB_OUTPUT_NO:
3748 /* no need for keep-alive */
3749 break;
3750 case GDB_OUTPUT_ALL:
3751 /* send an empty O packet */
3752 gdb_output_con(connection, "");
3753 break;
3754 default:
3755 break;
3756 }
3757 }
3758
3759 static const struct service_driver gdb_service_driver = {
3760 .name = "gdb",
3761 .new_connection_during_keep_alive_handler = NULL,
3762 .new_connection_handler = gdb_new_connection,
3763 .input_handler = gdb_input,
3764 .connection_closed_handler = gdb_connection_closed,
3765 .keep_client_alive_handler = gdb_keep_client_alive,
3766 };
3767
3768 static int gdb_target_start(struct target *target, const char *port)
3769 {
3770 struct gdb_service *gdb_service;
3771 int ret;
3772 gdb_service = malloc(sizeof(struct gdb_service));
3773
3774 if (!gdb_service)
3775 return -ENOMEM;
3776
3777 LOG_INFO("starting gdb server for %s on %s", target_name(target), port);
3778
3779 gdb_service->target = target;
3780 gdb_service->core[0] = -1;
3781 gdb_service->core[1] = -1;
3782 target->gdb_service = gdb_service;
3783
3784 ret = add_service(&gdb_service_driver, port, target->gdb_max_connections, gdb_service);
3785 /* initialize all targets gdb service with the same pointer */
3786 {
3787 struct target_list *head;
3788 foreach_smp_target(head, target->smp_targets) {
3789 struct target *curr = head->target;
3790 if (curr != target)
3791 curr->gdb_service = gdb_service;
3792 }
3793 }
3794 return ret;
3795 }
3796
3797 static int gdb_target_add_one(struct target *target)
3798 {
3799 /* one gdb instance per smp list */
3800 if ((target->smp) && (target->gdb_service))
3801 return ERROR_OK;
3802
3803 /* skip targets that cannot handle a gdb connections (e.g. mem_ap) */
3804 if (!target_supports_gdb_connection(target)) {
3805 LOG_DEBUG("skip gdb server for target %s", target_name(target));
3806 return ERROR_OK;
3807 }
3808
3809 if (target->gdb_port_override) {
3810 if (strcmp(target->gdb_port_override, "disabled") == 0) {
3811 LOG_INFO("gdb port disabled");
3812 return ERROR_OK;
3813 }
3814 return gdb_target_start(target, target->gdb_port_override);
3815 }
3816
3817 if (strcmp(gdb_port, "disabled") == 0) {
3818 LOG_INFO("gdb port disabled");
3819 return ERROR_OK;
3820 }
3821
3822 int retval = gdb_target_start(target, gdb_port_next);
3823 if (retval == ERROR_OK) {
3824 /* save the port number so can be queried with
3825 * $target_name cget -gdb-port
3826 */
3827 target->gdb_port_override = strdup(gdb_port_next);
3828
3829 long portnumber;
3830 /* If we can parse the port number
3831 * then we increment the port number for the next target.
3832 */
3833 char *end;
3834 portnumber = strtol(gdb_port_next, &end, 0);
3835 if (!*end) {
3836 if (parse_long(gdb_port_next, &portnumber) == ERROR_OK) {
3837 free(gdb_port_next);
3838 if (portnumber) {
3839 gdb_port_next = alloc_printf("%ld", portnumber+1);
3840 } else {
3841 /* Don't increment if gdb_port is 0, since we're just
3842 * trying to allocate an unused port. */
3843 gdb_port_next = strdup("0");
3844 }
3845 }
3846 }
3847 }
3848 return retval;
3849 }
3850
3851 int gdb_target_add_all(struct target *target)
3852 {
3853 if (!target) {
3854 LOG_WARNING("gdb services need one or more targets defined");
3855 return ERROR_OK;
3856 }
3857
3858 while (target) {
3859 int retval = gdb_target_add_one(target);
3860 if (retval != ERROR_OK)
3861 return retval;
3862
3863 target = target->next;
3864 }
3865
3866 return ERROR_OK;
3867 }
3868
3869 COMMAND_HANDLER(handle_gdb_sync_command)
3870 {
3871 if (CMD_ARGC != 0)
3872 return ERROR_COMMAND_SYNTAX_ERROR;
3873
3874 if (!current_gdb_connection) {
3875 command_print(CMD,
3876 "gdb_sync command can only be run from within gdb using \"monitor gdb_sync\"");
3877 return ERROR_FAIL;
3878 }
3879
3880 current_gdb_connection->sync = true;
3881
3882 return ERROR_OK;
3883 }
3884
3885 /* daemon configuration command gdb_port */
3886 COMMAND_HANDLER(handle_gdb_port_command)
3887 {
3888 int retval = CALL_COMMAND_HANDLER(server_pipe_command, &gdb_port);
3889 if (retval == ERROR_OK) {
3890 free(gdb_port_next);
3891 gdb_port_next = strdup(gdb_port);
3892 }
3893 return retval;
3894 }
3895
3896 COMMAND_HANDLER(handle_gdb_memory_map_command)
3897 {
3898 if (CMD_ARGC != 1)
3899 return ERROR_COMMAND_SYNTAX_ERROR;
3900
3901 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_use_memory_map);
3902 return ERROR_OK;
3903 }
3904
3905 COMMAND_HANDLER(handle_gdb_flash_program_command)
3906 {
3907 if (CMD_ARGC != 1)
3908 return ERROR_COMMAND_SYNTAX_ERROR;
3909
3910 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_flash_program);
3911 return ERROR_OK;
3912 }
3913
3914 COMMAND_HANDLER(handle_gdb_report_data_abort_command)
3915 {
3916 if (CMD_ARGC != 1)
3917 return ERROR_COMMAND_SYNTAX_ERROR;
3918
3919 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_report_data_abort);
3920 return ERROR_OK;
3921 }
3922
3923 COMMAND_HANDLER(handle_gdb_report_register_access_error)
3924 {
3925 if (CMD_ARGC != 1)
3926 return ERROR_COMMAND_SYNTAX_ERROR;
3927
3928 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_report_register_access_error);
3929 return ERROR_OK;
3930 }
3931
3932 /* gdb_breakpoint_override */
3933 COMMAND_HANDLER(handle_gdb_breakpoint_override_command)
3934 {
3935 if (CMD_ARGC == 0) {
3936 /* nothing */
3937 } else if (CMD_ARGC == 1) {
3938 gdb_breakpoint_override = 1;
3939 if (strcmp(CMD_ARGV[0], "hard") == 0)
3940 gdb_breakpoint_override_type = BKPT_HARD;
3941 else if (strcmp(CMD_ARGV[0], "soft") == 0)
3942 gdb_breakpoint_override_type = BKPT_SOFT;
3943 else if (strcmp(CMD_ARGV[0], "disable") == 0)
3944 gdb_breakpoint_override = 0;
3945 } else
3946 return ERROR_COMMAND_SYNTAX_ERROR;
3947 if (gdb_breakpoint_override)
3948 LOG_USER("force %s breakpoints",
3949 (gdb_breakpoint_override_type == BKPT_HARD) ? "hard" : "soft");
3950 else
3951 LOG_USER("breakpoint type is not overridden");
3952
3953 return ERROR_OK;
3954 }
3955
3956 COMMAND_HANDLER(handle_gdb_target_description_command)
3957 {
3958 if (CMD_ARGC != 1)
3959 return ERROR_COMMAND_SYNTAX_ERROR;
3960
3961 COMMAND_PARSE_ENABLE(CMD_ARGV[0], gdb_use_target_description);
3962 return ERROR_OK;
3963 }
3964
3965 COMMAND_HANDLER(handle_gdb_save_tdesc_command)
3966 {
3967 char *tdesc;
3968 uint32_t tdesc_length;
3969 struct target *target = get_current_target(CMD_CTX);
3970
3971 int retval = gdb_generate_target_description(target, &tdesc);
3972 if (retval != ERROR_OK) {
3973 LOG_ERROR("Unable to Generate Target Description");
3974 return ERROR_FAIL;
3975 }
3976
3977 tdesc_length = strlen(tdesc);
3978
3979 struct fileio *fileio;
3980 size_t size_written;
3981
3982 char *tdesc_filename = alloc_printf("%s.xml", target_type_name(target));
3983 if (!tdesc_filename) {
3984 retval = ERROR_FAIL;
3985 goto out;
3986 }
3987
3988 retval = fileio_open(&fileio, tdesc_filename, FILEIO_WRITE, FILEIO_TEXT);
3989
3990 if (retval != ERROR_OK) {
3991 LOG_ERROR("Can't open %s for writing", tdesc_filename);
3992 goto out;
3993 }
3994
3995 retval = fileio_write(fileio, tdesc_length, tdesc, &size_written);
3996
3997 fileio_close(fileio);
3998
3999 if (retval != ERROR_OK)
4000 LOG_ERROR("Error while writing the tdesc file");
4001
4002 out:
4003 free(tdesc_filename);
4004 free(tdesc);
4005
4006 return retval;
4007 }
4008
4009 static const struct command_registration gdb_command_handlers[] = {
4010 {
4011 .name = "gdb_sync",
4012 .handler = handle_gdb_sync_command,
4013 .mode = COMMAND_ANY,
4014 .help = "next stepi will return immediately allowing "
4015 "GDB to fetch register state without affecting "
4016 "target state",
4017 .usage = ""
4018 },
4019 {
4020 .name = "gdb_port",
4021 .handler = handle_gdb_port_command,
4022 .mode = COMMAND_CONFIG,
4023 .help = "Normally gdb listens to a TCP/IP port. Each subsequent GDB "
4024 "server listens for the next port number after the "
4025 "base port number specified. "
4026 "No arguments reports GDB port. \"pipe\" means listen to stdin "
4027 "output to stdout, an integer is base port number, \"disabled\" disables "
4028 "port. Any other string is are interpreted as named pipe to listen to. "
4029 "Output pipe is the same name as input pipe, but with 'o' appended.",
4030 .usage = "[port_num]",
4031 },
4032 {
4033 .name = "gdb_memory_map",
4034 .handler = handle_gdb_memory_map_command,
4035 .mode = COMMAND_CONFIG,
4036 .help = "enable or disable memory map",
4037 .usage = "('enable'|'disable')"
4038 },
4039 {
4040 .name = "gdb_flash_program",
4041 .handler = handle_gdb_flash_program_command,
4042 .mode = COMMAND_CONFIG,
4043 .help = "enable or disable flash program",
4044 .usage = "('enable'|'disable')"
4045 },
4046 {
4047 .name = "gdb_report_data_abort",
4048 .handler = handle_gdb_report_data_abort_command,
4049 .mode = COMMAND_CONFIG,
4050 .help = "enable or disable reporting data aborts",
4051 .usage = "('enable'|'disable')"
4052 },
4053 {
4054 .name = "gdb_report_register_access_error",
4055 .handler = handle_gdb_report_register_access_error,
4056 .mode = COMMAND_CONFIG,
4057 .help = "enable or disable reporting register access errors",
4058 .usage = "('enable'|'disable')"
4059 },
4060 {
4061 .name = "gdb_breakpoint_override",
4062 .handler = handle_gdb_breakpoint_override_command,
4063 .mode = COMMAND_ANY,
4064 .help = "Display or specify type of breakpoint "
4065 "to be used by gdb 'break' commands.",
4066 .usage = "('hard'|'soft'|'disable')"
4067 },
4068 {
4069 .name = "gdb_target_description",
4070 .handler = handle_gdb_target_description_command,
4071 .mode = COMMAND_CONFIG,
4072 .help = "enable or disable target description",
4073 .usage = "('enable'|'disable')"
4074 },
4075 {
4076 .name = "gdb_save_tdesc",
4077 .handler = handle_gdb_save_tdesc_command,
4078 .mode = COMMAND_EXEC,
4079 .help = "Save the target description file",
4080 .usage = "",
4081 },
4082 COMMAND_REGISTRATION_DONE
4083 };
4084
4085 int gdb_register_commands(struct command_context *cmd_ctx)
4086 {
4087 gdb_port = strdup("3333");
4088 gdb_port_next = strdup("3333");
4089 return register_commands(cmd_ctx, NULL, gdb_command_handlers);
4090 }
4091
4092 void gdb_service_free(void)
4093 {
4094 free(gdb_port);
4095 free(gdb_port_next);
4096 }

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)