sim: moxie: convert to nrun.o
authorMike Frysinger <vapier@gentoo.org>
Mon, 23 Mar 2015 03:59:45 +0000 (23:59 -0400)
committerMike Frysinger <vapier@gentoo.org>
Tue, 24 Mar 2015 05:08:56 +0000 (01:08 -0400)
This port already used a lot of common/ files, so cutting it over to
nrun.o and using a few more common objects is pretty straight forward.

sim/moxie/ChangeLog
sim/moxie/Makefile.in
sim/moxie/configure
sim/moxie/configure.ac
sim/moxie/interp.c
sim/moxie/sim-main.h

index d7b4e5040e1124bc55b438e4fdaf5ebfc29ef1a5..8b09c84da3d8f75e4d34ca7410662802a6d3e26c 100644 (file)
@@ -1,3 +1,28 @@
+2015-03-24  Mike Frysinger  <vapier@gentoo.org>
+
+       * configure: Regenerate.
+       * configure.ac: Call SIM_AC_OPTION_WARNINGS.
+       * interp.c: Delete gdb/callback.h include.  Add sim-options.h include.
+       (callback, myname, sim_kind): Delete.
+       (tracefile, tracine, TRACE): Move code together and add a TODO.
+       (struct moxie_regset): Add a TODO.
+       (cpu): Likewise.
+       (callback, issue_messages, sim_size, sim_write, sim_read, sim_trace,
+       sim_stop_reason, sim_stop, sim_info, sim_load, sim_set_callbacks):
+       Delete.
+       (set_initial_gprs): Change prototype to (void).
+       (free_state): New function.
+       (sim_open): Call sim_cpu_alloc_all, sim_parse_args, and
+       sim_analyze_program.  Move set_initial_gprs to the end.  Set
+       STATE_WATCHPOINTS pc data.  Delete callback, myname, and
+       issue_messages.  Call free_state on error.
+       (sim_create_inferior): Delete references to issue_messages and
+       set_initial_gprs.
+       * Makefile.in (SIM_RUN_OBJS, SIM_EXTRA_CFLAGS): Delete.
+       (SIM_OBJS): Change to $(SIM_NEW_COMMON_OBJS).
+       * sim-main.h (struct sim_state): Change cpu to a pointer array.
+       (STATE_CPU): Drop the &.
+
 2015-03-24  Mike Frysinger  <vapier@gentoo.org>
 
        * Makefile.in (SIM_OBJS): Add sim-command.o.
index 76137c8307221da485c2db59b36176c0a94be7a6..1af4bd94e8ca31cd6b9fed0b15e42b6f7bb26fe0 100644 (file)
@@ -1,7 +1,7 @@
 #    Makefile template for Configure for the moxie sim library.
 #    Copyright (C) 2008-2015 Free Software Foundation, Inc.
 #    Written by Anthony Green
-# 
+#
 # 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 3 of the License, or
 
 dtbdir = @datadir@/gdb/dtb
 
-# Use the deprecated run frontend until we migrate to nrun.o
-SIM_RUN_OBJS = run.o
-SIM_EXTRA_CFLAGS = -DSIM_USE_DEPRECATED_RUN_FRONTEND
-
-SIM_OBJS = interp.o sim-load.o sim-io.o sim-config.o sim-utils.o       \
-sim-options.o sim-module.o sim-core.o sim-endian.o sim-trace.o         \
-sim-engine.o sim-fpu.o sim-bits.o sim-profile.o sim-events.o \
-sim-memopt.o sim-command.o
+SIM_OBJS = \
+       $(SIM_NEW_COMMON_OBJS) \
+       interp.o \
+       sim-cpu.o \
+       sim-engine.o \
+       sim-hload.o \
+       sim-hrw.o \
+       sim-reason.o \
+       sim-stop.o
 
 SIM_EXTRA_LIBS = -lm -lz
 SIM_EXTRA_INSTALL = install-dtb
index ccfdb771696c5a2f3ecee00f801ad6ae20ce266e..efd1e064e9f0ccf56959114cd095e5613d267b14 100755 (executable)
@@ -765,6 +765,9 @@ enable_sim_alignment
 enable_sim_hostendian
 enable_sim_environment
 enable_sim_inline
