import gdb-19990422 snapshot
[deliverable/binutils-gdb.git] / gdb / remote-eb.c
index 605945c7663565011475a6e38bba22cbfb9cb817..d3a3c4169c16cef2afcc134a21b23e7989247914 100644 (file)
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* This is like remote.c but is for an esoteric situation--
    having a a29k board in a PC hooked up to a unix machine with
@@ -25,12 +25,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
    has PC/NFS, so it can access the same executables that gdb can,
    over the net in real time.  */
 
-#define         TM_FILE_OVERRIDE
 #include "defs.h"
-#include <string.h>
-#include "a29k/tm-a29k.h"
+#include "gdb_string.h"
 
 #include "inferior.h"
+#include "bfd.h"
+#include "symfile.h"
 #include "wait.h"
 #include "value.h"
 #include <ctype.h>
@@ -198,7 +198,7 @@ get_hex_regs (n, regno)
       val = 0;
       for (j = 0; j < 8; j++)
        val = (val << 4) + get_hex_digit (j == 0);
-      supply_register (regno++, &val);
+      supply_register (regno++, (char *) &val);
     }
 }
 
@@ -248,14 +248,10 @@ eb_create_inferior (execfile, args, env)
     error ("Can't pass arguments to remote EBMON process");
 
   if (execfile == 0 || exec_bfd == 0)
-    error ("No exec file specified");
+    error ("No executable file specified");
 
   entry_pt = (int) bfd_get_start_address (exec_bfd);
 
-#ifdef CREATE_INFERIOR_HOOK
-  CREATE_INFERIOR_HOOK (0);            /* No process-ID */
-#endif  
-
   {
     /* OK, now read in the file.  Y=read, C=COFF, D=no symbols
        0=start address, %s=filename.  */
@@ -289,7 +285,7 @@ eb_create_inferior (execfile, args, env)
   target_terminal_inferior ();
 
   /* insert_step_breakpoint ();  FIXME, do we need this?  */
-  proceed ((CORE_ADDR)entry_pt, -1, 0);                /* Let 'er rip... */
+  proceed ((CORE_ADDR)entry_pt, TARGET_SIGNAL_DEFAULT, 0);             /* Let 'er rip... */
 }
 
 /* Translate baud rates from integers to damn B_codes.  Unix should
@@ -479,8 +475,9 @@ eb_detach (from_tty)
 /* Tell the remote machine to resume.  */
 
 void
