* sim-memopt.c (memory_options): Mention that the memory-size switch accepts suffixes.
authorNick Clifton <nickc@redhat.com>
Fri, 10 Aug 2007 14:26:33 +0000 (14:26 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 10 Aug 2007 14:26:33 +0000 (14:26 +0000)
  (parse_size): Handle a suffix on the size value.
* sim-options.c (standard_options): Mention that the mem-size switch accepts suffixes.
  (standard_option_handler): Handle a suffix on the size value.

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

index 84824a8f30c6b5cf5fe064f0186084600b61c22c..b31a19e9f0f72348b451cb772cf7f491814a8cbc 100644 (file)
@@ -1,3 +1,12 @@
+2007-08-10  Nick Clifton  <nickc@redhat.com>
+
+       * sim-memopt.c (memory_options): Mention that the
+       --memory-size switch accepts suffixes.
+        (parse_size): Handle a suffix on the size value.
+        * sim-options.c (standard_options): Mention that the mem-size
+       switch accepts suffixes.
+        (standard_option_handler): Handle a suffix on the size value.
+
 2006-12-21  Hans-Peter Nilsson  <hp@axis.com>
 
        * acconfig.h: Remove.
index c7591b8679029584648a60e9f7d7f1f6d836b7f6..0e73b9f2346bccb46f312092811b0ab6f10c10e5 100644 (file)
@@ -90,8 +90,8 @@ static const OPTION memory_options[] =
       memory_option_handler },
 
   { {"memory-size", required_argument, NULL, OPTION_MEMORY_SIZE },
-      '\0', "SIZE", "Add memory at address zero",
-      memory_option_handler },
+      '\0', "<size>[in bytes, Kb (k suffix), Mb (m suffix) or Gb (g suffix)]",
+     "Add memory at address zero", memory_option_handler },
 
   { {"memory-fill", required_argument, NULL, OPTION_MEMORY_FILL },
       '\0', "VALUE", "Fill subsequently added memory regions",
@@ -286,11 +286,28 @@ parse_size (char *chp,
            address_word *nr_bytes,
            unsigned *modulo)
 {
-  /* <nr_bytes> [ "%" <modulo> ] */
+  /* <nr_bytes>[K|M|G] [ "%" <modulo> ] */
   *nr_bytes = strtoul (chp, &chp, 0);
-  if (*chp == '%')
+  switch (*chp)
     {
+    case '%':
       *modulo = strtoul (chp + 1, &chp, 0);
+      break;
+    case 'g': case 'G': /* Gigabyte suffix.  */
+      *nr_bytes <<= 10;
+      /* Fall through.  */
+    case 'm': case 'M': /* Megabyte suffix.  */
+      *nr_bytes <<= 10;
+      /* Fall through.  */
+    case 'k': case 'K': /* Kilobyte suffix.  */
+      *nr_bytes <<= 10;
+      /* Check for a modulo specifier after the suffix.  */
+      ++ chp;
+      if (* chp == 'b' || * chp == 'B')
+       ++ chp;
+      if (* chp == '%')
+       *modulo = strtoul (chp + 1, &chp, 0);
+      break;
     }
   return chp;
 }
index 51d31368fbcbf4e470ec413d8d4292c499e9d617..614cde85979bd66e7bd350c4be10c0a84b03aa22 100644 (file)
@@ -167,8 +167,8 @@ static const OPTION standard_options[] =
 
 #ifdef SIM_HAVE_FLATMEM
   { {"mem-size", required_argument, NULL, OPTION_MEM_SIZE},
-      'm', "MEMORY SIZE", "Specify memory size",
-      standard_option_handler },
+     'm', "<size>[in bytes, Kb (k suffix), Mb (m suffix) or Gb (g suffix)]",
+     "Specify memory size", standard_option_handler },
 #endif
 
   { {"do-command", required_argument, NULL, OPTION_DO_COMMAND},
@@ -381,7 +381,21 @@ standard_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
 #ifdef SIM_HAVE_FLATMEM
     case OPTION_MEM_SIZE:
       {
-       unsigned long ul = strtol (arg, NULL, 0);
+       char * endp;
+       unsigned long ul = strtol (arg, &endp, 0);
+
+       switch (* endp)
+         {
+         case 'k': case 'K': size <<= 10; break;
+         case 'm': case 'M': size <<= 20; break;
+         case 'g': case 'G': size <<= 30; break;
+         case ' ': case '\0': case '\t':  break;
+         default:
+           if (ul > 0)
+             sim_io_eprintf (sd, "Ignoring strange character at end of memory size: %c\n", * endp);
+           break;
+         }
+
        /* 16384: some minimal amount */
        if (! isdigit (arg[0]) || ul < 16384)
          {