Thu May 21 13:14:25 1998 John Metzler <jmetzler@cygnus.com>
[deliverable/binutils-gdb.git] / gdb / remote.c
index c1d8ec1cca6016da312330389247a120e044a906..8f94e161d1df05261882e6d05d2bb34926a09f3a 100644 (file)
@@ -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 */
 }
-\f
-/* 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);
 
This page took 0.025677 seconds and 4 git commands to generate.