diff options
author | nobody <> | 2002-05-15 21:19:22 +0000 |
---|---|---|
committer | nobody <> | 2002-05-15 21:19:22 +0000 |
commit | 0540f4547886519cdcf972d171961c0b6a33e02e (patch) | |
tree | 9770a17b0706adabda4874b86f2609570654f887 /sim | |
parent | 275602c398b33b8475860af024b006bbbbd495ac (diff) | |
download | binutils-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/ChangeLog | 5 | ||||
-rw-r--r-- | sim/arm/armos.c | 139 |
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; } } |