More model specific changes
[deliverable/binutils-gdb.git] / gdb / remote-udi.c
index 0a7e1a9c7607823ce8a4434240f44013d6a2470b..6ade3e4804404caf30f4ff8ab962cbe24c68b3bf 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote debugging interface for AMD 29k interfaced via UDI, for GDB.
-   Copyright 1990, 1992 Free Software Foundation, Inc.
+   Copyright 1990, 1992, 1995 Free Software Foundation, Inc.
    Written by Daniel Mann.  Contributed by AMD.
 
 This file is part of GDB.
@@ -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 uses the Universal Debug Interface (UDI) to 
    talk to the target hardware (or simulator).  UDI is a TCP/IP based
@@ -32,6 +32,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
        MiniMON interface with UDI-p interface.   */
  
 #include "defs.h"
+#include "frame.h"
 #include "inferior.h"
 #include "wait.h"
 #include "value.h"
@@ -39,7 +40,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include <fcntl.h>
 #include <signal.h>
 #include <errno.h>
-#include <string.h>
+#include "gdb_string.h"
 #include "terminal.h"
 #include "target.h"
 #include "29k-share/udi/udiproc.h"
@@ -143,6 +144,8 @@ udi_create_inferior (execfile, args, env)
       /* If the TIP is not open, open it.  */
       if (UDIConnect (udi_config_id, &udi_session_id))
        error("UDIConnect() failed: %s\n", dfe_errmsg);
+      /* We will need to download the program.  */
+      entry.Offset = 0;
     }
 
   inferior_pid = 40000;
@@ -221,10 +224,6 @@ udi_open (name, from_tty)
   UDIUInt32 TIPId, TargetId, DFEId, DFE, TIP, DFEIPCId, TIPIPCId;
 
   target_preopen(from_tty);
-  /* target_preopen calls target_kill to clean up the previous target.  But
-     udi_kill leaves it on the stack.  So we pop it here (the call to udi_close
-     is harmless now that udi_session_id is -1).  */
-  unpush_target (&udi_ops);
 
   entry.Offset = 0;
 
@@ -495,7 +494,7 @@ udi_wait (pid, status)
     case UDITrapped:
       printf_unfiltered("Am290*0 received vector number %d\n", StopReason >> 24);
          
-      switch (StopReason >> 8)
+      switch ((StopReason >> 8 ) & 0xff)
        {
        case 0:                 /* Illegal opcode */
          printf_unfiltered("   (break point)\n");
@@ -1140,8 +1139,13 @@ download(load_arg_string, from_tty)
   pbfd = bfd_openr (filename, gnutarget);
 
   if (!pbfd) 
+    /* FIXME: should be using bfd_errmsg, not assuming it was
+       bfd_error_system_call.  */
     perror_with_name (filename);
   
+  /* FIXME: should be checking for errors from bfd_close (for one thing,
+     on error it does not free all the storage associated with the
+     bfd).  */
   make_cleanup (bfd_close, pbfd);
 
   QUIT;
@@ -1283,18 +1287,23 @@ download(load_arg_string, from_tty)
   immediate_quit--;
 }
 
-/* User interface to download an image into the remote target.  See download()
- * for details on args.
- */
+/* Function to download an image into the remote target.  */
 
 static void
-udi_load(args, from_tty)
+udi_load (args, from_tty)
      char *args;
      int from_tty;
 {
   download (args, from_tty);
 
-  symbol_file_add (strtok (args, " \t"), from_tty, 0, 0, 0, 0);
+  /* As a convenience, pick up any symbol info that is in the program
+     being loaded.  Note that we assume that the program is the``mainline'';
+     if this is not always true, then this code will need to be augmented.  */
+  symbol_file_add (strtok (args, " \t"), from_tty, 0, 1, 0, 0);
+
+  /* Getting new symbols may change our opinion about what is
+     frameless.  */
+  reinit_frame_cache ();
 }
 
 /*************************************************** UDI_WRITE_INFERIOR_MEMORY
@@ -1322,7 +1331,7 @@ udi_write_inferior_memory (memaddr, myaddr, len)
        if (Count > MAXDATA) Count = MAXDATA;
        To.Offset = memaddr + nwritten;
         if(UDIWrite(From, To, Count, Size, &CountDone, HostEndian))
-       {  error("UDIWrite() failed in udi_write_inferrior_memory");
+       {  error("UDIWrite() failed in udi_write_inferior_memory");
           break;       
        }
        else
@@ -1359,7 +1368,7 @@ udi_read_inferior_memory(memaddr, myaddr, len)
        if (Count > MAXDATA) Count = MAXDATA;
        From.Offset = memaddr + nread;
         if(err = UDIRead(From, To, Count, Size, &CountDone, HostEndian))
-       {  error("UDIRead() failed in udi_read_inferrior_memory");
+       {  error("UDIRead() failed in udi_read_inferior_memory");
           break;       
        }
        else
@@ -1425,7 +1434,8 @@ fetch_register (regno)
   else if (regno>=FPE_REGNUM && regno<=EXO_REGNUM)  
     {
       int val = -1;
-      supply_register(160 + (regno - FPE_REGNUM),(char *) &val);
+      /*supply_register(160 + (regno - FPE_REGNUM),(char *) &val);*/
+      supply_register(regno, (char *) &val);
       return;          /* Pretend Success */
     }
   else 
@@ -1652,12 +1662,13 @@ Arguments are\n\
        0,                      /* terminal_ours */
        0,                      /* terminal_info */
         udi_kill,              /* FIXME, kill */
-        udi_load,
+        udi_load,              /* to_load */
         0,                      /* lookup_symbol */
         udi_create_inferior,
         udi_mourn,             /* mourn_inferior FIXME */
        0,                      /* can_run */
        0,                      /* notice_signals */
+        0,                     /* to_stop */
         process_stratum,
        0,                      /* next */
         1,                     /* has_all_memory */
This page took 0.034076 seconds and 4 git commands to generate.