Browse Source

Update README to use --rbb-port

pull/113/head
Tim Newsome 9 years ago
parent
commit
c354cfe89c
  1. 136
      README.md

136
README.md

@ -111,18 +111,83 @@ To end the simulation from the debug prompt, press `<control>-<c>` or:
Debugging With Gdb Debugging With Gdb
------------------ ------------------
An alternative to interactive debug mode is to attach using gdb. When invoked An alternative to interactive debug mode is to attach using gdb. Because spike
with '--gdb-port <port>' spike will listen on the given TCP port. It's tries to be like real hardware, you also need OpenOCD to do that. OpenOCD
possible to attach with gdb (that has riscv support compiled in) by entering doesn't currently know about address translation, so it's not possible to
`target remote localhost:<port>` in gdb. For example, in one shell run: easily debug programs that are run under `pk`. We'll use the following test
program:
``` ```
spike --gdb-port 9824 pk tests/debug $ cat rot13.c
char text[] = "Vafgehpgvba frgf jnag gb or serr!";
// Don't use the stack, because sp isn't set up.
volatile int wait = 1;
int main()
{
while (wait)
;
// Doesn't actually go on the stack, because there are lots of GPRs.
int i = 0;
while (text[i]) {
char lower = text[i] | 32;
if (lower >= 'a' && lower <= 'm')
text[i] += 13;
else if (lower > 'm' && lower <= 'z')
text[i] -= 13;
i++;
}
while (!wait)
;
}
$ cat spike.lds
OUTPUT_ARCH( "riscv" )
SECTIONS
{
. = 0x10010000;
.text : { *(.text) }
.data : { *(.data) }
}
$ riscv64-unknown-elf-gcc -g -Og -o rot13-64.o -c rot13.c
$ riscv64-unknown-elf-gcc -g -Og -T spike.lds -nostartfiles -o rot13-64 rot13-64.o
``` ```
Then in a second shell you may do something like: To debug this program, first run spike telling it to listen for OpenOCD:
``` ```
tnewsome@compy-vm:~/SiFive/riscv-isa-sim$ $RISCV/bin/riscv64-unknown-elf-gdb tests/debug $ spike --rbb-port=9824 -m0x10000000:0x20000 rot13-64
GNU gdb (GDB) 7.11.50.20160212-git Listening for remote bitbang connection on port 9824.
```
In a separate shell run OpenOCD with the appropriate configuration file:
```
$ cat spike.cfg
interface remote_bitbang
remote_bitbang_host localhost
remote_bitbang_port 9824
set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME
gdb_report_data_abort enable
init
halt
$ openocd -f spike.cfg
Open On-Chip Debugger 0.10.0-dev-00002-gc3b344d (2017-06-08-12:14)
...
riscv.cpu: target state: halted
```
In yet another shell, start your gdb debug session:
```
tnewsome@compy-vm:~/SiFive/spike-test$ riscv64-unknown-elf-gdb rot13-64
GNU gdb (GDB) 7.12.50.20170505-git
Copyright (C) 2016 Free Software Foundation, Inc. Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it. This is free software: you are free to change and redistribute it.
@ -136,45 +201,26 @@ Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>. <http://www.gnu.org/software/gdb/documentation/>.
For help, type "help". For help, type "help".
Type "apropos word" to search for commands related to "word"... Type "apropos word" to search for commands related to "word"...
Reading symbols from tests/debug...done. Reading symbols from rot13-64...done.
(gdb) target remote localhost:9824 (gdb) target remote localhost:3333
Remote debugging using localhost:9824 Remote debugging using localhost:3333
0x00000000000101f0 in main () 0x000000001001000a in main () at rot13.c:8
at /home/tnewsome/SiFive/riscv-isa-sim/tests/debug.c:20 8 while (wait)
20 while (i) (gdb) print wait
(gdb) p i $1 = 1
$1 = 42 (gdb) print wait=0
(gdb) list
15 volatile int i = 42;
16 const char *text = "constant\n";
17 int threshold = 7;
18
19 // Wait for the debugger to get us out of this loop.
20 while (i)
21 ;
22
23 printf("%s", text);
24 for (int y=0; y < 10; y++) {
(gdb) p i=0
$2 = 0 $2 = 0
(gdb) b print_row (gdb) print text
Breakpoint 1 at 0x10178: file /home/tnewsome/SiFive/riscv-isa-sim/tests/debug.c, line 7. $3 = "Vafgehpgvba frgf jnag gb or serr!"
(gdb) b 23
Breakpoint 1 at 0x10010064: file rot13.c, line 23.
(gdb) c (gdb) c
Continuing. Continuing.
Breakpoint 1, print_row (length=0) Breakpoint 1, main () at rot13.c:23
at /home/tnewsome/SiFive/riscv-isa-sim/tests/debug.c:7 23 while (!wait)
7 for (int x=0; x<length; x++) { (gdb) print wait
(gdb) c $4 = 0
Continuing. (gdb) print text
...
Breakpoint 1, print_row (length=1)
at /home/tnewsome/SiFive/riscv-isa-sim/tests/debug.c:7
7 for (int x=0; x<length; x++) {
(gdb) delete breakpoints
Delete all breakpoints? (y or n) y
(gdb) c
Continuing.
Remote connection closed
(gdb)
``` ```

Loading…
Cancel
Save