Fix indentation in print_thread_info_1
[deliverable/binutils-gdb.git] / sim / common / sim-hw.c
index fa3ca8fa9447a2c589b6adb8158cc242800c4c88..7621ab92236411b2d8644fac090460ef3fa71fce 100644 (file)
@@ -1,22 +1,21 @@
 /* Simulator hardware option handling.
 /* Simulator hardware option handling.
-   Copyright (C) 1998 Free Software Foundation, Inc.
+   Copyright (C) 1998-2020 Free Software Foundation, Inc.
    Contributed by Cygnus Support and Andrew Cagney.
 
 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
    Contributed by Cygnus Support and Andrew Cagney.
 
 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.
 
 
 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"
 #include "sim-assert.h"
 
 #include "sim-main.h"
 #include "sim-assert.h"
@@ -26,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include "hw-tree.h"
 #include "hw-device.h"
 
 #include "hw-tree.h"
 #include "hw-device.h"
+#include "hw-main.h"
 #include "hw-base.h"
 
 
 #include "hw-base.h"
 
 
@@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <stdlib.h>
 #endif
 #include <ctype.h>
 #include <stdlib.h>
 #endif
 #include <ctype.h>
-#include <sys/errno.h>
+#include <errno.h>
 
 
 struct sim_hw {
 
 
 struct sim_hw {
@@ -53,15 +53,17 @@ struct sim_hw {
 };
 
 
 };
 
 
-void
+struct hw *
 sim_hw_parse (struct sim_state *sd,
              const char *fmt,
              ...)
 {
 sim_hw_parse (struct sim_state *sd,
              const char *fmt,
              ...)
 {
+  struct hw *current;
   va_list ap;
   va_start (ap, fmt);
   va_list ap;
   va_start (ap, fmt);
-  hw_tree_vparse (STATE_HW (sd)->tree, fmt, ap);
+  current = hw_tree_vparse (STATE_HW (sd)->tree, fmt, ap);
   va_end (ap);
   va_end (ap);
+  return current;
 }
 
 struct printer {
 }
 
 struct printer {
@@ -98,6 +100,7 @@ enum {
   OPTION_HW_INFO = OPTION_START,
   OPTION_HW_TRACE,
   OPTION_HW_DEVICE,
   OPTION_HW_INFO = OPTION_START,
   OPTION_HW_TRACE,
   OPTION_HW_DEVICE,
+  OPTION_HW_LIST,
   OPTION_HW_FILE,
 };
 
   OPTION_HW_FILE,
 };
 
@@ -107,27 +110,31 @@ static const OPTION hw_options[] =
 {
   { {"hw-info", no_argument, NULL, OPTION_HW_INFO },
       '\0', NULL, "List configurable hw regions",
 {
   { {"hw-info", no_argument, NULL, OPTION_HW_INFO },
       '\0', NULL, "List configurable hw regions",
-      hw_option_handler },
+      hw_option_handler, NULL },
   { {"info-hw", no_argument, NULL, OPTION_HW_INFO },
       '\0', NULL, NULL,
   { {"info-hw", no_argument, NULL, OPTION_HW_INFO },
       '\0', NULL, NULL,
-      hw_option_handler },
+      hw_option_handler, NULL },
 
   { {"hw-trace", optional_argument, NULL, OPTION_HW_TRACE },
       '\0', "on|off", "Trace all hardware devices",
 
   { {"hw-trace", optional_argument, NULL, OPTION_HW_TRACE },
       '\0', "on|off", "Trace all hardware devices",
-      hw_option_handler },
+      hw_option_handler, NULL },
   { {"trace-hw", optional_argument, NULL, OPTION_HW_TRACE },
       '\0', NULL, NULL,
   { {"trace-hw", optional_argument, NULL, OPTION_HW_TRACE },
       '\0', NULL, NULL,
-      hw_option_handler },
+      hw_option_handler, NULL },
 
   { {"hw-device", required_argument, NULL, OPTION_HW_DEVICE },
       '\0', "DEVICE", "Add the specified device",
 
   { {"hw-device", required_argument, NULL, OPTION_HW_DEVICE },
       '\0', "DEVICE", "Add the specified device",
-      hw_option_handler },
+      hw_option_handler, NULL },
+
+  { {"hw-list", no_argument, NULL, OPTION_HW_LIST },
+      '\0', NULL, "List the device tree",
+      hw_option_handler, NULL },
 
   { {"hw-file", required_argument, NULL, OPTION_HW_FILE },
       '\0', "FILE", "Add the devices listed in the file",
 
   { {"hw-file", required_argument, NULL, OPTION_HW_FILE },
       '\0', "FILE", "Add the devices listed in the file",
-      hw_option_handler },
+      hw_option_handler, NULL },
 
 
-  { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL }
+  { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL, NULL }
 };
 
 
 };
 
 
@@ -142,7 +149,7 @@ merge_device_file (struct sim_state *sd,
   struct hw *current = STATE_HW (sd)->tree;
   int line_nr;
   char device_path[1000];
   struct hw *current = STATE_HW (sd)->tree;
   int line_nr;
   char device_path[1000];
-  
+
   /* try opening the file */
   description = fopen (file_name, "r");
   if (description == NULL)
   /* try opening the file */
   description = fopen (file_name, "r");
   if (description == NULL)