-eb_resume (step, sig)
-     int step, sig;
+eb_resume (pid, step, sig)
+     int pid, step;
+     enum target_signal sig;
 {
   if (step)
     {
@@ -521,7 +518,7 @@ eb_resume (step, sig)
 
 int
 eb_wait (status)
-     WAITTYPE *status;
+     struct target_waitstatus *status;
 {
   /* Strings to look for.  '?' means match any single character.  
      Note that with the algorithm we use, the initial character
@@ -546,11 +543,13 @@ eb_wait (status)
 
   int old_timeout = timeout;
 
-  WSETEXIT ((*status), 0);
+  status->kind = TARGET_WAITKIND_EXITED;
+  status->value.integer = 0;
 
   if (need_artificial_trap != 0)
     {
-      WSETSTOP ((*status), SIGTRAP);
+      status->kind = TARGET_WAITKIND_STOPPED;
+      status->value.sig = TARGET_SIGNAL_TRAP;
       need_artificial_trap--;
       return 0;
     }
@@ -599,9 +598,15 @@ eb_wait (status)
     }
   expect_prompt ();
   if (*bp== '\0')
-    WSETSTOP ((*status), SIGTRAP);
+    {
+      status->kind = TARGET_WAITKIND_STOPPED;
+      status->value.sig = TARGET_SIGNAL_TRAP;
+    }
   else
-    WSETEXIT ((*status), 0);
+    {
+      status->kind = TARGET_WAITKIND_EXITED;
+      status->value.integer = 0;
+    }
   timeout = old_timeout;
 
   return 0;
@@ -717,10 +722,10 @@ eb_fetch_registers ()
   /* There doesn't seem to be any way to get these.  */
   {
     int val = -1;
-    supply_register (FPE_REGNUM, &val);
-    supply_register (INTE_REGNUM, &val);
-    supply_register (FPS_REGNUM, &val);
-    supply_register (EXO_REGNUM, &val);
+    supply_register (FPE_REGNUM, (char *) &val);
+    supply_register (INTE_REGNUM, (char *) &val);
+    supply_register (FPS_REGNUM, (char *) &val);
+    supply_register (EXO_REGNUM, (char *) &val);
   }
 
   write (eb_desc, "dw gr1,gr1\n", 11);
@@ -964,39 +969,88 @@ void
 eb_mourn_inferior ()
 {
   remove_breakpoints ();
+  unpush_target (&eb_ops);
   generic_mourn_inferior ();   /* Do all the proper things now */
 }
 /* Define the target subroutine names */
 
-struct target_ops eb_ops = {
-       "amd-eb", "Remote serial AMD EBMON target",
-       "Use a remote computer running EBMON connected by a serial line.\n\
+struct target_ops eb_ops ;
+
+static void 
+init_eb_ops(void)
+{
+  eb_ops.to_shortname =        "amd-eb";
+  eb_ops.to_longname =         "Remote serial AMD EBMON target";
+  eb_ops.to_doc =      "Use a remote computer running EBMON connected by a serial line.\n\
 Arguments are the name of the device for the serial line,\n\
 the speed to connect at in bits per second, and the filename of the\n\
 executable as it exists on the remote computer.  For example,\n\
-        target amd-eb /dev/ttya 9600 demo",
-       eb_open, eb_close, 
-       0, eb_detach, eb_resume, eb_wait,
-       eb_fetch_register, eb_store_register,
-       eb_prepare_to_store,
-       eb_xfer_inferior_memory, eb_files_info,
-       0, 0,   /* Breakpoints */
-       0, 0, 0, 0, 0,  /* Terminal handling */
-       eb_kill,
-       0,      /* load */
-       0, /* lookup_symbol */
-       eb_create_inferior,
-       eb_mourn_inferior,
-       0,      /* can_run */
-       0, /* notice_signals */
-       process_stratum, 0, /* next */
-       1, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
-       0, 0,                   /* Section pointers */
-       OPS_MAGIC,              /* Always the last thing */
+target amd-eb /dev/ttya 9600 demo",
+    eb_ops.to_open =   eb_open;
+  eb_ops.to_close =    eb_close;
+  eb_ops.to_attach =   0;
+  eb_ops.to_post_attach = NULL;
+  eb_ops.to_require_attach = NULL;
+  eb_ops.to_detach =   eb_detach;
+  eb_ops.to_require_detach = NULL;
+  eb_ops.to_resume =   eb_resume;
+  eb_ops.to_wait  =    eb_wait;
+  eb_ops.to_post_wait = NULL;
+  eb_ops.to_fetch_registers  =         eb_fetch_register;
+  eb_ops.to_store_registers  =         eb_store_register;
+  eb_ops.to_prepare_to_store =         eb_prepare_to_store;
+  eb_ops.to_xfer_memory  =     eb_xfer_inferior_memory;
+  eb_ops.to_files_info  =      eb_files_info;
+  eb_ops.to_insert_breakpoint =        0;
+  eb_ops.to_remove_breakpoint =        0;      /* Breakpoints */
+  eb_ops.to_terminal_init  =   0;
+  eb_ops.to_terminal_inferior =        0;
+  eb_ops.to_terminal_ours_for_output =         0;
+  eb_ops.to_terminal_ours  =   0;
+  eb_ops.to_terminal_info  =   0;      /* Terminal handling */
+  eb_ops.to_kill  =    eb_kill;
+  eb_ops.to_load  =    generic_load;   /* load */
+  eb_ops.to_lookup_symbol =    0; /* lookup_symbol */
+  eb_ops.to_create_inferior =  eb_create_inferior;
+  eb_ops.to_post_startup_inferior = NULL;
+  eb_ops.to_acknowledge_created_inferior = NULL;
+  eb_ops.to_clone_and_follow_inferior = NULL;      
+  eb_ops.to_post_follow_inferior_by_clone = NULL;
+  eb_ops.to_insert_fork_catchpoint = NULL;
+  eb_ops.to_remove_fork_catchpoint = NULL;
+  eb_ops.to_insert_vfork_catchpoint = NULL;
+  eb_ops.to_remove_vfork_catchpoint = NULL;                  
+  eb_ops.to_has_forked = NULL;
+  eb_ops.to_has_vforked = NULL;            
+  eb_ops.to_can_follow_vfork_prior_to_exec = NULL;        
+  eb_ops.to_post_follow_vfork = NULL;
+  eb_ops.to_insert_exec_catchpoint = NULL;
+  eb_ops.to_remove_exec_catchpoint = NULL;
+  eb_ops.to_has_execd = NULL;
+  eb_ops.to_reported_exec_events_per_exec_call = NULL;
+  eb_ops.to_has_exited = NULL;
+  eb_ops.to_mourn_inferior =   eb_mourn_inferior;
+  eb_ops.to_can_run  =         0;      /* can_run */
+  eb_ops.to_notice_signals =           0; /* notice_signals */
+  eb_ops.to_thread_alive  =    0; /* thread-alive */
+  eb_ops.to_stop  =    0;                      /* to_stop */
+  eb_ops.to_pid_to_exec_file = NULL;
+  eb_ops.to_core_file_to_sym_file = NULL;
+  eb_ops.to_stratum =  process_stratum;
+  eb_ops.DONT_USE =    0; /* next */
+  eb_ops.to_has_all_memory =   1;
+  eb_ops.to_has_memory =       1;
+  eb_ops.to_has_stack =        1;
+  eb_ops.to_has_registers =    1;
+  eb_ops.to_has_execution =    1;      /* all mem, mem, stack, regs, exec */
+  eb_ops.to_sections =         0; /* sections */
+  eb_ops.to_sections_end =     0; /* sections end */
+  eb_ops.to_magic =    OPS_MAGIC;              /* Always the last thing */
 };
 
 void
 _initialize_remote_eb ()
 {
+  init_eb_ops() ;
   add_target (&eb_ops);
 }
This page took 0.025089 seconds and 4 git commands to generate.