OSDN Git Service

sim: add --model-info helper option
authorvapier <vapier>
Tue, 20 Apr 2010 03:42:00 +0000 (03:42 +0000)
committervapier <vapier>
Tue, 20 Apr 2010 03:42:00 +0000 (03:42 +0000)
There is an architecture-info flag for listing possible arch values, but
there is on equivalent for listing possible model values.  So add the
equivalent for models.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
sim/common/ChangeLog
sim/common/sim-model.c

index eb58519..9e0f6dd 100644 (file)
@@ -1,3 +1,10 @@
+2010-04-19  Mike Frysinger  <vapier@gentoo.org>
+
+       * sim-model.c (OPTION_MODEL): Convert to enum.
+       (OPTION_MODEL_INFO): New enum.
+       (model_options): Add model-info/info-model entries.
+       (model_option_handler): Handle OPTION_MODEL_INFO.
+
 2010-04-13  Mike Frysinger  <vapier@gentoo.org>
 
        * dv-sockser.h (DV_SOCKSER_DISCONNECTED): Define.
index ddcb2de..41d81e9 100644 (file)
@@ -32,12 +32,23 @@ static DECLARE_OPTION_HANDLER (model_option_handler);
 
 static MODULE_INIT_FN sim_model_init;
 
-#define OPTION_MODEL (OPTION_START + 0)
+enum {
+  OPTION_MODEL = OPTION_START,
+  OPTION_MODEL_INFO,
+};
 
 static const OPTION model_options[] = {
   { {"model", required_argument, NULL, OPTION_MODEL},
       '\0', "MODEL", "Specify model to simulate",
       model_option_handler, NULL },
+
+  { {"model-info", no_argument, NULL, OPTION_MODEL_INFO},
+      '\0', NULL, "List selectable models",
+      model_option_handler, NULL },
+  { {"info-model", no_argument, NULL, OPTION_MODEL_INFO},
+      '\0', NULL, NULL,
+      model_option_handler, NULL },
+
   { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL, NULL }
 };
 
@@ -58,6 +69,22 @@ model_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
        sim_model_set (sd, cpu, model);
        break;
       }
+
+    case OPTION_MODEL_INFO :
+      {
+       const MACH **machp;
+       const MODEL *model;
+       for (machp = & sim_machs[0]; *machp != NULL; ++machp)
+         {
+           sim_io_printf (sd, "Models for architecture `%s':\n",
+                          MACH_NAME (*machp));
+           for (model = MACH_MODELS (*machp); MODEL_NAME (model) != NULL;
+                ++model)
+             sim_io_printf (sd, " %s", MODEL_NAME (model));
+           sim_io_printf (sd, "\n");
+         }
+       break;
+      }
     }
 
   return SIM_RC_OK;