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

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)