sim: h8300: move h8300-specific options out of common code
authorMike Frysinger <vapier@gentoo.org>
Thu, 24 Dec 2015 22:26:54 +0000 (17:26 -0500)
committerMike Frysinger <vapier@gentoo.org>
Fri, 25 Dec 2015 01:11:26 +0000 (20:11 -0500)
Register the options in sim_open like other arches to avoid having to hack
up the common modules.

sim/common/ChangeLog
sim/common/sim-options.c
sim/h8300/ChangeLog
sim/h8300/compile.c
sim/h8300/tconfig.h [deleted file]

index b740a1748771827ab84639bc02422259534e60c8..cb1a9a6ce50ab82a5a72437d41fc139a62d6ecaa 100644 (file)
@@ -1,3 +1,10 @@
+2015-12-24  Mike Frysinger  <vapier@gentoo.org>
+
+       * sim-options.c (OPTION_H8300H, OPTION_H8300S, OPTION_H8300SX):
+       Move to h8300/compile.c.
+       [SIM_H8300] (standard_options): Likewise.
+       (standard_option_handler): Likewise.
+
 2015-12-24  Mike Frysinger  <vapier@gentoo.org>
 
        * sim-module.c [WITH_WATCHPOINTS] (modules): Always call
index 5e04573e0c66145bf6d3d3a62d6e9e6b5a2c259f..69655b02afd324e98a3f8adc6e3294e0a65b03f9 100644 (file)
@@ -104,11 +104,6 @@ typedef enum {
   OPTION_DEBUG,
   OPTION_HELP,
   OPTION_VERSION,
-#ifdef SIM_H8300 /* FIXME: Should be movable to h8300 dir.  */
-  OPTION_H8300H,
-  OPTION_H8300S,
-  OPTION_H8300SX,
-#endif
   OPTION_LOAD_LMA,
   OPTION_LOAD_VMA,
   OPTION_SYSROOT
@@ -147,18 +142,6 @@ static const OPTION standard_options[] =
       '\0', "FILE NAME", "Specify debugging output file",
       standard_option_handler },
 
-#ifdef SIM_H8300 /* FIXME: Should be movable to h8300 dir.  */
-  { {"h8300h", no_argument, NULL, OPTION_H8300H},
-      'h', NULL, "Indicate the CPU is H8/300H",
-      standard_option_handler },
-  { {"h8300s", no_argument, NULL, OPTION_H8300S},
-      'S', NULL, "Indicate the CPU is H8S",
-      standard_option_handler },
-  { {"h8300sx", no_argument, NULL, OPTION_H8300SX},
-      'x', NULL, "Indicate the CPU is H8SX",
-      standard_option_handler },
-#endif
-
   { {"do-command", required_argument, NULL, OPTION_DO_COMMAND},
       '\0', "COMMAND", ""/*undocumented*/,
       standard_option_handler },
@@ -355,18 +338,6 @@ standard_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
        }
       break;
 
-#ifdef SIM_H8300 /* FIXME: Can be moved to h8300 dir.  */
-    case OPTION_H8300H:
-      set_h8300h (bfd_mach_h8300h);
-      break;
-    case OPTION_H8300S:
-      set_h8300h (bfd_mach_h8300s);
-      break;
-    case OPTION_H8300SX:
-      set_h8300h (bfd_mach_h8300sx);
-      break;
-#endif
-
     case OPTION_DO_COMMAND:
       sim_do_command (sd, arg);
       break;
index f54d697abe03b48a7fb0895aa8918d301a29fd30..d566a652317b353bb0c1cc600335092e7b28aab8 100644 (file)
@@ -1,3 +1,11 @@
+2015-12-24  Mike Frysinger  <vapier@gentoo.org>
+
+       * compile.c (H8300_OPTIONS): New enum from common/sim-options.c.
+       (h8300_option_handler): New func from common/sim-options.c.
+       (h8300_options): New options from common/sim-options.c.
+       (sim_open): Call sim_add_option_table.
+       * tconfig.h: Delete file.
+
 2015-12-24  Mike Frysinger  <vapier@gentoo.org>
 
        * tconfig.h (SIM_HAVE_SIMCACHE): Delete.
index 15d4f53c73d0bb5f1c06de7d7b274d64625d4035..bc91725b699a164929e69b32a9787bf6e26d7b5a 100644 (file)
@@ -4813,6 +4813,54 @@ set_h8300h (unsigned long machine)
     h8300_normal_mode = 1;
 }
 
+/* H8300-specific options.
+   TODO: These really should be merged into the common model modules.  */
+typedef enum {
+  OPTION_H8300H,
+  OPTION_H8300S,
+  OPTION_H8300SX
+} H8300_OPTIONS;
+
+static SIM_RC
+h8300_option_handler (SIM_DESC sd, sim_cpu *cpu ATTRIBUTE_UNUSED, int opt,
+                     char *arg, int is_command ATTRIBUTE_UNUSED)
+{
+  switch ((H8300_OPTIONS) opt)
+    {
+    case OPTION_H8300H:
+      set_h8300h (bfd_mach_h8300h);
+      break;
+    case OPTION_H8300S:
+      set_h8300h (bfd_mach_h8300s);
+      break;
+    case OPTION_H8300SX:
+      set_h8300h (bfd_mach_h8300sx);
+      break;
+
+      default:
+       /* We'll actually never get here; the caller handles the error
+          case.  */
+       sim_io_eprintf (sd, "Unknown option `%s'\n", arg);
+       return SIM_RC_FAIL;
+    }
+
+  return SIM_RC_OK;
+}
+
+static const OPTION h8300_options[] =
+{
+  { {"h8300h", no_argument, NULL, OPTION_H8300H},
+      'h', NULL, "Indicate the CPU is H8/300H",
+      h8300_option_handler },
+  { {"h8300s", no_argument, NULL, OPTION_H8300S},
+      'S', NULL, "Indicate the CPU is H8S",
+      h8300_option_handler },
+  { {"h8300sx", no_argument, NULL, OPTION_H8300SX},
+      'x', NULL, "Indicate the CPU is H8SX",
+      h8300_option_handler },
+  { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL, NULL }
+};
+
 static sim_cia
 h8300_pc_get (sim_cpu *cpu)
 {
@@ -4872,6 +4920,12 @@ sim_open (SIM_OPEN_KIND kind,
       return 0;
     }
 
+  if (sim_add_option_table (sd, NULL, h8300_options) != SIM_RC_OK)
+    {
+      free_state (sd);
+      return 0;
+    }
+
     /* getopt will print the error message so we just have to exit if
        this fails.  FIXME: Hmmm...  in the case of gdb we need getopt
        to call print_filtered.  */
diff --git a/sim/h8300/tconfig.h b/sim/h8300/tconfig.h
deleted file mode 100644 (file)
index 3da84b7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/* h8300 target configuration file.  */
-
-/* FIXME: This is a quick hack for run.c so it can support the `-h' option.
-   It will eventually be replaced by a more general facility.  */
-#define SIM_H8300