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

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)