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

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)