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

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)