forked from Imagelibrary/binutils-gdb
import gdb-1999-07-19 snapshot
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
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 */
|
||||
|
||||
/* ??? defered until necessary
|
||||
DECLARE_GETT (SF, 4)
|
||||
DECLARE_GETT (DF, 8)
|
||||
DECLARE_GETT (TF, 16)
|
||||
*/
|
||||
#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)
|
||||
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 */
|
||||
|
||||
/* ??? defered until necessary
|
||||
DECLARE_SETT (SF, 4)
|
||||
DECLARE_SETT (DF, 8)
|
||||
DECLARE_SETT (TF, 16)
|
||||
*/
|
||||
#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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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));
|
||||
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));
|
||||
SIM_ASSERT (idt_monitor_base != 0);
|
||||
value = ((unsigned int) idt_monitor_base + (value * 8));
|
||||
H2T (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,
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user