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

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)