source: rtems/c/src/lib/libbsp/mips/shared/gdbstub/README @ fc82e71

4.104.114.84.95
Last change on this file since fc82e71 was fc82e71, checked in by Joel Sherrill <joel.sherrill@…>, on 02/08/02 at 21:26:00

2002-02-08 Joel Sherrill <joel@…>

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