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

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)