Add ABFD argument to sim_create_inferior. Document.
Add file sim-hload.c - generic load for hardware only simulators. Review each simulators sim_open, sim_load, sim_create_inferior so that they more closely match required behavour.
This commit is contained in:
parent
9f64f00ada
commit
fafce69ab1
35 changed files with 626 additions and 382 deletions
|
@ -1,3 +1,12 @@
|
|||
Tue Aug 26 15:19:56 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* remote-sim.c (gdbsim_create_inferior): Pass exec_bfd into
|
||||
sim_create_inferior.
|
||||
(gdbsim_create_inferior): Pass -1 to proceed, sim_create_inferior
|
||||
has already set the PC.
|
||||
(gdbsim_create_inferior): Allow exec_file to be NULL, make "No
|
||||
exec file" a warning. Ditto for "No program loaded".
|
||||
|
||||
Mon Aug 25 17:08:01 1997 Geoffrey Noer <noer@cygnus.com>
|
||||
|
||||
* ocd.c: revert Sun change -- enable log file handling
|
||||
|
|
|
@ -418,6 +418,9 @@ gdbsim_load (prog, fromtty)
|
|||
if (sim_load (gdbsim_desc, prog, NULL, fromtty) == SIM_RC_FAIL)
|
||||
error ("unable to load program");
|
||||
|
||||
/* FIXME: If a load command should reset the targets registers then
|
||||
a call to sim_create_inferior() should go here. */
|
||||
|
||||
program_loaded = 1;
|
||||
}
|
||||
|
||||
|
@ -438,37 +441,41 @@ gdbsim_create_inferior (exec_file, args, env)
|
|||
{
|
||||
int len;
|
||||
char *arg_buf,**argv;
|
||||
CORE_ADDR entry_pt;
|
||||
|
||||
if (exec_file == 0 || exec_bfd == 0)
|
||||
warning ("No exec file specified.");
|
||||
if (! program_loaded)
|
||||
error ("No program loaded.");
|
||||
warning ("No program loaded.");
|
||||
|
||||
if (sr_get_debug ())
|
||||
printf_filtered ("gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
|
||||
exec_file, args);
|
||||
|
||||
if (exec_file == 0 || exec_bfd == 0)
|
||||
error ("No exec file specified.");
|
||||
|
||||
entry_pt = (CORE_ADDR) bfd_get_start_address (exec_bfd);
|
||||
(exec_file ? exec_file: "(NULL)"),
|
||||
args);
|
||||
|
||||
gdbsim_kill ();
|
||||
remove_breakpoints ();
|
||||
init_wait_for_inferior ();
|
||||
|
||||
len = strlen (exec_file) + 1 + strlen (args) + 1 + /*slop*/ 10;
|
||||
arg_buf = (char *) alloca (len);
|
||||
arg_buf[0] = '\0';
|
||||
strcat (arg_buf, exec_file);
|
||||
strcat (arg_buf, " ");
|
||||
strcat (arg_buf, args);
|
||||
argv = buildargv (arg_buf);
|
||||
make_cleanup (freeargv, (char *) argv);
|
||||
sim_create_inferior (gdbsim_desc, argv, env);
|
||||
if (exec_file != NULL)
|
||||
{
|
||||
len = strlen (exec_file) + 1 + strlen (args) + 1 + /*slop*/ 10;
|
||||
arg_buf = (char *) alloca (len);
|
||||
arg_buf[0] = '\0';
|
||||
strcat (arg_buf, exec_file);
|
||||
strcat (arg_buf, " ");
|
||||
strcat (arg_buf, args);
|
||||
argv = buildargv (arg_buf);
|
||||
make_cleanup (freeargv, (char *) argv);
|
||||
}
|
||||
else
|
||||
argv = NULL;
|
||||
sim_create_inferior (gdbsim_desc, exec_bfd, argv, env);
|
||||
|
||||
inferior_pid = 42;
|
||||
insert_breakpoints (); /* Needed to get correct instruction in cache */
|
||||
proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
|
||||
insert_breakpoints (); /* Needed to get correct instruction in cache */
|
||||
|
||||
/* NB: Entry point already set by sim_create_inferior. */
|
||||
proceed ((CORE_ADDR)-1, TARGET_SIGNAL_DEFAULT, 0);
|
||||
}
|
||||
|
||||
/* The open routine takes the rest of the parameters from the command,
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
Tue Aug 26 12:25:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* remote-sim.h (sim_create_inferior): Add ABFD arg. Document.
|
||||
|
||||
Mon Aug 25 10:50:51 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* remote-sim.h (sim_open): Add ABFD arg. Change ARGV to PARGV.
|
||||
Document.
|
||||
* remote-sim.h (sim_open): Add ABFD arg. Document.
|
||||
|
||||
Fri Aug 8 16:43:56 1997 Doug Evans <dje@canuck.cygnus.com>
|
||||
|
||||
|
|
|
@ -69,8 +69,8 @@ struct _bfd;
|
|||
(This function is called when the simulator is selected from the
|
||||
gdb command line.)
|
||||
|
||||
KIND specifies how the simulator will be used. Currently there are only
|
||||
two kinds: stand-alone and debug.
|
||||
KIND specifies how the simulator shall be used. Currently there
|
||||
are only two kinds: stand-alone and debug.
|
||||
|
||||
CALLBACK specifies a standard host callback (defined in callback.h).
|
||||
|
||||
|
@ -80,6 +80,8 @@ struct _bfd;
|
|||
ARGV is a standard ARGV pointer such as that passed from the
|
||||
command line. The syntax of the argument list is is assumed to be
|
||||
``SIM-PROG { SIM-OPTION } [ TARGET-PROGRAM { TARGET-OPTION } ]''.
|
||||
The trailing TARGET-PROGRAM and args are only valid for a
|
||||
stand-alone simulator.
|
||||
|
||||
On success, the result is a non NULL descriptor that shall be
|
||||
passed to the other sim_foo functions. While the simulator
|
||||
|
@ -88,14 +90,14 @@ struct _bfd;
|
|||
successful creation of the simulator shall not dependent on the
|
||||
presence of any of these arguments/options.
|
||||
|
||||
For a simulator modeling real hardware, the created simulator shall
|
||||
be sufficiently initialized to handle, with out restrictions any
|
||||
client requests (including memory reads/writes, register
|
||||
fetch/stores and a resume).
|
||||
Hardware simulator: The created simulator shall be sufficiently
|
||||
initialized to handle, with out restrictions any client requests
|
||||
(including memory reads/writes, register fetch/stores and a
|
||||
resume).
|
||||
|
||||
For a simulator modeling a process, that process is not created
|
||||
until a call to sim_create_inferior. FIXME: What should the state
|
||||
of the simulator be? */
|
||||
Process simulator: that process is not created until a call to
|
||||
sim_create_inferior. FIXME: What should the state of the simulator
|
||||
be? */
|
||||
|
||||
SIM_DESC sim_open PARAMS ((SIM_OPEN_KIND kind, struct host_callback_struct *callback, struct _bfd *abfd, char **argv));
|
||||
|
||||
|
@ -116,58 +118,38 @@ void sim_close PARAMS ((SIM_DESC sd, int quitting));
|
|||
If ABFD is non-NULL, the bfd for the file has already been opened.
|
||||
The result is a return code indicating success.
|
||||
|
||||
For a simulator modeling real hardware, the client is permitted to
|
||||
make multiple calls to this function. Such calls have an
|
||||
accumulative effect.
|
||||
Hardware simulator: A call to this function should not effect the
|
||||
state of the processor registers. Multiple calls to this function
|
||||
are permitted and have an accumulative effect.
|
||||
|
||||
For a simulator modeling a process, calls to this function may be
|
||||
ignored. */
|
||||
Process simulator: Calls to this function may be ignored.
|
||||
|
||||
FIXME: Some hardware targets, before a loaded program can be
|
||||
executed, require the manipulation of VM registers and tables.
|
||||
Such manipulation should probably (?) occure in
|
||||
sim_create_inferior. */
|
||||
|
||||
SIM_RC sim_load PARAMS ((SIM_DESC sd, char *prog, struct _bfd *abfd, int from_tty));
|
||||
|
||||
|
||||
/* Prepare to run the simulated program.
|
||||
|
||||
ARGV and ENV are NULL terminated lists of pointers.
|
||||
ABFD, if not NULL, provides initial processor state information.
|
||||
ARGV and ENV, if non NULL, are NULL terminated lists of pointers.
|
||||
|
||||
For a simulator modeling real hardware, this function shall
|
||||
initialize the processor registers to a known value. The program
|
||||
counter shall be set to the start address obtained from the last
|
||||
program loaded (or the hardware reset default). The ARGV and ENV
|
||||
arguments can be ignored.
|
||||
Hardware simulator: This function shall initialize the processor
|
||||
registers to a known value. The program counter and possibly stack
|
||||
pointer shall be set using information obtained from ABFD (or
|
||||
hardware reset defaults). ARGV and ENV, dependant on the target
|
||||
ABI, may be written to memory.
|
||||
|
||||
For a simulator modeling a process, after a call to this function a
|
||||
new process instance shall exist - the TEXT, DATA, BSS and stack
|
||||
regions shall all be initialized, ARGV and ENV shall be written to
|
||||
process address space (according to the applicable ABI), and the
|
||||
program counter and stack pointer set accordingly. (NB: A simulator
|
||||
may in fact initialize the TEXT, DATA and BSS sections during an
|
||||
earlier stage).
|
||||
Process simulator: After a call to this function, a new process
|
||||
instance shall exist. The TEXT, DATA, BSS and stack regions shall
|
||||
all be initialized, ARGV and ENV shall be written to process
|
||||
address space (according to the applicable ABI) and the program
|
||||
counter and stack pointer set accordingly. */
|
||||
|
||||
--
|
||||
|
||||
FIXME: Is the below a better definition - assuming that ABFD arg is
|
||||
added.
|
||||
|
||||
Prepare to run the simulated program.
|
||||
|
||||
ABFD, if not NULL, can be used to obtain initial processor state
|
||||
information (eg PC value).
|
||||
ARGV and ENV, if non NULL, are NULL terminated lists of pointers.
|
||||
|
||||
For a simulator modeling real hardware, this function shall
|
||||
initialize the processor registers to a known value. The program
|
||||
counter shall be set to the start address obtained from the ABFD
|
||||
struct (or the hardware reset default). The ARGV and ENV arguments
|
||||
can be ignored.
|
||||
|
||||
For a simulator modeling a process, after a call to this function a
|
||||
new process instance shall exist - the TEXT, DATA, BSS and stack
|
||||
regions shall all be initialized, ARGV and ENV shall be written to
|
||||
process address space (according to the applicable ABI), and the
|
||||
program counter and stack pointer set accordingly. */
|
||||
|
||||
SIM_RC sim_create_inferior PARAMS ((SIM_DESC sd, char **argv, char **env));
|
||||
SIM_RC sim_create_inferior PARAMS ((SIM_DESC sd, struct _bfd *abfd, char **argv, char **env));
|
||||
|
||||
|
||||
/* Read LENGTH bytes of the simulated program's memory and store in
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
Tue Aug 26 10:37:27 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* wrapper.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ sim-events.c
|
|||
sim-events.h
|
||||
sim-fpu.c
|
||||
sim-fpu.h
|
||||
sim-hload.c
|
||||
sim-inline.c
|
||||
sim-inline.h
|
||||
sim-io.c
|
||||
|
|
|
@ -1,3 +1,25 @@
|
|||
Wed Aug 27 11:55:35 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* sim-utils.c (sim_analyze_program): Add prog_name argument.
|
||||
Update STATE_PROG_BFD when needed with a dup'd copy of the
|
||||
program.
|
||||
|
||||
* sim-config.c (sim_config): Delete ABFD argument, use
|
||||
STATE_PROG_BFD directly.
|
||||
|
||||
Tue Aug 26 12:55:26 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* run.c (main): Pass the open ABFD to sim_create_inferior.
|
||||
|
||||
* nrun.c (main): Determine prog_bfd. Pass to sim_create_inferior
|
||||
and sim_load.
|
||||
(bfd.h): Include.
|
||||
|
||||
* sim-hload.c (sim_load): New file. Implement generic sim_load for
|
||||
hardware only simulator targets.
|
||||
|
||||
* Make-common.in (sim-hload.o): Add rule.
|
||||
|
||||
Wed Aug 27 09:51:42 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* sim-utils.c (sim_copy_argv): Rewrite to match malloc strategy
|
||||
|
|
|
@ -132,7 +132,7 @@ all: libsim.a run $(SIM_EXTRA_ALL)
|
|||
|
||||
libsim.a: $(LIB_OBJS)
|
||||
rm -f libsim.a
|
||||
$(AR) $(ARFLAGS) libsim.a $(LIB_OBJS)
|
||||
$(AR) $(AR_FLAGS) libsim.a $(LIB_OBJS)
|
||||
$(RANLIB) libsim.a
|
||||
|
||||
run: $(SIM_RUN_OBJS) libsim.a $(LIBDEPS)
|
||||
|
@ -181,6 +181,9 @@ sim_main_headers = \
|
|||
$(srcdir)/../common/sim-trace.h \
|
||||
$(srcdir)/../common/sim-profile.h \
|
||||
$(srcdir)/../common/sim-engine.h \
|
||||
$(srcdir)/../common/sim-events.h \
|
||||
$(srcdir)/../common/sim-watch.h \
|
||||
$(srcdir)/../common/sim-assert.h \
|
||||
tconfig.h
|
||||
|
||||
sim-assert_h = $(srcdir)/../common/sim-assert.h
|
||||
|
@ -209,69 +212,41 @@ BUILT_SRC_FROM_COMMON= \
|
|||
sim-config.c \
|
||||
sim-io.c
|
||||
|
||||
sim-abort.o: sim-abort.c \
|
||||
sim-abort.o: $(srcdir)/../common/sim-abort.c \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-abort.c: $(srcdir)/../common/sim-abort.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-abort.c $(ALL_CFLAGS)
|
||||
|
||||
sim-bits.o: sim-bits.c $(sim-bits_h) $(sim-n-bits_h) $(sim-assert_h) \
|
||||
sim-bits.o: $(srcdir)/../common/sim-bits.c $(sim-bits_h) $(sim-n-bits_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-bits.c: $(srcdir)/../common/sim-bits.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-bits.c $(ALL_CFLAGS)
|
||||
|
||||
sim-config.o: sim-config.c $(sim-config_h) $(sim-nconfig_h) $(sim-assert_h) \
|
||||
sim-config.o: $(srcdir)/../common/sim-config.c $(sim-config_h) $(sim-nconfig_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-config.c: $(srcdir)/../common/sim-config.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-config.c $(ALL_CFLAGS)
|
||||
|
||||
sim-core.o: sim-core.c $(sim-core_h) $(sim-n-core_h) \
|
||||
sim-core.o: $(srcdir)/../common/sim-core.c $(sim-core_h) $(sim-n-core_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-core.c: $(srcdir)/../common/sim-core.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-core.c $(ALL_CFLAGS)
|
||||
|
||||
sim-endian.o: sim-endian.c $(sim-endian_h) $(sim-n-endian_h) $(sim-assert_h) \
|
||||
sim-endian.o: $(srcdir)/../common/sim-endian.c $(sim-endian_h) $(sim-n-endian_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-endian.c: $(srcdir)/../common/sim-endian.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-endian.c $(ALL_CFLAGS)
|
||||
|
||||
sim-engine.o: sim-engine.c $(sim_main_headers) $(sim-engine_h) $(sim-assert_h) \
|
||||
sim-engine.o: $(srcdir)/../common/sim-engine.c $(sim_main_headers) $(sim-engine_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-engine.c: $(srcdir)/../common/sim-engine.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-engine.c $(ALL_CFLAGS)
|
||||
|
||||
sim-events.o: sim-events.c $(sim-events_h) $(sim-assert_h) \
|
||||
sim-events.o: $(srcdir)/../common/sim-events.c $(sim-events_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-events.c: $(srcdir)/../common/sim-events.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-events.c $(ALL_CFLAGS)
|
||||
|
||||
sim-fpu.o: sim-fpu.c $(sim-fpu_h) $(sim-assert_h) \
|
||||
sim-fpu.o: $(srcdir)/../common/sim-fpu.c $(sim-fpu_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-fpu.c: $(srcdir)/../common/sim-fpu.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-fpu.c $(ALL_CFLAGS)
|
||||
|
||||
sim-hload.o: $(srcdir)/../common/sim-hload.c $(sim-assert_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
$(CC) -c $(srcdir)/../common/sim-hload.c $(ALL_CFLAGS)
|
||||
|
||||
sim-inline.c: $(srcdir)/../common/sim-inline.c
|
||||
rm -f $@ tmp-$@
|
||||
|
@ -279,13 +254,9 @@ sim-inline.c: $(srcdir)/../common/sim-inline.c
|
|||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
|
||||
sim-io.o: sim-io.c $(sim_main_headers) $(sim-io_h) $(sim-assert_h) \
|
||||
sim-io.o: $(srcdir)/../common/sim-io.c $(sim_main_headers) $(sim-io_h) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-io.c: $(srcdir)/../common/sim-io.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-io.c $(ALL_CFLAGS)
|
||||
|
||||
sim-module.o: $(srcdir)/../common/sim-module.c $(sim_main_headers) \
|
||||
$(sim-io_h) $(SIM_EXTRA_DEPS)
|
||||
|
@ -295,37 +266,21 @@ sim-options.o: $(srcdir)/../common/sim-options.c $(sim_main_headers) \
|
|||
$(sim-options_h) $(sim-io_h) $(SIM_EXTRA_DEPS)
|
||||
$(CC) -c $(srcdir)/../common/sim-options.c $(ALL_CFLAGS)
|
||||
|
||||
sim-reason.o: sim-reason.c $(sim_main_headers) $(sim-assert_h) \
|
||||
sim-reason.o: $(srcdir)/../common/sim-reason.c $(sim_main_headers) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-reason.c: $(srcdir)/../common/sim-reason.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-reason.c $(ALL_CFLAGS)
|
||||
|
||||
sim-resume.o: sim-resume.c $(sim_main_headers) $(sim-assert_h) \
|
||||
sim-resume.o: $(srcdir)/../common/sim-resume.c $(sim_main_headers) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-resume.c: $(srcdir)/../common/sim-resume.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-resume.c $(ALL_CFLAGS)
|
||||
|
||||
sim-run.o: sim-run.c $(sim_main_headers) $(sim-assert_h) \
|
||||
sim-run.o: $(srcdir)/../common/sim-run.c $(sim_main_headers) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-run.c: $(srcdir)/../common/sim-run.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-run.c $(ALL_CFLAGS)
|
||||
|
||||
sim-stop.o: sim-stop.c $(sim_main_headers) $(sim-assert_h) \
|
||||
sim-stop.o: $(srcdir)/../common/sim-stop.c $(sim_main_headers) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
sim-stop.c: $(srcdir)/../common/sim-stop.c
|
||||
rm -f $@ tmp-$@
|
||||
echo "# 1 \"$(srcdir)/../common/$@\"" > tmp-$@
|
||||
cat $(srcdir)/../common/$@ >> tmp-$@
|
||||
$(srcdir)/../../move-if-change tmp-$@ $@
|
||||
$(CC) -c $(srcdir)/../common/sim-stop.c $(ALL_CFLAGS)
|
||||
|
||||
sim-trace.o: $(srcdir)/../common/sim-trace.c $(sim_main_headers) \
|
||||
$(sim-options_h) $(sim-io_h) $(SIM_EXTRA_DEPS)
|
||||
|
@ -343,6 +298,10 @@ sim-utils.o: $(srcdir)/../common/sim-utils.c $(sim_main_headers) \
|
|||
$(SIM_EXTRA_DEPS)
|
||||
$(CC) -c $(srcdir)/../common/sim-utils.c $(ALL_CFLAGS)
|
||||
|
||||
sim-watch.o: $(srcdir)/../common/sim-watch.c $(sim_main_headers) \
|
||||
$(SIM_EXTRA_DEPS)
|
||||
$(CC) -c $(srcdir)/../common/sim-watch.c $(ALL_CFLAGS)
|
||||
|
||||
sim-load.o: $(srcdir)/../common/sim-load.c
|
||||
$(CC) -c $(srcdir)/../common/sim-load.c $(ALL_CFLAGS)
|
||||
|
||||
|
|
|
@ -132,45 +132,15 @@ config_floating_point_to_a (int floating_point)
|
|||
|
||||
|
||||
SIM_RC
|
||||
sim_config (SIM_DESC sd,
|
||||
struct _bfd *abfd)
|
||||
sim_config (SIM_DESC sd)
|
||||
{
|
||||
int prefered_target_byte_order;
|
||||
|
||||
/* clone the bfd struct (or open prog_name directly) */
|
||||
{
|
||||
const char *prog_name;
|
||||
if (STATE_PROG_ARGV (sd) == NULL)
|
||||
{
|
||||
if (abfd != NULL)
|
||||
prog_name = bfd_get_filename (abfd);
|
||||
else
|
||||
prog_name = NULL;
|
||||
}
|
||||
else
|
||||
prog_name = *STATE_PROG_ARGV (sd);
|
||||
if (prog_name != NULL)
|
||||
{
|
||||
abfd = bfd_openr (prog_name, 0);
|
||||
if (abfd == NULL)
|
||||
{
|
||||
sim_io_eprintf (sd, "%s: can't open \"%s\": %s\n",
|
||||
STATE_MY_NAME (sd),
|
||||
prog_name,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
STATE_PROG_BFD (sd) = abfd;
|
||||
}
|
||||
else
|
||||
STATE_PROG_BFD (sd) = NULL;
|
||||
}
|
||||
|
||||
/* extract all relevant information */
|
||||
if (abfd == NULL)
|
||||
if (STATE_PROG_BFD (sd) == NULL)
|
||||
prefered_target_byte_order = 0;
|
||||
else
|
||||
prefered_target_byte_order = (bfd_little_endian(abfd)
|
||||
prefered_target_byte_order = (bfd_little_endian(STATE_PROG_BFD (sd))
|
||||
? LITTLE_ENDIAN
|
||||
: BIG_ENDIAN);
|
||||
|
||||
|
@ -210,16 +180,16 @@ sim_config (SIM_DESC sd,
|
|||
/* verify the target byte order */
|
||||
if (CURRENT_TARGET_BYTE_ORDER == 0)
|
||||
{
|
||||
sim_io_eprintf (sd, "target byte order unspecified");
|
||||
sim_io_eprintf (sd, "Target byte order unspecified\n");
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
if (CURRENT_TARGET_BYTE_ORDER != current_target_byte_order)
|
||||
sim_io_eprintf (sd, "target (%s) and configured (%s) byte order in conflict",
|
||||
sim_io_eprintf (sd, "Target (%s) and configured (%s) byte order in conflict\n",
|
||||
config_byte_order_to_a (current_target_byte_order),
|
||||
config_byte_order_to_a (CURRENT_TARGET_BYTE_ORDER));
|
||||
if (prefered_target_byte_order != 0
|
||||
&& CURRENT_TARGET_BYTE_ORDER != prefered_target_byte_order)
|
||||
sim_io_eprintf (sd, "target (%s) and specified (%s) byte order in conflict",
|
||||
sim_io_eprintf (sd, "Target (%s) and specified (%s) byte order in conflict\n",
|
||||
config_byte_order_to_a (CURRENT_TARGET_BYTE_ORDER),
|
||||
config_byte_order_to_a (prefered_target_byte_order));
|
||||
|
||||
|
@ -233,12 +203,12 @@ sim_config (SIM_DESC sd,
|
|||
/* verify the stdio */
|
||||
if (CURRENT_STDIO == 0)
|
||||
{
|
||||
sim_io_eprintf (sd, "target standard IO unspecified");
|
||||
sim_io_eprintf (sd, "Target standard IO unspecified\n");
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
if (CURRENT_STDIO != current_stdio)
|
||||
{
|
||||
sim_io_eprintf (sd, "target (%s) and configured (%s) standard IO in conflict",
|
||||
sim_io_eprintf (sd, "Target (%s) and configured (%s) standard IO in conflict\n",
|
||||
config_stdio_to_a (CURRENT_STDIO),
|
||||
config_stdio_to_a (current_stdio));
|
||||
return SIM_RC_FAIL;
|
||||
|
@ -249,7 +219,7 @@ sim_config (SIM_DESC sd,
|
|||
if (WITH_TARGET_WORD_MSB != 0
|
||||
&& WITH_TARGET_WORD_MSB != (WITH_TARGET_WORD_BITSIZE - 1))
|
||||
{
|
||||
sim_io_eprintf (sd, "target bitsize (%d) contradicts target most significant bit (%d)",
|
||||
sim_io_eprintf (sd, "Target bitsize (%d) contradicts target most significant bit (%d)\n",
|
||||
WITH_TARGET_WORD_BITSIZE, WITH_TARGET_WORD_MSB);
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
|
@ -281,12 +251,12 @@ sim_config (SIM_DESC sd,
|
|||
/* verify the environment */
|
||||
if (CURRENT_ENVIRONMENT == 0)
|
||||
{
|
||||
sim_io_eprintf (sd, "target environment unspecified");
|
||||
sim_io_eprintf (sd, "Target environment unspecified\n");
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
if (CURRENT_ENVIRONMENT != current_environment)
|
||||
{
|
||||
sim_io_eprintf (sd, "target (%s) and configured (%s) environment in conflict",
|
||||
sim_io_eprintf (sd, "Target (%s) and configured (%s) environment in conflict\n",
|
||||
config_environment_to_a (CURRENT_ENVIRONMENT),
|
||||
config_environment_to_a (current_environment));
|
||||
return SIM_RC_FAIL;
|
||||
|
@ -310,12 +280,12 @@ sim_config (SIM_DESC sd,
|
|||
/* verify the alignment */
|
||||
if (CURRENT_ALIGNMENT == 0)
|
||||
{
|
||||
sim_io_eprintf (sd, "target alignment unspecified");
|
||||
sim_io_eprintf (sd, "Target alignment unspecified\n");
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
if (CURRENT_ALIGNMENT != current_alignment)
|
||||
{
|
||||
sim_io_eprintf (sd, "target (%s) and configured (%s) alignment in conflict",
|
||||
sim_io_eprintf (sd, "Target (%s) and configured (%s) alignment in conflict\n",
|
||||
config_alignment_to_a (CURRENT_ALIGNMENT),
|
||||
config_alignment_to_a (current_alignment));
|
||||
return SIM_RC_FAIL;
|
||||
|
@ -332,12 +302,12 @@ sim_config (SIM_DESC sd,
|
|||
/* verify the floating point */
|
||||
if (CURRENT_FLOATING_POINT == 0)
|
||||
{
|
||||
sim_io_eprintf (sd, "target floating-point unspecified");
|
||||
sim_io_eprintf (sd, "Target floating-point unspecified\n");
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
if (CURRENT_FLOATING_POINT != current_floating_point)
|
||||
{
|
||||
sim_io_eprintf (sd, "target (%s) and configured (%s) floating-point in conflict",
|
||||
sim_io_eprintf (sd, "Target (%s) and configured (%s) floating-point in conflict\n",
|
||||
config_alignment_to_a (CURRENT_FLOATING_POINT),
|
||||
config_alignment_to_a (current_floating_point));
|
||||
return SIM_RC_FAIL;
|
||||
|
|
|
@ -546,8 +546,7 @@ extern int current_stdio;
|
|||
/* complete/verify/print the simulator configuration */
|
||||
|
||||
extern SIM_RC sim_config
|
||||
(SIM_DESC sd,
|
||||
struct _bfd *abfd);
|
||||
(SIM_DESC sd);
|
||||
|
||||
|
||||
extern void print_sim_config (SIM_DESC sd);
|
||||
|
|
|
@ -119,9 +119,7 @@ char **
|
|||
sim_copy_argv (argv)
|
||||
char **argv;
|
||||
{
|
||||
int i;
|
||||
int argc;
|
||||
int len;
|
||||
char **copy;
|
||||
|
||||
if (argv == NULL)
|
||||
|
@ -149,16 +147,56 @@ sim_copy_argv (argv)
|
|||
return copy;
|
||||
}
|
||||
|
||||
/* Analyze a bfd and set various fields in the state struct. */
|
||||
/* Analyze a prog_name/prog_bfd and set various fields in the state
|
||||
struct. */
|
||||
|
||||
void
|
||||
sim_analyze_program (sd, prog_bfd)
|
||||
SIM_RC
|
||||
sim_analyze_program (sd, prog_name, prog_bfd)
|
||||
SIM_DESC sd;
|
||||
char *prog_name;
|
||||
bfd *prog_bfd;
|
||||
{
|
||||
asection *s;
|
||||
|
||||
SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
|
||||
|
||||
if (prog_bfd != NULL)
|
||||
{
|
||||
if (prog_bfd == STATE_PROG_BFD (sd))
|
||||
/* already analyzed */
|
||||
return SIM_RC_OK;
|
||||
else
|
||||
/* duplicate needed, save the name of the file to be re-opened */
|
||||
prog_name = bfd_get_filename (prog_bfd);
|
||||
}
|
||||
|
||||
/* do we need to duplicate anything? */
|
||||
if (prog_name == NULL)
|
||||
return SIM_RC_OK;
|
||||
|
||||
/* open a new copy of the prog_bfd */
|
||||
prog_bfd = bfd_openr (prog_name, 0);
|
||||
if (prog_bfd == NULL)
|
||||
{
|
||||
sim_io_eprintf (sd, "%s: can't open \"%s\": %s\n",
|
||||
STATE_MY_NAME (sd),
|
||||
prog_name,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
if (!bfd_check_format (prog_bfd, bfd_object))
|
||||
{
|
||||
sim_io_eprintf (sd, "%s: \"%s\" is not an object file: %s\n",
|
||||
STATE_MY_NAME (sd),
|
||||
prog_name,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
bfd_close (prog_bfd);
|
||||
return SIM_RC_FAIL;
|
||||
}
|
||||
|
||||
|
||||
/* update the sim structure */
|
||||
if (STATE_PROG_BFD (sd) != NULL)
|
||||
bfd_close (STATE_PROG_BFD (sd));
|
||||
STATE_PROG_BFD (sd) = prog_bfd;
|
||||
STATE_START_ADDR (sd) = bfd_get_start_address (prog_bfd);
|
||||
|
||||
|
@ -170,6 +208,8 @@ sim_analyze_program (sd, prog_bfd)
|
|||
STATE_TEXT_END (sd) = STATE_TEXT_START (sd) + bfd_section_size (prog_bfd, s);
|
||||
break;
|
||||
}
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
/* Simulator timing support. */
|
||||
|
|
70
sim/common/sim-utils.h
Normal file
70
sim/common/sim-utils.h
Normal file
|
@ -0,0 +1,70 @@
|
|||
/* Miscellaneous simulator utilities.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Support.
|
||||
|
||||
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.
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef SIM_UTILS_H
|
||||
#define SIM_UTILS_H
|
||||
|
||||
/* Memory management with an allocator that clears memory before use. */
|
||||
|
||||
void *zalloc (unsigned long size);
|
||||
|
||||
#define ZALLOC(TYPE) (TYPE*)zalloc(sizeof (TYPE))
|
||||
|
||||
void zfree(void*);
|
||||
|
||||
/* Turn VALUE into a string with commas. */
|
||||
char *sim_add_commas (char *, int, unsigned long);
|
||||
|
||||
/* Utilities for elapsed time reporting. */
|
||||
|
||||
/* Opaque type, known only inside sim_elapsed_time_foo fns. */
|
||||
typedef unsigned long SIM_ELAPSED_TIME;
|
||||
|
||||
/* Get reference point for future call to sim_time_elapsed. */
|
||||
SIM_ELAPSED_TIME sim_elapsed_time_get (void);
|
||||
|
||||
/* Elapsed time in milliseconds since START. */
|
||||
unsigned long sim_elapsed_time_since (SIM_ELAPSED_TIME start);
|
||||
|
||||
/* Utilities for manipulating the load image. */
|
||||
|
||||
SIM_RC sim_analyze_program (SIM_DESC sd, char *prog_name,
|
||||
struct _bfd *prog_bfd);
|
||||
|
||||
char **sim_copy_argv (char **argv);
|
||||
|
||||
/* Load program PROG into the simulator.
|
||||
If PROG_BFD is non-NULL, the file has already been opened.
|
||||
If VERBOSE_P is non-zero statistics are printed of each loaded section
|
||||
and the transfer rate (for consistency with gdb).
|
||||
If this fails an error message is printed and NULL is returned.
|
||||
If it succeeds the bfd is returned. */
|
||||
|
||||
struct _bfd *sim_load_file (SIM_DESC sd, const char *myname,
|
||||
host_callback *callback, char *prog,
|
||||
struct _bfd *prog_bfd, int verbose_p);
|
||||
|
||||
/* These are defined in callback.c as cover functions to the vprintf
|
||||
callbacks. */
|
||||
|
||||
void sim_cb_printf (host_callback *, const char *, ...);
|
||||
void sim_cb_eprintf (host_callback *, const char *, ...);
|
||||
|
||||
#endif
|
|
@ -1,6 +1,10 @@
|
|||
Tue Aug 26 10:37:49 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
(start_address): Delete variable.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ enum _leftright { LEFT_FIRST, RIGHT_FIRST };
|
|||
|
||||
static char *myname;
|
||||
static SIM_OPEN_KIND sim_kind;
|
||||
static bfd_vma start_address;
|
||||
int d10v_debug;
|
||||
host_callback *d10v_callback;
|
||||
unsigned long ins_type_counters[ (int)INS_MAX ];
|
||||
|
@ -797,20 +796,26 @@ sim_info (sd, verbose)
|
|||
}
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (sd, argv, env)
|
||||
sim_create_inferior (sd, abfd, argv, env)
|
||||
SIM_DESC sd;
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **env;
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (d10v_debug)
|
||||
(*d10v_callback->printf_filtered) (d10v_callback, "sim_create_inferior: PC=0x%x\n", start_address);
|
||||
#endif
|
||||
bfd_vma start_address;
|
||||
|
||||
/* reset all state information */
|
||||
memset (&State.regs, 0, (int)&State.imem - (int)&State.regs[0]);
|
||||
|
||||
/* set PC */
|
||||
if (abfd != NULL)
|
||||
start_address = bfd_get_start_address (prog_bfd);
|
||||
else
|
||||
start_address = 0xffc0 << 2;
|
||||
#ifdef DEBUG
|
||||
if (d10v_debug)
|
||||
(*d10v_callback->printf_filtered) (d10v_callback, "sim_create_inferior: PC=0x%lx\n", (long) start_address);
|
||||
#endif
|
||||
PC = start_address >> 2;
|
||||
|
||||
/* cpu resets imap0 to 0 and imap1 to 0x7f, but D10V-EVA board */
|
||||
|
@ -924,7 +929,6 @@ sim_load (sd, prog, abfd, from_tty)
|
|||
sim_kind == SIM_OPEN_DEBUG);
|
||||
if (prog_bfd == NULL)
|
||||
return SIM_RC_FAIL;
|
||||
start_address = bfd_get_start_address (prog_bfd);
|
||||
prog_bfd_was_opened_p = abfd == NULL;
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
Tue Aug 26 10:38:20 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* float.c (__setfpucw): Compile on any i386 target. Not just NT.
|
||||
|
||||
* interf.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument. Initialize PC from ABFD
|
||||
argument.
|
||||
(sim_load): Don't save start address.
|
||||
(start_address): Delete variable.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
Tue Aug 26 10:38:43 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* compile.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
(sim_open, sim_load, set_h8300h): Add fixme explaining why much of
|
||||
the sim_load code should be moved to sim_open.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -2009,6 +2009,9 @@ void
|
|||
set_h8300h (flag)
|
||||
int flag;
|
||||
{
|
||||
/* FIXME: Much of the code in sim_load can be moved to sim_open.
|
||||
This function being replaced by a sim_open:ARGV configuration
|
||||
option */
|
||||
h8300hmode = flag;
|
||||
}
|
||||
|
||||
|
@ -2019,6 +2022,8 @@ sim_open (kind, ptr, abfd, argv)
|
|||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
{
|
||||
/* FIXME: Much of the code in sim_load can be moved here */
|
||||
|
||||
sim_kind = kind;
|
||||
myname = argv[0];
|
||||
sim_callback = ptr;
|
||||
|
@ -2045,6 +2050,9 @@ sim_load (sd, prog, abfd, from_tty)
|
|||
{
|
||||
bfd *prog_bfd;
|
||||
|
||||
/* FIXME: The code below that sets a specific variant of the h8/300
|
||||
being simulated should be moved to sim_open(). */
|
||||
|
||||
/* See if the file is for the h8/300 or h8/300h. */
|
||||
/* ??? This may not be the most efficient way. The z8k simulator
|
||||
does this via a different mechanism (INIT_EXTRA_SYMTAB_INFO). */
|
||||
|
@ -2109,7 +2117,6 @@ sim_load (sd, prog, abfd, from_tty)
|
|||
return SIM_RC_FAIL;
|
||||
}
|
||||
|
||||
cpu.pc = bfd_get_start_address (prog_bfd);
|
||||
/* Close the bfd if we opened it. */
|
||||
if (abfd == NULL && prog_bfd != NULL)
|
||||
bfd_close (prog_bfd);
|
||||
|
@ -2117,11 +2124,16 @@ sim_load (sd, prog, abfd, from_tty)
|
|||
}
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (sd, argv, env)
|
||||
sim_create_inferior (sd, abfd, argv, env)
|
||||
SIM_DESC sd;
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **env;
|
||||
{
|
||||
if (abfd != NULL)
|
||||
cpu.pc = bfd_get_start_address (abfd);
|
||||
else
|
||||
cpu.pc = 0;
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
Tue Aug 26 10:39:42 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* sim-if.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
(sim_load): Delete, use sim-hload.c instead.
|
||||
|
||||
* Makefile.in (SIM_OBJS): Add sim-hload.o module.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
86
sim/m32r/Makefile.in
Normal file
86
sim/m32r/Makefile.in
Normal file
|
@ -0,0 +1,86 @@
|
|||
# Makefile template for Configure for the m32r simulator
|
||||
# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
# Contributed by Cygnus Support.
|
||||
#
|
||||
# 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 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.
|
||||
#
|
||||
# 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.
|
||||
|
||||
## COMMON_PRE_CONFIG_FRAG
|
||||
|
||||
SIM_OBJS = sim-if.o m32r.o mainloop.o \
|
||||
decode.o extract.o semantics.o seman-cache.o model.o \
|
||||
sim-io.o sim-utils.o sim-load.o sim-abort.o sim-watch.o \
|
||||
sim-module.o sim-options.o sim-trace.o sim-profile.o sim-model.o \
|
||||
sim-core.o sim-events.o sim-endian.o sim-bits.o sim-config.o \
|
||||
sim-hload.o \
|
||||
cgen-utils.o cgen-trace.o cgen-scache.o
|
||||
|
||||
# Extra headers included by sim-main.h.
|
||||
SIM_EXTRA_DEPS = \
|
||||
$(srcdir)/../common/cgen-types.h \
|
||||
$(srcdir)/../common/cgen-sim.h \
|
||||
$(srcdir)/../common/cgen-trace.h \
|
||||
arch-defs.h
|
||||
|
||||
SIM_ENDIAN = @sim_endian@
|
||||
SIM_HOSTENDIAN = @sim_hostendian@
|
||||
SIM_SCACHE = @sim_scache@
|
||||
SIM_DEFAULT_MODEL = @sim_default_model@
|
||||
SIM_EXTRA_CFLAGS = \
|
||||
$(SIM_ENDIAN) $(SIM_HOSTENDIAN) \
|
||||
$(SIM_SCACHE) $(SIM_DEFAULT_MODEL)
|
||||
|
||||
SIM_RUN_OBJS = nrun.o
|
||||
SIM_EXTRA_CLEAN = m32r-clean
|
||||
|
||||
## COMMON_POST_CONFIG_FRAG
|
||||
|
||||
CPU = m32r
|
||||
MAIN_INCLUDE_DEPS = \
|
||||
sim-main.h \
|
||||
$(srcdir)/../common/sim-config.h \
|
||||
$(srcdir)/../common/sim-base.h \
|
||||
$(srcdir)/../common/sim-basics.h \
|
||||
$(srcdir)/../common/sim-module.h \
|
||||
$(srcdir)/../common/sim-trace.h \
|
||||
$(srcdir)/../common/sim-profile.h \
|
||||
tconfig.h
|
||||
INCLUDE_DEPS = $(MAIN_INCLUDE_DEPS) $(SIM_EXTRA_DEPS) cpu-sim.h
|
||||
OPS_INCLUDE_DEPS = mem-ops.h sem-ops.h
|
||||
|
||||
sim-if.o: sim-if.c $(INCLUDE_DEPS) $(srcdir)/../common/sim-core.h
|
||||
m32r.o: m32r.c $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS)
|
||||
|
||||
# FIXME: Use of `mono' is wip.
|
||||
mainloop.c: $(srcdir)/../common/genmloop.sh mainloop.in
|
||||
rm -f mainloop.c
|
||||
$(SHELL) $(srcdir)/../common/genmloop.sh mono $(CPU) $(srcdir)/mainloop.in >mainloop.c
|
||||
mainloop.o: mainloop.c sem-switch.c $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS) \
|
||||
$(srcdir)/../common/cgen-scache.h
|
||||
|
||||
decode.o: decode.c decode.h $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS) cpu-opc.h
|
||||
extract.o: extract.c decode.h $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS)
|
||||
semantics.o: semantics.c decode.h $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS)
|
||||
model.o: model.c $(INCLUDE_DEPS) cpu-opc.h
|
||||
|
||||
# wip
|
||||
#extr-cache.o: extract.c $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS)
|
||||
# $(CC) -c $(srcdir)/extract.c -o extr-cache.o -DSCACHE_P $(ALL_CFLAGS)
|
||||
seman-cache.o: semantics.c decode.h $(INCLUDE_DEPS) $(OPS_INCLUDE_DEPS)
|
||||
$(CC) -c $(srcdir)/semantics.c -o seman-cache.o -DSCACHE_P $(ALL_CFLAGS)
|
||||
|
||||
m32r-clean:
|
||||
rm -f mainloop.c
|
|
@ -100,31 +100,9 @@ sim_close (sd, quitting)
|
|||
}
|
||||
|
||||
SIM_RC
|
||||
sim_load (sd, prog, abfd, from_tty)
|
||||
SIM_DESC sd;
|
||||
char *prog;
|
||||
bfd *abfd;
|
||||
int from_tty;
|
||||
{
|
||||
extern bfd *sim_load_file (); /* ??? Don't know where this should live. */
|
||||
bfd *prog_bfd;
|
||||
|
||||
prog_bfd = sim_load_file (sd, STATE_MY_NAME (sd),
|
||||
STATE_CALLBACK (sd),
|
||||
prog,
|
||||
/* pass NULL for abfd, we always open our own */
|
||||
NULL,
|
||||
STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG);
|
||||
if (prog_bfd == NULL)
|
||||
return SIM_RC_FAIL;
|
||||
sim_analyze_program (sd, prog_bfd);
|
||||
STATE_CPU_CPU (sd, 0)->pc = STATE_START_ADDR (sd);
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (sd, argv, envp)
|
||||
sim_create_inferior (sd, abfd, argv, envp)
|
||||
SIM_DESC sd;
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **envp;
|
||||
{
|
||||
|
@ -132,6 +110,10 @@ sim_create_inferior (sd, argv, envp)
|
|||
STATE_ARGV (sd) = sim_copy_argv (argv);
|
||||
STATE_ENVP (sd) = sim_copy_argv (envp);
|
||||
#endif
|
||||
if (abfd != NULL)
|
||||
STATE_CPU_CPU (sd, 0)->pc = bfd_get_start_address (abfd);
|
||||
else
|
||||
STATE_CPU_CPU (sd, 0)->pc = 0;
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,17 @@
|
|||
Wed Aug 27 14:12:27 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_open): Add call to sim_analyze_program, update
|
||||
call to sim_config.
|
||||
|
||||
Tue Aug 26 10:40:07 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument. Set PC from same.
|
||||
(sim_load): Move code initializing trap handlers from here.
|
||||
(sim_open): To here.
|
||||
(sim_load): Delete, use sim-hload.c.
|
||||
|
||||
* Makefile.in (SIM_OBJS): Add sim-hload.o module.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -3,15 +3,52 @@
|
|||
|
||||
## COMMON_PRE_CONFIG_FRAG
|
||||
|
||||
SIM_OBJS = interp.o
|
||||
srcdir=@srcdir@
|
||||
srcroot=$(srcdir)/../../
|
||||
|
||||
SIM_OBJS = interp.o \
|
||||
sim-load.o \
|
||||
sim-utils.o \
|
||||
sim-hload.o \
|
||||
sim-io.o \
|
||||
sim-config.o \
|
||||
sim-endian.o \
|
||||
sim-engine.o \
|
||||
sim-stop.o \
|
||||
sim-resume.o \
|
||||
sim-reason.o \
|
||||
sim-events.o \
|
||||
sim-module.o \
|
||||
sim-trace.o \
|
||||
sim-options.o \
|
||||
sim-core.o \
|
||||
sim-watch.o
|
||||
|
||||
# List of flags to always pass to $(CC).
|
||||
SIM_WARNINGS=@sim_warnings@
|
||||
SIM_ENDIAN=@sim_endian@
|
||||
SIM_HOSTENDIAN=@sim_hostendian@
|
||||
SIM_INLINE=@sim_inline@
|
||||
|
||||
# FIXME: Hack to find syscall.h? Better support for syscall.h
|
||||
# is in progress.
|
||||
SIM_EXTRA_CFLAGS = -I$(srcdir)/../../newlib/libc/sys/idt
|
||||
SIM_EXTRA_CFLAGS = \
|
||||
$(SIM_WARNINGS) \
|
||||
$(SIM_ENDIAN) \
|
||||
$(SIM_HOSTENDIAN) \
|
||||
$(SIM_INLINE) \
|
||||
-I$(srcdir)/../../newlib/libc/sys/idt
|
||||
|
||||
SIM_EXTRA_CLEAN = clean-extra
|
||||
|
||||
# List of main object files for `run'.
|
||||
SIM_RUN_OBJS = nrun.o
|
||||
|
||||
|
||||
|
||||
## COMMON_POST_CONFIG_FRAG
|
||||
|
||||
interp.o: interp.c engine.c support.h config.h
|
||||
interp.o: $(srcdir)/interp.c engine.c $(srcdir)/support.h config.h
|
||||
|
||||
engine.c: gencode
|
||||
./gencode @SIMCONF@ > $@
|
||||
|
|
|
@ -820,9 +820,20 @@ sim_open (kind, cb, abfd, argv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* 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)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Configure/verify the target byte order and other runtime
|
||||
configuration options */
|
||||
if (sim_config (sd, abfd) != SIM_RC_OK)
|
||||
if (sim_config (sd) != SIM_RC_OK)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
|
@ -921,6 +932,82 @@ sim_open (kind, cb, abfd, argv)
|
|||
open_trace();
|
||||
#endif /* TRACE */
|
||||
|
||||
/* Write the monitor trap address handlers into the monitor (eeprom)
|
||||
address space. This can only be done once the target endianness
|
||||
has been determined. */
|
||||
{
|
||||
unsigned loop;
|
||||
/* Entry into the IDT monitor is via fixed address vectors, and
|
||||
not using machine instructions. To avoid clashing with use of
|
||||
the MIPS TRAP system, we place our own (simulator specific)
|
||||
"undefined" instructions into the relevant vector slots. */
|
||||
for (loop = 0; (loop < monitor_size); loop += 4) {
|
||||
uword64 vaddr = (monitor_base + loop);
|
||||
uword64 paddr;
|
||||
int cca;
|
||||
if (AddressTranslation(vaddr, isDATA, isSTORE, &paddr, &cca, isTARGET, isRAW))
|
||||
StoreMemory(cca, AccessLength_WORD,
|
||||
(RSVD_INSTRUCTION | (((loop >> 2) & RSVD_INSTRUCTION_ARG_MASK) << RSVD_INSTRUCTION_ARG_SHIFT)),
|
||||
0, paddr, vaddr, isRAW);
|
||||
}
|
||||
/* The PMON monitor uses the same address space, but rather than
|
||||
branching into it the address of a routine is loaded. We can
|
||||
cheat for the moment, and direct the PMON routine to IDT style
|
||||
instructions within the monitor space. This relies on the IDT
|
||||
monitor not using the locations from 0xBFC00500 onwards as its
|
||||
entry points.*/
|
||||
for (loop = 0; (loop < 24); loop++)
|
||||
{
|
||||
uword64 vaddr = (monitor_base + 0x500 + (loop * 4));
|
||||
uword64 paddr;
|
||||
int cca;
|
||||
unsigned int value = ((0x500 - 8) / 8); /* default UNDEFINED reason code */
|
||||
switch (loop)
|
||||
{
|
||||
case 0: /* read */
|
||||
value = 7;
|
||||
break;
|
||||
|
||||
case 1: /* write */
|
||||
value = 8;
|
||||
break;
|
||||
|
||||
case 2: /* open */
|
||||
value = 6;
|
||||
break;
|
||||
|
||||
case 3: /* close */
|
||||
value = 10;
|
||||
break;
|
||||
|
||||
case 5: /* printf */
|
||||
value = ((0x500 - 16) / 8); /* not an IDT reason code */
|
||||
break;
|
||||
|
||||
case 8: /* cliexit */
|
||||
value = 17;
|
||||
break;
|
||||
|
||||
case 11: /* flush_cache */
|
||||
value = 28;
|
||||
break;
|
||||
}
|
||||
/* FIXME - should monitor_base be SIM_ADDR?? */
|
||||
value = ((unsigned int)monitor_base + (value * 8));
|
||||
if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&cca,isTARGET,isRAW))
|
||||
StoreMemory(cca,AccessLength_WORD,value,0,paddr,vaddr,isRAW);
|
||||
else
|
||||
sim_error("Failed to write to monitor space 0x%s",pr_addr(vaddr));
|
||||
|
||||
/* The LSI MiniRISC PMON has its vectors at 0x200, not 0x500. */
|
||||
vaddr -= 0x300;
|
||||
if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&cca,isTARGET,isRAW))
|
||||
StoreMemory(cca,AccessLength_WORD,value,0,paddr,vaddr,isRAW);
|
||||
else
|
||||
sim_error("Failed to write to monitor space 0x%s",pr_addr(vaddr));
|
||||
}
|
||||
}
|
||||
|
||||
return sd;
|
||||
}
|
||||
|
||||
|
@ -1308,108 +1395,11 @@ sim_info (sd,verbose)
|
|||
}
|
||||
}
|
||||
|
||||
SIM_RC
|
||||
sim_load (sd,prog,abfd,from_tty)
|
||||
SIM_DESC sd;
|
||||
char *prog;
|
||||
bfd *abfd;
|
||||
int from_tty;
|
||||
{
|
||||
bfd *prog_bfd;
|
||||
|
||||
prog_bfd = sim_load_file (sd,
|
||||
STATE_MY_NAME (sd),
|
||||
callback,
|
||||
prog,
|
||||
/* pass NULL for abfd, we always open our own */
|
||||
NULL,
|
||||
STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG);
|
||||
if (prog_bfd == NULL)
|
||||
return SIM_RC_FAIL;
|
||||
sim_analyze_program (sd, prog_bfd);
|
||||
|
||||
/* (re) Write the monitor trap address handlers into the monitor
|
||||
(eeprom) address space. This can only be done once the target
|
||||
endianness has been determined. */
|
||||
{
|
||||
unsigned loop;
|
||||
/* Entry into the IDT monitor is via fixed address vectors, and
|
||||
not using machine instructions. To avoid clashing with use of
|
||||
the MIPS TRAP system, we place our own (simulator specific)
|
||||
"undefined" instructions into the relevant vector slots. */
|
||||
for (loop = 0; (loop < monitor_size); loop += 4) {
|
||||
uword64 vaddr = (monitor_base + loop);
|
||||
uword64 paddr;
|
||||
int cca;
|
||||
if (AddressTranslation(vaddr, isDATA, isSTORE, &paddr, &cca, isTARGET, isRAW))
|
||||
StoreMemory(cca, AccessLength_WORD,
|
||||
(RSVD_INSTRUCTION | (((loop >> 2) & RSVD_INSTRUCTION_ARG_MASK) << RSVD_INSTRUCTION_ARG_SHIFT)),
|
||||
0, paddr, vaddr, isRAW);
|
||||
}
|
||||
/* The PMON monitor uses the same address space, but rather than
|
||||
branching into it the address of a routine is loaded. We can
|
||||
cheat for the moment, and direct the PMON routine to IDT style
|
||||
instructions within the monitor space. This relies on the IDT
|
||||
monitor not using the locations from 0xBFC00500 onwards as its
|
||||
entry points.*/
|
||||
for (loop = 0; (loop < 24); loop++)
|
||||
{
|
||||
uword64 vaddr = (monitor_base + 0x500 + (loop * 4));
|
||||
uword64 paddr;
|
||||
int cca;
|
||||
unsigned int value = ((0x500 - 8) / 8); /* default UNDEFINED reason code */
|
||||
switch (loop)
|
||||
{
|
||||
case 0: /* read */
|
||||
value = 7;
|
||||
break;
|
||||
|
||||
case 1: /* write */
|
||||
value = 8;
|
||||
break;
|
||||
|
||||
case 2: /* open */
|
||||
value = 6;
|
||||
break;
|
||||
|
||||
case 3: /* close */
|
||||
value = 10;
|
||||
break;
|
||||
|
||||
case 5: /* printf */
|
||||
value = ((0x500 - 16) / 8); /* not an IDT reason code */
|
||||
break;
|
||||
|
||||
case 8: /* cliexit */
|
||||
value = 17;
|
||||
break;
|
||||
|
||||
case 11: /* flush_cache */
|
||||
value = 28;
|
||||
break;
|
||||
}
|
||||
/* FIXME - should monitor_base be SIM_ADDR?? */
|
||||
value = ((unsigned int)monitor_base + (value * 8));
|
||||
if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&cca,isTARGET,isRAW))
|
||||
StoreMemory(cca,AccessLength_WORD,value,0,paddr,vaddr,isRAW);
|
||||
else
|
||||
sim_error("Failed to write to monitor space 0x%s",pr_addr(vaddr));
|
||||
|
||||
/* The LSI MiniRISC PMON has its vectors at 0x200, not 0x500. */
|
||||
vaddr -= 0x300;
|
||||
if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&cca,isTARGET,isRAW))
|
||||
StoreMemory(cca,AccessLength_WORD,value,0,paddr,vaddr,isRAW);
|
||||
else
|
||||
sim_error("Failed to write to monitor space 0x%s",pr_addr(vaddr));
|
||||
}
|
||||
}
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (sd, argv,env)
|
||||
sim_create_inferior (sd, abfd, argv,env)
|
||||
SIM_DESC sd;
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **env;
|
||||
{
|
||||
|
@ -1426,10 +1416,13 @@ sim_create_inferior (sd, argv,env)
|
|||
patterns (e.g. simulating ROM monitors). */
|
||||
|
||||
#if 1
|
||||
PC = (uword64) STATE_START_ADDR(sd);
|
||||
if (abfd != NULL)
|
||||
PC = (unsigned64) bfd_get_start_address(abfd);
|
||||
else
|
||||
PC = 0; /* ???? */
|
||||
#else
|
||||
/* TODO: Sort this properly. SIM_ADDR may already be a 64bit value: */
|
||||
PC = SIGNEXTEND(bfd_get_start_address(prog_bfd),32);
|
||||
PC = SIGNEXTEND(bfd_get_start_address(abfd),32);
|
||||
#endif
|
||||
|
||||
/* Prepare to execute the program to be simulated */
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
Tue Aug 26 10:41:07 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -11,6 +11,10 @@ Wed Aug 27 10:15:48 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
|||
Tue Aug 26 10:41:35 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* sim_calls.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(entry_point): Delete variable.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
|
||||
Mon Aug 25 16:17:06 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -53,10 +53,6 @@ static device *root_device;
|
|||
static const char *register_names[] = REGISTER_NAMES;
|
||||
static host_callback *callbacks;
|
||||
|
||||
/* For communication between sim_load and sim_create_inferior.
|
||||
This can be made to go away, please do. */
|
||||
static unsigned_word entry_point;
|
||||
|
||||
SIM_DESC
|
||||
sim_open (SIM_OPEN_KIND kind,
|
||||
host_callback *callback,
|
||||
|
@ -114,9 +110,7 @@ sim_load (SIM_DESC sd, char *prog, bfd *abfd, int from_tty)
|
|||
psim_init(simulator);
|
||||
|
||||
/* get the start address */
|
||||
if (abfd != NULL)
|
||||
entry_point = bfd_get_start_address (abfd);
|
||||
else
|
||||
if (abfd == NULL)
|
||||
{
|
||||
abfd = bfd_openr (argv[0], 0);
|
||||
if (abfd == NULL)
|
||||
|
@ -129,7 +123,6 @@ sim_load (SIM_DESC sd, char *prog, bfd *abfd, int from_tty)
|
|||
error ("psim: \"%s\" is not an object file: %s\n",
|
||||
argv[0], errmsg);
|
||||
}
|
||||
entry_point = bfd_get_start_address (abfd);
|
||||
bfd_close (abfd);
|
||||
}
|
||||
|
||||
|
@ -199,10 +192,18 @@ sim_info (SIM_DESC sd, int verbose)
|
|||
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (SIM_DESC sd, char **argv, char **envp)
|
||||
sim_create_inferior (SIM_DESC sd,
|
||||
struct _bfd *abfd,
|
||||
char **argv,
|
||||
char **envp)
|
||||
{
|
||||
unsigned_word entry_point;
|
||||
TRACE(trace_gdb, ("sim_create_inferior(start_address=0x%x, ...)\n",
|
||||
entry_point));
|
||||
if (abfd != NULL)
|
||||
entry_point = bfd_get_start_address (abfd);
|
||||
else
|
||||
entry_point = 0xfff00000; /* ??? */
|
||||
|
||||
psim_init(simulator);
|
||||
psim_stack(simulator, argv, envp);
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
Tue Aug 26 10:41:55 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -1242,18 +1242,22 @@ sim_load (sd, prog, abfd, from_tty)
|
|||
sim_kind == SIM_OPEN_DEBUG);
|
||||
if (prog_bfd == NULL)
|
||||
return SIM_RC_FAIL;
|
||||
saved_state.asregs.pc = bfd_get_start_address (prog_bfd);
|
||||
if (abfd == NULL)
|
||||
bfd_close (prog_bfd);
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (sd, argv, env)
|
||||
sim_create_inferior (sd, abfd, argv, env)
|
||||
SIM_DESC sd;
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **env;
|
||||
{
|
||||
if (abfd != NULL)
|
||||
saved_state.asregs.pc = bfd_get_start_address (abfd);
|
||||
else
|
||||
saved_state.asregs.pc = 0;
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
Tue Aug 26 10:42:13 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
Wed Aug 27 13:41:24 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* sim-calls.c (sim_open): Add call to sim_analyze_program, update
|
||||
call to sim_config.
|
||||
|
||||
* sim-calls.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument. Initialize PC from ABFD
|
||||
and not SD.
|
||||
(sim_load): Delete, use sim-hload.c.
|
||||
|
||||
* Makefile.in (SIM_OBJS): Add sim-hload.o module.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ SIM_OBJS = sim-endian.o sim-bits.o sim-config.o \
|
|||
sim-calls.o \
|
||||
sim-events.o \
|
||||
sim-core.o \
|
||||
sim-hload.o \
|
||||
sim-io.o \
|
||||
sim-utils.o \
|
||||
sim-load.o \
|
||||
|
|
|
@ -74,8 +74,19 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* establish the simulator configuration */
|
||||
if (sim_config (sd, abfd) != SIM_RC_OK)
|
||||
/* 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)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* establish any remaining configuration options */
|
||||
if (sim_config (sd) != SIM_RC_OK)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
|
@ -126,24 +137,6 @@ sim_close (SIM_DESC sd, int quitting)
|
|||
}
|
||||
|
||||
|
||||
SIM_RC
|
||||
sim_load (SIM_DESC sd, char *prog, bfd *abfd, int from_tty)
|
||||
{
|
||||
bfd *prog_bfd;
|
||||
|
||||
prog_bfd = sim_load_file (sd, STATE_MY_NAME (sd),
|
||||
STATE_CALLBACK (sd),
|
||||
prog,
|
||||
/* pass NULL for abfd, we always open our own */
|
||||
NULL,
|
||||
STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG);
|
||||
if (prog_bfd == NULL)
|
||||
return SIM_RC_FAIL;
|
||||
sim_analyze_program (sd, prog_bfd);
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
sim_read (SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)
|
||||
{
|
||||
|
@ -217,11 +210,15 @@ sim_info (SIM_DESC sd, int verbose)
|
|||
|
||||
SIM_RC
|
||||
sim_create_inferior (SIM_DESC sd,
|
||||
struct _bfd *abfd,
|
||||
char **argv,
|
||||
char **envp)
|
||||
{
|
||||
STATE_CPU (sd, 0)->cia.ip = STATE_START_ADDR(sd);
|
||||
STATE_CPU (sd, 0)->cia.dp = (STATE_START_ADDR(sd)
|
||||
if (abfd != NULL)
|
||||
STATE_CPU (sd, 0)->cia.ip = bfd_get_start_address (abfd);
|
||||
else
|
||||
STATE_CPU (sd, 0)->cia.ip = 0;
|
||||
STATE_CPU (sd, 0)->cia.dp = (STATE_CPU (sd, 0)->cia.ip
|
||||
+ sizeof (instruction_word));
|
||||
STATE_CPU (sd, 0)->cr[IE_CR] |= IE_CR_IE;
|
||||
STATE_CPU (sd, 0)->reg[1] = TIC80_MEM_START + TIC80_MEM_SIZE - 16;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
Tue Aug 26 10:42:38 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument.
|
||||
(sim_load): Move setting of PC from here.
|
||||
(sim_create_inferior): To here.
|
||||
|
||||
Mon Aug 25 17:50:22 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -663,11 +663,16 @@ sim_info (sd, verbose)
|
|||
}
|
||||
|
||||
SIM_RC
|
||||
sim_create_inferior (sd, argv, env)
|
||||
sim_create_inferior (sd, abfd, argv, env)
|
||||
SIM_DESC sd;
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **env;
|
||||
{
|
||||
if (abfd == NULL)
|
||||
PC = bfd_get_start_address (prog_bfd);
|
||||
else
|
||||
PC = 0; /* ??? */
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
@ -917,7 +922,6 @@ sim_load (sd, prog, abfd, from_tty)
|
|||
sim_kind == SIM_OPEN_DEBUG);
|
||||
if (prog_bfd == NULL)
|
||||
return SIM_RC_FAIL;
|
||||
PC = bfd_get_start_address (prog_bfd);
|
||||
prog_bfd_was_opened_p = abfd == NULL;
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
Tue Aug 26 10:43:11 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* interp.c (sim_kill): Delete.
|
||||
(sim_create_inferior): Add ABFD argument. Set PC from same.
|
||||
|
||||
Mon Aug 25 16:34:33 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -360,14 +360,18 @@ sim_load (prog, from_tty)
|
|||
|
||||
|
||||
void
|
||||
sim_create_inferior (start_address, argv, env)
|
||||
SIM_ADDR start_address;
|
||||
sim_create_inferior (abfd, argv, env)
|
||||
struct _bfd *abfd;
|
||||
char **argv;
|
||||
char **env;
|
||||
{
|
||||
/* ??? We assume this is a 4 byte quantity. */
|
||||
SIM_ADDR start_address;
|
||||
int pc;
|
||||
|
||||
if (abfd != NULL)
|
||||
start_address = bfd_get_start_address (abfd);
|
||||
else
|
||||
start_address = 0; /*??*/
|
||||
/* ??? We assume this is a 4 byte quantity. */
|
||||
pc = start_address;
|
||||
sim_store_register (16, (unsigned char *) &pc);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue