* interp.c (options enum): Add OPTION_INFO_MEMORY.
authorNick Clifton <nickc@redhat.com>
Tue, 4 Sep 2007 14:33:18 +0000 (14:33 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 4 Sep 2007 14:33:18 +0000 (14:33 +0000)
  (display_mem_info): New static variable.
  (mips_option_handler): Handle OPTION_INFO_MEMORY.
  (mips_options): Add info-memory and memory-info.
  (sim_open): After processing the command line and board specification, check display_mem_info.
  If it is set then call the real handler for the --memory-info command line switch.

sim/mips/ChangeLog
sim/mips/interp.c

index e70f2921abade11eff94ace6bbb6bfc821c44f75..1797b99880ae66f37045a2a07c339c2b35312a09 100644 (file)
@@ -1,3 +1,14 @@
+2007-09-04  Nick Clifton  <nickc@redhat.com>
+
+       * interp.c (options enum): Add OPTION_INFO_MEMORY.
+       (display_mem_info): New static variable.
+       (mips_option_handler): Handle OPTION_INFO_MEMORY.
+       (mips_options): Add info-memory and memory-info.
+       (sim_open): After processing the command line and board
+       specification, check display_mem_info.  If it is set then
+       call the real handler for the --memory-info command line
+       switch.
+
 2007-08-24  Joel Brobecker  <brobecker@adacore.com>
 
        * configure.ac: Change license of multi-run.c to GPL version 3.
index 51ad1de6fa3bd6b120ff3347769c5acf81c0ae01..20ab54bbd9144bf9abd5354afaf0bf7e62af2939 100644 (file)
@@ -180,9 +180,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 +261,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 +296,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 +607,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,