summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authornobody <>2002-05-15 21:19:22 +0000
committernobody <>2002-05-15 21:19:22 +0000
commit0540f4547886519cdcf972d171961c0b6a33e02e (patch)
tree9770a17b0706adabda4874b86f2609570654f887 /sim
parent275602c398b33b8475860af024b006bbbbd495ac (diff)
downloadbinutils-gdb-0540f4547886519cdcf972d171961c0b6a33e02e.tar.gz
This commit was manufactured by cvs2svn to create branchcagney_regbuf-20020515-branchpoint
'cagney_regbuf-20020515-branch'. Sprout from jimb-macro-020506-branch 2002-05-06 21:00:22 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'jimb-' Cherrypick from master 2002-05-15 21:19:21 UTC Jim Blandy <jimb@codesourcery.com> 'Add macro structures to GDB's symbol tables. Nobody puts anything': Makefile.in bfd/elf-m10200.c bfd/elf-m10300.c bfd/elf32-arm.h bfd/elf32-fr30.c bfd/elf32-hppa.c bfd/elf32-i370.c bfd/elf32-i386.c bfd/elf32-i860.c bfd/elf32-m32r.c bfd/elf32-m68k.c bfd/elf32-mcore.c bfd/elf32-openrisc.c bfd/elf32-ppc.c bfd/elf32-s390.c bfd/elf32-xstormy16.c bfd/elf64-ppc.c bfd/elf64-s390.c bfd/elf64-x86-64.c bfd/elfxx-ia64.c bfd/libxcoff.h gdb/ChangeLog gdb/MAINTAINERS gdb/Makefile.in gdb/NEWS gdb/TODO gdb/alphabsd-nat.c gdb/alphabsd-tdep.c gdb/alphabsd-tdep.h gdb/alphanbsd-tdep.c gdb/arch-utils.c gdb/arch-utils.h gdb/arm-linux-tdep.c gdb/arm-tdep.c gdb/arm-tdep.h gdb/ax-gdb.c gdb/buildsym.c gdb/buildsym.h gdb/builtin-regs.c gdb/c-typeprint.c gdb/config/alpha/fbsd.mt gdb/config/alpha/nbsd.mh gdb/config/alpha/nbsd.mt gdb/config/arm/nm-nbsd.h gdb/config/djgpp/fnchange.lst gdb/config/i386/fbsd.mh gdb/config/i386/go32.mh gdb/config/i386/i386gnu.mh gdb/config/i386/i386sol2.mh gdb/config/i386/i386v42mp.mh gdb/config/i386/linux.mh gdb/config/i386/nbsd.mh gdb/config/i386/nbsd.mt gdb/config/i386/nbsdelf.mh gdb/config/i386/nbsdelf.mt gdb/config/i386/obsd.mh gdb/config/i386/tm-nbsd.h gdb/config/i386/x86-64linux.mh gdb/config/m68k/nbsd.mh gdb/config/m88k/tm-m88k.h gdb/config/ns32k/nbsd.mh gdb/config/powerpc/nbsd.mh gdb/config/sh/nbsd.mh gdb/config/sh/nbsd.mt gdb/config/sh/nm-nbsd.h gdb/config/sh/tm-nbsd.h gdb/config/sh/tm-sh.h gdb/config/sparc/nbsd.mh gdb/config/sparc/nbsdelf.mh gdb/configure gdb/configure.host gdb/configure.in gdb/configure.tgt gdb/d10v-tdep.c gdb/dbxread.c gdb/doc/ChangeLog gdb/doc/gdb.texinfo gdb/doc/gdbint.texinfo gdb/doc/stabs.texinfo gdb/dstread.c gdb/dwarf2cfi.c gdb/dwarf2read.c gdb/event-loop.c gdb/expprint.c gdb/findvar.c gdb/frame.c gdb/gdbarch.c gdb/gdbarch.h gdb/gdbarch.sh gdb/gdbserver/mem-break.c gdb/gdbtypes.c gdb/gdbtypes.h gdb/gnu-v3-abi.c gdb/go32-nat.c gdb/gregset.h gdb/hpread.c gdb/i386-linux-nat.c gdb/i386-tdep.c gdb/i386-tdep.h gdb/i386bsd-nat.c gdb/i386gnu-nat.c gdb/i386nbsd-tdep.c gdb/i386v4-nat.c gdb/i387-tdep.c gdb/i387-tdep.h gdb/ia64-tdep.c gdb/jv-valprint.c gdb/language.c gdb/language.h gdb/linespec.c gdb/m88k-tdep.c gdb/macroexp.c gdb/macroexp.h gdb/macrotab.c gdb/macrotab.h gdb/mdebugread.c gdb/memattr.c gdb/mips-tdep.c gdb/nbsd-tdep.c gdb/nbsd-tdep.h gdb/objfiles.c gdb/objfiles.h gdb/p-lang.c gdb/printcmd.c gdb/regcache.c gdb/remote-rdi.c gdb/remote-rdp.c gdb/remote.c gdb/rs6000-tdep.c gdb/ser-tcp.c gdb/sh-tdep.c gdb/shnbsd-nat.c gdb/shnbsd-tdep.c gdb/shnbsd-tdep.h gdb/signals/signals.c gdb/solib-sunos.c gdb/solib-svr4.c gdb/solib.c gdb/solib.h gdb/stabsread.c gdb/symfile.c gdb/symmisc.c gdb/symtab.c gdb/symtab.h gdb/testsuite/ChangeLog gdb/testsuite/gdb.asm/asm-source.exp gdb/testsuite/gdb.asm/v850.inc gdb/testsuite/gdb.base/a2-run.exp gdb/testsuite/gdb.base/break.exp gdb/testsuite/gdb.base/default.exp gdb/testsuite/gdb.base/ending-run.exp gdb/testsuite/gdb.base/long_long.exp gdb/testsuite/gdb.base/maint.exp gdb/testsuite/gdb.base/printcmds.exp gdb/testsuite/gdb.c++/annota2.exp gdb/testsuite/gdb.c++/method.exp gdb/testsuite/gdb.mi/mi-var-child.exp gdb/testsuite/gdb.mi/mi0-var-child.exp gdb/testsuite/lib/gdb.exp gdb/tracepoint.c gdb/valops.c gdb/value.h gdb/values.c gdb/version.in gdb/x86-64-linux-nat.c gdb/x86-64-tdep.c include/elf/ChangeLog include/elf/common.h include/gdb/ChangeLog include/gdb/signals.h include/gdb/sim-sh.h libiberty/configure libiberty/configure.in libiberty/getruntime.c libiberty/waitpid.c opcodes/cgen-dis.in opcodes/ppc-opc.c opcodes/vax-dis.c sim/arm/ChangeLog sim/arm/armos.c Cherrypick from master 2002-05-11 00:00:05 UTC Alan Modra <amodra@gmail.com> 'daily update': ChangeLog bfd/ChangeLog bfd/coff-rs6000.c bfd/coff64-rs6000.c bfd/elf-bfd.h bfd/elflink.h bfd/elfxx-target.h bfd/version.h libiberty/ChangeLog opcodes/ChangeLog Delete: gdb/alphanbsd-nat.c gdb/config/avr/avr.mt gdb/i386nbsd-nat.c gdb/i387-nat.c gdb/i387-nat.h
Diffstat (limited to 'sim')
-rw-r--r--sim/arm/ChangeLog5
-rw-r--r--sim/arm/armos.c139
2 files changed, 114 insertions, 30 deletions
diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog
index 04c7e280871..e10ef891d14 100644
--- a/sim/arm/ChangeLog
+++ b/sim/arm/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-09 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * armos.c (ARMul_OSHandleSWI): Support the RedBoot SWI in ARM
+ mode and some of its system calls.
+
2002-03-17 Anthony Green <green@redhat.com>
* wrapper.c (mem_size): Increase the default target memory to 8MB.
diff --git a/sim/arm/armos.c b/sim/arm/armos.c
index 3b0db22b34d..d833665ac2d 100644
--- a/sim/arm/armos.c
+++ b/sim/arm/armos.c
@@ -48,7 +48,7 @@
#endif
#ifdef HAVE_UNISTD_H
-#include <unistd.h> /* For SEEK_SET etc */
+#include <unistd.h> /* For SEEK_SET etc. */
#endif
#ifdef __riscos
@@ -86,13 +86,12 @@ extern int _fisatty (FILE *);
#include "callback.h"
extern host_callback *sim_callback;
-extern unsigned ARMul_OSInit (ARMul_State * state);
-extern void ARMul_OSExit (ARMul_State * state);
-extern unsigned ARMul_OSHandleSWI (ARMul_State * state, ARMword number);
-extern unsigned ARMul_OSException (ARMul_State * state, ARMword vector,
- ARMword pc);
-extern ARMword ARMul_OSLastErrorP (ARMul_State * state);
-extern ARMword ARMul_Debug (ARMul_State * state, ARMword pc, ARMword instr);
+extern unsigned ARMul_OSInit (ARMul_State *);
+extern void ARMul_OSExit (ARMul_State *);
+extern unsigned ARMul_OSHandleSWI (ARMul_State *, ARMword);
+extern unsigned ARMul_OSException (ARMul_State *, ARMword, ARMword);
+extern ARMword ARMul_OSLastErrorP (ARMul_State *);
+extern ARMword ARMul_Debug (ARMul_State *, ARMword, ARMword);
#define BUFFERSIZE 4096
#ifndef FOPEN_MAX
@@ -164,15 +163,16 @@ ARMul_OSInit (ARMul_State * state)
OSptr = (struct OSblock *) state->OSptr;
OSptr->ErrorP = 0;
- state->Reg[13] = ADDRSUPERSTACK; /* set up a stack for the current mode */
- ARMul_SetReg (state, SVC32MODE, 13, ADDRSUPERSTACK); /* and for supervisor mode */
- ARMul_SetReg (state, ABORT32MODE, 13, ADDRSUPERSTACK); /* and for abort 32 mode */
- ARMul_SetReg (state, UNDEF32MODE, 13, ADDRSUPERSTACK); /* and for undef 32 mode */
- ARMul_SetReg (state, SYSTEMMODE, 13, ADDRSUPERSTACK); /* and for system mode */
- instr = 0xe59ff000 | (ADDRSOFTVECTORS - 8); /* load pc from soft vector */
+ state->Reg[13] = ADDRSUPERSTACK; /* Set up a stack for the current mode... */
+ ARMul_SetReg (state, SVC32MODE, 13, ADDRSUPERSTACK);/* ...and for supervisor mode... */
+ ARMul_SetReg (state, ABORT32MODE, 13, ADDRSUPERSTACK);/* ...and for abort 32 mode... */
+ ARMul_SetReg (state, UNDEF32MODE, 13, ADDRSUPERSTACK);/* ...and for undef 32 mode... */
+ ARMul_SetReg (state, SYSTEMMODE, 13, ADDRSUPERSTACK);/* ...and for system mode. */
+ instr = 0xe59ff000 | (ADDRSOFTVECTORS - 8); /* Load pc from soft vector */
for (i = ARMul_ResetV; i <= ARMFIQV; i += 4)
- ARMul_WriteWord (state, i, instr); /* write hardware vectors */
+ /* Write hardware vectors. */
+ ARMul_WriteWord (state, i, instr);
SWI_vector_installed = 0;
@@ -196,16 +196,19 @@ ARMul_OSInit (ARMul_State * state)
/* #ifndef ASIM */
- /* install fpe */
- for (i = 0; i < fpesize; i += 4) /* copy the code */
+ /* Install FPE. */
+ for (i = 0; i < fpesize; i += 4)
+ /* Copy the code. */
ARMul_WriteWord (state, FPESTART + i, fpecode[i >> 2]);
for (i = FPESTART + fpesize;; i -= 4)
- { /* reverse the error strings */
+ {
+ /* Reverse the error strings. */
if ((j = ARMul_ReadWord (state, i)) == 0xffffffff)
break;
if (state->bigendSig && j < 0x80000000)
- { /* it's part of the string so swap it */
+ {
+ /* It's part of the string so swap it. */
j = ((j >> 0x18) & 0x000000ff) |
((j >> 0x08) & 0x0000ff00) |
((j << 0x08) & 0x00ff0000) | ((j << 0x18) & 0xff000000);
@@ -213,8 +216,10 @@ ARMul_OSInit (ARMul_State * state)
}
}
- ARMul_WriteWord (state, FPEOLDVECT, ARMul_ReadWord (state, 4)); /* copy old illegal instr vector */
- ARMul_WriteWord (state, 4, FPENEWVECT (ARMul_ReadWord (state, i - 4))); /* install new vector */
+ /* Copy old illegal instr vector. */
+ ARMul_WriteWord (state, FPEOLDVECT, ARMul_ReadWord (state, 4));
+ /* Install new vector. */
+ ARMul_WriteWord (state, 4, FPENEWVECT (ARMul_ReadWord (state, i - 4)));
ARMul_ConsolePrint (state, ", FPE");
/* #endif ASIM */
@@ -321,8 +326,10 @@ SWIread (ARMul_State * state, ARMword f, ARMword ptr, ARMword len)
if (local == NULL)
{
- sim_callback->printf_filtered (sim_callback, "sim: Unable to read 0x%ulx bytes - out of memory\n",
- len);
+ sim_callback->printf_filtered
+ (sim_callback,
+ "sim: Unable to read 0x%ulx bytes - out of memory\n",
+ len);
return;
}
@@ -346,8 +353,10 @@ SWIwrite (ARMul_State * state, ARMword f, ARMword ptr, ARMword len)
if (local == NULL)
{
- sim_callback->printf_filtered (sim_callback, "sim: Unable to write 0x%lx bytes - out of memory\n",
- (long) len);
+ sim_callback->printf_filtered
+ (sim_callback,
+ "sim: Unable to write 0x%lx bytes - out of memory\n",
+ (long) len);
return;
}
@@ -580,10 +589,10 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
else
temp = ADDRUSERSTACK;
- ARMul_WriteWord (state, addr, 0); /* Heap base */
- ARMul_WriteWord (state, addr + 4, temp); /* Heap limit */
- ARMul_WriteWord (state, addr + 8, temp); /* Stack base */
- ARMul_WriteWord (state, addr + 12, temp); /* Stack limit */
+ ARMul_WriteWord (state, addr, 0); /* Heap base. */
+ ARMul_WriteWord (state, addr + 4, temp); /* Heap limit. */
+ ARMul_WriteWord (state, addr + 8, temp); /* Stack base. */
+ ARMul_WriteWord (state, addr + 12, temp); /* Stack limit. */
break;
case AngelSWI_Reason_ReportException:
@@ -635,6 +644,73 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
/* These are used by the FPE code. */
break;
+ case 0x180001: /* RedBoot's Syscall SWI in ARM mode. */
+ switch (state->Reg[0])
+ {
+ /* These numbers are defined in libgloss/syscall.h
+ but the simulator should not be dependend upon
+ libgloss being installed. */
+ case 1: /* Exit. */
+ state->Emulate = FALSE;
+ return TRUE;
+
+ case 2: /* Open. */
+ SWIopen (state, state->Reg[1], state->Reg[2]);
+ return TRUE;
+
+ case 3: /* Close. */
+ state->Reg[0] = sim_callback->close (sim_callback, state->Reg[1]);
+ OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+ return TRUE;
+
+ case 4: /* Read. */
+ SWIread (state, state->Reg[1], state->Reg[2], state->Reg[3]);
+ return TRUE;
+
+ case 5: /* Write. */
+ SWIwrite (state, state->Reg[1], state->Reg[2], state->Reg[3]);
+ return TRUE;
+
+ case 6: /* Lseek. */
+ state->Reg[0] = sim_callback->lseek (sim_callback,
+ state->Reg[1],
+ state->Reg[2],
+ state->Reg[3]);
+ OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+ return TRUE;
+
+ case 17: /* Utime. */
+ state->Reg[0] = (ARMword) sim_callback->time (sim_callback,
+ (long *) state->Reg[1]);
+ OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
+ return TRUE;
+
+ case 7: /* Unlink. */
+ case 8: /* Getpid. */
+ case 9: /* Kill. */
+ case 10: /* Fstat. */
+ case 11: /* Sbrk. */
+ case 12: /* Argvlen. */
+ case 13: /* Argv. */
+ case 14: /* ChDir. */
+ case 15: /* Stat. */
+ case 16: /* Chmod. */
+ case 18: /* Time. */
+ sim_callback->printf_filtered
+ (sim_callback,
+ "sim: unhandled RedBoot syscall '%d' encountered - ignoring\n",
+ state->Reg[0]);
+ return FALSE;
+
+ default:
+ sim_callback->printf_filtered
+ (sim_callback,
+ "sim: unknown RedBoot syscall '%d' encountered - ignoring\n",
+ state->Reg[0]);
+ return FALSE;
+ }
+ return TRUE;
+
default:
/* If there is a SWI vector installed use it. */
if (state->is_XScale && saved_number != -1)
@@ -661,7 +737,10 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
}
else
{
- sim_callback->printf_filtered (sim_callback, "sim: unknown SWI encountered - %x - ignoring\n", number);
+ sim_callback->printf_filtered
+ (sim_callback,
+ "sim: unknown SWI encountered - %x - ignoring\n",
+ number);
return FALSE;
}
}