source: rtems/bsps/mips/shared/gdbstub/README @ fd67814

5
Last change on this file since fd67814 was fd67814, checked in by Sebastian Huber <sebastian.huber@…>, on 04/23/18 at 10:06:14

bsps: Move GDB stubs to bsps

This patch is a part of the BSP source reorganization.

Update #3285.

  • Property mode set to 100644
File size: 7.7 KB
Line 
1/*****************************************************/
2
3Debugged this stub against the MongooseV bsp.  Relies on putting break
4instructions on breakpoints and step targets- normal stuff, and does not
5employ hardware breakpoint support at this time.  As written, a single
6breakpoint in a loop will not be reasserted unless the user steps or has
7a 2nd one, since breakpoints are only reset when the gdb stub is
8re-entered.  A useful enhancement would be to fix the break instruction
9management so the stub could invisibly put a 2nd break after the 1st
10"official" one so it can silently reset breakpoints.  Shouldn't be too
11hard, mostly a matter of working it out.
12
13This was tested only against an R3000 MIPS.  It should work OK on a
14R4000.  Needs to be tested at some point.
15
16This stub supports threads as implemented by gdb 5 and doesn't have any
17bugs I'm aware of.
18
19Greg Menke
203/5/2002
21
22/*****************************************************/
23
24
25The contents of this directory are based upon the "r46kstub.tar.gz" package
26released to the net by
27
28        C. M. Heard
29        VVNET, Inc.                           phone:  +1 408 247 9376
30        4040 Moorpark Ave. Suite 206          fax:    +1 408 244 3651
31        San Jose, CA 95117 USA                e-mail: heard@vvnet.com
32
33This package was released in the September 1996 time frame for use
34with gdb 4.16 and an IDT R4600 Orion.   The stub was modified to support
35R3000 class CPUs and to work within the mips-rtems exeception processing
36framework.
37
38THe file memlimits.h could end up being target board dependent.  If
39this is the case, copy it to your BSP directory and modify as necessary.
40
41--joel
428 February 2002
43
44Original README
45===============
46
47The r46kstub directory and its compressed archive (r46kstub.tar.gz) contain
48the 9/29/96 source code snapshot for a ROM-resident gdb-4.16 debug agent
49(aka stub) for the IDT R4600 Orion processor.  It is based on the stub for
50the Hitachi SH processor written by Ben Lee and Steve Chamberlain and
51supplied with the gdb-4.16 distribution;  that stub in turn was "originally
52based on an m68k software stub written by Glenn Engel at HP, but has changed
53quite a bit".  The modifications for the R4600 were contributed by C. M.
54Heard of VVNET, Inc. and were based in part on the Algorithmics R4000 version
55of Phil Bunce's PMON program.
56
57The distribution consists of the following files:
58
59-rw-r--r--   1    1178 Sep 29 16:34 ChangeLog
60-rw-r--r--   1     748 Jul 26 01:18 Makefile
61-rw-r--r--   1    6652 Sep 29 16:34 README
62-rw-r--r--   1    1829 May 21 02:02 gdb_if.h
63-rw-r--r--   1    3745 Sep 29 14:03 ioaddr.h
64-rw-r--r--   1    2906 Sep 29 14:39 limits.h
65-rw-r--r--   1    6552 May 23 00:17 mips_opcode.h
66-rw-r--r--   1   14017 May 21 02:04 r4600.h
67-rw-r--r--   1   23874 Jul 21 20:31 r46kstub.c
68-rw-r--r--   1    1064 Jul  3 12:35 r46kstub.ld
69-rw-r--r--   1   13299 Sep 29 16:24 stubinit.S
70
71With the exception of mips_opcode.h, which is a slightly modified version
72of a header file contributed by Ralph Campbell to 4.4 BSD and is therefore
73copyrighted by the UC Regents, all of the source files have been dedicated
74by their authors to the public domain.  Use them as you wish, but do so
75at your own risk!  The authors accept _no_ responsibility for any errors.
76
77The debug agent contained herein is at this writing in active use at VVNET
78supporting initial hardware debug and board bring-up of an OC-12 ATM probe
79board.  It uses polled I/O on a 16C450 UART.  We had originally intended to
80add support for interrupts to allow gdb to break in on a running program,
81but we have found that this is not really necessary since the reset button
82will accomplish the same purpose (thanks to the MIPS feature of saving the
83program counter in the ErrorEPC register when a reset exception occurs).
84
85Be aware that this stub handles ALL interrupts and exceptions except for
86reset (or NMI) in the same way -- by passing control to the debug command
87loop.  It of course uses the ROM exception vectors to do so.  In order to
88support code that actally needs to use interrupts we use use a more elaborate
89stub that is linked with the downloaded program.  It hooks the RAM exception
90vectors and clears the BEV status bit to gain control.  The ROM-based stub
91is still used in this case for initial program loading.
92
93In order to port this stub to a different platform you will at a minimum
94need to customize the macros in limits.h (which define the limits of readable,
95writeable, and steppable address space) and the I/O addresses in ioaddr.h
96(which define the 16C450 MMIO addresses).  If you use something other than
97a 16C450 UART you will probably also need to modify the portions of stubinit.S
98which deal with the serial port.  I've tried to be careful to respect all the
99architecturally-defined hazards as described in Appendix F of Kane and
100Heinrich, MIPS RISC Architecture, in order to minimize the work in porting
101to 4000-series processors other than the R4600, but no guarantees are offered.
102Support is presently restricted to big-endian addressing, and I've not even
103considered what changes would be needed for little-endian support.
104
105When this stub is built with gcc-2.7.2 and binutils-2.6 you will see a few
106warning messages from the single-step support routine where a cast is used
107to sign-extend a pointer (the next instruction address) into a long long
108(the PC image).  Those warnings are expected;  I've checked the generated
109code and it is doing what I had intended.  But you should not see any other
110warnings or errors.  Here is a log of the build:
111
112mips64orion-idt-elf-gcc -g -Wa,-ahld -Wall -membedded-data \
113        -O3 -c r46kstub.c >r46kstub.L
114r46kstub.c: In function `doSStep':
115r46kstub.c:537: warning: cast to pointer from integer of different size
116r46kstub.c:539: warning: cast to pointer from integer of different size
117r46kstub.c:547: warning: cast to pointer from integer of different size
118r46kstub.c:561: warning: cast to pointer from integer of different size
119r46kstub.c:563: warning: cast to pointer from integer of different size
120r46kstub.c:572: warning: cast to pointer from integer of different size
121r46kstub.c:574: warning: cast to pointer from integer of different size
122r46kstub.c:582: warning: cast to pointer from integer of different size
123r46kstub.c:589: warning: cast to pointer from integer of different size
124r46kstub.c:591: warning: cast to pointer from integer of different size
125r46kstub.c:597: warning: cast to pointer from integer of different size
126r46kstub.c:599: warning: cast to pointer from integer of different size
127r46kstub.c:605: warning: cast to pointer from integer of different size
128r46kstub.c:607: warning: cast to pointer from integer of different size
129r46kstub.c:613: warning: cast to pointer from integer of different size
130r46kstub.c:615: warning: cast to pointer from integer of different size
131r46kstub.c:624: warning: cast to pointer from integer of different size
132r46kstub.c:628: warning: cast to pointer from integer of different size
133r46kstub.c:635: warning: cast to pointer from integer of different size
134r46kstub.c:637: warning: cast to pointer from integer of different size
135mips64orion-idt-elf-gcc -g -Wa,-ahld -Wall -membedded-data \
136        -O3 -c stubinit.S >stubinit.L
137mips64orion-idt-elf-ld -t -s -T r46kstub.ld -Map r46kstub.map -o r46kstub.out
138mips64orion-idt-elf-ld: mode elf32bmip
139stubinit.o
140r46kstub.o
141mips64orion-idt-elf-objcopy -S -R .bss -R .data -R .reginfo \
142                                -O srec r46kstub.out r46kstub.hex
143
144Limitations: stubinit.S deliberately forces the PC (which is a 64-bit
145register) to contain a legitimate sign-extended 32-bit value.  This was
146done to cope with a bug in gdb-4.16, which does _not_ properly sign-extend
147the initial PC when it loads a program.  This means that you cannot use
148the "set" command to load an unmapped sixty-four bit virtual address into
149the PC, as you can for all other registers.
150
151Please send bug reports, comments, or suggestions for improvement to:
Note: See TracBrowser for help on using the repository browser.