sim: options: increase max option count
authorMike Frysinger <vapier@gentoo.org>
Sat, 24 Apr 2021 04:10:44 +0000 (00:10 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sat, 24 Apr 2021 04:17:35 +0000 (00:17 -0400)
As we turn on more modules by default for all ports, the number of
options has been increasing.  The sim-options module has a limit on
the number of options it can support, and if it's exceeded, it likes
to go into an infinite loop.  Increase the ceiling and add an assert
so we abort right away instead of hanging.

This will be needed to turn on hw support for v850 as it will then
exceed the current limit.

sim/common/ChangeLog
sim/common/sim-options.c

index 61149e21213f2b4503bcbb2df4964aa1febf5400..ed4d9f7da65b7c69fdbee361165708609030a996 100644 (file)
@@ -1,3 +1,8 @@
+2021-04-24  Mike Frysinger  <vapier@gentoo.org>
+
+       * sim-options.c (ARG_HASH_SIZE): Increase to 256.
+       (sim_parse_args): Call SIM_ASSERT.
+
 2021-04-22  Tom Tromey  <tom@tromey.com>
 
        * sim-utils.c: Update includes.
index d4434cfd7385c41c92a75eff32ea74fbc44e0ea8..ab95984e833fdbe33f0f0f15ef12da7b8d8a4768 100644 (file)
@@ -416,7 +416,7 @@ standard_install (SIM_DESC sd)
 /* Return non-zero if arg is a duplicate argument.
    If ARG is NULL, initialize.  */
 
-#define ARG_HASH_SIZE 97
+#define ARG_HASH_SIZE 256
 #define ARG_HASH(a) ((256 * (unsigned char) a[0] + (unsigned char) a[1]) % ARG_HASH_SIZE)
 
 static int
@@ -478,6 +478,9 @@ sim_parse_args (SIM_DESC sd, char * const *argv)
       for (opt = ol->options; OPTION_VALID_P (opt); ++opt)
        ++num_opts;
 
+  /* We build a hash table of all options, so make sure they all fit.  */
+  SIM_ASSERT (num_opts <= ARG_HASH_SIZE);
+
   /* Initialize duplicate argument checker.  */
   (void) dup_arg_p (NULL);