+enable_werror
+enable_build_warnings
+enable_sim_build_warnings
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1412,6 +1415,11 @@ Optional Features:
   --enable-sim-hostendian=end          Specify host byte endian orientation.
   --enable-sim-environment=environment Specify mixed, user, virtual or operating environment.
   --enable-sim-inline=inlines          Specify which functions should be inlined.
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -12365,7 +12373,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12368 "configure"
+#line 12376 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12471,7 +12479,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12474 "configure"
+#line 12482 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
 fi
 
 
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
+fi
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wpointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes
+-Wdeclaration-after-statement -Wempty-body -Wmissing-parameter-type \
+-Wold-style-declaration -Wold-style-definition"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+  *) build_warnings="$build_warnings -Wformat-nonliteral" ;;
+esac
+
+# Check whether --enable-build-warnings was given.
+if test "${enable_build_warnings+set}" = set; then :
+  enableval=$enable_build_warnings; case "${enableval}" in
+  yes) ;;
+  no)  build_warnings="-w";;
+  ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
+        build_warnings="${build_warnings} ${t}";;
+  *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
+        build_warnings="${t} ${build_warnings}";;
+  *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
+esac
+if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
+  echo "Setting compiler warning flags = $build_warnings" 6>&1
+fi
+fi
+# Check whether --enable-sim-build-warnings was given.
+if test "${enable_sim_build_warnings+set}" = set; then :
+  enableval=$enable_sim_build_warnings; case "${enableval}" in
+  yes) ;;
+  no)  build_warnings="-w";;
+  ,*)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
+        build_warnings="${build_warnings} ${t}";;
+  *,)   t=`echo "${enableval}" | sed -e "s/,/ /g"`
+        build_warnings="${t} ${build_warnings}";;
+  *)    build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;;
+esac
+if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
+  echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1
+fi
+fi
+WARN_CFLAGS=""
+if test "x${build_warnings}" != x -a "x$GCC" = xyes
+then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
+$as_echo_n "checking compiler warning flags... " >&6; }
+    # Separate out the -Werror flag as some files just cannot be
+    # compiled with it enabled.
+    for w in ${build_warnings}; do
+       case $w in
+       -Werr*) WERROR_CFLAGS=-Werror ;;
+       *) # Check that GCC accepts it
+           saved_CFLAGS="$CFLAGS"
+           CFLAGS="$CFLAGS $w"
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  WARN_CFLAGS="${WARN_CFLAGS} $w"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           CFLAGS="$saved_CFLAGS"
+       esac
+    done
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
+fi
+
+
 
 ac_sources="$sim_link_files"
 ac_dests="$sim_link_links"
index 344db967d2d33f34df637730893fc7fde7d70693..34b80ce0e6c64af330ecf384befa0f80a8855ef8 100644 (file)
@@ -11,6 +11,7 @@ SIM_AC_OPTION_ENDIAN(BIG_ENDIAN)
 SIM_AC_OPTION_ALIGNMENT(STRICT_ALIGNMENT)
 SIM_AC_OPTION_HOSTENDIAN
 SIM_AC_OPTION_ENVIRONMENT
-SIM_AC_OPTION_INLINE()
+SIM_AC_OPTION_INLINE
+SIM_AC_OPTION_WARNINGS
 
 SIM_AC_OUTPUT
index 5286b666a30168cdb259be613eceb8d789433d39..128fb4860cb3bc62a646aba87189f0ffe3164d50 100644 (file)
@@ -26,20 +26,16 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <sys/param.h>
 #include <unistd.h>
 #include "bfd.h"
-#include "gdb/callback.h"
 #include "libiberty.h"
 #include "gdb/remote-sim.h"
 
 #include "sim-main.h"
 #include "sim-base.h"
+#include "sim-options.h"
 
 typedef int word;
 typedef unsigned int uword;
 
-host_callback *       callback;
-
-FILE *tracefile;
-
 /* Extract the signed 10-bit offset from a 16-bit branch
    instruction.  */
 #define INST2OFFSET(o) ((((signed short)((o & ((1<<10)-1))<<6))>>6)<<1)
@@ -117,6 +113,7 @@ static const char *reg_names[16] =
 
 /* The ordering of the moxie_regset structure is matched in the
    gdb/config/moxie/tm-moxie.h file in the REGISTER_NAMES macro.  */
