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

4.104.114.84.95
Last change on this file since 45477a3 was 2f89140, checked in by Joel Sherrill <joel.sherrill@…>, on 03/08/02 at 16:32:07

2001-03-05 Greg Menke <gregory.menke@…>

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