From fb639847713fed3ed2c94e41e7f21d09cebe4af2 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 8 Feb 2002 20:03:26 +0000 Subject: 2002-02-08 Joel Sherrill * Merged r46kstub.c into RTEMS distribution without modification. I got the code from Franz Fischer who had used this with an old version of RTEMS with the mips64orion port of RTEMS. After adding this to the repository, I will tailor this to work with the RTEMS exception processing model and trim no longer needed parts. * ChangeLog, gdb_if.h, ioaddr.h, limits.h, Makefile, mips_opcode.h, r4600.h, r46kstub.c, r46kstub.ld, README, stubinit.S: --- c/src/lib/libbsp/mips/shared/gdbstub/README | 115 ++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 c/src/lib/libbsp/mips/shared/gdbstub/README (limited to 'c/src/lib/libbsp/mips/shared/gdbstub/README') diff --git a/c/src/lib/libbsp/mips/shared/gdbstub/README b/c/src/lib/libbsp/mips/shared/gdbstub/README new file mode 100644 index 0000000000..3550a2ad29 --- /dev/null +++ b/c/src/lib/libbsp/mips/shared/gdbstub/README @@ -0,0 +1,115 @@ +/* r46kstub 9/29/96 c. m. heard */ +/* 7/26/96 -- original posting */ +/* 8/06/96 -- cache initialization/flushing logic fixed */ +/* 9/29/96 -- coprocessor load delay slots respected, documentation improved */ + +The r46kstub directory and its compressed archive (r46kstub.tar.gz) contain +the 9/29/96 source code snapshot for a ROM-resident gdb-4.16 debug agent +(aka stub) for the IDT R4600 Orion processor. It is based on the stub for +the Hitachi SH processor written by Ben Lee and Steve Chamberlain and +supplied with the gdb-4.16 distribution; that stub in turn was "originally +based on an m68k software stub written by Glenn Engel at HP, but has changed +quite a bit". The modifications for the R4600 were contributed by C. M. +Heard of VVNET, Inc. and were based in part on the Algorithmics R4000 version +of Phil Bunce's PMON program. + +The distribution consists of the following files: + +-rw-r--r-- 1 1178 Sep 29 16:34 ChangeLog +-rw-r--r-- 1 748 Jul 26 01:18 Makefile +-rw-r--r-- 1 6652 Sep 29 16:34 README +-rw-r--r-- 1 1829 May 21 02:02 gdb_if.h +-rw-r--r-- 1 3745 Sep 29 14:03 ioaddr.h +-rw-r--r-- 1 2906 Sep 29 14:39 limits.h +-rw-r--r-- 1 6552 May 23 00:17 mips_opcode.h +-rw-r--r-- 1 14017 May 21 02:04 r4600.h +-rw-r--r-- 1 23874 Jul 21 20:31 r46kstub.c +-rw-r--r-- 1 1064 Jul 3 12:35 r46kstub.ld +-rw-r--r-- 1 13299 Sep 29 16:24 stubinit.S + +With the exception of mips_opcode.h, which is a slightly modified version +of a header file contributed by Ralph Campbell to 4.4 BSD and is therefore +copyrighted by the UC Regents, all of the source files have been dedicated +by their authors to the public domain. Use them as you wish, but do so +at your own risk! The authors accept _no_ responsibility for any errors. + +The debug agent contained herein is at this writing in active use at VVNET +supporting initial hardware debug and board bring-up of an OC-12 ATM probe +board. It uses polled I/O on a 16C450 UART. We had originally intended to +add support for interrupts to allow gdb to break in on a running program, +but we have found that this is not really necessary since the reset button +will accomplish the same purpose (thanks to the MIPS feature of saving the +program counter in the ErrorEPC register when a reset exception occurs). + +Be aware that this stub handles ALL interrupts and exceptions except for +reset (or NMI) in the same way -- by passing control to the debug command +loop. It of course uses the ROM exception vectors to do so. In order to +support code that actally needs to use interrupts we use use a more elaborate +stub that is linked with the downloaded program. It hooks the RAM exception +vectors and clears the BEV status bit to gain control. The ROM-based stub +is still used in this case for initial program loading. + +In order to port this stub to a different platform you will at a minimum +need to customize the macros in limits.h (which define the limits of readable, +writeable, and steppable address space) and the I/O addresses in ioaddr.h +(which define the 16C450 MMIO addresses). If you use something other than +a 16C450 UART you will probably also need to modify the portions of stubinit.S +which deal with the serial port. I've tried to be careful to respect all the +architecturally-defined hazards as described in Appendix F of Kane and +Heinrich, MIPS RISC Architecture, in order to minimize the work in porting +to 4000-series processors other than the R4600, but no guarantees are offered. +Support is presently restricted to big-endian addressing, and I've not even +considered what changes would be needed for little-endian support. + +When this stub is built with gcc-2.7.2 and binutils-2.6 you will see a few +warning messages from the single-step support routine where a cast is used +to sign-extend a pointer (the next instruction address) into a long long +(the PC image). Those warnings are expected; I've checked the generated +code and it is doing what I had intended. But you should not see any other +warnings or errors. Here is a log of the build: + +mips64orion-idt-elf-gcc -g -Wa,-ahld -Wall -membedded-data \ + -O3 -c r46kstub.c >r46kstub.L +r46kstub.c: In function `doSStep': +r46kstub.c:537: warning: cast to pointer from integer of different size +r46kstub.c:539: warning: cast to pointer from integer of different size +r46kstub.c:547: warning: cast to pointer from integer of different size +r46kstub.c:561: warning: cast to pointer from integer of different size +r46kstub.c:563: warning: cast to pointer from integer of different size +r46kstub.c:572: warning: cast to pointer from integer of different size +r46kstub.c:574: warning: cast to pointer from integer of different size +r46kstub.c:582: warning: cast to pointer from integer of different size +r46kstub.c:589: warning: cast to pointer from integer of different size +r46kstub.c:591: warning: cast to pointer from integer of different size +r46kstub.c:597: warning: cast to pointer from integer of different size +r46kstub.c:599: warning: cast to pointer from integer of different size +r46kstub.c:605: warning: cast to pointer from integer of different size +r46kstub.c:607: warning: cast to pointer from integer of different size +r46kstub.c:613: warning: cast to pointer from integer of different size +r46kstub.c:615: warning: cast to pointer from integer of different size +r46kstub.c:624: warning: cast to pointer from integer of different size +r46kstub.c:628: warning: cast to pointer from integer of different size +r46kstub.c:635: warning: cast to pointer from integer of different size +r46kstub.c:637: warning: cast to pointer from integer of different size +mips64orion-idt-elf-gcc -g -Wa,-ahld -Wall -membedded-data \ + -O3 -c stubinit.S >stubinit.L +mips64orion-idt-elf-ld -t -s -T r46kstub.ld -Map r46kstub.map -o r46kstub.out +mips64orion-idt-elf-ld: mode elf32bmip +stubinit.o +r46kstub.o +mips64orion-idt-elf-objcopy -S -R .bss -R .data -R .reginfo \ + -O srec r46kstub.out r46kstub.hex + +Limitations: stubinit.S deliberately forces the PC (which is a 64-bit +register) to contain a legitimate sign-extended 32-bit value. This was +done to cope with a bug in gdb-4.16, which does _not_ properly sign-extend +the initial PC when it loads a program. This means that you cannot use +the "set" command to load an unmapped sixty-four bit virtual address into +the PC, as you can for all other registers. + +Please send bug reports, comments, or suggestions for improvement to: + +C. M. Heard +VVNET, Inc. phone: +1 408 247 9376 +4040 Moorpark Ave. Suite 206 fax: +1 408 244 3651 +San Jose, CA 95117 USA e-mail: heard@vvnet.com -- cgit v1.2.3