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

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)