* cris/semcrisv32f-switch.c: Regenerate.
[deliverable/binutils-gdb.git] / sim / common / sim-options.c
index 8c16d56cc7548acf5eb107e3ac2f2e03f75709c5..2c19f43646741c8f5e51cee1f103347d61dfd794 100644 (file)
@@ -1,22 +1,21 @@
 /* Simulator option handling.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 2004, 2007, 2008 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
 
 This file is part of GDB, the GNU debugger.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "sim-main.h"
 #ifdef HAVE_STRING_H
@@ -115,6 +114,7 @@ typedef enum {
 #endif
   OPTION_LOAD_LMA,
   OPTION_LOAD_VMA,
+  OPTION_SYSROOT
 } STANDARD_OPTIONS;
 
 static const OPTION standard_options[] =
@@ -154,20 +154,20 @@ static const OPTION standard_options[] =
 
 #ifdef SIM_H8300 /* FIXME: Should be movable to h8300 dir.  */
   { {"h8300h", no_argument, NULL, OPTION_H8300H},
-      'h', NULL, "Indicate the CPU is h8/300h",
+      'h', NULL, "Indicate the CPU is H8/300H",
       standard_option_handler },
   { {"h8300s", no_argument, NULL, OPTION_H8300S},
-      'S', NULL, "Indicate the CPU is h8/300s",
+      'S', NULL, "Indicate the CPU is H8S",
       standard_option_handler },
   { {"h8300sx", no_argument, NULL, OPTION_H8300SX},
-      'x', NULL, "Indicate the CPU is h8/300sx",
+      'x', NULL, "Indicate the CPU is H8SX",
       standard_option_handler },
 #endif
 
 #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},
@@ -205,6 +205,11 @@ static const OPTION standard_options[] =
       '\0', NULL, "", standard_option_handler,  "" },
 #endif
 
+  { {"sysroot", required_argument, NULL, OPTION_SYSROOT},
+      '\0', "SYSROOT",
+    "Root for system calls with absolute file-names and cwd at start",
+      standard_option_handler },
+
   { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL }
 };
 
@@ -375,7 +380,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)
          {
@@ -441,6 +460,14 @@ standard_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
        exit (0);
       /* FIXME: 'twould be nice to do something similar if gdb.  */
       break;
+
+    case OPTION_SYSROOT:
+      /* Don't leak memory in the odd event that there's lots of
+        --sysroot=... options.  */
+      if (simulator_sysroot[0] != '\0' && arg[0] != '\0')
+       free (simulator_sysroot);
+      simulator_sysroot = xstrdup (arg);
+      break;
     }
 
   return SIM_RC_OK;
@@ -769,7 +796,10 @@ print_help (SIM_DESC sd, sim_cpu *cpu, const struct option_list *ol, int is_comm
                end --;
              if (end == chp)
                end = chp + doc_width - 1;
-             sim_io_printf (sd, "%.*s\n%*s", end - chp, chp, indent, "");
+             /* The cast should be ok - its distances between to
+                 points in a string.  */
+             sim_io_printf (sd, "%.*s\n%*s", (int) (end - chp), chp, indent,
+                            "");
              chp = end;
              while (isspace (*chp) && *chp != '\0')
                chp++;
@@ -895,7 +925,7 @@ sim_args_command (SIM_DESC sd, char *cmd)
 {
   /* something to do? */
   if (cmd == NULL)
-    return SIM_RC_OK; /* FIXME - perhaphs help would be better */
+    return SIM_RC_OK; /* FIXME - perhaps help would be better */
   
   if (cmd [0] == '-')
     {
@@ -913,7 +943,7 @@ sim_args_command (SIM_DESC sd, char *cmd)
       sim_cpu *cpu;
 
       if (argv [0] == NULL)
-       return SIM_RC_OK; /* FIXME - perhaphs help would be better */
+       return SIM_RC_OK; /* FIXME - perhaps help would be better */
 
       /* First check for a cpu selector.  */
       {
This page took 0.024916 seconds and 4 git commands to generate.