@@ -150,9 +157,9 @@ merge_device_file (struct sim_state *sd,
       perror (file_name);
       return SIM_RC_FAIL;
     }
       perror (file_name);
       return SIM_RC_FAIL;
     }
-  
+
   line_nr = 0;
   line_nr = 0;
-  while (fgets (device_path, sizeof(device_path), description))
+  while (fgets (device_path, sizeof (device_path), description))
     {
       char *device;
       /* check that a complete line was read */
     {
       char *device;
       /* check that a complete line was read */
@@ -187,13 +194,13 @@ merge_device_file (struct sim_state *sd,
              sim_io_eprintf (sd, "%s:%d: unexpected eof", file_name, line_nr);
              return SIM_RC_FAIL;
            }
              sim_io_eprintf (sd, "%s:%d: unexpected eof", file_name, line_nr);
              return SIM_RC_FAIL;
            }
-         if (strchr(device_path, '\n') == NULL)
+         if (strchr (device_path, '\n') == NULL)
            {
            {
-             fclose(description);
+             fclose (description);
              sim_io_eprintf (sd, "%s:%d: line to long", file_name, line_nr);
              return SIM_RC_FAIL;
            }
              sim_io_eprintf (sd, "%s:%d: line to long", file_name, line_nr);
              return SIM_RC_FAIL;
            }
-         *strchr(device_path, '\n') = '\0';
+         *strchr (device_path, '\n') = '\0';
          line_nr++;
        }
       /* parse this line */
          line_nr++;
        }
       /* parse this line */
@@ -250,7 +257,13 @@ hw_option_handler (struct sim_state *sd, sim_cpu *cpu, int opt,
 
     case OPTION_HW_DEVICE:
       {
 
     case OPTION_HW_DEVICE:
       {
-       hw_tree_parse (STATE_HW (sd)->tree, arg);
+       hw_tree_parse (STATE_HW (sd)->tree, "%s", arg);
+       return SIM_RC_OK;
+      }
+
+    case OPTION_HW_LIST:
+      {
+       sim_hw_print (sd, sim_io_vprintf);
        return SIM_RC_OK;
       }
 
        return SIM_RC_OK;
       }
 
@@ -305,8 +318,8 @@ sim_hw_init (struct sim_state *sd)
 static void
 sim_hw_uninstall (struct sim_state *sd)
 {
 static void
 sim_hw_uninstall (struct sim_state *sd)
 {
-  /* hw_tree_delete (STATE_HW (sd)->tree); */
-  zfree (STATE_HW (sd));
+  hw_tree_delete (STATE_HW (sd)->tree);
+  free (STATE_HW (sd));
   STATE_HW (sd) = NULL;
 }
 
   STATE_HW (sd) = NULL;
 }
 
@@ -319,7 +332,7 @@ sim_hw_uninstall (struct sim_state *sd)
 /* CPU: The simulation is running and the current CPU/CIA
    initiates a data transfer. */
 
 /* CPU: The simulation is running and the current CPU/CIA
    initiates a data transfer. */
 
-void 
+void
 sim_cpu_hw_io_read_buffer (sim_cpu *cpu,
                           sim_cia cia,
                           struct hw *hw,
 sim_cpu_hw_io_read_buffer (sim_cpu *cpu,
                           sim_cia cia,
                           struct hw *hw,
@@ -335,7 +348,7 @@ sim_cpu_hw_io_read_buffer (sim_cpu *cpu,
     sim_engine_abort (sd, cpu, cia, "broken CPU read");
 }
 
     sim_engine_abort (sd, cpu, cia, "broken CPU read");
 }
 
-void 
+void
 sim_cpu_hw_io_write_buffer (sim_cpu *cpu,
                            sim_cia cia,
                            struct hw *hw,
 sim_cpu_hw_io_write_buffer (sim_cpu *cpu,
                            sim_cia cia,
                            struct hw *hw,
@@ -356,7 +369,7 @@ sim_cpu_hw_io_write_buffer (sim_cpu *cpu,
 
 /* SYSTEM: A data transfer is being initiated by the system. */
 
 
 /* SYSTEM: A data transfer is being initiated by the system. */
 
-unsigned 
+unsigned
 sim_hw_io_read_buffer (struct sim_state *sd,
                       struct hw *hw,
                       void *dest,
 sim_hw_io_read_buffer (struct sim_state *sd,
                       struct hw *hw,
                       void *dest,
This page took 0.036605 seconds and 4 git commands to generate.