- common Makefile fragment and configury (e.g. Make-common.in, aclocal.m4).
In addition "common" contains portions of the system call support
-(e.g. callback.c, nltvals.def).
-
-Even though no files are built in this directory, it is still configured
-so support for regenerating nltvals.def is present.
+(e.g. callback.c, target-newlib-*.c).
\f
Common Makefile Support
=======================
AC_INIT(Makefile.in)
AC_CONFIG_MACRO_DIRS([../common ../.. ../../config])
-SIM_AC_COMMON
-
... target specific additions ...
SIM_AC_OUTPUT
--- snip ---
-SIM_AC_COMMON:
-
-- invokes the autoconf macros most often used by the simulators
-- defines --enable/--with options usable by all simulators
-- initializes sim_link_files/sim_link_links as the set of symbolic links
- to set up
-
SIM_AC_OUTPUT:
- creates the symbolic links defined in sim_link_{files,links}
SIM_EXTRA_CFLAGS =
# List of extra libraries to link with.
SIM_EXTRA_LIBS =
-# List of extra program dependencies.
-SIM_EXTRA_LIBDEPS =
-# Dependency of `all' to build any extra files.
-SIM_EXTRA_ALL =
# Dependency of `install' to install any extra files.
SIM_EXTRA_INSTALL =
# Dependency of `clean' to clean any extra files.
FIXME: This can obviously be made more elaborate. As needed it will be.
\f
-Rebuilding nltvals.def
-======================
+Rebuilding target-newlib-* files
+================================
Checkout a copy of the SIM and LIBGLOSS modules (Unless you've already
got one to hand):
$ cd /tmp/$$
$ cvs checkout sim-no-testsuite libgloss-no-testsuite newlib-no-testsuite
-Configure things for an arbitrary simulator target (I've d10v for
+Configure things for an arbitrary simulator target (d10v is used here for
convenience):
$ mkdir /tmp/$$/build
$ cd sim/
$ make nltvals
-To add a new target:
+If the target uses the common syscall table (libgloss/syscall.h), then you're
+all set! If the target has a custom syscall table, you need to declare it:
- devo/sim/common/gennltvals.sh
+ devo/sim/common/gennltvals.py
Add your new processor target (you'll need to grub
around to find where your syscall.h lives).
- devo/sim/<processor>/Makefile.in
-
- Add the definition:
-
- ``NL_TARGET = -DNL_TARGET_d10v''
-
- just before the line COMMON_POST_CONFIG_FRAG.
-
devo/sim/<processor>/*.[ch]
- Include targ-vals.h instead of syscall.h.
+ Include target-newlib-syscall.h instead of syscall.h.
\f
Tracing
=======
The simplest simulator doesn't include environment support -- it merely
simulates the Instruction Set Architecture (ISA). Once you're ready to move
-on to the next level, call the common macro in your configure.ac:
-SIM_AC_OPTION_ENVIRONMENT
+on to the next level, it's time to start handling the --env option. It's
+enabled by default for all ports already.
This will support for the user, virtual, and operating environments. See the
sim-config.h header for a more detailed description of them. The former are
By default, the libgloss userspace is simulated. That means the system call
numbers and calling convention matches that of libgloss. Simulating other
userspaces (such as Linux) is pretty straightforward, but let's first focus
-on the basics. The basic API is covered in include/gdb/callback.h.
+on the basics. The basic API is covered in include/sim/callback.h.
When an instruction is simulated that invokes the system call method (such as
forcing a hardware trap or exception), your simulator code should set up the
Keep in mind that the CB_SYS_xxx defines are normalized values with no real
meaning with respect to the target. They provide a unique map on the host so
-that it can parse things sanely. For libgloss, the common/nltvals.def file
-creates the target's system call numbers to the CB_SYS_xxx values.
+that it can parse things sanely. For libgloss, the common/target-newlib-syscall
+file contains the target's system call numbers to the CB_SYS_xxx values.
To simulate other userspace targets, you really only need to update the maps
pointers that are part of the callback interface. So create CB_TARGET_DEFS_MAP
================
The simplest simulator doesn't include hardware device support. Once you're
-ready to move on to the next level, call the common macro in your configure.ac:
-SIM_AC_OPTION_HARDWARE(yes,,devone devtwo devthree)
+ready to move on to the next level, declare in your Makefile.in:
+SIM_EXTRA_HW_DEVICES = devone devtwo devthree
The basic hardware API is documented in common/hw-device.h.