| OLD | NEW |
| 1 /* Remote target communications for serial-line targets in custom GDB protocol | 1 /* Remote target communications for serial-line targets in custom GDB protocol |
| 2 | 2 |
| 3 Copyright (C) 1988-2012 Free Software Foundation, Inc. | 3 Copyright (C) 1988-2013 Free Software Foundation, Inc. |
| 4 | 4 |
| 5 This file is part of GDB. | 5 This file is part of GDB. |
| 6 | 6 |
| 7 This program is free software; you can redistribute it and/or modify | 7 This program is free software; you can redistribute it and/or modify |
| 8 it under the terms of the GNU General Public License as published by | 8 it under the terms of the GNU General Public License as published by |
| 9 the Free Software Foundation; either version 3 of the License, or | 9 the Free Software Foundation; either version 3 of the License, or |
| 10 (at your option) any later version. | 10 (at your option) any later version. |
| 11 | 11 |
| 12 This program is distributed in the hope that it will be useful, | 12 This program is distributed in the hope that it will be useful, |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 GNU General Public License for more details. | 15 GNU General Public License for more details. |
| 16 | 16 |
| 17 You should have received a copy of the GNU General Public License | 17 You should have received a copy of the GNU General Public License |
| 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ | 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 19 | 19 |
| 20 /* See the GDB User Guide for details of the GDB remote protocol. */ | 20 /* See the GDB User Guide for details of the GDB remote protocol. */ |
| 21 | 21 |
| 22 #include "defs.h" | 22 #include "defs.h" |
| 23 #include "gdb_string.h" | 23 #include <string.h> |
| 24 #include <ctype.h> | 24 #include <ctype.h> |
| 25 #include <fcntl.h> | 25 #include <fcntl.h> |
| 26 #include "inferior.h" | 26 #include "inferior.h" |
| 27 #include "bfd.h" | 27 #include "bfd.h" |
| 28 #include "symfile.h" | 28 #include "symfile.h" |
| 29 #include "exceptions.h" | 29 #include "exceptions.h" |
| 30 #include "target.h" | 30 #include "target.h" |
| 31 /*#include "terminal.h" */ | 31 /*#include "terminal.h" */ |
| 32 #include "gdbcmd.h" | 32 #include "gdbcmd.h" |
| 33 #include "objfiles.h" | 33 #include "objfiles.h" |
| 34 #include "gdb-stabs.h" | 34 #include "gdb-stabs.h" |
| 35 #include "gdbthread.h" | 35 #include "gdbthread.h" |
| 36 #include "remote.h" | 36 #include "remote.h" |
| 37 #include "remote-notif.h" |
| 37 #include "regcache.h" | 38 #include "regcache.h" |
| 38 #include "value.h" | 39 #include "value.h" |
| 39 #include "gdb_assert.h" | 40 #include "gdb_assert.h" |
| 40 #include "observer.h" | 41 #include "observer.h" |
| 41 #include "solib.h" | 42 #include "solib.h" |
| 42 #include "cli/cli-decode.h" | 43 #include "cli/cli-decode.h" |
| 43 #include "cli/cli-setshow.h" | 44 #include "cli/cli-setshow.h" |
| 44 #include "target-descriptions.h" | 45 #include "target-descriptions.h" |
| 46 #include "gdb_bfd.h" |
| 47 #include "filestuff.h" |
| 45 | 48 |
| 46 #include <ctype.h> | 49 #include <ctype.h> |
| 47 #include <sys/time.h> | 50 #include <sys/time.h> |
| 48 | 51 |
| 49 #include "event-loop.h" | 52 #include "event-loop.h" |
| 50 #include "event-top.h" | 53 #include "event-top.h" |
| 51 #include "inf-loop.h" | 54 #include "inf-loop.h" |
| 52 | 55 |
| 53 #include <signal.h> | 56 #include <signal.h> |
| 54 #include "serial.h" | 57 #include "serial.h" |
| 55 | 58 |
| 56 #include "gdbcore.h" /* for exec_bfd */ | 59 #include "gdbcore.h" /* for exec_bfd */ |
| 57 | 60 |
| 58 #include "remote-fileio.h" | 61 #include "remote-fileio.h" |
| 59 #include "gdb/fileio.h" | 62 #include "gdb/fileio.h" |
| 60 #include "gdb_stat.h" | 63 #include <sys/stat.h> |
| 61 #include "xml-support.h" | 64 #include "xml-support.h" |
| 62 | 65 |
| 63 #include "memory-map.h" | 66 #include "memory-map.h" |
| 64 | 67 |
| 65 #include "tracepoint.h" | 68 #include "tracepoint.h" |
| 66 #include "ax.h" | 69 #include "ax.h" |
| 67 #include "ax-gdb.h" | 70 #include "ax-gdb.h" |
| 68 #include "agent.h" | 71 #include "agent.h" |
| 72 #include "btrace.h" |
| 69 | 73 |
| 70 /* Temp hacks for tracepoint encoding migration. */ | 74 /* Temp hacks for tracepoint encoding migration. */ |
| 71 static char *target_buf; | 75 static char *target_buf; |
| 72 static long target_buf_size; | 76 static long target_buf_size; |
| 73 | 77 |
| 74 /* The size to align memory write packets, when practical. The protocol | 78 /* The size to align memory write packets, when practical. The protocol |
| 75 does not guarantee any alignment, and gdb will generate short | 79 does not guarantee any alignment, and gdb will generate short |
| 76 writes and unaligned writes, but even as a best-effort attempt this | 80 writes and unaligned writes, but even as a best-effort attempt this |
| 77 can improve bulk transfers. For instance, if a write is misaligned | 81 can improve bulk transfers. For instance, if a write is misaligned |
| 78 relative to the target's data bus, the stub may need to make an extra | 82 relative to the target's data bus, the stub may need to make an extra |
| 79 round trip fetching data from the target. This doesn't make a | 83 round trip fetching data from the target. This doesn't make a |
| 80 huge difference, but it's easy to do, so we try to be helpful. | 84 huge difference, but it's easy to do, so we try to be helpful. |
| 81 | 85 |
| 82 The alignment chosen is arbitrary; usually data bus width is | 86 The alignment chosen is arbitrary; usually data bus width is |
| 83 important here, not the possibly larger cache line size. */ | 87 important here, not the possibly larger cache line size. */ |
| 84 enum { REMOTE_ALIGN_WRITES = 16 }; | 88 enum { REMOTE_ALIGN_WRITES = 16 }; |
| 85 | 89 |
| 86 /* Prototypes for local functions. */ | 90 /* Prototypes for local functions. */ |
| 87 static void cleanup_sigint_signal_handler (void *dummy); | 91 static void async_cleanup_sigint_signal_handler (void *dummy); |
| 88 static void initialize_sigint_signal_handler (void); | |
| 89 static int getpkt_sane (char **buf, long *sizeof_buf, int forever); | 92 static int getpkt_sane (char **buf, long *sizeof_buf, int forever); |
| 90 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf, | 93 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf, |
| 91 » » » » int forever); | 94 » » » » int forever, int *is_notif); |
| 92 | 95 |
| 93 static void handle_remote_sigint (int); | 96 static void async_handle_remote_sigint (int); |
| 94 static void handle_remote_sigint_twice (int); | 97 static void async_handle_remote_sigint_twice (int); |
| 95 static void async_remote_interrupt (gdb_client_data); | |
| 96 void async_remote_interrupt_twice (gdb_client_data); | |
| 97 | 98 |
| 98 static void remote_files_info (struct target_ops *ignore); | 99 static void remote_files_info (struct target_ops *ignore); |
| 99 | 100 |
| 100 static void remote_prepare_to_store (struct regcache *regcache); | 101 static void remote_prepare_to_store (struct regcache *regcache); |
| 101 | 102 |
| 102 static void remote_open (char *name, int from_tty); | 103 static void remote_open (char *name, int from_tty); |
| 103 | 104 |
| 104 static void extended_remote_open (char *name, int from_tty); | 105 static void extended_remote_open (char *name, int from_tty); |
| 105 | 106 |
| 106 static void remote_open_1 (char *, int, struct target_ops *, int extended_p); | 107 static void remote_open_1 (char *, int, struct target_ops *, int extended_p); |
| 107 | 108 |
| 108 static void remote_close (int quitting); | 109 static void remote_close (void); |
| 109 | 110 |
| 110 static void remote_mourn (struct target_ops *ops); | 111 static void remote_mourn (struct target_ops *ops); |
| 111 | 112 |
| 112 static void extended_remote_restart (void); | 113 static void extended_remote_restart (void); |
| 113 | 114 |
| 114 static void extended_remote_mourn (struct target_ops *); | 115 static void extended_remote_mourn (struct target_ops *); |
| 115 | 116 |
| 116 static void remote_mourn_1 (struct target_ops *); | 117 static void remote_mourn_1 (struct target_ops *); |
| 117 | 118 |
| 118 static void remote_send (char **buf, long *sizeof_buf_p); | 119 static void remote_send (char **buf, long *sizeof_buf_p); |
| 119 | 120 |
| 120 static int readchar (int timeout); | 121 static int readchar (int timeout); |
| 121 | 122 |
| 123 static void remote_serial_write (const char *str, int len); |
| 124 |
| 122 static void remote_kill (struct target_ops *ops); | 125 static void remote_kill (struct target_ops *ops); |
| 123 | 126 |
| 124 static int tohex (int nib); | 127 static int tohex (int nib); |
| 125 | 128 |
| 126 static int remote_can_async_p (void); | 129 static int remote_can_async_p (void); |
| 127 | 130 |
| 128 static int remote_is_async_p (void); | 131 static int remote_is_async_p (void); |
| 129 | 132 |
| 130 static void remote_async (void (*callback) (enum inferior_event_type event_type, | 133 static void remote_async (void (*callback) (enum inferior_event_type event_type, |
| 131 void *context), void *context); | 134 void *context), void *context); |
| 132 | 135 |
| 133 static void remote_detach (struct target_ops *ops, char *args, int from_tty); | 136 static void sync_remote_interrupt_twice (int signo); |
| 134 | |
| 135 static void remote_interrupt (int signo); | |
| 136 | |
| 137 static void remote_interrupt_twice (int signo); | |
| 138 | 137 |
| 139 static void interrupt_query (void); | 138 static void interrupt_query (void); |
| 140 | 139 |
| 141 static void set_general_thread (struct ptid ptid); | 140 static void set_general_thread (struct ptid ptid); |
| 142 static void set_continue_thread (struct ptid ptid); | 141 static void set_continue_thread (struct ptid ptid); |
| 143 | 142 |
| 144 static void get_offsets (void); | 143 static void get_offsets (void); |
| 145 | 144 |
| 146 static void skip_frame (void); | 145 static void skip_frame (void); |
| 147 | 146 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 170 static void compare_sections_command (char *, int); | 169 static void compare_sections_command (char *, int); |
| 171 | 170 |
| 172 static void packet_command (char *, int); | 171 static void packet_command (char *, int); |
| 173 | 172 |
| 174 static int stub_unpack_int (char *buff, int fieldlength); | 173 static int stub_unpack_int (char *buff, int fieldlength); |
| 175 | 174 |
| 176 static ptid_t remote_current_thread (ptid_t oldptid); | 175 static ptid_t remote_current_thread (ptid_t oldptid); |
| 177 | 176 |
| 178 static void remote_find_new_threads (void); | 177 static void remote_find_new_threads (void); |
| 179 | 178 |
| 180 static void record_currthread (ptid_t currthread); | |
| 181 | |
| 182 static int fromhex (int a); | 179 static int fromhex (int a); |
| 183 | 180 |
| 184 extern int hex2bin (const char *hex, gdb_byte *bin, int count); | |
| 185 | |
| 186 extern int bin2hex (const gdb_byte *bin, char *hex, int count); | |
| 187 | |
| 188 static int putpkt_binary (char *buf, int cnt); | 181 static int putpkt_binary (char *buf, int cnt); |
| 189 | 182 |
| 190 static void check_binary_download (CORE_ADDR addr); | 183 static void check_binary_download (CORE_ADDR addr); |
| 191 | 184 |
| 192 struct packet_config; | 185 struct packet_config; |
| 193 | 186 |
| 194 static void show_packet_config_cmd (struct packet_config *config); | 187 static void show_packet_config_cmd (struct packet_config *config); |
| 195 | 188 |
| 196 static void update_packet_config (struct packet_config *config); | 189 static void update_packet_config (struct packet_config *config); |
| 197 | 190 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 210 | 203 |
| 211 struct remote_state; | 204 struct remote_state; |
| 212 static int remote_get_trace_status (struct trace_status *ts); | 205 static int remote_get_trace_status (struct trace_status *ts); |
| 213 | 206 |
| 214 static int remote_upload_tracepoints (struct uploaded_tp **utpp); | 207 static int remote_upload_tracepoints (struct uploaded_tp **utpp); |
| 215 | 208 |
| 216 static int remote_upload_trace_state_variables (struct uploaded_tsv **utsvp); | 209 static int remote_upload_trace_state_variables (struct uploaded_tsv **utsvp); |
| 217 | 210 |
| 218 static void remote_query_supported (void); | 211 static void remote_query_supported (void); |
| 219 | 212 |
| 220 static void remote_check_symbols (struct objfile *objfile); | 213 static void remote_check_symbols (void); |
| 221 | 214 |
| 222 void _initialize_remote (void); | 215 void _initialize_remote (void); |
| 223 | 216 |
| 224 struct stop_reply; | 217 struct stop_reply; |
| 225 static struct stop_reply *stop_reply_xmalloc (void); | |
| 226 static void stop_reply_xfree (struct stop_reply *); | 218 static void stop_reply_xfree (struct stop_reply *); |
| 227 static void do_stop_reply_xfree (void *arg); | 219 static void remote_parse_stop_reply (char *, struct stop_reply *); |
| 228 static void remote_parse_stop_reply (char *buf, struct stop_reply *); | |
| 229 static void push_stop_reply (struct stop_reply *); | 220 static void push_stop_reply (struct stop_reply *); |
| 230 static void remote_get_pending_stop_replies (void); | 221 static void discard_pending_stop_replies_in_queue (struct remote_state *); |
| 231 static void discard_pending_stop_replies (int pid); | |
| 232 static int peek_stop_reply (ptid_t ptid); | 222 static int peek_stop_reply (ptid_t ptid); |
| 233 | 223 |
| 234 static void remote_async_inferior_event_handler (gdb_client_data); | 224 static void remote_async_inferior_event_handler (gdb_client_data); |
| 235 static void remote_async_get_pending_events_handler (gdb_client_data); | |
| 236 | 225 |
| 237 static void remote_terminal_ours (void); | 226 static void remote_terminal_ours (void); |
| 238 | 227 |
| 239 static int remote_read_description_p (struct target_ops *target); | 228 static int remote_read_description_p (struct target_ops *target); |
| 240 | 229 |
| 241 static void remote_console_output (char *msg); | 230 static void remote_console_output (char *msg); |
| 242 | 231 |
| 243 static int remote_supports_cond_breakpoints (void); | 232 static int remote_supports_cond_breakpoints (void); |
| 244 | 233 |
| 245 static int remote_can_run_breakpoint_commands (void); | 234 static int remote_can_run_breakpoint_commands (void); |
| 246 | 235 |
| 247 /* The non-stop remote protocol provisions for one pending stop reply. | |
| 248 This is where we keep it until it is acknowledged. */ | |
| 249 | |
| 250 static struct stop_reply *pending_stop_reply = NULL; | |
| 251 | |
| 252 /* For "remote". */ | 236 /* For "remote". */ |
| 253 | 237 |
| 254 static struct cmd_list_element *remote_cmdlist; | 238 static struct cmd_list_element *remote_cmdlist; |
| 255 | 239 |
| 256 /* For "set remote" and "show remote". */ | 240 /* For "set remote" and "show remote". */ |
| 257 | 241 |
| 258 static struct cmd_list_element *remote_set_cmdlist; | 242 static struct cmd_list_element *remote_set_cmdlist; |
| 259 static struct cmd_list_element *remote_show_cmdlist; | 243 static struct cmd_list_element *remote_show_cmdlist; |
| 260 | 244 |
| 245 /* Stub vCont actions support. |
| 246 |
| 247 Each field is a boolean flag indicating whether the stub reports |
| 248 support for the corresponding action. */ |
| 249 |
| 250 struct vCont_action_support |
| 251 { |
| 252 /* vCont;t */ |
| 253 int t; |
| 254 |
| 255 /* vCont;r */ |
| 256 int r; |
| 257 }; |
| 258 |
| 259 /* Controls whether GDB is willing to use range stepping. */ |
| 260 |
| 261 static int use_range_stepping = 1; |
| 262 |
| 263 #define OPAQUETHREADBYTES 8 |
| 264 |
| 265 /* a 64 bit opaque identifier */ |
| 266 typedef unsigned char threadref[OPAQUETHREADBYTES]; |
| 267 |
| 268 /* About this many threadisds fit in a packet. */ |
| 269 |
| 270 #define MAXTHREADLISTRESULTS 32 |
| 271 |
| 261 /* Description of the remote protocol state for the currently | 272 /* Description of the remote protocol state for the currently |
| 262 connected target. This is per-target state, and independent of the | 273 connected target. This is per-target state, and independent of the |
| 263 selected architecture. */ | 274 selected architecture. */ |
| 264 | 275 |
| 265 struct remote_state | 276 struct remote_state |
| 266 { | 277 { |
| 267 /* A buffer to use for incoming packets, and its current size. The | 278 /* A buffer to use for incoming packets, and its current size. The |
| 268 buffer is grown dynamically for larger incoming packets. | 279 buffer is grown dynamically for larger incoming packets. |
| 269 Outgoing packets may also be constructed in this buffer. | 280 Outgoing packets may also be constructed in this buffer. |
| 270 BUF_SIZE is always at least REMOTE_PACKET_SIZE; | 281 BUF_SIZE is always at least REMOTE_PACKET_SIZE; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 stop. In the mean time, we can't start another command/query. | 319 stop. In the mean time, we can't start another command/query. |
| 309 The remote server wouldn't be ready to process it, so we'd | 320 The remote server wouldn't be ready to process it, so we'd |
| 310 timeout waiting for a reply that would never come and eventually | 321 timeout waiting for a reply that would never come and eventually |
| 311 we'd close the connection. This can happen in asynchronous mode | 322 we'd close the connection. This can happen in asynchronous mode |
| 312 because we allow GDB commands while the target is running. */ | 323 because we allow GDB commands while the target is running. */ |
| 313 int waiting_for_stop_reply; | 324 int waiting_for_stop_reply; |
| 314 | 325 |
| 315 /* True if the stub reports support for non-stop mode. */ | 326 /* True if the stub reports support for non-stop mode. */ |
| 316 int non_stop_aware; | 327 int non_stop_aware; |
| 317 | 328 |
| 318 /* True if the stub reports support for vCont;t. */ | 329 /* The status of the stub support for the various vCont actions. */ |
| 319 int support_vCont_t; | 330 struct vCont_action_support supports_vCont; |
| 320 | 331 |
| 321 /* True if the stub reports support for conditional tracepoints. */ | 332 /* True if the stub reports support for conditional tracepoints. */ |
| 322 int cond_tracepoints; | 333 int cond_tracepoints; |
| 323 | 334 |
| 324 /* True if the stub reports support for target-side breakpoint | 335 /* True if the stub reports support for target-side breakpoint |
| 325 conditions. */ | 336 conditions. */ |
| 326 int cond_breakpoints; | 337 int cond_breakpoints; |
| 327 | 338 |
| 328 /* True if the stub reports support for target-side breakpoint | 339 /* True if the stub reports support for target-side breakpoint |
| 329 commands. */ | 340 commands. */ |
| (...skipping 13 matching lines...) Expand all Loading... |
| 343 disconnected. */ | 354 disconnected. */ |
| 344 int disconnected_tracing; | 355 int disconnected_tracing; |
| 345 | 356 |
| 346 /* True if the stub reports support for enabling and disabling | 357 /* True if the stub reports support for enabling and disabling |
| 347 tracepoints while a trace experiment is running. */ | 358 tracepoints while a trace experiment is running. */ |
| 348 int enable_disable_tracepoints; | 359 int enable_disable_tracepoints; |
| 349 | 360 |
| 350 /* True if the stub can collect strings using tracenz bytecode. */ | 361 /* True if the stub can collect strings using tracenz bytecode. */ |
| 351 int string_tracing; | 362 int string_tracing; |
| 352 | 363 |
| 364 /* True if the stub supports qXfer:libraries-svr4:read with a |
| 365 non-empty annex. */ |
| 366 int augmented_libraries_svr4_read; |
| 367 |
| 353 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't | 368 /* Nonzero if the user has pressed Ctrl-C, but the target hasn't |
| 354 responded to that. */ | 369 responded to that. */ |
| 355 int ctrlc_pending_p; | 370 int ctrlc_pending_p; |
| 371 |
| 372 /* Descriptor for I/O to remote machine. Initialize it to NULL so that |
| 373 remote_open knows that we don't have a file open when the program |
| 374 starts. */ |
| 375 struct serial *remote_desc; |
| 376 |
| 377 /* These are the threads which we last sent to the remote system. The |
| 378 TID member will be -1 for all or -2 for not sent yet. */ |
| 379 ptid_t general_thread; |
| 380 ptid_t continue_thread; |
| 381 |
| 382 /* This is the traceframe which we last selected on the remote system. |
| 383 It will be -1 if no traceframe is selected. */ |
| 384 int remote_traceframe_number; |
| 385 |
| 386 char *last_pass_packet; |
| 387 |
| 388 /* The last QProgramSignals packet sent to the target. We bypass |
| 389 sending a new program signals list down to the target if the new |
| 390 packet is exactly the same as the last we sent. IOW, we only let |
| 391 the target know about program signals list changes. */ |
| 392 char *last_program_signals_packet; |
| 393 |
| 394 enum gdb_signal last_sent_signal; |
| 395 |
| 396 int last_sent_step; |
| 397 |
| 398 char *finished_object; |
| 399 char *finished_annex; |
| 400 ULONGEST finished_offset; |
| 401 |
| 402 /* Should we try the 'ThreadInfo' query packet? |
| 403 |
| 404 This variable (NOT available to the user: auto-detect only!) |
| 405 determines whether GDB will use the new, simpler "ThreadInfo" |
| 406 query or the older, more complex syntax for thread queries. |
| 407 This is an auto-detect variable (set to true at each connect, |
| 408 and set to false when the target fails to recognize it). */ |
| 409 int use_threadinfo_query; |
| 410 int use_threadextra_query; |
| 411 |
| 412 void (*async_client_callback) (enum inferior_event_type event_type, |
| 413 void *context); |
| 414 void *async_client_context; |
| 415 |
| 416 /* This is set to the data address of the access causing the target |
| 417 to stop for a watchpoint. */ |
| 418 CORE_ADDR remote_watch_data_address; |
| 419 |
| 420 /* This is non-zero if target stopped for a watchpoint. */ |
| 421 int remote_stopped_by_watchpoint_p; |
| 422 |
| 423 threadref echo_nextthread; |
| 424 threadref nextthread; |
| 425 threadref resultthreadlist[MAXTHREADLISTRESULTS]; |
| 426 |
| 427 /* The state of remote notification. */ |
| 428 struct remote_notif_state *notif_state; |
| 356 }; | 429 }; |
| 357 | 430 |
| 358 /* Private data that we'll store in (struct thread_info)->private. */ | 431 /* Private data that we'll store in (struct thread_info)->private. */ |
| 359 struct private_thread_info | 432 struct private_thread_info |
| 360 { | 433 { |
| 361 char *extra; | 434 char *extra; |
| 362 int core; | 435 int core; |
| 363 }; | 436 }; |
| 364 | 437 |
| 365 static void | 438 static void |
| 366 free_private_thread_info (struct private_thread_info *info) | 439 free_private_thread_info (struct private_thread_info *info) |
| 367 { | 440 { |
| 368 xfree (info->extra); | 441 xfree (info->extra); |
| 369 xfree (info); | 442 xfree (info); |
| 370 } | 443 } |
| 371 | 444 |
| 372 /* Returns true if the multi-process extensions are in effect. */ | 445 /* Returns true if the multi-process extensions are in effect. */ |
| 373 static int | 446 static int |
| 374 remote_multi_process_p (struct remote_state *rs) | 447 remote_multi_process_p (struct remote_state *rs) |
| 375 { | 448 { |
| 376 return rs->multi_process_aware; | 449 return rs->multi_process_aware; |
| 377 } | 450 } |
| 378 | 451 |
| 379 /* This data could be associated with a target, but we do not always | 452 /* This data could be associated with a target, but we do not always |
| 380 have access to the current target when we need it, so for now it is | 453 have access to the current target when we need it, so for now it is |
| 381 static. This will be fine for as long as only one target is in use | 454 static. This will be fine for as long as only one target is in use |
| 382 at a time. */ | 455 at a time. */ |
| 383 static struct remote_state remote_state; | 456 static struct remote_state *remote_state; |
| 384 | 457 |
| 385 static struct remote_state * | 458 static struct remote_state * |
| 386 get_remote_state_raw (void) | 459 get_remote_state_raw (void) |
| 387 { | 460 { |
| 388 return &remote_state; | 461 return remote_state; |
| 462 } |
| 463 |
| 464 /* Allocate a new struct remote_state with xmalloc, initialize it, and |
| 465 return it. */ |
| 466 |
| 467 static struct remote_state * |
| 468 new_remote_state (void) |
| 469 { |
| 470 struct remote_state *result = XCNEW (struct remote_state); |
| 471 |
| 472 /* The default buffer size is unimportant; it will be expanded |
| 473 whenever a larger buffer is needed. */ |
| 474 result->buf_size = 400; |
| 475 result->buf = xmalloc (result->buf_size); |
| 476 result->remote_traceframe_number = -1; |
| 477 result->last_sent_signal = GDB_SIGNAL_0; |
| 478 |
| 479 return result; |
| 389 } | 480 } |
| 390 | 481 |
| 391 /* Description of the remote protocol for a given architecture. */ | 482 /* Description of the remote protocol for a given architecture. */ |
| 392 | 483 |
| 393 struct packet_reg | 484 struct packet_reg |
| 394 { | 485 { |
| 395 long offset; /* Offset into G packet. */ | 486 long offset; /* Offset into G packet. */ |
| 396 long regnum; /* GDB's internal register number. */ | 487 long regnum; /* GDB's internal register number. */ |
| 397 LONGEST pnum; /* Remote protocol register number. */ | 488 LONGEST pnum; /* Remote protocol register number. */ |
| 398 int in_g_packet; /* Always part of G packet. */ | 489 int in_g_packet; /* Always part of G packet. */ |
| 399 /* long size in bytes; == register_size (target_gdbarch, regnum); | 490 /* long size in bytes; == register_size (target_gdbarch (), regnum); |
| 400 at present. */ | 491 at present. */ |
| 401 /* char *name; == gdbarch_register_name (target_gdbarch, regnum); | 492 /* char *name; == gdbarch_register_name (target_gdbarch (), regnum); |
| 402 at present. */ | 493 at present. */ |
| 403 }; | 494 }; |
| 404 | 495 |
| 405 struct remote_arch_state | 496 struct remote_arch_state |
| 406 { | 497 { |
| 407 /* Description of the remote protocol registers. */ | 498 /* Description of the remote protocol registers. */ |
| 408 long sizeof_g_packet; | 499 long sizeof_g_packet; |
| 409 | 500 |
| 410 /* Description of the remote protocol registers indexed by REGNUM | 501 /* Description of the remote protocol registers indexed by REGNUM |
| 411 (making an array gdbarch_num_regs in size). */ | 502 (making an array gdbarch_num_regs in size). */ |
| 412 struct packet_reg *regs; | 503 struct packet_reg *regs; |
| 413 | 504 |
| 414 /* This is the size (in chars) of the first response to the ``g'' | 505 /* This is the size (in chars) of the first response to the ``g'' |
| 415 packet. It is used as a heuristic when determining the maximum | 506 packet. It is used as a heuristic when determining the maximum |
| 416 size of memory-read and memory-write packets. A target will | 507 size of memory-read and memory-write packets. A target will |
| 417 typically only reserve a buffer large enough to hold the ``g'' | 508 typically only reserve a buffer large enough to hold the ``g'' |
| 418 packet. The size does not include packet overhead (headers and | 509 packet. The size does not include packet overhead (headers and |
| 419 trailers). */ | 510 trailers). */ |
| 420 long actual_register_packet_size; | 511 long actual_register_packet_size; |
| 421 | 512 |
| 422 /* This is the maximum size (in chars) of a non read/write packet. | 513 /* This is the maximum size (in chars) of a non read/write packet. |
| 423 It is also used as a cap on the size of read/write packets. */ | 514 It is also used as a cap on the size of read/write packets. */ |
| 424 long remote_packet_size; | 515 long remote_packet_size; |
| 425 }; | 516 }; |
| 426 | 517 |
| 427 long sizeof_pkt = 2000; | |
| 428 | |
| 429 /* Utility: generate error from an incoming stub packet. */ | 518 /* Utility: generate error from an incoming stub packet. */ |
| 430 static void | 519 static void |
| 431 trace_error (char *buf) | 520 trace_error (char *buf) |
| 432 { | 521 { |
| 433 if (*buf++ != 'E') | 522 if (*buf++ != 'E') |
| 434 return; /* not an error msg */ | 523 return; /* not an error msg */ |
| 435 switch (*buf) | 524 switch (*buf) |
| 436 { | 525 { |
| 437 case '1': /* malformed packet error */ | 526 case '1': /* malformed packet error */ |
| 438 if (*++buf == '0') /* general case: */ | 527 if (*++buf == '0') /* general case: */ |
| 439 error (_("remote.c: error in outgoing packet.")); | 528 error (_("remote.c: error in outgoing packet.")); |
| 440 else | 529 else |
| 441 error (_("remote.c: error in outgoing packet at field #%ld."), | 530 error (_("remote.c: error in outgoing packet at field #%ld."), |
| 442 strtol (buf, NULL, 16)); | 531 strtol (buf, NULL, 16)); |
| 443 case '2': | |
| 444 error (_("trace API error 0x%s."), ++buf); | |
| 445 default: | 532 default: |
| 446 error (_("Target returns error code '%s'."), buf); | 533 error (_("Target returns error code '%s'."), buf); |
| 447 } | 534 } |
| 448 } | 535 } |
| 449 | 536 |
| 450 /* Utility: wait for reply from stub, while accepting "O" packets. */ | 537 /* Utility: wait for reply from stub, while accepting "O" packets. */ |
| 451 static char * | 538 static char * |
| 452 remote_get_noisy_reply (char **buf_p, | 539 remote_get_noisy_reply (char **buf_p, |
| 453 long *sizeof_buf) | 540 long *sizeof_buf) |
| 454 { | 541 { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 476 from = ul; | 563 from = ul; |
| 477 | 564 |
| 478 p = pp + 1; | 565 p = pp + 1; |
| 479 unpack_varlen_hex (p, &ul); | 566 unpack_varlen_hex (p, &ul); |
| 480 to = ul; | 567 to = ul; |
| 481 | 568 |
| 482 org_to = to; | 569 org_to = to; |
| 483 | 570 |
| 484 TRY_CATCH (ex, RETURN_MASK_ALL) | 571 TRY_CATCH (ex, RETURN_MASK_ALL) |
| 485 { | 572 { |
| 486 » gdbarch_relocate_instruction (target_gdbarch, &to, from); | 573 » gdbarch_relocate_instruction (target_gdbarch (), &to, from); |
| 487 } | 574 } |
| 488 if (ex.reason >= 0) | 575 if (ex.reason >= 0) |
| 489 { | 576 { |
| 490 adjusted_size = to - org_to; | 577 adjusted_size = to - org_to; |
| 491 | 578 |
| 492 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size); | 579 xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size); |
| 493 putpkt (buf); | 580 putpkt (buf); |
| 494 } | 581 } |
| 495 else if (ex.reason < 0 && ex.error == MEMORY_ERROR) | 582 else if (ex.reason < 0 && ex.error == MEMORY_ERROR) |
| 496 { | 583 { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 517 } | 604 } |
| 518 while (1); | 605 while (1); |
| 519 } | 606 } |
| 520 | 607 |
| 521 /* Handle for retreving the remote protocol data from gdbarch. */ | 608 /* Handle for retreving the remote protocol data from gdbarch. */ |
| 522 static struct gdbarch_data *remote_gdbarch_data_handle; | 609 static struct gdbarch_data *remote_gdbarch_data_handle; |
| 523 | 610 |
| 524 static struct remote_arch_state * | 611 static struct remote_arch_state * |
| 525 get_remote_arch_state (void) | 612 get_remote_arch_state (void) |
| 526 { | 613 { |
| 527 return gdbarch_data (target_gdbarch, remote_gdbarch_data_handle); | 614 return gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle); |
| 528 } | 615 } |
| 529 | 616 |
| 530 /* Fetch the global remote target state. */ | 617 /* Fetch the global remote target state. */ |
| 531 | 618 |
| 532 static struct remote_state * | 619 static struct remote_state * |
| 533 get_remote_state (void) | 620 get_remote_state (void) |
| 534 { | 621 { |
| 535 /* Make sure that the remote architecture state has been | 622 /* Make sure that the remote architecture state has been |
| 536 initialized, because doing so might reallocate rs->buf. Any | 623 initialized, because doing so might reallocate rs->buf. Any |
| 537 function which calls getpkt also needs to be mindful of changes | 624 function which calls getpkt also needs to be mindful of changes |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 | 777 |
| 691 if (rs->explicit_packet_size) | 778 if (rs->explicit_packet_size) |
| 692 return rs->explicit_packet_size; | 779 return rs->explicit_packet_size; |
| 693 | 780 |
| 694 return rsa->remote_packet_size; | 781 return rsa->remote_packet_size; |
| 695 } | 782 } |
| 696 | 783 |
| 697 static struct packet_reg * | 784 static struct packet_reg * |
| 698 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum) | 785 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum) |
| 699 { | 786 { |
| 700 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch)) | 787 if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ())) |
| 701 return NULL; | 788 return NULL; |
| 702 else | 789 else |
| 703 { | 790 { |
| 704 struct packet_reg *r = &rsa->regs[regnum]; | 791 struct packet_reg *r = &rsa->regs[regnum]; |
| 705 | 792 |
| 706 gdb_assert (r->regnum == regnum); | 793 gdb_assert (r->regnum == regnum); |
| 707 return r; | 794 return r; |
| 708 } | 795 } |
| 709 } | 796 } |
| 710 | 797 |
| 711 static struct packet_reg * | 798 static struct packet_reg * |
| 712 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum) | 799 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum) |
| 713 { | 800 { |
| 714 int i; | 801 int i; |
| 715 | 802 |
| 716 for (i = 0; i < gdbarch_num_regs (target_gdbarch); i++) | 803 for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++) |
| 717 { | 804 { |
| 718 struct packet_reg *r = &rsa->regs[i]; | 805 struct packet_reg *r = &rsa->regs[i]; |
| 719 | 806 |
| 720 if (r->pnum == pnum) | 807 if (r->pnum == pnum) |
| 721 return r; | 808 return r; |
| 722 } | 809 } |
| 723 return NULL; | 810 return NULL; |
| 724 } | 811 } |
| 725 | 812 |
| 726 /* FIXME: graces/2002-08-08: These variables should eventually be | |
| 727 bound to an instance of the target object (as in gdbarch-tdep()), | |
| 728 when such a thing exists. */ | |
| 729 | |
| 730 /* This is set to the data address of the access causing the target | |
| 731 to stop for a watchpoint. */ | |
| 732 static CORE_ADDR remote_watch_data_address; | |
| 733 | |
| 734 /* This is non-zero if target stopped for a watchpoint. */ | |
| 735 static int remote_stopped_by_watchpoint_p; | |
| 736 | |
| 737 static struct target_ops remote_ops; | 813 static struct target_ops remote_ops; |
| 738 | 814 |
| 739 static struct target_ops extended_remote_ops; | 815 static struct target_ops extended_remote_ops; |
| 740 | 816 |
| 741 /* FIXME: cagney/1999-09-23: Even though getpkt was called with | 817 /* FIXME: cagney/1999-09-23: Even though getpkt was called with |
| 742 ``forever'' still use the normal timeout mechanism. This is | 818 ``forever'' still use the normal timeout mechanism. This is |
| 743 currently used by the ASYNC code to guarentee that target reads | 819 currently used by the ASYNC code to guarentee that target reads |
| 744 during the initial connect always time-out. Once getpkt has been | 820 during the initial connect always time-out. Once getpkt has been |
| 745 modified to return a timeout indication and, in turn | 821 modified to return a timeout indication and, in turn |
| 746 remote_wait()/wait_for_inferior() have gained a timeout parameter | 822 remote_wait()/wait_for_inferior() have gained a timeout parameter |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 810 interrupt_sequence_mode = interrupt_sequence_control_c; | 886 interrupt_sequence_mode = interrupt_sequence_control_c; |
| 811 } | 887 } |
| 812 | 888 |
| 813 static void | 889 static void |
| 814 show_remotebreak (struct ui_file *file, int from_tty, | 890 show_remotebreak (struct ui_file *file, int from_tty, |
| 815 struct cmd_list_element *c, | 891 struct cmd_list_element *c, |
| 816 const char *value) | 892 const char *value) |
| 817 { | 893 { |
| 818 } | 894 } |
| 819 | 895 |
| 820 /* Descriptor for I/O to remote machine. Initialize it to NULL so that | |
| 821 remote_open knows that we don't have a file open when the program | |
| 822 starts. */ | |
| 823 static struct serial *remote_desc = NULL; | |
| 824 | |
| 825 /* This variable sets the number of bits in an address that are to be | 896 /* This variable sets the number of bits in an address that are to be |
| 826 sent in a memory ("M" or "m") packet. Normally, after stripping | 897 sent in a memory ("M" or "m") packet. Normally, after stripping |
| 827 leading zeros, the entire address would be sent. This variable | 898 leading zeros, the entire address would be sent. This variable |
| 828 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The | 899 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The |
| 829 initial implementation of remote.c restricted the address sent in | 900 initial implementation of remote.c restricted the address sent in |
| 830 memory packets to ``host::sizeof long'' bytes - (typically 32 | 901 memory packets to ``host::sizeof long'' bytes - (typically 32 |
| 831 bits). Consequently, for 64 bit targets, the upper 32 bits of an | 902 bits). Consequently, for 64 bit targets, the upper 32 bits of an |
| 832 address was never sent. Since fixing this bug may cause a break in | 903 address was never sent. Since fixing this bug may cause a break in |
| 833 some remote targets this variable is principly provided to | 904 some remote targets this variable is principly provided to |
| 834 facilitate backward compatibility. */ | 905 facilitate backward compatibility. */ |
| 835 | 906 |
| 836 static int remote_address_size; | 907 static unsigned int remote_address_size; |
| 837 | 908 |
| 838 /* Temporary to track who currently owns the terminal. See | 909 /* Temporary to track who currently owns the terminal. See |
| 839 remote_terminal_* for more details. */ | 910 remote_terminal_* for more details. */ |
| 840 | 911 |
| 841 static int remote_async_terminal_ours_p; | 912 static int remote_async_terminal_ours_p; |
| 842 | 913 |
| 843 /* The executable file to use for "run" on the remote side. */ | 914 /* The executable file to use for "run" on the remote side. */ |
| 844 | 915 |
| 845 static char *remote_exec_file = ""; | 916 static char *remote_exec_file = ""; |
| 846 | 917 |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1258 PACKET_qXfer_auxv, | 1329 PACKET_qXfer_auxv, |
| 1259 PACKET_qXfer_features, | 1330 PACKET_qXfer_features, |
| 1260 PACKET_qXfer_libraries, | 1331 PACKET_qXfer_libraries, |
| 1261 PACKET_qXfer_libraries_svr4, | 1332 PACKET_qXfer_libraries_svr4, |
| 1262 PACKET_qXfer_memory_map, | 1333 PACKET_qXfer_memory_map, |
| 1263 PACKET_qXfer_spu_read, | 1334 PACKET_qXfer_spu_read, |
| 1264 PACKET_qXfer_spu_write, | 1335 PACKET_qXfer_spu_write, |
| 1265 PACKET_qXfer_osdata, | 1336 PACKET_qXfer_osdata, |
| 1266 PACKET_qXfer_threads, | 1337 PACKET_qXfer_threads, |
| 1267 PACKET_qXfer_statictrace_read, | 1338 PACKET_qXfer_statictrace_read, |
error: old chunk mismatch |
None
| OLD | NEW |