sim: nltvals: localize TARGET_<open> defines
authorMike Frysinger <vapier@gentoo.org>
Wed, 7 Jul 2021 03:21:20 +0000 (23:21 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sun, 31 Oct 2021 08:50:44 +0000 (04:50 -0400)
Code should not be using these directly, instead they should be
resolving these dynamically via the open_map.  Rework the common
callback code that was using the defines to use symbolic names
instead, and localize some of the defines in the ARM code (since
it's a bit unclear how many different APIs it supports currently),
then remove the defines out of the header so no new code can rely on
them.

sim/arm/armos.c
sim/common/callback.c
sim/common/gentmap.c

index a3713a5c3348d436364e9dedb0ee432d4b8f6c36..a8ef7e4a82d9c8fb0cec7334506f0f3811e98d85 100644 (file)
 #include <errno.h>
 #include <limits.h>
 #include <string.h>
-#include "targ-vals.h"
-
-#ifndef TARGET_O_BINARY
-#define TARGET_O_BINARY 0
-#endif
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>            /* For SEEK_SET etc.  */
@@ -188,7 +183,17 @@ ARMul_OSInit (ARMul_State * state)
    return TRUE;
 }
 
-static int translate_open_mode[] =
+/* These are libgloss defines, but seem to be common across all supported ARM
+   targets at the moment.  These should get moved to the callback open_map.  */
+#define TARGET_O_BINARY 0
+#define TARGET_O_APPEND 0x8
+#define TARGET_O_CREAT 0x200
+#define TARGET_O_RDONLY 0x0
+#define TARGET_O_RDWR 0x2
+#define TARGET_O_TRUNC 0x400
+#define TARGET_O_WRONLY 0x1
+
+static const int translate_open_mode[] =
 {
   TARGET_O_RDONLY,             /* "r"   */
   TARGET_O_RDONLY + TARGET_O_BINARY,   /* "rb"  */
index 39d068c4866f9d8d106fd85b3a1cb344ee9617bd..941f4302b6e4785e00376785f0e3046a83780b8f 100644 (file)
@@ -37,7 +37,6 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include "sim/callback.h"
-#include "targ-vals.h"
 /* For xmalloc.  */
 #include "libiberty.h"
 
@@ -886,29 +885,44 @@ cb_target_to_host_open (host_callback *cb, int target_val)
 {
   int host_val = 0;
   CB_TARGET_DEFS_MAP *m;
+  int o_rdonly = 0;
+  int o_wronly = 0;
+  int o_rdwr = 0;
+  int o_binary = 0;
+  int o_rdwrmask;
 
+  /* O_RDONLY can be (and usually is) 0 which needs to be treated specially.  */
   for (m = &cb->open_map[0]; m->host_val != -1; ++m)
     {
-      switch (m->target_val)
+      if (!strcmp (m->name, "O_RDONLY"))
+       o_rdonly = m->target_val;
+      else if (!strcmp (m->name, "O_WRONLY"))
+       o_wronly = m->target_val;
+      else if (!strcmp (m->name, "O_RDWR"))
+       o_rdwr = m->target_val;
+      else if (!strcmp (m->name, "O_BINARY"))
+       o_binary = m->target_val;
+    }
+  o_rdwrmask = o_rdonly | o_wronly | o_rdwr;
+
+  for (m = &cb->open_map[0]; m->host_val != -1; ++m)
+    {
+      if (m->target_val == o_rdonly || m->target_val == o_wronly
+         || m->target_val == o_rdwr)
        {
-         /* O_RDONLY can be (and usually is) 0 which needs to be treated
-            specially.  */
-       case TARGET_O_RDONLY :
-       case TARGET_O_WRONLY :
-       case TARGET_O_RDWR :
-         if ((target_val & (TARGET_O_RDONLY | TARGET_O_WRONLY | TARGET_O_RDWR))
-             == m->target_val)
+         if ((target_val & o_rdwrmask) == m->target_val)
            host_val |= m->host_val;
          /* Handle the host/target differentiating between binary and
              text mode.  Only one case is of importance */
-#if ! defined (TARGET_O_BINARY) && defined (O_BINARY)
-         host_val |= O_BINARY;
+#ifdef O_BINARY
+         if (o_binary == 0)
+           host_val |= O_BINARY;
 #endif
-         break;
-       default :
+       }
+      else
+       {
          if ((m->target_val & target_val) == m->target_val)
            host_val |= m->host_val;
-         break;
        }
     }
 
index fbc290185b523454feab232a76cf91653691e993..2c7288bd605631a4b1b99ec591b111d41b81dbd1 100644 (file)
@@ -39,11 +39,6 @@ gen_targ_vals_h (void)
     printf ("#define TARGET_%s %d\n", t->symbol, t->value);
   printf ("\n");
 
-  printf ("/* open flag values */\n");
-  for (t = &open_tdefs[0]; t->symbol; ++t)
-    printf ("#define TARGET_%s 0x%x\n", t->symbol, t->value);
-  printf ("\n");
-
   printf ("#endif /* TARG_VALS_H */\n");
 }
 
@@ -78,6 +73,7 @@ gen_targ_map_c (void)
   printf ("CB_TARGET_DEFS_MAP cb_init_open_map[] = {\n");
   for (t = &open_tdefs[0]; t->symbol; ++t)
     {
+      printf ("#define TARGET_%s 0x%x\n", t->symbol, t->value);
       printf ("#ifdef %s\n", t->symbol);
       printf ("  { \"%s\", %s, TARGET_%s },\n", t->symbol, t->symbol, t->symbol);
       printf ("#endif\n");