forked from Imagelibrary/rtems
bsps: Move GDB stubs to bsps
This patch is a part of the BSP source reorganization. Update #3285.
This commit is contained in:
151
bsps/mips/shared/gdbstub/README
Normal file
151
bsps/mips/shared/gdbstub/README
Normal file
@@ -0,0 +1,151 @@
|
||||
/*****************************************************/
|
||||
|
||||
Debugged this stub against the MongooseV bsp. Relies on putting break
|
||||
instructions on breakpoints and step targets- normal stuff, and does not
|
||||
employ hardware breakpoint support at this time. As written, a single
|
||||
breakpoint in a loop will not be reasserted unless the user steps or has
|
||||
a 2nd one, since breakpoints are only reset when the gdb stub is
|
||||
re-entered. A useful enhancement would be to fix the break instruction
|
||||
management so the stub could invisibly put a 2nd break after the 1st
|
||||
"official" one so it can silently reset breakpoints. Shouldn't be too
|
||||
hard, mostly a matter of working it out.
|
||||
|
||||
This was tested only against an R3000 MIPS. It should work OK on a
|
||||
R4000. Needs to be tested at some point.
|
||||
|
||||
This stub supports threads as implemented by gdb 5 and doesn't have any
|
||||
bugs I'm aware of.
|
||||
|
||||
Greg Menke
|
||||
3/5/2002
|
||||
|
||||
/*****************************************************/
|
||||
|
||||
|
||||
The contents of this directory are based upon the "r46kstub.tar.gz" package
|
||||
released to the net by
|
||||
|
||||
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
|
||||
|
||||
This package was released in the September 1996 time frame for use
|
||||
with gdb 4.16 and an IDT R4600 Orion. The stub was modified to support
|
||||
R3000 class CPUs and to work within the mips-rtems exeception processing
|
||||
framework.
|
||||
|
||||
THe file memlimits.h could end up being target board dependent. If
|
||||
this is the case, copy it to your BSP directory and modify as necessary.
|
||||
|
||||
--joel
|
||||
8 February 2002
|
||||
|
||||
Original README
|
||||
===============
|
||||
|
||||
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:
|
||||
Reference in New Issue
Block a user