+/* TODO: This should be moved to sim-main.h:_sim_cpu.  */
 struct moxie_regset
 {
   word           regs[NUM_MOXIE_REGS + 1]; /* primary registers */
@@ -132,23 +129,15 @@ struct moxie_regset
 #define CC_GTU 1<<3
 #define CC_LTU 1<<4
 
+/* TODO: This should be moved to sim-main.h:_sim_cpu.  */
 union
 {
   struct moxie_regset asregs;
   word asints [1];             /* but accessed larger... */
 } cpu;
 
-static char *myname;
-static SIM_OPEN_KIND sim_kind;
-static int issue_messages = 0;
-
-void
-sim_size (int s)
-{
-}
-
 static void
-set_initial_gprs ()
+set_initial_gprs (void)
 {
   int i;
   long space;
@@ -246,10 +235,11 @@ convert_target_flags (unsigned int tflags)
   return hflags;
 }
 
+/* TODO: Move to sim-trace.h.  */
+static FILE *tracefile;
+static const int tracing = 0;
 #define TRACE(str) if (tracing) fprintf(tracefile,"0x%08x, %s, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", opc, str, cpu.asregs.regs[0], cpu.asregs.regs[1], cpu.asregs.regs[2], cpu.asregs.regs[3], cpu.asregs.regs[4], cpu.asregs.regs[5], cpu.asregs.regs[6], cpu.asregs.regs[7], cpu.asregs.regs[8], cpu.asregs.regs[9], cpu.asregs.regs[10], cpu.asregs.regs[11], cpu.asregs.regs[12], cpu.asregs.regs[13], cpu.asregs.regs[14], cpu.asregs.regs[15]);
 
-static int tracing = 0;
-
 void
 sim_resume (sd, step, siggnal)
      SIM_DESC sd;
@@ -1127,35 +1117,6 @@ sim_resume (sd, step, siggnal)
   cpu.asregs.insts += insts;           /* instructions done ... */
 }
 
-int
-sim_write (sd, addr, buffer, size)
-     SIM_DESC sd;
-     SIM_ADDR addr;
-     const unsigned char * buffer;
-     int size;
-{
-  sim_cpu *scpu = STATE_CPU (sd, 0); /* FIXME */
-
-  sim_core_write_buffer (sd, scpu, write_map, buffer, addr, size);
-
-  return size;
-}
-
-int
-sim_read (sd, addr, buffer, size)
-     SIM_DESC sd;
-     SIM_ADDR addr;
-     unsigned char * buffer;
-     int size;
-{
-  sim_cpu *scpu = STATE_CPU (sd, 0); /* FIXME */
-
-  sim_core_read_buffer (sd, scpu, read_map, buffer, addr, size);
-  
-  return size;
-}
-
-
 int
 sim_store_register (sd, rn, memory, length)
      SIM_DESC sd;
@@ -1203,61 +1164,15 @@ sim_fetch_register (sd, rn, memory, length)
     return 0;
 }
 
-
-int
-sim_trace (sd)
-     SIM_DESC sd;
-{
-  if (tracefile == 0)
-    tracefile = fopen("trace.csv", "wb");
-
-  tracing = 1;
-  
-  sim_resume (sd, 0, 0);
-
-  tracing = 0;
-  
-  return 1;
-}
-
-void
-sim_stop_reason (sd, reason, sigrc)
-     SIM_DESC sd;
-     enum sim_stop * reason;
-     int * sigrc;
-{
-  if (cpu.asregs.exception == SIGQUIT)
-    {
-      * reason = sim_exited;
-      * sigrc = cpu.asregs.regs[2];
-    }
-  else
-    {
-      * reason = sim_stopped;
-      * sigrc = cpu.asregs.exception;
-    }
-}
-
-
-int
-sim_stop (sd)
-     SIM_DESC sd;
-{
-  cpu.asregs.exception = SIGINT;
-  return 1;
-}
-
-
-void
-sim_info (sd, verbose)
-     SIM_DESC sd;
-     int verbose;
+static void
+free_state (SIM_DESC sd)
 {
-  callback->printf_filtered (callback, "\n\n# instructions executed  %llu\n",
-                            cpu.asregs.insts);
+  if (STATE_MODULES (sd) != NULL)
+    sim_module_uninstall (sd);
+  sim_cpu_free_all (sd);
+  sim_state_free (sd);
 }
 
-
 SIM_DESC
 sim_open (kind, cb, abfd, argv)
      SIM_OPEN_KIND kind;
@@ -1268,20 +1183,44 @@ sim_open (kind, cb, abfd, argv)
   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)
+    {
+      free_state (sd);
+      return 0;
+    }
+
+  STATE_WATCHPOINTS (sd)->pc = &cpu.asregs.regs[PC_REGNO];
+  STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (word);
+
   if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK)
