sim: testsuite: regenerate configure
[deliverable/binutils-gdb.git] / sim / mips / interp.c
index 13cd26e2c551716b949284dfa655116b1d3145db..edd4250e22cec381fa33f721b1d118160c082749 100644 (file)
@@ -64,8 +64,6 @@ code on the hardware.
 #include "gdb/callback.h"   /* GDB simulator callback interface */
 #include "gdb/remote-sim.h" /* GDB simulator interface */
 
-#include "sysdep.h"
-
 #ifndef PARAMS
 #define PARAMS(x) 
 #endif
@@ -180,9 +178,11 @@ enum {
   OPTION_DINERO_TRACE = OPTION_START,
   OPTION_DINERO_FILE,
   OPTION_FIRMWARE,
+  OPTION_INFO_MEMORY,
   OPTION_BOARD
 };
 
+static int display_mem_info = 0;
 
 static SIM_RC
 mips_option_handler (sd, cpu, opt, arg, is_command)
@@ -259,6 +259,10 @@ Re-compile simulator with \"-DTRACE\" to enable this option.\n");
          }
        return SIM_RC_OK;
       }
+
+    case OPTION_INFO_MEMORY:
+      display_mem_info = 1;
+      break;
     }
   
   return SIM_RC_OK;
@@ -290,6 +294,20 @@ static const OPTION mips_options[] =
 
     , "Customize simulation for a particular board.", mips_option_handler },
 
+  /* These next two options have the same names as ones found in the
+     memory_options[] array in common/sim-memopt.c.  This is because
+     the intention is to provide an alternative handler for those two
+     options.  We need an alternative handler because the memory
+     regions are not set up until after the command line arguments
+     have been parsed, and so we cannot display the memory info whilst
+     processing the command line.  There is a hack in sim_open to
+     remove these handlers when we want the real --memory-info option
+     to work.  */
+  { { "info-memory", no_argument, NULL, OPTION_INFO_MEMORY },
+    '\0', NULL, "List configured memory regions", mips_option_handler },
+  { { "memory-info", no_argument, NULL, OPTION_INFO_MEMORY },
+    '\0', NULL, NULL, mips_option_handler },
+  
   { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL }
 };
 
@@ -587,6 +605,31 @@ sim_open (kind, cb, abfd, argv)
     }
 #endif
 
+  if (display_mem_info)
+    {
+      struct option_list * ol;
+      struct option_list * prev;
+
+      /* This is a hack.  We want to execute the real --memory-info command
+        line switch which is handled in common/sim-memopts.c, not the
+        override we have defined in this file.  So we remove the
+        mips_options array from the state options list.  This is safe
+         because we have now processed all of the command line.  */
+      for (ol = STATE_OPTIONS (sd), prev = NULL;
+          ol != NULL;
+          prev = ol, ol = ol->next)
+       if (ol->options == mips_options)
+         break;
+
+      SIM_ASSERT (ol != NULL);
+
+      if (prev == NULL)
+       STATE_OPTIONS (sd) = ol->next;
+      else
+       prev->next = ol->next;
+
+      sim_do_commandf (sd, "memory-info");
+    }
 
   /* check for/establish the a reference program image */
   if (sim_analyze_program (sd,
@@ -819,7 +862,7 @@ int
 sim_write (sd,addr,buffer,size)
      SIM_DESC sd;
      SIM_ADDR addr;
-     unsigned char *buffer;
+     const unsigned char *buffer;
      int size;
 {
   int index;
@@ -1099,16 +1142,6 @@ sim_create_inferior (sd, abfd, argv,env)
   return SIM_RC_OK;
 }
 
-void
-sim_do_command (sd,cmd)
-     SIM_DESC sd;
-     char *cmd;
-{
-  if (sim_args_command (sd, cmd) != SIM_RC_OK)
-    sim_io_printf (sd, "Error: \"%s\" is not a valid MIPS simulator command.\n",
-                  cmd);
-}
-
 /*---------------------------------------------------------------------------*/
 /*-- Private simulator support interface ------------------------------------*/
 /*---------------------------------------------------------------------------*/
@@ -1242,7 +1275,7 @@ sim_monitor (SIM_DESC sd,
       {
        char *path = fetch_str (sd, A0);
        V0 = sim_io_open (sd, path, (int)A1);
-       zfree (path);
+       free (path);
        break;
       }
 
@@ -1253,7 +1286,7 @@ sim_monitor (SIM_DESC sd,
        char *buf = zalloc (nr);
        V0 = sim_io_read (sd, fd, buf, nr);
        sim_write (sd, A1, buf, nr);
-       zfree (buf);
+       free (buf);
       }
       break;
 
@@ -1264,7 +1297,11 @@ sim_monitor (SIM_DESC sd,
        char *buf = zalloc (nr);
        sim_read (sd, A1, buf, nr);
        V0 = sim_io_write (sd, fd, buf, nr);
-       zfree (buf);
+       if (fd == 1)
+           sim_io_flush_stdout (sd);
+       else if (fd == 2)
+           sim_io_flush_stderr (sd);
+       free (buf);
        break;
       }
 
This page took 0.029257 seconds and 4 git commands to generate.