diff options
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 206 |
1 files changed, 109 insertions, 97 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index c1d8ec1..8f94e16 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -275,15 +275,108 @@ static int remote_remove_breakpoint PARAMS ((CORE_ADDR, char *)); static int hexnumlen PARAMS ((ULONGEST num)); -static struct target_ops remote_ops; /* Forward decl */ -static struct target_ops extended_remote_ops; /* Forward decl */ - /* exported functions */ extern int fromhex PARAMS ((int a)); extern void getpkt PARAMS ((char *buf, int forever)); extern int putpkt PARAMS ((char *buf)); +/* Define the target subroutine names */ + +static struct target_ops remote_ops ; + +static void init_remote_ops(void) +{ + remote_ops.to_shortname = "remote"; + remote_ops.to_longname = "Remote serial target in gdb-specific protocol"; + remote_ops.to_doc = "Use a remote computer via a serial line; using a gdb-specific protocol.\n\ +Specify the serial device it is connected to (e.g. /dev/ttya)." ; + remote_ops.to_open = remote_open; + remote_ops.to_close = remote_close; + remote_ops.to_attach = NULL; + remote_ops.to_detach = remote_detach; + remote_ops.to_resume = remote_resume; + remote_ops.to_wait = remote_wait; + remote_ops.to_fetch_registers = remote_fetch_registers; + remote_ops.to_store_registers = remote_store_registers; + remote_ops.to_prepare_to_store = remote_prepare_to_store; + remote_ops.to_xfer_memory = remote_xfer_memory; + remote_ops.to_files_info = remote_files_info; + remote_ops.to_insert_breakpoint = remote_insert_breakpoint; + remote_ops.to_remove_breakpoint = remote_remove_breakpoint; + remote_ops.to_terminal_init = NULL; + remote_ops.to_terminal_inferior = NULL; + remote_ops.to_terminal_ours_for_output = NULL; + remote_ops.to_terminal_ours = NULL; + remote_ops.to_terminal_info = NULL; + remote_ops.to_kill = remote_kill; + remote_ops.to_load = generic_load; + remote_ops.to_lookup_symbol = NULL; + remote_ops.to_create_inferior = NULL; + remote_ops.to_mourn_inferior = remote_mourn; + remote_ops.to_can_run = 0; + remote_ops.to_notice_signals = 0; + remote_ops.to_thread_alive = remote_thread_alive; + remote_ops.to_stop = 0; + remote_ops.to_stratum = process_stratum; + remote_ops.DONT_USE = NULL; + remote_ops.to_has_all_memory = 1; + remote_ops.to_has_memory = 1; + remote_ops.to_has_stack = 1; + remote_ops.to_has_registers = 1; + remote_ops.to_has_execution = 1; + remote_ops.to_sections = NULL; + remote_ops.to_sections_end = NULL; + remote_ops.to_magic = OPS_MAGIC ; +} /* init_remote_ops */ + +static struct target_ops extended_remote_ops ; + +static void init_extended_remote_ops(void) +{ + extended_remote_ops.to_shortname = "extended-remote"; + extended_remote_ops.to_longname = "Extended remote serial target in gdb-specific protocol"; + extended_remote_ops.to_doc = "Use a remote computer via a serial line; using a gdb-specific protocol.\n\ +Specify the serial device it is connected to (e.g. /dev/ttya).", + extended_remote_ops.to_open = extended_remote_open; + extended_remote_ops.to_close = remote_close; + extended_remote_ops.to_attach = NULL; + extended_remote_ops.to_detach = remote_detach; + extended_remote_ops.to_resume = remote_resume; + extended_remote_ops.to_wait = remote_wait; + extended_remote_ops.to_fetch_registers = remote_fetch_registers; + extended_remote_ops.to_store_registers = remote_store_registers; + extended_remote_ops.to_prepare_to_store = remote_prepare_to_store; + extended_remote_ops.to_xfer_memory = remote_xfer_memory; + extended_remote_ops.to_files_info = remote_files_info; + extended_remote_ops.to_insert_breakpoint = remote_insert_breakpoint; + extended_remote_ops.to_remove_breakpoint = remote_remove_breakpoint; + extended_remote_ops.to_terminal_init = NULL; + extended_remote_ops.to_terminal_inferior = NULL; + extended_remote_ops.to_terminal_ours_for_output = NULL; + extended_remote_ops.to_terminal_ours = NULL; + extended_remote_ops.to_terminal_info = NULL; + extended_remote_ops.to_kill = remote_kill; + extended_remote_ops.to_load = generic_load; + extended_remote_ops.to_lookup_symbol = NULL; + extended_remote_ops.to_create_inferior = extended_remote_create_inferior; + extended_remote_ops.to_mourn_inferior = extended_remote_mourn; + extended_remote_ops.to_can_run = 0; + extended_remote_ops.to_notice_signals = 0; + extended_remote_ops.to_thread_alive = remote_thread_alive; + extended_remote_ops.to_stop = 0; + extended_remote_ops.to_stratum = process_stratum; + extended_remote_ops.DONT_USE = NULL; + extended_remote_ops.to_has_all_memory = 1; + extended_remote_ops.to_has_memory = 1; + extended_remote_ops.to_has_stack = 1; + extended_remote_ops.to_has_registers = 1; + extended_remote_ops.to_has_execution = 1; + extended_remote_ops.to_sections = NULL; + extended_remote_ops.to_sections_end = NULL; + extended_remote_ops.to_magic = OPS_MAGIC ; +} + /* This was 5 seconds, which is a long time to sit and wait. Unless this is going though some terminal server or multiplexer or @@ -1311,6 +1404,16 @@ remote_xfer_memory(memaddr, myaddr, len, should_write, target) int should_write; struct target_ops *target; /* ignored */ { +#ifdef REMOTE_TRANSLATE_XFER_ADDRESS + CORE_ADDR targaddr; + int targlen; + REMOTE_TRANSLATE_XFER_ADDRESS (memaddr, len, targaddr, targlen); + if (targlen == 0) + return 0; + memaddr = targaddr; + len = targlen; +#endif + return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, should_write); } @@ -1881,100 +1984,6 @@ remote_remove_breakpoint (addr, contents_cache) return memory_remove_breakpoint (addr, contents_cache); #endif /* REMOTE_BREAKPOINT */ } - -/* Define the target subroutine names */ - -static struct target_ops remote_ops = -{ - "remote", /* to_shortname */ - "Remote serial target in gdb-specific protocol", /* to_longname */ - "Use a remote computer via a serial line, using a gdb-specific protocol.\n\ -Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */ - remote_open, /* to_open */ - remote_close, /* to_close */ - NULL, /* to_attach */ - remote_detach, /* to_detach */ - remote_resume, /* to_resume */ - remote_wait, /* to_wait */ - remote_fetch_registers, /* to_fetch_registers */ - remote_store_registers, /* to_store_registers */ - remote_prepare_to_store, /* to_prepare_to_store */ - remote_xfer_memory, /* to_xfer_memory */ - remote_files_info, /* to_files_info */ - remote_insert_breakpoint, /* to_insert_breakpoint */ - remote_remove_breakpoint, /* to_remove_breakpoint */ - NULL, /* to_terminal_init */ - NULL, /* to_terminal_inferior */ - NULL, /* to_terminal_ours_for_output */ - NULL, /* to_terminal_ours */ - NULL, /* to_terminal_info */ - remote_kill, /* to_kill */ - generic_load, /* to_load */ - NULL, /* to_lookup_symbol */ - NULL, /* to_create_inferior */ - remote_mourn, /* to_mourn_inferior */ - 0, /* to_can_run */ - 0, /* to_notice_signals */ - remote_thread_alive, /* to_thread_alive */ - 0, /* to_stop */ - process_stratum, /* to_stratum */ - NULL, /* to_next */ - 1, /* to_has_all_memory */ - 1, /* to_has_memory */ - 1, /* to_has_stack */ - 1, /* to_has_registers */ - 1, /* to_has_execution */ - NULL, /* sections */ - NULL, /* sections_end */ - OPS_MAGIC /* to_magic */ -}; - -static struct target_ops extended_remote_ops = -{ - "extended-remote", /* to_shortname */ - "Extended remote serial target in gdb-specific protocol",/* to_longname */ - "Use a remote computer via a serial line, using a gdb-specific protocol.\n\ -Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */ - extended_remote_open, /* to_open */ - remote_close, /* to_close */ - NULL, /* to_attach */ - remote_detach, /* to_detach */ - remote_resume, /* to_resume */ - remote_wait, /* to_wait */ - remote_fetch_registers, /* to_fetch_registers */ - remote_store_registers, /* to_store_registers */ - remote_prepare_to_store, /* to_prepare_to_store */ - remote_xfer_memory, /* to_xfer_memory */ - remote_files_info, /* to_files_info */ - - remote_insert_breakpoint, /* to_insert_breakpoint */ - remote_remove_breakpoint, /* to_remove_breakpoint */ - - NULL, /* to_terminal_init */ - NULL, /* to_terminal_inferior */ - NULL, /* to_terminal_ours_for_output */ - NULL, /* to_terminal_ours */ - NULL, /* to_terminal_info */ - remote_kill, /* to_kill */ - generic_load, /* to_load */ - NULL, /* to_lookup_symbol */ - extended_remote_create_inferior,/* to_create_inferior */ - extended_remote_mourn, /* to_mourn_inferior */ - 0, /* to_can_run */ - 0, /* to_notice_signals */ - remote_thread_alive, /* to_thread_alive */ - 0, /* to_stop */ - process_stratum, /* to_stratum */ - NULL, /* to_next */ - 1, /* to_has_all_memory */ - 1, /* to_has_memory */ - 1, /* to_has_stack */ - 1, /* to_has_registers */ - 1, /* to_has_execution */ - NULL, /* sections */ - NULL, /* sections_end */ - OPS_MAGIC /* to_magic */ -}; /* Some targets are only capable of doing downloads, and afterwards they switch to the remote serial protocol. This function provides a clean way to get @@ -2011,9 +2020,12 @@ open_remote_target (name, from_tty, target, extended_p) remote_open_1 (name, from_tty, target, extended_p); } + void _initialize_remote () { + init_remote_ops() ; + init_extended__remote_ops() ; add_target (&remote_ops); add_target (&extended_remote_ops); |