aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2015-03-22 23:59:45 -0400
committerMike Frysinger <vapier@gentoo.org>2015-03-24 01:08:56 -0400
commitcc8ab1ded5dbc6c2ddb1b8c62f0e0f8f486a5f17 (patch)
tree52cc1d85601a51a1e4ef3376e25e9bd4425d1afe /sim
parent523ba8f92e3ff4c49f65b582c89b4563b1b665ad (diff)
downloadgdb-cc8ab1ded5dbc6c2ddb1b8c62f0e0f8f486a5f17.zip
gdb-cc8ab1ded5dbc6c2ddb1b8c62f0e0f8f486a5f17.tar.gz
gdb-cc8ab1ded5dbc6c2ddb1b8c62f0e0f8f486a5f17.tar.bz2
sim: moxie: convert to nrun.o
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.
Diffstat (limited to 'sim')
-rw-r--r--sim/moxie/ChangeLog25
-rw-r--r--sim/moxie/Makefile.in19
-rwxr-xr-xsim/moxie/configure114
-rw-r--r--sim/moxie/configure.ac3
-rw-r--r--sim/moxie/interp.c223
-rw-r--r--sim/moxie/sim-main.h6
6 files changed, 201 insertions, 189 deletions
diff --git a/sim/moxie/ChangeLog b/sim/moxie/ChangeLog
index d7b4e50..8b09c84 100644
--- a/sim/moxie/ChangeLog
+++ b/sim/moxie/ChangeLog
@@ -1,5 +1,30 @@
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.
* interp.c (sim_do_command): Delete.
diff --git a/sim/moxie/Makefile.in b/sim/moxie/Makefile.in
index 76137c8..1af4bd9 100644
--- a/sim/moxie/Makefile.in
+++ b/sim/moxie/Makefile.in
@@ -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
@@ -19,14 +19,15 @@
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
diff --git a/sim/moxie/configure b/sim/moxie/configure
index ccfdb77..efd1e06 100755
--- a/sim/moxie/configure
+++ b/sim/moxie/configure
@@ -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
@@ -13457,6 +13465,108 @@ fi
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"
diff --git a/sim/moxie/configure.ac b/sim/moxie/configure.ac
index 344db96..34b80ce 100644
--- a/sim/moxie/configure.ac
+++ b/sim/moxie/configure.ac
@@ -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
diff --git a/sim/moxie/interp.c b/sim/moxie/interp.c
index 5286b66..128fb48 100644
--- a/sim/moxie/interp.c
+++ b/sim/moxie/interp.c
@@ -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;
@@ -1128,35 +1118,6 @@ sim_resume (sd, step, siggnal)
}
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;
int rn;
@@ -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;
}
@@ -1339,60 +1281,6 @@ load_dtb (SIM_DESC sd, const char *filename)
}
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;
struct bfd * prog_bfd;
@@ -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;
-}
diff --git a/sim/moxie/sim-main.h b/sim/moxie/sim-main.h
index 33f34d6..ee7e368 100644
--- a/sim/moxie/sim-main.h
+++ b/sim/moxie/sim-main.h
@@ -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;