-    return 0;
+    {
+      free_state (sd);
+      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.  */
+  if (sim_parse_args (sd, argv) != SIM_RC_OK)
+    {
+      free_state (sd);
+      return 0;
+    }
 
   sim_do_command(sd," memory region 0x00000000,0x4000000") ; 
   sim_do_command(sd," memory region 0xE0000000,0x10000") ; 
 
-  myname = argv[0];
-  callback = cb;
-  
-  if (kind == SIM_OPEN_STANDALONE)
-    issue_messages = 1;
-  
-  set_initial_gprs (); /* Reset the GPR registers.  */
-  
+  /* Check for/establish the a reference program image.  */
+  if (sim_analyze_program (sd,
+                          (STATE_PROG_ARGV (sd) != NULL
+                           ? *STATE_PROG_ARGV (sd)
+                           : NULL), abfd) != SIM_RC_OK)
+    {
+      free_state (sd);
+      return 0;
+    }
+
   /* Configure/verify the target byte order and other runtime
      configuration options.  */
   if (sim_config (sd) != SIM_RC_OK)
@@ -1298,6 +1237,9 @@ sim_open (kind, cb, abfd, argv)
       return 0;
     }
 
+  /* CPU specific initialization.  */
+  set_initial_gprs ();
+
   return sd;
 }
 
@@ -1338,60 +1280,6 @@ load_dtb (SIM_DESC sd, const char *filename)
   fclose (f);
 }
 
-SIM_RC
-sim_load (sd, prog, abfd, from_tty)
-     SIM_DESC sd;
-     const char * prog;
-     bfd * abfd;
-     int from_tty;
-{
-
-  /* Do the right thing for ELF executables; this turns out to be
-     just about the right thing for any object format that:
-       - we crack using BFD routines
-       - follows the traditional UNIX text/data/bss layout
-       - calls the bss section ".bss".   */
-
-  extern bfd * sim_load_file (); /* ??? Don't know where this should live.  */
-  bfd * prog_bfd;
-
-  {
-    bfd * handle;
-    handle = bfd_openr (prog, 0);      /* could be "moxie" */
-    
-    if (!handle)
-      {
-       printf("``%s'' could not be opened.\n", prog);
-       return SIM_RC_FAIL;
-      }
-    
-    /* Makes sure that we have an object file, also cleans gets the 
-       section headers in place.  */
-    if (!bfd_check_format (handle, bfd_object))
-      {
-       /* wasn't an object file */
-       bfd_close (handle);
-       printf ("``%s'' is not appropriate object file.\n", prog);
-       return SIM_RC_FAIL;
-      }
-
-    /* Clean up after ourselves.  */
-    bfd_close (handle);
-  }
-
-  /* from sh -- dac */
-  prog_bfd = sim_load_file (sd, myname, callback, prog, abfd,
-                            sim_kind == SIM_OPEN_DEBUG,
-                            0, sim_write);
-  if (prog_bfd == NULL)
-    return SIM_RC_FAIL;
-  
-  if (abfd == NULL)
-    bfd_close (prog_bfd);
-
-  return SIM_RC_OK;
-}
-
 SIM_RC
 sim_create_inferior (sd, prog_bfd, argv, env)
      SIM_DESC sd;
@@ -1403,12 +1291,6 @@ sim_create_inferior (sd, prog_bfd, argv, env)
   int l, argc, i, tp;
   sim_cpu *scpu = STATE_CPU (sd, 0); /* FIXME */
 
-  /* Set the initial register set.  */
-  l = issue_messages;
-  issue_messages = 0;
-  set_initial_gprs ();
-  issue_messages = l;
-  
   if (prog_bfd != NULL)
     cpu.asregs.regs[PC_REGNO] = bfd_get_start_address (prog_bfd);
 
@@ -1449,10 +1331,3 @@ sim_create_inferior (sd, prog_bfd, argv, env)
 
   return SIM_RC_OK;
 }
-
-void
-sim_set_callbacks (ptr)
-     host_callback * ptr;
-{
-  callback = ptr; 
-}
index 33f34d656ebbdece58be8ec2b288984669934e42..ee7e3682de648f92300f14a728e6e6a8da0e28fd 100644 (file)
@@ -48,11 +48,11 @@ struct _sim_cpu {
 
 struct sim_state {
 
-  sim_cpu cpu[MAX_NR_PROCESSORS];
+  sim_cpu *cpu[MAX_NR_PROCESSORS];
 #if (WITH_SMP)
-#define STATE_CPU(sd,n) (&(sd)->cpu[n])
+#define STATE_CPU(sd,n) ((sd)->cpu[n])
 #else
-#define STATE_CPU(sd,n) (&(sd)->cpu[0])
+#define STATE_CPU(sd,n) ((sd)->cpu[0])
 #endif
 
   sim_state_base base;