1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * Copyright (C) 2007,2008 Øyvind Harboe *
6 * oyvind.harboe@zylin.com *
8 * Copyright (C) 2008 by Spencer Oliver *
9 * spen@spen-soft.co.uk *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License for more details. *
21 * You should have received a copy of the GNU General Public License *
22 * along with this program; if not, write to the *
23 * Free Software Foundation, Inc., *
24 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 ***************************************************************************/
30 #include "replacements.h"
32 #include "gdb_server.h"
36 #include "binarybuffer.h"
38 #include "breakpoints.h"
41 #include "target_request.h"
42 #include "configuration.h"
50 #define _DEBUG_GDB_IO_
53 static int gdb_breakpoint_override
;
54 static enum breakpoint_type gdb_breakpoint_override_type
;
56 extern int gdb_error(connection_t
*connection
, int retval
);
57 static unsigned short gdb_port
;
58 static const char *DIGITS
= "0123456789abcdef";
60 static void gdb_log_callback(void *priv
, const char *file
, int line
,
61 const char *function
, const char *string
);
71 /* target behaviour on gdb detach */
72 enum gdb_detach_mode detach_mode
= GDB_DETACH_RESUME
;
74 /* set if we are sending a memory map to gdb
75 * via qXfer:memory-map:read packet */
76 /* enabled by default*/
77 int gdb_use_memory_map
= 1;
78 /* enabled by default*/
79 int gdb_flash_program
= 1;
81 /* if set, data aborts cause an error to be reported in memory read packets
82 * see the code in gdb_read_memory_packet() for further explanations */
83 int gdb_report_data_abort
= 0;
85 int gdb_last_signal(target_t
*target
)
87 switch (target
->debug_reason
)
89 case DBG_REASON_DBGRQ
:
90 return 0x2; /* SIGINT */
91 case DBG_REASON_BREAKPOINT
:
92 case DBG_REASON_WATCHPOINT
:
93 case DBG_REASON_WPTANDBKPT
:
94 return 0x05; /* SIGTRAP */
95 case DBG_REASON_SINGLESTEP
:
96 return 0x05; /* SIGTRAP */
97 case DBG_REASON_NOTHALTED
:
98 return 0x0; /* no signal... shouldn't happen */
100 LOG_USER("undefined debug reason %d - target needs reset", target
->debug_reason
);
105 int check_pending(connection_t
*connection
, int timeout_s
, int *got_data
)
107 /* a non-blocking socket will block if there is 0 bytes available on the socket,
108 * but return with as many bytes as are available immediately
112 gdb_connection_t
*gdb_con
= connection
->priv
;
118 if (gdb_con
->buf_cnt
>0)
125 FD_SET(connection
->fd
, &read_fds
);
127 tv
.tv_sec
= timeout_s
;
129 if (select(connection
->fd
+ 1, &read_fds
, NULL
, NULL
, &tv
) == 0)
131 /* This can typically be because a "monitor" command took too long
132 * before printing any progress messages
136 return ERROR_GDB_TIMEOUT
;
142 *got_data
=FD_ISSET(connection
->fd
, &read_fds
)!=0;
146 int gdb_get_char(connection_t
*connection
, int* next_char
)
148 gdb_connection_t
*gdb_con
= connection
->priv
;
151 #ifdef _DEBUG_GDB_IO_
155 if (gdb_con
->buf_cnt
-- > 0)
157 *next_char
= *(gdb_con
->buf_p
++);
158 if (gdb_con
->buf_cnt
> 0)
159 connection
->input_pending
= 1;
161 connection
->input_pending
= 0;
163 #ifdef _DEBUG_GDB_IO_
164 LOG_DEBUG("returned char '%c' (0x%2.2x)", *next_char
, *next_char
);
172 retval
=check_pending(connection
, 1, NULL
);
173 if (retval
!=ERROR_OK
)
175 gdb_con
->buf_cnt
= read_socket(connection
->fd
, gdb_con
->buffer
, GDB_BUFFER_SIZE
);
176 if (gdb_con
->buf_cnt
> 0)
180 if (gdb_con
->buf_cnt
== 0)
183 return ERROR_SERVER_REMOTE_CLOSED
;
187 errno
= WSAGetLastError();
194 case WSAECONNABORTED
:
196 return ERROR_SERVER_REMOTE_CLOSED
;
199 return ERROR_SERVER_REMOTE_CLOSED
;
201 LOG_ERROR("read: %d", errno
);
212 return ERROR_SERVER_REMOTE_CLOSED
;
215 return ERROR_SERVER_REMOTE_CLOSED
;
217 LOG_ERROR("read: %s", strerror(errno
));
219 return ERROR_SERVER_REMOTE_CLOSED
;
224 #ifdef _DEBUG_GDB_IO_
225 debug_buffer
= malloc(gdb_con
->buf_cnt
+ 1);
226 memcpy(debug_buffer
, gdb_con
->buffer
, gdb_con
->buf_cnt
);
227 debug_buffer
[gdb_con
->buf_cnt
] = 0;
228 LOG_DEBUG("received '%s'", debug_buffer
);
232 gdb_con
->buf_p
= gdb_con
->buffer
;
234 *next_char
= *(gdb_con
->buf_p
++);
235 if (gdb_con
->buf_cnt
> 0)
236 connection
->input_pending
= 1;
238 connection
->input_pending
= 0;
239 #ifdef _DEBUG_GDB_IO_
240 LOG_DEBUG("returned char '%c' (0x%2.2x)", *next_char
, *next_char
);
246 int gdb_putback_char(connection_t
*connection
, int last_char
)
248 gdb_connection_t
*gdb_con
= connection
->priv
;
250 if (gdb_con
->buf_p
> gdb_con
->buffer
)
252 *(--gdb_con
->buf_p
) = last_char
;
257 LOG_ERROR("BUG: couldn't put character back");
263 /* The only way we can detect that the socket is closed is the first time
264 * we write to it, we will fail. Subsequent write operations will
265 * succeed. Shudder! */
266 int gdb_write(connection_t
*connection
, void *data
, int len
)
268 gdb_connection_t
*gdb_con
= connection
->priv
;
270 return ERROR_SERVER_REMOTE_CLOSED
;
272 if (write_socket(connection
->fd
, data
, len
) == len
)
277 return ERROR_SERVER_REMOTE_CLOSED
;
280 int gdb_put_packet_inner(connection_t
*connection
, char *buffer
, int len
)
283 unsigned char my_checksum
= 0;
284 #ifdef _DEBUG_GDB_IO_
289 gdb_connection_t
*gdb_con
= connection
->priv
;
291 for (i
= 0; i
< len
; i
++)
292 my_checksum
+= buffer
[i
];
294 #ifdef _DEBUG_GDB_IO_
296 * At this point we should have nothing in the input queue from GDB,
297 * however sometimes '-' is sent even though we've already received
298 * an ACK (+) for everything we've sent off.
303 if ((retval
=check_pending(connection
, 0, &gotdata
))!=ERROR_OK
)
307 if ((retval
= gdb_get_char(connection
, &reply
)) != ERROR_OK
)
310 /* fix a problem with some IAR tools */
311 gdb_putback_char( connection
, reply
);
312 LOG_DEBUG("Unexpected start of new packet");
316 LOG_WARNING("Discard unexpected char %c", reply
);
322 #ifdef _DEBUG_GDB_IO_
323 debug_buffer
= malloc(len
+ 1);
324 memcpy(debug_buffer
, buffer
, len
);
325 debug_buffer
[len
] = 0;
326 LOG_DEBUG("sending packet '$%s#%2.2x'", debug_buffer
, my_checksum
);
330 char local_buffer
[1024];
331 local_buffer
[0] = '$';
332 if (len
+4 <= sizeof(local_buffer
))
334 /* performance gain on smaller packets by only a single call to gdb_write() */
335 memcpy(local_buffer
+1, buffer
, len
++);
336 local_buffer
[len
++] = '#';
337 local_buffer
[len
++] = DIGITS
[(my_checksum
>> 4) & 0xf];
338 local_buffer
[len
++] = DIGITS
[my_checksum
& 0xf];
339 if((retval
= gdb_write(connection
, local_buffer
, len
)) != ERROR_OK
)
346 /* larger packets are transmitted directly from caller supplied buffer
347 by several calls to gdb_write() to avoid dynamic allocation */
348 local_buffer
[1] = '#';
349 local_buffer
[2] = DIGITS
[(my_checksum
>> 4) & 0xf];
350 local_buffer
[3] = DIGITS
[my_checksum
& 0xf];
351 if((retval
= gdb_write(connection
, local_buffer
, 1)) != ERROR_OK
)
355 if((retval
= gdb_write(connection
, buffer
, len
)) != ERROR_OK
)
359 if((retval
= gdb_write(connection
, local_buffer
+1, 3)) != ERROR_OK
)
365 if (gdb_con
->noack_mode
)
368 if ((retval
= gdb_get_char(connection
, &reply
)) != ERROR_OK
)
373 else if (reply
== '-')
375 /* Stop sending output packets for now */
376 log_remove_callback(gdb_log_callback
, connection
);
377 LOG_WARNING("negative reply, retrying");
379 else if (reply
== 0x3)
382 if ((retval
= gdb_get_char(connection
, &reply
)) != ERROR_OK
)
386 else if (reply
== '-')
388 /* Stop sending output packets for now */
389 log_remove_callback(gdb_log_callback
, connection
);
390 LOG_WARNING("negative reply, retrying");
392 else if( reply
== '$' ){
393 LOG_ERROR("GDB missing ack(1) - assumed good");
394 gdb_putback_char( connection
, reply
);
398 LOG_ERROR("unknown character(1) 0x%2.2x in reply, dropping connection", reply
);
400 return ERROR_SERVER_REMOTE_CLOSED
;
403 else if( reply
== '$' ){
404 LOG_ERROR("GDB missing ack(2) - assumed good");
405 gdb_putback_char( connection
, reply
);
410 LOG_ERROR("unknown character(2) 0x%2.2x in reply, dropping connection", reply
);
412 return ERROR_SERVER_REMOTE_CLOSED
;
416 return ERROR_SERVER_REMOTE_CLOSED
;
421 int gdb_put_packet(connection_t
*connection
, char *buffer
, int len
)
423 gdb_connection_t
*gdb_con
= connection
->priv
;
425 int retval
= gdb_put_packet_inner(connection
, buffer
, len
);
428 /* we sent some data, reset timer for keep alive messages */
434 static __inline__
int fetch_packet(connection_t
*connection
, int *checksum_ok
, int noack
, int *len
, char *buffer
)
436 unsigned char my_checksum
= 0;
441 gdb_connection_t
*gdb_con
= connection
->priv
;
447 /* The common case is that we have an entire packet with no escape chars.
448 * We need to leave at least 2 bytes in the buffer to have
449 * gdb_get_char() update various bits and bobs correctly.
451 if ((gdb_con
->buf_cnt
> 2) && ((gdb_con
->buf_cnt
+count
) < *len
))
453 /* The compiler will struggle a bit with constant propagation and
454 * aliasing, so we help it by showing that these values do not
455 * change inside the loop
458 char *buf
= gdb_con
->buf_p
;
459 int run
= gdb_con
->buf_cnt
- 2;
466 if (character
== '#')
468 /* Danger! character can be '#' when esc is
469 * used so we need an explicit boolean for done here.
475 if (character
== '}')
477 /* data transmitted in binary mode (X packet)
478 * uses 0x7d as escape character */
479 my_checksum
+= character
& 0xff;
482 my_checksum
+= character
& 0xff;
483 buffer
[count
++] = (character
^ 0x20) & 0xff;
487 my_checksum
+= character
& 0xff;
488 buffer
[count
++] = character
& 0xff;
492 gdb_con
->buf_cnt
-= i
;
498 LOG_ERROR("packet buffer too small");
499 return ERROR_GDB_BUFFER_TOO_SMALL
;
502 if ((retval
= gdb_get_char(connection
, &character
)) != ERROR_OK
)
505 if (character
== '#')
508 if (character
== '}')
510 /* data transmitted in binary mode (X packet)
511 * uses 0x7d as escape character */
512 my_checksum
+= character
& 0xff;
513 if ((retval
= gdb_get_char(connection
, &character
)) != ERROR_OK
)
515 my_checksum
+= character
& 0xff;
516 buffer
[count
++] = (character
^ 0x20) & 0xff;
520 my_checksum
+= character
& 0xff;
521 buffer
[count
++] = character
& 0xff;
527 if ((retval
= gdb_get_char(connection
, &character
)) != ERROR_OK
)
529 checksum
[0] = character
;
530 if ((retval
= gdb_get_char(connection
, &character
)) != ERROR_OK
)
532 checksum
[1] = character
;
537 *checksum_ok
=(my_checksum
== strtoul(checksum
, NULL
, 16));
543 int gdb_get_packet_inner(connection_t
*connection
, char *buffer
, int *len
)
547 gdb_connection_t
*gdb_con
= connection
->priv
;
553 if ((retval
= gdb_get_char(connection
, &character
)) != ERROR_OK
)
556 #ifdef _DEBUG_GDB_IO_
557 LOG_DEBUG("character: '%c'", character
);
565 /* gdb sends a dummy ack '+' at every remote connect - see remote_start_remote (remote.c)
566 * incase anyone tries to debug why they receive this warning every time */
567 LOG_WARNING("acknowledgment received, but no packet pending");
570 LOG_WARNING("negative acknowledgment, but no packet pending");
577 LOG_WARNING("ignoring character 0x%x", character
);
580 } while (character
!= '$');
585 /* explicit code expansion here to get faster inlined code in -O3 by not
586 * calculating checksum
588 if (gdb_con
->noack_mode
)
590 if ((retval
=fetch_packet(connection
, &checksum_ok
, 1, len
, buffer
))!=ERROR_OK
)
594 if ((retval
=fetch_packet(connection
, &checksum_ok
, 0, len
, buffer
))!=ERROR_OK
)
598 if (gdb_con
->noack_mode
)
600 /* checksum is not checked in noack mode */
605 if ((retval
= gdb_write(connection
, "+", 1)) != ERROR_OK
)
613 return ERROR_SERVER_REMOTE_CLOSED
;
618 int gdb_get_packet(connection_t
*connection
, char *buffer
, int *len
)
620 gdb_connection_t
*gdb_con
= connection
->priv
;
622 int retval
= gdb_get_packet_inner(connection
, buffer
, len
);
627 int gdb_output_con(connection_t
*connection
, const char* line
)
632 bin_size
= strlen(line
);
634 hex_buffer
= malloc(bin_size
*2 + 2);
635 if (hex_buffer
== NULL
)
636 return ERROR_GDB_BUFFER_TOO_SMALL
;
639 for (i
=0; i
<bin_size
; i
++)
640 snprintf(hex_buffer
+ 1 + i
*2, 3, "%2.2x", line
[i
]);
641 hex_buffer
[bin_size
*2+1] = 0;
643 int retval
= gdb_put_packet(connection
, hex_buffer
, bin_size
*2 + 1);
649 int gdb_output(struct command_context_s
*context
, const char* line
)
651 /* this will be dumped to the log and also sent as an O packet if possible */
652 LOG_USER_N("%s", line
);
657 static void gdb_frontend_halted(struct target_s
*target
, connection_t
*connection
)
659 gdb_connection_t
*gdb_connection
= connection
->priv
;
661 /* In the GDB protocol when we are stepping or coninuing execution,
662 * we have a lingering reply. Upon receiving a halted event
663 * when we have that lingering packet, we reply to the original
664 * step or continue packet.
666 * Executing monitor commands can bring the target in and
667 * out of the running state so we'll see lots of TARGET_EVENT_XXX
668 * that are to be ignored.
670 if (gdb_connection
->frontend_state
== TARGET_RUNNING
)
675 /* stop forwarding log packets! */
676 log_remove_callback(gdb_log_callback
, connection
);
678 if (gdb_connection
->ctrl_c
)
681 gdb_connection
->ctrl_c
= 0;
685 signal
= gdb_last_signal(target
);
688 snprintf(sig_reply
, 4, "T%2.2x", signal
);
689 gdb_put_packet(connection
, sig_reply
, 3);
690 gdb_connection
->frontend_state
= TARGET_HALTED
;
694 int gdb_target_callback_event_handler(struct target_s
*target
, enum target_event event
, void *priv
)
697 connection_t
*connection
= priv
;
699 target_handle_event( target
, event
);
702 case TARGET_EVENT_EARLY_HALTED
:
703 gdb_frontend_halted(target
, connection
);
705 case TARGET_EVENT_HALTED
:
706 target_call_event_callbacks(target
, TARGET_EVENT_GDB_END
);
708 case TARGET_EVENT_GDB_FLASH_ERASE_START
:
709 target_handle_event( target
, TARGET_EVENT_OLD_gdb_program_config
);
710 if((retval
= jtag_execute_queue()) != ERROR_OK
)
722 int gdb_new_connection(connection_t
*connection
)
724 gdb_connection_t
*gdb_connection
= malloc(sizeof(gdb_connection_t
));
725 gdb_service_t
*gdb_service
= connection
->service
->priv
;
729 connection
->priv
= gdb_connection
;
731 /* initialize gdb connection information */
732 gdb_connection
->buf_p
= gdb_connection
->buffer
;
733 gdb_connection
->buf_cnt
= 0;
734 gdb_connection
->ctrl_c
= 0;
735 gdb_connection
->frontend_state
= TARGET_HALTED
;
736 gdb_connection
->vflash_image
= NULL
;
737 gdb_connection
->closed
= 0;
738 gdb_connection
->busy
= 0;
739 gdb_connection
->noack_mode
= 0;
741 /* send ACK to GDB for debug request */
742 gdb_write(connection
, "+", 1);
744 /* output goes through gdb connection */
745 command_set_output_handler(connection
->cmd_ctx
, gdb_output
, connection
);
747 /* we must remove all breakpoints registered to the target as a previous
748 * GDB session could leave dangling breakpoints if e.g. communication
751 breakpoint_clear_target(gdb_service
->target
);
752 watchpoint_clear_target(gdb_service
->target
);
754 /* register callback to be informed about target events */
755 target_register_event_callback(gdb_target_callback_event_handler
, connection
);
757 /* a gdb session just attached, try to put the target in halt mode.
761 * If the halt fails(e.g. target needs a reset, JTAG communication not
762 * working, etc.), then the GDB connect will succeed as
763 * the get_gdb_reg_list() will lie and return a register list with
766 * This allows GDB monitor commands to be run from a GDB init script to
767 * initialize the target
769 * Also, since the halt() is asynchronous target connect will be
770 * instantaneous and thus avoiding annoying timeout problems during
773 target_halt(gdb_service
->target
);
774 /* FIX!!!! could extended-remote work better here?
776 * wait a tiny bit for halted state or we just continue. The
777 * GDB register packet will then contain garbage
779 target_wait_state(gdb_service
->target
, TARGET_HALTED
, 500);
781 /* remove the initial ACK from the incoming buffer */
782 if ((retval
= gdb_get_char(connection
, &initial_ack
)) != ERROR_OK
)
785 /* FIX!!!??? would we actually ever receive a + here???
788 if (initial_ack
!= '+')
789 gdb_putback_char(connection
, initial_ack
);
790 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_ATTACH
);
794 int gdb_connection_closed(connection_t
*connection
)
796 gdb_service_t
*gdb_service
= connection
->service
->priv
;
797 gdb_connection_t
*gdb_connection
= connection
->priv
;
799 /* see if an image built with vFlash commands is left */
800 if (gdb_connection
->vflash_image
)
802 image_close(gdb_connection
->vflash_image
);
803 free(gdb_connection
->vflash_image
);
804 gdb_connection
->vflash_image
= NULL
;
807 /* if this connection registered a debug-message receiver delete it */
808 delete_debug_msg_receiver(connection
->cmd_ctx
, gdb_service
->target
);
810 if (connection
->priv
)
812 free(connection
->priv
);
813 connection
->priv
= NULL
;
817 LOG_ERROR("BUG: connection->priv == NULL");
820 target_unregister_event_callback(gdb_target_callback_event_handler
, connection
);
821 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_END
);
822 log_remove_callback(gdb_log_callback
, connection
);
824 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_DETACH
);
829 void gdb_send_error(connection_t
*connection
, u8 the_error
)
832 snprintf(err
, 4, "E%2.2X", the_error
);
833 gdb_put_packet(connection
, err
, 3);
836 int gdb_last_signal_packet(connection_t
*connection
, target_t
*target
, char* packet
, int packet_size
)
841 signal
= gdb_last_signal(target
);
843 snprintf(sig_reply
, 4, "S%2.2x", signal
);
844 gdb_put_packet(connection
, sig_reply
, 3);
849 static int gdb_reg_pos(target_t
*target
, int pos
, int len
)
851 if (target
->endianness
== TARGET_LITTLE_ENDIAN
)
854 return len
- 1 - pos
;
857 /* Convert register to string of bytes. NB! The # of bits in the
858 * register might be non-divisible by 8(a byte), in which
859 * case an entire byte is shown.
861 * NB! the format on the wire is the target endianess
863 * The format of reg->value is little endian
866 void gdb_str_to_target(target_t
*target
, char *tstr
, reg_t
*reg
)
873 buf_len
= CEIL(reg
->size
, 8);
875 for (i
= 0; i
< buf_len
; i
++)
877 int j
= gdb_reg_pos(target
, i
, buf_len
);
878 tstr
[i
*2] = DIGITS
[(buf
[j
]>>4) & 0xf];
879 tstr
[i
*2+1] = DIGITS
[buf
[j
]&0xf];
883 static int hextoint(char c
)
894 LOG_ERROR("BUG: invalid register value %08x", c
);
898 /* copy over in register buffer */
899 void gdb_target_to_reg(target_t
*target
, char *tstr
, int str_len
, u8
*bin
)
903 LOG_ERROR("BUG: gdb value with uneven number of characters encountered");
908 for (i
= 0; i
< str_len
; i
+=2)
910 u8 t
= hextoint(tstr
[i
])<<4;
911 t
|= hextoint(tstr
[i
+1]);
913 int j
= gdb_reg_pos(target
, i
/2, str_len
/2);
918 int gdb_get_registers_packet(connection_t
*connection
, target_t
*target
, char* packet
, int packet_size
)
923 int reg_packet_size
= 0;
928 #ifdef _DEBUG_GDB_IO_
932 if ((retval
= target
->type
->get_gdb_reg_list(target
, ®_list
, ®_list_size
)) != ERROR_OK
)
934 return gdb_error(connection
, retval
);
937 for (i
= 0; i
< reg_list_size
; i
++)
939 reg_packet_size
+= reg_list
[i
]->size
;
942 reg_packet
= malloc(CEIL(reg_packet_size
, 8) * 2);
943 reg_packet_p
= reg_packet
;
945 for (i
= 0; i
< reg_list_size
; i
++)
947 gdb_str_to_target(target
, reg_packet_p
, reg_list
[i
]);
948 reg_packet_p
+= CEIL(reg_list
[i
]->size
, 8) * 2;
951 #ifdef _DEBUG_GDB_IO_
954 reg_packet_p
= strndup(reg_packet
, CEIL(reg_packet_size
, 8) * 2);
955 LOG_DEBUG("reg_packet: %s", reg_packet_p
);
960 gdb_put_packet(connection
, reg_packet
, CEIL(reg_packet_size
, 8) * 2);
968 int gdb_set_registers_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
976 #ifdef _DEBUG_GDB_IO_
980 /* skip command character */
986 LOG_WARNING("GDB set_registers packet with uneven characters received, dropping connection");
987 return ERROR_SERVER_REMOTE_CLOSED
;
990 if ((retval
= target
->type
->get_gdb_reg_list(target
, ®_list
, ®_list_size
)) != ERROR_OK
)
992 return gdb_error(connection
, retval
);
996 for (i
= 0; i
< reg_list_size
; i
++)
999 int chars
= (CEIL(reg_list
[i
]->size
, 8) * 2);
1001 if (packet_p
+ chars
> packet
+ packet_size
)
1003 LOG_ERROR("BUG: register packet is too small for registers");
1006 reg_arch_type_t
*arch_type
;
1007 bin_buf
= malloc(CEIL(reg_list
[i
]->size
, 8));
1008 gdb_target_to_reg(target
, packet_p
, chars
, bin_buf
);
1010 /* get register arch_type, and call set method */
1011 arch_type
= register_get_arch_type(reg_list
[i
]->arch_type
);
1013 arch_type
->set(reg_list
[i
], bin_buf
);
1015 /* advance packet pointer */
1022 /* free reg_t *reg_list[] array allocated by get_gdb_reg_list */
1025 gdb_put_packet(connection
, "OK", 2);
1030 int gdb_get_register_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1033 int reg_num
= strtoul(packet
+ 1, NULL
, 16);
1038 #ifdef _DEBUG_GDB_IO_
1042 if ((retval
= target
->type
->get_gdb_reg_list(target
, ®_list
, ®_list_size
)) != ERROR_OK
)
1044 return gdb_error(connection
, retval
);
1047 if (reg_list_size
<= reg_num
)
1049 LOG_ERROR("gdb requested a non-existing register");
1053 reg_packet
= malloc(CEIL(reg_list
[reg_num
]->size
, 8) * 2);
1055 gdb_str_to_target(target
, reg_packet
, reg_list
[reg_num
]);
1057 gdb_put_packet(connection
, reg_packet
, CEIL(reg_list
[reg_num
]->size
, 8) * 2);
1065 int gdb_set_register_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1069 int reg_num
= strtoul(packet
+ 1, &separator
, 16);
1073 reg_arch_type_t
*arch_type
;
1077 if ((retval
= target
->type
->get_gdb_reg_list(target
, ®_list
, ®_list_size
)) != ERROR_OK
)
1079 return gdb_error(connection
, retval
);
1082 if (reg_list_size
< reg_num
)
1084 LOG_ERROR("gdb requested a non-existing register");
1085 return ERROR_SERVER_REMOTE_CLOSED
;
1088 if (*separator
!= '=')
1090 LOG_ERROR("GDB 'set register packet', but no '=' following the register number");
1091 return ERROR_SERVER_REMOTE_CLOSED
;
1094 /* convert from GDB-string (target-endian) to hex-string (big-endian) */
1095 bin_buf
= malloc(CEIL(reg_list
[reg_num
]->size
, 8));
1096 int chars
= (CEIL(reg_list
[reg_num
]->size
, 8) * 2);
1098 /* fix!!! add some sanity checks on packet size here */
1100 gdb_target_to_reg(target
, separator
+ 1, chars
, bin_buf
);
1102 /* get register arch_type, and call set method */
1103 arch_type
= register_get_arch_type(reg_list
[reg_num
]->arch_type
);
1104 arch_type
->set(reg_list
[reg_num
], bin_buf
);
1106 gdb_put_packet(connection
, "OK", 2);
1114 int gdb_error(connection_t
*connection
, int retval
)
1118 case ERROR_TARGET_DATA_ABORT
:
1119 gdb_send_error(connection
, EIO
);
1121 case ERROR_TARGET_TRANSLATION_FAULT
:
1122 gdb_send_error(connection
, EFAULT
);
1124 case ERROR_TARGET_UNALIGNED_ACCESS
:
1125 gdb_send_error(connection
, EFAULT
);
1127 case ERROR_TARGET_NOT_HALTED
:
1128 gdb_send_error(connection
, EFAULT
);
1131 /* This could be that the target reset itself. */
1132 LOG_ERROR("unexpected error %i", retval
);
1133 gdb_send_error(connection
, EFAULT
);
1140 /* We don't have to worry about the default 2 second timeout for GDB packets,
1141 * because GDB breaks up large memory reads into smaller reads.
1143 * 8191 bytes by the looks of it. Why 8191 bytes instead of 8192?????
1145 int gdb_read_memory_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1154 int retval
= ERROR_OK
;
1156 /* skip command character */
1159 addr
= strtoul(packet
, &separator
, 16);
1161 if (*separator
!= ',')
1163 LOG_ERROR("incomplete read memory packet received, dropping connection");
1164 return ERROR_SERVER_REMOTE_CLOSED
;
1167 len
= strtoul(separator
+1, NULL
, 16);
1169 buffer
= malloc(len
);
1171 LOG_DEBUG("addr: 0x%8.8x, len: 0x%8.8x", addr
, len
);
1173 retval
= target_read_buffer(target
, addr
, len
, buffer
);
1175 if ((retval
!=ERROR_OK
)&&!gdb_report_data_abort
)
1177 /* TODO : Here we have to lie and send back all zero's lest stack traces won't work.
1178 * At some point this might be fixed in GDB, in which case this code can be removed.
1180 * OpenOCD developers are acutely aware of this problem, but there is nothing
1181 * gained by involving the user in this problem that hopefully will get resolved
1184 * http://sourceware.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gdb&pr=2395
1186 * For now, the default is to fix up things to make current GDB versions work.
1187 * This can be overwritten using the gdb_report_data_abort <'enable'|'disable'> command.
1189 memset(buffer
, 0, len
);
1193 if (retval
== ERROR_OK
)
1195 hex_buffer
= malloc(len
* 2 + 1);
1198 for (i
= 0; i
< len
; i
++)
1201 hex_buffer
[2 * i
] = DIGITS
[(t
>> 4) & 0xf];
1202 hex_buffer
[2 * i
+ 1] = DIGITS
[t
& 0xf];
1205 gdb_put_packet(connection
, hex_buffer
, len
* 2);
1211 retval
= gdb_error(connection
, retval
);
1219 int gdb_write_memory_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1230 /* skip command character */
1233 addr
= strtoul(packet
, &separator
, 16);
1235 if (*separator
!= ',')
1237 LOG_ERROR("incomplete write memory packet received, dropping connection");
1238 return ERROR_SERVER_REMOTE_CLOSED
;
1241 len
= strtoul(separator
+1, &separator
, 16);
1243 if (*(separator
++) != ':')
1245 LOG_ERROR("incomplete write memory packet received, dropping connection");
1246 return ERROR_SERVER_REMOTE_CLOSED
;
1249 buffer
= malloc(len
);
1251 LOG_DEBUG("addr: 0x%8.8x, len: 0x%8.8x", addr
, len
);
1253 for (i
=0; i
<len
; i
++)
1256 sscanf(separator
+ 2*i
, "%2x", &tmp
);
1260 retval
= target_write_buffer(target
, addr
, len
, buffer
);
1262 if (retval
== ERROR_OK
)
1264 gdb_put_packet(connection
, "OK", 2);
1268 retval
= gdb_error(connection
, retval
);
1276 int gdb_write_memory_binary_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1284 /* skip command character */
1287 addr
= strtoul(packet
, &separator
, 16);
1289 if (*separator
!= ',')
1291 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1292 return ERROR_SERVER_REMOTE_CLOSED
;
1295 len
= strtoul(separator
+1, &separator
, 16);
1297 if (*(separator
++) != ':')
1299 LOG_ERROR("incomplete write memory binary packet received, dropping connection");
1300 return ERROR_SERVER_REMOTE_CLOSED
;
1306 LOG_DEBUG("addr: 0x%8.8x, len: 0x%8.8x", addr
, len
);
1308 retval
= target_write_buffer(target
, addr
, len
, (u8
*)separator
);
1311 if (retval
== ERROR_OK
)
1313 gdb_put_packet(connection
, "OK", 2);
1317 if ((retval
= gdb_error(connection
, retval
)) != ERROR_OK
)
1324 int gdb_step_continue_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1328 int retval
=ERROR_OK
;
1332 if (packet_size
> 1)
1334 packet
[packet_size
] = 0;
1335 address
= strtoul(packet
+ 1, NULL
, 16);
1342 if (packet
[0] == 'c')
1344 LOG_DEBUG("continue");
1345 target_handle_event( target
, TARGET_EVENT_OLD_pre_resume
);
1346 retval
=target_resume(target
, current
, address
, 0, 0); /* resume at current address, don't handle breakpoints, not debugging */
1348 else if (packet
[0] == 's')
1351 retval
=target
->type
->step(target
, current
, address
, 0); /* step at current or address, don't handle breakpoints */
1356 int gdb_breakpoint_watchpoint_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1359 enum breakpoint_type bp_type
= BKPT_SOFT
/* dummy init to avoid warning */;
1360 enum watchpoint_rw wp_type
;
1368 type
= strtoul(packet
+ 1, &separator
, 16);
1370 if (type
== 0) /* memory breakpoint */
1371 bp_type
= BKPT_SOFT
;
1372 else if (type
== 1) /* hardware breakpoint */
1373 bp_type
= BKPT_HARD
;
1374 else if (type
== 2) /* write watchpoint */
1375 wp_type
= WPT_WRITE
;
1376 else if (type
== 3) /* read watchpoint */
1378 else if (type
== 4) /* access watchpoint */
1379 wp_type
= WPT_ACCESS
;
1381 if (gdb_breakpoint_override
&&((bp_type
==BKPT_SOFT
)||(bp_type
==BKPT_HARD
)))
1383 bp_type
=gdb_breakpoint_override_type
;
1386 if (*separator
!= ',')
1388 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1389 return ERROR_SERVER_REMOTE_CLOSED
;
1392 address
= strtoul(separator
+1, &separator
, 16);
1394 if (*separator
!= ',')
1396 LOG_ERROR("incomplete breakpoint/watchpoint packet received, dropping connection");
1397 return ERROR_SERVER_REMOTE_CLOSED
;
1400 size
= strtoul(separator
+1, &separator
, 16);
1406 if (packet
[0] == 'Z')
1408 if ((retval
= breakpoint_add(target
, address
, size
, bp_type
)) != ERROR_OK
)
1410 if ((retval
= gdb_error(connection
, retval
)) != ERROR_OK
)
1415 gdb_put_packet(connection
, "OK", 2);
1420 breakpoint_remove(target
, address
);
1421 gdb_put_packet(connection
, "OK", 2);
1428 if (packet
[0] == 'Z')
1430 if ((retval
= watchpoint_add(target
, address
, size
, type
-2, 0, 0xffffffffu
)) != ERROR_OK
)
1432 if ((retval
= gdb_error(connection
, retval
)) != ERROR_OK
)
1437 gdb_put_packet(connection
, "OK", 2);
1442 watchpoint_remove(target
, address
);
1443 gdb_put_packet(connection
, "OK", 2);
1454 /* print out a string and allocate more space as needed, mainly used for XML at this point */
1455 void xml_printf(int *retval
, char **xml
, int *pos
, int *size
, const char *fmt
, ...)
1457 if (*retval
!= ERROR_OK
)
1465 if ((*xml
== NULL
) || (!first
))
1467 /* start by 0 to exercise all the code paths.
1468 * Need minimum 2 bytes to fit 1 char and 0 terminator. */
1470 *size
= *size
* 2 + 2;
1472 *xml
= realloc(*xml
, *size
);
1477 *retval
= ERROR_SERVER_REMOTE_CLOSED
;
1485 ret
= vsnprintf(*xml
+ *pos
, *size
- *pos
, fmt
, ap
);
1487 if ((ret
> 0) && ((ret
+ 1) < *size
- *pos
))
1492 /* there was just enough or not enough space, allocate more. */
1497 static int decode_xfer_read(char *buf
, char **annex
, int *ofs
, unsigned int *len
)
1501 /* Extract and NUL-terminate the annex. */
1503 while (*buf
&& *buf
!= ':')
1509 /* After the read marker and annex, qXfer looks like a
1510 * traditional 'm' packet. */
1512 *ofs
= strtoul(buf
, &separator
, 16);
1514 if (*separator
!= ',')
1517 *len
= strtoul(separator
+1, NULL
, 16);
1522 int gdb_calc_blocksize(flash_bank_t
*bank
)
1525 int block_size
= 0xffffffff;
1527 /* loop through all sectors and return smallest sector size */
1529 for (i
= 0; i
< bank
->num_sectors
; i
++)
1531 if (bank
->sectors
[i
].size
< block_size
)
1532 block_size
= bank
->sectors
[i
].size
;
1538 static int compare_bank (const void * a
, const void * b
)
1540 flash_bank_t
*b1
, *b2
;
1541 b1
=*((flash_bank_t
**)a
);
1542 b2
=*((flash_bank_t
**)b
);
1544 if (b1
->base
==b2
->base
)
1547 } else if (b1
->base
>b2
->base
)
1556 int gdb_query_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1558 command_context_t
*cmd_ctx
= connection
->cmd_ctx
;
1559 gdb_connection_t
*gdb_connection
= connection
->priv
;
1561 if (strstr(packet
, "qRcmd,"))
1563 if (packet_size
> 6)
1567 cmd
= malloc((packet_size
- 6)/2 + 1);
1568 for (i
=0; i
< (packet_size
- 6)/2; i
++)
1571 sscanf(packet
+ 6 + 2*i
, "%2x", &tmp
);
1574 cmd
[(packet_size
- 6)/2] = 0x0;
1576 /* We want to print all debug output to GDB connection */
1577 log_add_callback(gdb_log_callback
, connection
);
1578 target_call_timer_callbacks_now();
1579 command_run_line(cmd_ctx
, cmd
);
1580 target_call_timer_callbacks_now();
1581 log_remove_callback(gdb_log_callback
, connection
);
1584 gdb_put_packet(connection
, "OK", 2);
1587 else if (strstr(packet
, "qCRC:"))
1589 if (packet_size
> 5)
1598 /* skip command character */
1601 addr
= strtoul(packet
, &separator
, 16);
1603 if (*separator
!= ',')
1605 LOG_ERROR("incomplete read memory packet received, dropping connection");
1606 return ERROR_SERVER_REMOTE_CLOSED
;
1609 len
= strtoul(separator
+ 1, NULL
, 16);
1611 retval
= target_checksum_memory(target
, addr
, len
, &checksum
);
1613 if (retval
== ERROR_OK
)
1615 snprintf(gdb_reply
, 10, "C%8.8x", checksum
);
1616 gdb_put_packet(connection
, gdb_reply
, 9);
1620 if ((retval
= gdb_error(connection
, retval
)) != ERROR_OK
)
1627 else if (strstr(packet
, "qSupported"))
1629 /* we currently support packet size and qXfer:memory-map:read (if enabled)
1630 * disable qXfer:features:read for the moment */
1631 int retval
= ERROR_OK
;
1632 char *buffer
= NULL
;
1636 xml_printf(&retval
, &buffer
, &pos
, &size
,
1637 "PacketSize=%x;qXfer:memory-map:read%c;qXfer:features:read-;QStartNoAckMode+",
1638 (GDB_BUFFER_SIZE
- 1), ((gdb_use_memory_map
== 1)&&(flash_get_bank_count()>0)) ? '+' : '-');
1640 if (retval
!= ERROR_OK
)
1642 gdb_send_error(connection
, 01);
1646 gdb_put_packet(connection
, buffer
, strlen(buffer
));
1651 else if (strstr(packet
, "qXfer:memory-map:read::")&&(flash_get_bank_count()>0))
1653 /* We get away with only specifying flash here. Regions that are not
1654 * specified are treated as if we provided no memory map(if not we
1655 * could detect the holes and mark them as RAM).
1656 * Normally we only execute this code once, but no big deal if we
1657 * have to regenerate it a couple of times. */
1663 int retval
= ERROR_OK
;
1670 /* skip command character */
1673 offset
= strtoul(packet
, &separator
, 16);
1674 length
= strtoul(separator
+ 1, &separator
, 16);
1676 xml_printf(&retval
, &xml
, &pos
, &size
, "<memory-map>\n");
1679 sort banks in ascending order, we need to make non-flash memory be ram(or rather
1680 read/write) by default for GDB.
1681 GDB does not have a concept of non-cacheable read/write memory.
1683 flash_bank_t
**banks
=malloc(sizeof(flash_bank_t
*)*flash_get_bank_count());
1686 for (i
=0; i
<flash_get_bank_count(); i
++)
1688 p
= get_flash_bank_by_num(i
);
1692 retval
= ERROR_FAIL
;
1693 gdb_send_error(connection
, retval
);
1699 qsort(banks
, flash_get_bank_count(), sizeof(flash_bank_t
*), compare_bank
);
1702 for (i
=0; i
<flash_get_bank_count(); i
++)
1706 if (ram_start
<p
->base
)
1708 xml_printf(&retval
, &xml
, &pos
, &size
, "<memory type=\"ram\" start=\"0x%x\" length=\"0x%x\"/>\n",
1709 ram_start
, p
->base
-ram_start
);
1712 /* if device has uneven sector sizes, eg. str7, lpc
1713 * we pass the smallest sector size to gdb memory map */
1714 blocksize
= gdb_calc_blocksize(p
);
1716 xml_printf(&retval
, &xml
, &pos
, &size
, "<memory type=\"flash\" start=\"0x%x\" length=\"0x%x\">\n" \
1717 "<property name=\"blocksize\">0x%x</property>\n" \
1719 p
->base
, p
->size
, blocksize
);
1720 ram_start
=p
->base
+p
->size
;
1724 xml_printf(&retval
, &xml
, &pos
, &size
, "<memory type=\"ram\" start=\"0x%x\" length=\"0x%x\"/>\n",
1725 ram_start
, 0-ram_start
);
1728 /* a flash chip could be at the very end of the 32 bit address space, in which case
1729 ram_start will be precisely 0 */
1735 xml_printf(&retval
, &xml
, &pos
, &size
, "</memory-map>\n");
1737 if (retval
!= ERROR_OK
)
1739 gdb_send_error(connection
, retval
);
1743 if (offset
+ length
> pos
)
1745 length
= pos
- offset
;
1748 char *t
= malloc(length
+ 1);
1750 memcpy(t
+ 1, xml
+ offset
, length
);
1751 gdb_put_packet(connection
, t
, length
+ 1);
1757 else if (strstr(packet
, "qXfer:features:read:"))
1762 int retval
= ERROR_OK
;
1765 unsigned int length
;
1768 /* skip command character */
1771 if (decode_xfer_read(packet
, &annex
, &offset
, &length
) < 0)
1773 gdb_send_error(connection
, 01);
1777 if (strcmp(annex
, "target.xml") != 0)
1779 gdb_send_error(connection
, 01);
1783 xml_printf(&retval
, &xml
, &pos
, &size
, \
1784 "l<target version=\"1.0\">\n<architecture>arm</architecture>\n</target>\n");
1786 if (retval
!= ERROR_OK
)
1788 gdb_send_error(connection
, retval
);
1792 gdb_put_packet(connection
, xml
, strlen(xml
));
1797 else if (strstr(packet
, "QStartNoAckMode"))
1799 gdb_connection
->noack_mode
= 1;
1800 gdb_put_packet(connection
, "OK", 2);
1804 gdb_put_packet(connection
, "", 0);
1808 int gdb_v_packet(connection_t
*connection
, target_t
*target
, char *packet
, int packet_size
)
1810 gdb_connection_t
*gdb_connection
= connection
->priv
;
1811 gdb_service_t
*gdb_service
= connection
->service
->priv
;
1814 /* if flash programming disabled - send a empty reply */
1816 if (gdb_flash_program
== 0)
1818 gdb_put_packet(connection
, "", 0);
1822 if (strstr(packet
, "vFlashErase:"))
1825 unsigned long length
;
1827 char *parse
= packet
+ 12;
1830 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1831 return ERROR_SERVER_REMOTE_CLOSED
;
1834 addr
= strtoul(parse
, &parse
, 16);
1836 if (*(parse
++) != ',' || *parse
== '\0')
1838 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1839 return ERROR_SERVER_REMOTE_CLOSED
;
1842 length
= strtoul(parse
, &parse
, 16);
1846 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1847 return ERROR_SERVER_REMOTE_CLOSED
;
1850 /* assume all sectors need erasing - stops any problems
1851 * when flash_write is called multiple times */
1854 /* perform any target specific operations before the erase */
1855 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_FLASH_ERASE_START
);
1856 result
= flash_erase_address_range(gdb_service
->target
, addr
, length
);
1857 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_FLASH_ERASE_END
);
1860 if (result
!= ERROR_OK
)
1862 /* GDB doesn't evaluate the actual error number returned,
1863 * treat a failed erase as an I/O error
1865 gdb_send_error(connection
, EIO
);
1866 LOG_ERROR("flash_erase returned %i", result
);
1869 gdb_put_packet(connection
, "OK", 2);
1874 if (strstr(packet
, "vFlashWrite:"))
1878 unsigned long length
;
1879 char *parse
= packet
+ 12;
1883 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1884 return ERROR_SERVER_REMOTE_CLOSED
;
1886 addr
= strtoul(parse
, &parse
, 16);
1887 if (*(parse
++) != ':')
1889 LOG_ERROR("incomplete vFlashErase packet received, dropping connection");
1890 return ERROR_SERVER_REMOTE_CLOSED
;
1892 length
= packet_size
- (parse
- packet
);
1894 /* create a new image if there isn't already one */
1895 if (gdb_connection
->vflash_image
== NULL
)
1897 gdb_connection
->vflash_image
= malloc(sizeof(image_t
));
1898 image_open(gdb_connection
->vflash_image
, "", "build");
1901 /* create new section with content from packet buffer */
1902 if((retval
= image_add_section(gdb_connection
->vflash_image
, addr
, length
, 0x0, (u8
*)parse
)) != ERROR_OK
)
1907 gdb_put_packet(connection
, "OK", 2);
1912 if (!strcmp(packet
, "vFlashDone"))
1916 /* process the flashing buffer. No need to erase as GDB
1917 * always issues a vFlashErase first. */
1918 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_FLASH_WRITE_START
);
1919 result
= flash_write(gdb_service
->target
, gdb_connection
->vflash_image
, &written
, 0);
1920 target_call_event_callbacks(gdb_service
->target
, TARGET_EVENT_GDB_FLASH_WRITE_END
);
1921 if ( result
!= ERROR_OK
)
1923 if (result
== ERROR_FLASH_DST_OUT_OF_BANK
)
1924 gdb_put_packet(connection
, "E.memtype", 9);
1926 gdb_send_error(connection
, EIO
);
1930 LOG_DEBUG("wrote %u bytes from vFlash image to flash", written
);
1931 gdb_put_packet(connection
, "OK", 2);
1934 image_close(gdb_connection
->vflash_image
);
1935 free(gdb_connection
->vflash_image
);
1936 gdb_connection
->vflash_image
= NULL
;
1941 gdb_put_packet(connection
, "", 0);
1945 int gdb_detach(connection_t
*connection
, target_t
*target
)
1948 switch( detach_mode
)
1950 case GDB_DETACH_RESUME
:
1951 target_handle_event( target
, TARGET_EVENT_OLD_pre_resume
);
1952 target_resume(target
, 1, 0, 1, 0);
1955 case GDB_DETACH_RESET
:
1956 /* FIX?? make this configurable?? */
1957 target_process_reset(connection
->cmd_ctx
, RESET_HALT
);
1960 case GDB_DETACH_HALT
:
1961 target_halt(target
);
1964 case GDB_DETACH_NOTHING
:
1968 gdb_put_packet(connection
, "OK", 2);
1972 static void gdb_log_callback(void *priv
, const char *file
, int line
,
1973 const char *function
, const char *string
)
1975 connection_t
*connection
= priv
;
1976 gdb_connection_t
*gdb_con
= connection
->priv
;
1980 /* do not reply this using the O packet */
1984 gdb_output_con(connection
, string
);
1987 /* Do not allocate this on the stack */
1988 char gdb_packet_buffer
[GDB_BUFFER_SIZE
];
1990 static void gdb_sig_halted(connection_t
*connection
)
1993 snprintf(sig_reply
, 4, "T%2.2x", 2);
1994 gdb_put_packet(connection
, sig_reply
, 3);
1998 int gdb_input_inner(connection_t
*connection
)
2000 gdb_service_t
*gdb_service
= connection
->service
->priv
;
2001 target_t
*target
= gdb_service
->target
;
2002 char *packet
=gdb_packet_buffer
;
2005 gdb_connection_t
*gdb_con
= connection
->priv
;
2006 static int extended_protocol
= 0;
2008 /* drain input buffer */
2011 packet_size
= GDB_BUFFER_SIZE
-1;
2012 if ((retval
= gdb_get_packet(connection
, packet
, &packet_size
)) != ERROR_OK
)
2017 /* terminate with zero */
2018 packet
[packet_size
] = 0;
2020 if( LOG_LEVEL_IS( LOG_LVL_DEBUG
) ){
2021 if( packet
[0] == 'X' ){
2022 // binary packets spew junk into the debug log stream
2025 for( x
= 0 ; (x
< 49) && (packet
[x
] != ':') ; x
++ ){
2029 LOG_DEBUG("received packet: '%s:<binary-data>'", buf
);
2031 LOG_DEBUG("received packet: '%s'", packet
);
2035 if (packet_size
> 0)
2041 /* Hct... -- set thread
2042 * we don't have threads, send empty reply */
2043 gdb_put_packet(connection
, NULL
, 0);
2047 retval
= gdb_query_packet(connection
, target
, packet
, packet_size
);
2050 retval
= gdb_get_registers_packet(connection
, target
, packet
, packet_size
);
2053 retval
= gdb_set_registers_packet(connection
, target
, packet
, packet_size
);
2056 retval
= gdb_get_register_packet(connection
, target
, packet
, packet_size
);
2059 retval
= gdb_set_register_packet(connection
, target
, packet
, packet_size
);
2062 retval
= gdb_read_memory_packet(connection
, target
, packet
, packet_size
);
2065 retval
= gdb_write_memory_packet(connection
, target
, packet
, packet_size
);
2069 retval
= gdb_breakpoint_watchpoint_packet(connection
, target
, packet
, packet_size
);
2072 gdb_last_signal_packet(connection
, target
, packet
, packet_size
);
2077 if (target
->state
!= TARGET_HALTED
)
2079 /* If the target isn't in the halted state, then we can't
2080 * step/continue. This might be early setup, etc.
2082 gdb_sig_halted(connection
);
2085 /* We're running/stepping, in which case we can
2086 * forward log output until the target is halted
2088 gdb_connection_t
*gdb_con
= connection
->priv
;
2089 gdb_con
->frontend_state
= TARGET_RUNNING
;
2090 log_add_callback(gdb_log_callback
, connection
);
2091 target_call_event_callbacks(target
, TARGET_EVENT_GDB_START
);
2092 int retval
=gdb_step_continue_packet(connection
, target
, packet
, packet_size
);
2093 if (retval
!=ERROR_OK
)
2095 /* we'll never receive a halted condition... issue a false one.. */
2096 gdb_frontend_halted(target
, connection
);
2102 retval
= gdb_v_packet(connection
, target
, packet
, packet_size
);
2105 retval
= gdb_detach(connection
, target
);
2106 extended_protocol
= 0;
2109 if ((retval
= gdb_write_memory_binary_packet(connection
, target
, packet
, packet_size
)) != ERROR_OK
)
2113 if (extended_protocol
!= 0)
2115 gdb_put_packet(connection
, "OK", 2);
2116 return ERROR_SERVER_REMOTE_CLOSED
;
2118 /* handle extended remote protocol */
2119 extended_protocol
= 1;
2120 gdb_put_packet(connection
, "OK", 2);
2123 /* handle extended restart packet */
2124 breakpoint_clear_target(gdb_service
->target
);
2125 watchpoint_clear_target(gdb_service
->target
);
2126 command_run_linef(connection
->cmd_ctx
, "ocd_gdb_restart %d", get_num_by_target(target
));
2129 /* ignore unkown packets */
2130 LOG_DEBUG("ignoring 0x%2.2x packet", packet
[0]);
2131 gdb_put_packet(connection
, NULL
, 0);
2135 /* if a packet handler returned an error, exit input loop */
2136 if (retval
!= ERROR_OK
)
2140 if (gdb_con
->ctrl_c
)
2142 if (target
->state
== TARGET_RUNNING
)
2144 target_halt(target
);
2145 gdb_con
->ctrl_c
= 0;
2149 } while (gdb_con
->buf_cnt
> 0);
2154 int gdb_input(connection_t
*connection
)
2156 int retval
= gdb_input_inner(connection
);
2157 gdb_connection_t
*gdb_con
= connection
->priv
;
2158 if (retval
== ERROR_SERVER_REMOTE_CLOSED
)
2161 /* logging does not propagate the error, yet can set th gdb_con->closed flag */
2162 if (gdb_con
->closed
)
2163 return ERROR_SERVER_REMOTE_CLOSED
;
2165 /* we'll recover from any other errors(e.g. temporary timeouts, etc.) */
2171 gdb_service_t
*gdb_service
;
2172 target_t
*target
= all_targets
;
2176 LOG_WARNING("no gdb ports allocated as no target has been specified");
2182 LOG_WARNING("no gdb port specified, using default port 3333");
2188 char service_name
[8];
2190 snprintf(service_name
, 8, "gdb-%2.2i", target
->target_number
);
2192 gdb_service
= malloc(sizeof(gdb_service_t
));
2193 gdb_service
->target
= target
;
2195 add_service("gdb", CONNECTION_GDB
,
2196 gdb_port
+ target
->target_number
,
2197 1, gdb_new_connection
, gdb_input
,
2198 gdb_connection_closed
,
2201 LOG_DEBUG("gdb service for target %s at port %i",
2203 gdb_port
+ target
->target_number
);
2205 target
= target
->next
;
2211 /* daemon configuration command gdb_port */
2212 int handle_gdb_port_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2216 command_print(cmd_ctx
, "%d", gdb_port
);
2220 /* only if the port wasn't overwritten by cmdline */
2222 gdb_port
= strtoul(args
[0], NULL
, 0);
2227 int handle_gdb_detach_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2231 if (strcmp(args
[0], "resume") == 0)
2233 detach_mode
= GDB_DETACH_RESUME
;
2236 else if (strcmp(args
[0], "reset") == 0)
2238 detach_mode
= GDB_DETACH_RESET
;
2241 else if (strcmp(args
[0], "halt") == 0)
2243 detach_mode
= GDB_DETACH_HALT
;
2246 else if (strcmp(args
[0], "nothing") == 0)
2248 detach_mode
= GDB_DETACH_NOTHING
;
2252 LOG_WARNING("invalid gdb_detach configuration directive: %s", args
[0]);
2255 return ERROR_COMMAND_SYNTAX_ERROR
;
2258 int handle_gdb_memory_map_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2262 if (strcmp(args
[0], "enable") == 0)
2264 gdb_use_memory_map
= 1;
2267 else if (strcmp(args
[0], "disable") == 0)
2269 gdb_use_memory_map
= 0;
2273 LOG_WARNING("invalid gdb_memory_map configuration directive %s", args
[0]);
2276 return ERROR_COMMAND_SYNTAX_ERROR
;
2279 int handle_gdb_flash_program_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2283 if (strcmp(args
[0], "enable") == 0)
2285 gdb_flash_program
= 1;
2288 else if (strcmp(args
[0], "disable") == 0)
2290 gdb_flash_program
= 0;
2294 LOG_WARNING("invalid gdb_flash_program configuration directive: %s", args
[0]);
2297 return ERROR_COMMAND_SYNTAX_ERROR
;
2300 int handle_gdb_report_data_abort_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2304 if (strcmp(args
[0], "enable") == 0)
2306 gdb_report_data_abort
= 1;
2309 else if (strcmp(args
[0], "disable") == 0)
2311 gdb_report_data_abort
= 0;
2315 LOG_WARNING("invalid gdb_report_data_abort configuration directive: %s", args
[0]);
2318 return ERROR_COMMAND_SYNTAX_ERROR
;
2321 /* gdb_breakpoint_override */
2322 int handle_gdb_breakpoint_override_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2329 gdb_breakpoint_override
= 1;
2330 if (strcmp(args
[0], "hard")==0)
2332 gdb_breakpoint_override_type
=BKPT_HARD
;
2333 } else if (strcmp(args
[0], "soft")==0)
2335 gdb_breakpoint_override_type
=BKPT_SOFT
;
2336 } else if (strcmp(args
[0], "disable") == 0)
2338 gdb_breakpoint_override
= 0;
2342 return ERROR_COMMAND_SYNTAX_ERROR
;
2344 if (gdb_breakpoint_override
)
2346 LOG_USER("force %s breakpoints", (gdb_breakpoint_override_type
==BKPT_HARD
)?"hard":"soft");
2349 LOG_USER("breakpoint type is not overriden");
2355 int gdb_register_commands(command_context_t
*command_context
)
2357 register_command(command_context
, NULL
, "gdb_port", handle_gdb_port_command
,
2358 COMMAND_CONFIG
, "daemon configuration command gdb_port");
2359 register_command(command_context
, NULL
, "gdb_detach", handle_gdb_detach_command
,
2360 COMMAND_CONFIG
, "");
2361 register_command(command_context
, NULL
, "gdb_memory_map", handle_gdb_memory_map_command
,
2362 COMMAND_CONFIG
, "enable or disable memory map");
2363 register_command(command_context
, NULL
, "gdb_flash_program", handle_gdb_flash_program_command
,
2364 COMMAND_CONFIG
, "enable or disable flash program");
2365 register_command(command_context
, NULL
, "gdb_report_data_abort", handle_gdb_report_data_abort_command
,
2366 COMMAND_CONFIG
, "enable or disable report data");
2367 register_command(command_context
, NULL
, "gdb_breakpoint_override", handle_gdb_breakpoint_override_command
,
2368 COMMAND_EXEC
, "hard/soft/disabled - force breakpoint type for gdb 'break' commands."
2369 "The raison d'etre for this option is to support GDB GUI's without "
2370 "a hard/soft breakpoint concept where the default OpenOCD behaviour "
2371 "is not sufficient");
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)