aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>1999-07-19 23:30:11 +0000
committerJason Molenda <jmolenda@apple.com>1999-07-19 23:30:11 +0000
commitadf40b2e16832f7382ee79e498d43a70ad22e305 (patch)
tree933de2a465a4003b9016471a466079459693ae3e /sim
parentdc9e099fc0eced486ae2b49455c9da113c11f4ff (diff)
downloadgdb-adf40b2e16832f7382ee79e498d43a70ad22e305.zip
gdb-adf40b2e16832f7382ee79e498d43a70ad22e305.tar.gz
gdb-adf40b2e16832f7382ee79e498d43a70ad22e305.tar.bz2
import gdb-1999-07-19 snapshot
Diffstat (limited to 'sim')
-rw-r--r--sim/common/ChangeLog10
-rw-r--r--sim/common/Makefile.in4
-rw-r--r--sim/common/cgen-mem.h104
-rw-r--r--sim/common/cgen-utils.c35
-rw-r--r--sim/mips/ChangeLog15
-rw-r--r--sim/mips/interp.c242
-rw-r--r--sim/mn10300/ChangeLog4
-rw-r--r--sim/mn10300/interp.c8
-rw-r--r--sim/testsuite/ChangeLog10
9 files changed, 329 insertions, 103 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 3c6a9f0..bc2bb01 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,13 @@
+Fri Jul 16 14:47:53 1999 Dave Brolley <brolley@cygnus.com>
+
+ * cgen-utils.c (RORSI): New function.
+ (ROLSI): New function.
+
+1999-07-14 Doug Evans <devans@casey.cygnus.com>
+
+ * Makefile.in (TAGS): Tweak TAGS regex.
+ * cgen-mem.h (*): Add TAGS markers.
+
Sun Jul 11 23:47:20 1999 Andrew Cagney <cagney@b1.cygnus.com>
* sim-resume.c (sim_resume): Ensure that the siggnal [sic] is only
diff --git a/sim/common/Makefile.in b/sim/common/Makefile.in
index dd7c5e0..6428082 100644
--- a/sim/common/Makefile.in
+++ b/sim/common/Makefile.in
@@ -103,8 +103,8 @@ tags etags: TAGS
# And the sim-n-foo.h files create functions that can't be found either.
TAGS: force
cd $(srcdir) && \
- etags --regex '/^\([a-z_]+\) (/\1/' --regex '/^\/[*] TAGS: .*/' \
- *.[ch]
+ etags --regex '/^\([a-z_]+\) (/\1/' --regex '/^.*\/[*] TAGS: .*/' \
+ *.c *.h
clean:
rm -f *.[oa] *~ core
diff --git a/sim/common/cgen-mem.h b/sim/common/cgen-mem.h
index b424bba..186adc6 100644
--- a/sim/common/cgen-mem.h
+++ b/sim/common/cgen-mem.h
@@ -47,14 +47,14 @@ XCONCAT2 (GETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a) \
extern mode XCONCAT2 (GETMEM,mode) (SIM_CPU *, IADDR, ADDR);
#endif
-DECLARE_GETMEM (QI, 1)
-DECLARE_GETMEM (UQI, 1)
-DECLARE_GETMEM (HI, 2)
-DECLARE_GETMEM (UHI, 2)
-DECLARE_GETMEM (SI, 4)
-DECLARE_GETMEM (USI, 4)
-DECLARE_GETMEM (DI, 8)
-DECLARE_GETMEM (UDI, 8)
+DECLARE_GETMEM (QI, 1) /* TAGS: GETMEMQI */
+DECLARE_GETMEM (UQI, 1) /* TAGS: GETMEMUQI */
+DECLARE_GETMEM (HI, 2) /* TAGS: GETMEMHI */
+DECLARE_GETMEM (UHI, 2) /* TAGS: GETMEMUHI */
+DECLARE_GETMEM (SI, 4) /* TAGS: GETMEMSI */
+DECLARE_GETMEM (USI, 4) /* TAGS: GETMEMUSI */
+DECLARE_GETMEM (DI, 8) /* TAGS: GETMEMDI */
+DECLARE_GETMEM (UDI, 8) /* TAGS: GETMEMUDI */
#undef DECLARE_GETMEM
@@ -74,14 +74,14 @@ XCONCAT2 (SETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a, mode val) \
extern void XCONCAT2 (SETMEM,mode) (SIM_CPU *, IADDR, ADDR, mode);
#endif
-DECLARE_SETMEM (QI, 1)
-DECLARE_SETMEM (UQI, 1)
-DECLARE_SETMEM (HI, 2)
-DECLARE_SETMEM (UHI, 2)
-DECLARE_SETMEM (SI, 4)
-DECLARE_SETMEM (USI, 4)
-DECLARE_SETMEM (DI, 8)
-DECLARE_SETMEM (UDI, 8)
+DECLARE_SETMEM (QI, 1) /* TAGS: SETMEMQI */
+DECLARE_SETMEM (UQI, 1) /* TAGS: SETMEMUQI */
+DECLARE_SETMEM (HI, 2) /* TAGS: SETMEMHI */
+DECLARE_SETMEM (UHI, 2) /* TAGS: SETMEMUHI */
+DECLARE_SETMEM (SI, 4) /* TAGS: SETMEMSI */
+DECLARE_SETMEM (USI, 4) /* TAGS: SETMEMUSI */
+DECLARE_SETMEM (DI, 8) /* TAGS: SETMEMDI */
+DECLARE_SETMEM (UDI, 8) /* TAGS: SETMEMUDI */
#undef DECLARE_SETMEM
@@ -101,10 +101,10 @@ XCONCAT2 (GETIMEM,mode) (SIM_CPU *cpu, IADDR a) \
extern mode XCONCAT2 (GETIMEM,mode) (SIM_CPU *, ADDR);
#endif
-DECLARE_GETIMEM (UQI, 1)
-DECLARE_GETIMEM (UHI, 2)
-DECLARE_GETIMEM (USI, 4)
-DECLARE_GETIMEM (UDI, 8)
+DECLARE_GETIMEM (UQI, 1) /* TAGS: GETIMEMUQI */
+DECLARE_GETIMEM (UHI, 2) /* TAGS: GETIMEMUHI */
+DECLARE_GETIMEM (USI, 4) /* TAGS: GETIMEMUSI */
+DECLARE_GETIMEM (UDI, 8) /* TAGS: GETIMEMUDI */
#undef DECLARE_GETIMEM
@@ -132,8 +132,8 @@ XCONCAT2 (GETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a) \
extern mode XCONCAT2 (GETMEM,mode) (SIM_CPU *, IADDR, ADDR);
#endif
-DECLARE_GETMEM (SF, 4)
-DECLARE_GETMEM (DF, 8)
+DECLARE_GETMEM (SF, 4) /* TAGS: GETMEMSF */
+DECLARE_GETMEM (DF, 8) /* TAGS: GETMEMDF */
#undef DECLARE_GETMEM
@@ -151,8 +151,8 @@ XCONCAT2 (SETMEM,mode) (SIM_CPU *cpu, IADDR pc, ADDR a, mode val) \
extern void XCONCAT2 (SETMEM,mode) (SIM_CPU *, IADDR, ADDR, mode);
#endif
-DECLARE_SETMEM (SF, 4)
-DECLARE_SETMEM (DF, 8)
+DECLARE_SETMEM (SF, 4) /* TAGS: SETMEMSF */
+DECLARE_SETMEM (DF, 8) /* TAGS: SETMEMDF */
#undef DECLARE_SETMEM
@@ -174,20 +174,20 @@ XCONCAT2 (GETT,mode) (unsigned char *p) \
extern mode XCONCAT2 (GETT,mode) (unsigned char *);
#endif
-DECLARE_GETT (QI, 1)
-DECLARE_GETT (UQI, 1)
-DECLARE_GETT (HI, 2)
-DECLARE_GETT (UHI, 2)
-DECLARE_GETT (SI, 4)
-DECLARE_GETT (USI, 4)
-DECLARE_GETT (DI, 8)
-DECLARE_GETT (UDI, 8)
-
-/* ??? defered until necessary
-DECLARE_GETT (SF, 4)
-DECLARE_GETT (DF, 8)
-DECLARE_GETT (TF, 16)
-*/
+DECLARE_GETT (QI, 1) /* TAGS: GETTQI */
+DECLARE_GETT (UQI, 1) /* TAGS: GETTUQI */
+DECLARE_GETT (HI, 2) /* TAGS: GETTHI */
+DECLARE_GETT (UHI, 2) /* TAGS: GETTUHI */
+DECLARE_GETT (SI, 4) /* TAGS: GETTSI */
+DECLARE_GETT (USI, 4) /* TAGS: GETTUSI */
+DECLARE_GETT (DI, 8) /* TAGS: GETTDI */
+DECLARE_GETT (UDI, 8) /* TAGS: GETTUDI */
+
+#if 0 /* ??? defered until necessary */
+DECLARE_GETT (SF, 4) /* TAGS: GETTSF */
+DECLARE_GETT (DF, 8) /* TAGS: GETTDF */
+DECLARE_GETT (TF, 16) /* TAGS: GETTTF */
+#endif
#undef DECLARE_GETT
@@ -209,20 +209,20 @@ XCONCAT2 (SETT,mode) (unsigned char *buf, mode val) \
extern mode XCONCAT2 (GETT,mode) (unsigned char *, mode);
#endif
-DECLARE_SETT (QI, 1)
-DECLARE_SETT (UQI, 1)
-DECLARE_SETT (HI, 2)
-DECLARE_SETT (UHI, 2)
-DECLARE_SETT (SI, 4)
-DECLARE_SETT (USI, 4)
-DECLARE_SETT (DI, 8)
-DECLARE_SETT (UDI, 8)
-
-/* ??? defered until necessary
-DECLARE_SETT (SF, 4)
-DECLARE_SETT (DF, 8)
-DECLARE_SETT (TF, 16)
-*/
+DECLARE_SETT (QI, 1) /* TAGS: SETTQI */
+DECLARE_SETT (UQI, 1) /* TAGS: SETTUQI */
+DECLARE_SETT (HI, 2) /* TAGS: SETTHI */
+DECLARE_SETT (UHI, 2) /* TAGS: SETTUHI */
+DECLARE_SETT (SI, 4) /* TAGS: SETTSI */
+DECLARE_SETT (USI, 4) /* TAGS: SETTUSI */
+DECLARE_SETT (DI, 8) /* TAGS: SETTDI */
+DECLARE_SETT (UDI, 8) /* TAGS: SETTUDI */
+
+#if 0 /* ??? defered until necessary */
+DECLARE_SETT (SF, 4) /* TAGS: SETTSF */
+DECLARE_SETT (DF, 8) /* TAGS: SETTDF */
+DECLARE_SETT (TF, 16) /* TAGS: SETTTF */
+#endif
#undef DECLARE_SETT
diff --git a/sim/common/cgen-utils.c b/sim/common/cgen-utils.c
index b1c9f02..1ad5ce7 100644
--- a/sim/common/cgen-utils.c
+++ b/sim/common/cgen-utils.c
@@ -320,3 +320,38 @@ CONVDISI (val)
}
#endif /* DI_FN_SUPPORT */
+
+SI
+RORSI (val, shift)
+ SI val;
+ int shift;
+{
+ if (shift != 0)
+ {
+ int remain = 32 - shift;
+ int mask = (1 << shift) - 1;
+ SI result = (val & mask) << remain;
+ mask = (1 << remain) - 1;
+ result |= (val >> shift) & mask;
+ return result;
+ }
+ return val;
+}
+
+SI
+ROLSI (val, shift)
+ SI val;
+ int shift;
+{
+ if (shift != 0)
+ {
+ int remain = 32 - shift;
+ int mask = (1 << remain) - 1;
+ SI result = (val & mask) << shift;
+ mask = (1 << shift) - 1;
+ result |= (val >> remain) & mask;
+ return result;
+ }
+
+ return val;
+}
diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog
index 34c2798..cdea1ae 100644
--- a/sim/mips/ChangeLog
+++ b/sim/mips/ChangeLog
@@ -1,3 +1,18 @@
+1999-07-14 Frank Ch. Eigler <fche@cygnus.com>
+
+ Implement "sim firmware" option, inspired by jimb's version of 1998-01.
+ * interp.c (firmware_option_p): New global flag: "sim firmware" given.
+ (idt_monitor_base): Base address for IDT monitor traps.
+ (pmon_monitor_base): Ditto for PMON.
+ (lsipmon_monitor_base): Ditto for LSI PMON.
+ (MONITOR_BASE, MONITOR_SIZE): Removed macros.
+ (mips_option): Add "firmware" option with new OPTION_FIRMWARE key.
+ (sim_firmware_command): New function.
+ (mips_option_handler): Call it for OPTION_FIRMWARE.
+ (sim_open): Allocate memory for idt_monitor region. If "--board"
+ option was given, add no monitor by default. Add BREAK hooks only if
+ monitors are also there.
+
Mon Jul 12 00:02:27 1999 Andrew Cagney <cagney@amy.cygnus.com>
* interp.c (sim_monitor): Flush output before reading input.
diff --git a/sim/mips/interp.c b/sim/mips/interp.c
index 04383d3..3ee5001 100644
--- a/sim/mips/interp.c
+++ b/sim/mips/interp.c
@@ -132,12 +132,33 @@ static void ColdReset PARAMS((SIM_DESC sd));
#define INDELAYSLOT() ((STATE & simDELAYSLOT) != 0)
#define INJALDELAYSLOT() ((STATE & simJALDELAYSLOT) != 0)
+/* Note that the monitor code essentially assumes this layout of memory.
+ If you change these, change the monitor code, too. */
#define K0BASE (0x80000000)
#define K0SIZE (0x20000000)
#define K1BASE (0xA0000000)
#define K1SIZE (0x20000000)
-#define MONITOR_BASE (0xBFC00000)
-#define MONITOR_SIZE (1 << 11)
+
+/* Simple run-time monitor support.
+
+ We emulate the monitor by placing magic reserved instructions at
+ the monitor's entry points; when we hit these instructions, instead
+ of raising an exception (as we would normally), we look at the
+ instruction and perform the appropriate monitory operation.
+
+ `*_monitor_base' are the physical addresses at which the corresponding
+ monitor vectors are located. `0' means none. By default,
+ install all three.
+ The RSVD_INSTRUCTION... macros specify the magic instructions we
+ use at the monitor entry points. */
+static int firmware_option_p = 0;
+static SIM_ADDR idt_monitor_base = 0xBFC00000;
+static SIM_ADDR pmon_monitor_base = 0xBFC00500;
+static SIM_ADDR lsipmon_monitor_base = 0xBFC00200;
+
+static SIM_RC sim_firmware_command (SIM_DESC sd, char* arg);
+
+
#define MEM_SIZE (2 << 20)
@@ -158,6 +179,7 @@ static DECLARE_OPTION_HANDLER (mips_option_handler);
enum {
OPTION_DINERO_TRACE = OPTION_START,
OPTION_DINERO_FILE,
+ OPTION_FIRMWARE,
OPTION_BOARD
};
@@ -225,6 +247,9 @@ Re-compile simulator with \"-DTRACE\" to enable this option.\n");
#endif /* TRACE */
return SIM_RC_OK;
+ case OPTION_FIRMWARE:
+ return sim_firmware_command (sd, arg);
+
case OPTION_BOARD:
{
if (arg)
@@ -248,6 +273,9 @@ static const OPTION mips_options[] =
{ {"dinero-file", required_argument, NULL, OPTION_DINERO_FILE},
'\0', "FILE", "Write dinero trace to FILE",
mips_option_handler },
+ { {"firmware", required_argument, NULL, OPTION_FIRMWARE},
+ '\0', "[idt|pmon|lsipmon|none][@ADDRESS]", "Emulate ROM monitor",
+ mips_option_handler },
{ {"board", required_argument, NULL, OPTION_BOARD},
'\0', "none" /* rely on compile-time string concatenation for other options */
@@ -341,8 +369,7 @@ sim_open (kind, cb, abfd, argv)
{
/* Allocate core managed memory */
- /* the monitor */
- sim_do_commandf (sd, "memory region 0x%lx,0x%lx", MONITOR_BASE, MONITOR_SIZE);
+
/* For compatibility with the old code - under this (at level one)
are the kernel spaces K0 & K1. Both of these map to a single
smaller sub region */
@@ -392,6 +419,15 @@ sim_open (kind, cb, abfd, argv)
/* match VIRTUAL memory layout of JMR-TX3904 board */
int i;
+ /* --- disable monitor unless forced on by user --- */
+
+ if (! firmware_option_p)
+ {
+ idt_monitor_base = 0;
+ pmon_monitor_base = 0;
+ lsipmon_monitor_base = 0;
+ }
+
/* --- environment --- */
STATE_ENVIRONMENT (sd) = OPERATING_ENVIRONMENT;
@@ -556,51 +592,54 @@ sim_open (kind, cb, abfd, argv)
open_trace(sd);
#endif /* TRACE */
- /* Write an abort sequence into the TRAP (common) exception vector
- addresses. This is to catch code executing a TRAP (et.al.)
- instruction without installing a trap handler. */
- {
- unsigned32 halt[2] = { 0x2404002f /* addiu r4, r0, 47 */,
- HALT_INSTRUCTION /* BREAK */ };
- H2T (halt[0]);
- H2T (halt[1]);
- sim_write (sd, 0x80000000, (char *) halt, sizeof (halt));
- sim_write (sd, 0x80000180, (char *) halt, sizeof (halt));
- sim_write (sd, 0x80000200, (char *) halt, sizeof (halt));
- sim_write (sd, 0xBFC00200, (char *) halt, sizeof (halt));
- sim_write (sd, 0xBFC00380, (char *) halt, sizeof (halt));
- sim_write (sd, 0xBFC00400, (char *) halt, sizeof (halt));
- }
-
+ /*
+ sim_io_eprintf (sd, "idt@%x pmon@%x lsipmon@%x\n",
+ idt_monitor_base,
+ pmon_monitor_base,
+ lsipmon_monitor_base);
+ */
/* 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)
- {
- address_word vaddr = (MONITOR_BASE + loop);
- unsigned32 insn = (RSVD_INSTRUCTION | (((loop >> 2) & RSVD_INSTRUCTION_ARG_MASK) << RSVD_INSTRUCTION_ARG_SHIFT));
- H2T (insn);
- sim_write (sd, vaddr, (char *)&insn, sizeof (insn));
- }
+ if (idt_monitor_base != 0)
+ {
+ unsigned loop;
+ unsigned idt_monitor_size = 1 << 11;
+
+ /* the default monitor region */
+ sim_do_commandf (sd, "memory region 0x%x,0x%x",
+ idt_monitor_base, idt_monitor_size);
+
+ /* 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 < idt_monitor_size); loop += 4)
+ {
+ address_word vaddr = (idt_monitor_base + loop);
+ unsigned32 insn = (RSVD_INSTRUCTION |
+ (((loop >> 2) & RSVD_INSTRUCTION_ARG_MASK)
+ << RSVD_INSTRUCTION_ARG_SHIFT));
+ H2T (insn);
+ sim_write (sd, vaddr, (char *)&insn, sizeof (insn));
+ }
+ }
+
+ if ((pmon_monitor_base != 0) || (lsipmon_monitor_base != 0))
+ {
/* 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++)
- {
- address_word vaddr = (MONITOR_BASE + 0x500 + (loop * 4));
- unsigned32 value = ((0x500 - 8) / 8); /* default UNDEFINED reason code */
- switch (loop)
- {
+ unsigned loop;
+ for (loop = 0; (loop < 24); loop++)
+ {
+ unsigned32 value = ((0x500 - 8) / 8); /* default UNDEFINED reason code */
+ switch (loop)
+ {
case 0: /* read */
value = 7;
break;
@@ -623,15 +662,43 @@ sim_open (kind, cb, abfd, argv)
value = 28;
break;
}
- /* FIXME - should monitor_base be SIM_ADDR?? */
- value = ((unsigned int)MONITOR_BASE + (value * 8));
+
+ SIM_ASSERT (idt_monitor_base != 0);
+ value = ((unsigned int) idt_monitor_base + (value * 8));
H2T (value);
- sim_write (sd, vaddr, (char *)&value, sizeof (value));
- /* The LSI MiniRISC PMON has its vectors at 0x200, not 0x500. */
- vaddr -= 0x300;
- sim_write (sd, vaddr, (char *)&value, sizeof (value));
+ if (pmon_monitor_base != 0)
+ {
+ address_word vaddr = (pmon_monitor_base + (loop * 4));
+ sim_write (sd, vaddr, (char *)&value, sizeof (value));
+ }
+
+ if (lsipmon_monitor_base != 0)
+ {
+ address_word vaddr = (lsipmon_monitor_base + (loop * 4));
+ sim_write (sd, vaddr, (char *)&value, sizeof (value));
+ }
}
+
+ /* Write an abort sequence into the TRAP (common) exception vector
+ addresses. This is to catch code executing a TRAP (et.al.)
+ instruction without installing a trap handler. */
+ if ((idt_monitor_base != 0) ||
+ (pmon_monitor_base != 0) ||
+ (lsipmon_monitor_base != 0))
+ {
+ unsigned32 halt[2] = { 0x2404002f /* addiu r4, r0, 47 */,
+ HALT_INSTRUCTION /* BREAK */ };
+ H2T (halt[0]);
+ H2T (halt[1]);
+ sim_write (sd, 0x80000000, (char *) halt, sizeof (halt));
+ sim_write (sd, 0x80000180, (char *) halt, sizeof (halt));
+ sim_write (sd, 0x80000200, (char *) halt, sizeof (halt));
+ /* XXX: Write here unconditionally? */
+ sim_write (sd, 0xBFC00200, (char *) halt, sizeof (halt));
+ sim_write (sd, 0xBFC00380, (char *) halt, sizeof (halt));
+ sim_write (sd, 0xBFC00400, (char *) halt, sizeof (halt));
+ }
}
@@ -935,6 +1002,91 @@ fetch_str (SIM_DESC sd,
return buf;
}
+
+/* Implements the "sim firmware" command:
+ sim firmware NAME[@ADDRESS] --- emulate ROM monitor named NAME.
+ NAME can be idt, pmon, or lsipmon. If omitted, ADDRESS
+ defaults to the normal address for that monitor.
+ sim firmware none --- don't emulate any ROM monitor. Useful
+ if you need a clean address space. */
+static SIM_RC
+sim_firmware_command (SIM_DESC sd, char *arg)
+{
+ int address_present = 0;
+ SIM_ADDR address;
+
+ /* Signal occurrence of this option. */
+ firmware_option_p = 1;
+
+ /* Parse out the address, if present. */
+ {
+ char *p = strchr (arg, '@');
+ if (p)
+ {
+ char *q;
+ address_present = 1;
+ p ++; /* skip over @ */
+
+ address = strtoul (p, &q, 0);
+ if (*q != '\0')
+ {
+ sim_io_printf (sd, "Invalid address given to the"
+ "`sim firmware NAME@ADDRESS' command: %s\n",
+ p);
+ return SIM_RC_FAIL;
+ }
+ }
+ else
+ address_present = 0;
+ }
+
+ if (! strncmp (arg, "idt", 3))
+ {
+ idt_monitor_base = address_present ? address : 0xBFC00000;
+ pmon_monitor_base = 0;
+ lsipmon_monitor_base = 0;
+ }
+ else if (! strncmp (arg, "pmon", 4))
+ {
+ /* pmon uses indirect calls. Hook into implied idt. */
+ pmon_monitor_base = address_present ? address : 0xBFC00500;
+ idt_monitor_base = pmon_monitor_base - 0x500;
+ lsipmon_monitor_base = 0;
+ }
+ else if (! strncmp (arg, "lsipmon", 7))
+ {
+ /* lsipmon uses indirect calls. Hook into implied idt. */
+ pmon_monitor_base = 0;
+ lsipmon_monitor_base = address_present ? address : 0xBFC00200;
+ idt_monitor_base = lsipmon_monitor_base - 0x200;
+ }
+ else if (! strncmp (arg, "none", 4))
+ {
+ if (address_present)
+ {
+ sim_io_printf (sd,
+ "The `sim firmware none' command does "
+ "not take an `ADDRESS' argument.\n");
+ return SIM_RC_FAIL;
+ }
+ idt_monitor_base = 0;
+ pmon_monitor_base = 0;
+ lsipmon_monitor_base = 0;
+ }
+ else
+ {
+ sim_io_printf (sd, "\
+Unrecognized name given to the `sim firmware NAME' command: %s\n\
+Recognized firmware names are: `idt', `pmon', `lsipmon', and `none'.\n",
+ arg);
+ return SIM_RC_FAIL;
+ }
+
+ return SIM_RC_OK;
+}
+
+
+
/* Simple monitor interface (currently setup for the IDT and PMON monitors) */
void
sim_monitor (SIM_DESC sd,
diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog
index 5c95cc9..95d37e9 100644
--- a/sim/mn10300/ChangeLog
+++ b/sim/mn10300/ChangeLog
@@ -1,3 +1,7 @@
+Tue Jul 13 13:26:20 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * interp.c: Clarify error message reporting an unknown board.
+
1999-05-08 Felix Lee <flee@cygnus.com>
* configure: Regenerated to track ../common/aclocal.m4 changes.
diff --git a/sim/mn10300/interp.c b/sim/mn10300/interp.c
index 12dffff..2003c2d 100644
--- a/sim/mn10300/interp.c
+++ b/sim/mn10300/interp.c
@@ -1114,10 +1114,10 @@ sim_open (kind, cb, abfd, argv)
}
else
{
- if ( NULL != board )
- {
- printf("Error: invalid --board option.\n");
- return 0;
+ if (board != NULL)
+ {
+ sim_io_eprintf (sd, "Error: Board `%s' unknown.\n", board);
+ return 0;
}
}
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog
index 953d2a4..6946ddf 100644
--- a/sim/testsuite/ChangeLog
+++ b/sim/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+1999-07-16 Ben Elliston <bje@cygnus.com>
+
+ * sim/arm/misaligned1.ms: New test case.
+ * sim/arm/misaligned2.ms: Likewise.
+ * sim/arm/misaligned3.ms: Likewise.
+
+1999-07-16 Ben Elliston <bje@cygnus.com>
+
+ * sim/arm/misc.exp: Enable basic tests.
+
1999-04-21 Doug Evans <devans@casey.cygnus.com>
* sim/m32r/nop.cgs: Add missing nop insn.