sim: fix arch Makefile regen when unified
[deliverable/binutils-gdb.git] / sim / microblaze / interp.c
index 90dcd6f03aebbcc4bc90e70f5af59e4681737795..94f50f1e4cd97be142d4251a7ee2af1c508200f2 100644 (file)
@@ -1,5 +1,5 @@
 /* Simulator for Xilinx MicroBlaze processor
-   Copyright 2009-2015 Free Software Foundation, Inc.
+   Copyright 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GDB, the GNU debugger.
 
    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 "config.h"
+/* This must come before any other includes.  */
+#include "defs.h"
+
 #include <signal.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 #include "bfd.h"
-#include "gdb/callback.h"
+#include "sim/callback.h"
 #include "libiberty.h"
-#include "gdb/remote-sim.h"
+#include "sim/sim.h"
 
 #include "sim-main.h"
 #include "sim-options.h"
+#include "sim-signal.h"
+#include "sim-syscall.h"
 
 #include "microblaze-dis.h"
 
-#define target_big_endian (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
+#define target_big_endian (CURRENT_TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
 
 static unsigned long
 microblaze_extract_unsigned_integer (unsigned char *addr, int len)
@@ -126,7 +130,7 @@ sim_engine_run (SIM_DESC sd,
   int cycs;
   word WLhash;
   ubyte carry;
-  int imm_unsigned;
+  bool imm_unsigned;
   short ra, rb, rd;
   long immword;
   uword oldpc, newpc;
@@ -167,6 +171,7 @@ sim_engine_run (SIM_DESC sd,
        {
          insts += 1;
          bonus_cycles++;
+         TRACE_INSN (cpu, "HALT (%i)", RETREG);
          sim_engine_halt (sd, NULL, NULL, NULL_CIA, sim_exited, RETREG);
        }
       else
@@ -175,6 +180,7 @@ sim_engine_run (SIM_DESC sd,
            {
 #define INSTRUCTION(NAME, OPCODE, TYPE, ACTION)                \
            case NAME:                                  \
+             TRACE_INSN (cpu, #NAME);                  \
              ACTION;                                   \
              break;
 #include "microblaze.isa"
@@ -284,8 +290,18 @@ sim_engine_run (SIM_DESC sd,
                    IMM_ENABLE = 0;
                }
              else
-               /* no delay slot: increment cycle count */
-               bonus_cycles++;
+               {
+                 if (op == brki && IMM == 8)
+                   {
+                     RETREG = sim_syscall (cpu, CPU.regs[12], CPU.regs[5],
+                                           CPU.regs[6], CPU.regs[7],
+                                           CPU.regs[8]);
+                     PC = RD + INST_SIZE;
+                   }
+
+                 /* no delay slot: increment cycle count */
+                 bonus_cycles++;
+               }
            }
        }
 
@@ -385,14 +401,15 @@ free_state (SIM_DESC sd)
 }
 
 SIM_DESC
-sim_open (SIM_OPEN_KIND kind, host_callback *cb, struct bfd *abfd, char **argv)
+sim_open (SIM_OPEN_KIND kind, host_callback *cb,
+         struct bfd *abfd, char * const *argv)
 {
   int i;
   SIM_DESC sd = sim_state_alloc (kind, cb);
   SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
 
   /* The cpu data is kept in a separately allocated chunk of memory.  */
-  if (sim_cpu_alloc_all (sd, 1, /*cgen_cpu_max_extra_bytes ()*/0) != SIM_RC_OK)
+  if (sim_cpu_alloc_all (sd, 1) != SIM_RC_OK)
     {
       free_state (sd);
       return 0;
@@ -404,9 +421,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb, struct bfd *abfd, char **argv)
       return 0;
     }
 
-  /* getopt will print the error message so we just have to exit if this fails.
-     FIXME: Hmmm...  in the case of gdb we need getopt to call
-     print_filtered.  */
+  /* The parser will print an error message for us, so we silently return.  */
   if (sim_parse_args (sd, argv) != SIM_RC_OK)
     {
       free_state (sd);
@@ -459,7 +474,8 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb, struct bfd *abfd, char **argv)
 }
 
 SIM_RC
-sim_create_inferior (SIM_DESC sd, struct bfd *prog_bfd, char **argv, char **env)
+sim_create_inferior (SIM_DESC sd, struct bfd *prog_bfd,
+                    char * const *argv, char * const *env)
 {
   SIM_CPU *cpu = STATE_CPU (sd, 0);
 
This page took 0.026343 seconds and 4 git commands to generate.