• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1### Description
2
3<!-- Please include a brief description of what is being added/changed -->
4
5e.g: This PR implements the `foobar` extension, based off the GDB documentation [here](https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html).
6
7Closes #(issue number) <!-- if appropriate -->
8
9### API Stability
10
11- [ ] This PR does not require a breaking API change
12
13<!-- If it does require making a breaking API change, please elaborate why -->
14
15### Checklist
16
17- Implementation
18  - [ ] `cargo build` compiles without `errors` or `warnings`
19  - [ ] `cargo clippy` runs without `errors` or `warnings`
20  - [ ] `cargo fmt` was run
21  - [ ] All tests pass
22- Documentation
23  - [ ] rustdoc + approprate inline code comments
24  - [ ] Updated CHANGELOG.md
25  - [ ] (if appropriate) Added feature to "Debugging Features" in README.md
26- _If implementing a new protocol extension IDET_
27  - [ ] Included a basic sample implementation in `examples/armv4t`
28  - [ ] Included output of running `examples/armv4t` with `RUST_LOG=trace` + any relevant GDB output under the "Validation" section below
29  - [ ] Confirmed that IDET can be optimized away (using `./scripts/test_dead_code_elim.sh` and/or `./example_no_std/check_size.sh`)
30  - [ ] **OR** Implementation requires adding non-optional binary bloat (please elaborate under "Description")
31- _If upstreaming an `Arch` implementation_
32  - [ ] I have tested this code in my project, and to the best of my knowledge, it is working as intended.
33
34<!-- If you are implementing `gdbstub` in an open-source project, consider updating the README.md's "Real World Examples" section to link back to your project! -->
35
36### Validation
37
38<!-- example output, from https://github.com/daniel5151/gdbstub/pull/54 -->
39
40<details>
41<summary>GDB output</summary>
42
43```
44!!!!! EXAMPLE OUTPUT !!!!!
45
46(gdb) info mem
47Using memory regions provided by the target.
48Num Enb Low Addr   High Addr  Attrs
490   y  	0x00000000 0x100000000 rw nocache
50```
51
52</details>
53
54<details>
55<summary>armv4t output</summary>
56
57```
58!!!!! EXAMPLE OUTPUT !!!!!
59
60    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
61     Running `target/debug/examples/armv4t`
62loading section ".text" into memory from [0x55550000..0x55550078]
63Setting PC to 0x55550000
64Waiting for a GDB connection on "127.0.0.1:9001"...
65Debugger connected from 127.0.0.1:37142
66 TRACE gdbstub::gdbstub_impl > <-- +
67 TRACE gdbstub::gdbstub_impl > <-- $qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+;xmlRegisters=i386#6a
68 TRACE gdbstub::protocol::response_writer > --> $PacketSize=1000;vContSupported+;multiprocess+;QStartNoAckMode+;ReverseContinue+;ReverseStep+;QDisableRandomization+;QEnvironmentHexEncoded+;QEnvironmentUnset+;QEnvironmentReset+;QStartupWithShell+;QSetWorkingDir+;swbreak+;hwbreak+;qXfer:features:read+;qXfer:memory-map:read+#e4
69 TRACE gdbstub::gdbstub_impl              > <-- +
70 TRACE gdbstub::gdbstub_impl              > <-- $vMustReplyEmpty#3a
71 INFO  gdbstub::gdbstub_impl              > Unknown command: vMustReplyEmpty
72 TRACE gdbstub::protocol::response_writer > --> $#00
73 TRACE gdbstub::gdbstub_impl              > <-- +
74 TRACE gdbstub::gdbstub_impl              > <-- $QStartNoAckMode#b0
75 TRACE gdbstub::protocol::response_writer > --> $OK#9a
76 TRACE gdbstub::gdbstub_impl              > <-- +
77 TRACE gdbstub::gdbstub_impl              > <-- $Hgp0.0#ad
78 TRACE gdbstub::protocol::response_writer > --> $OK#9a
79 TRACE gdbstub::gdbstub_impl              > <-- $qXfer:features:read:target.xml:0,ffb#79
80 TRACE gdbstub::protocol::response_writer > --> $l<target version="1.0"><!-- custom override string --><architecture>armv4t</architecture></target>#bb
81 TRACE gdbstub::gdbstub_impl              > <-- $qTStatus#49
82 INFO  gdbstub::gdbstub_impl              > Unknown command: qTStatus
83 TRACE gdbstub::protocol::response_writer > --> $#00
84 TRACE gdbstub::gdbstub_impl              > <-- $?#3f
85 TRACE gdbstub::protocol::response_writer > --> $S05#b8
86 TRACE gdbstub::gdbstub_impl              > <-- $qfThreadInfo#bb
87 TRACE gdbstub::protocol::response_writer > --> $mp01.01#cd
88 TRACE gdbstub::gdbstub_impl              > <-- $qsThreadInfo#c8
89 TRACE gdbstub::protocol::response_writer > --> $l#6c
90 TRACE gdbstub::gdbstub_impl              > <-- $qAttached:1#fa
91GDB queried if it was attached to a process with PID 1
92 TRACE gdbstub::protocol::response_writer > --> $1#31
93 TRACE gdbstub::gdbstub_impl              > <-- $Hc-1#09
94 TRACE gdbstub::protocol::response_writer > --> $OK#9a
95 TRACE gdbstub::gdbstub_impl              > <-- $qC#b4
96 INFO  gdbstub::gdbstub_impl              > Unknown command: qC
97 TRACE gdbstub::protocol::response_writer > --> $#00
98 TRACE gdbstub::gdbstub_impl              > <-- $g#67
99 TRACE gdbstub::protocol::response_writer > --> $00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000107856341200005555xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx10000000#66
100 TRACE gdbstub::gdbstub_impl              > <-- $qfThreadInfo#bb
101 TRACE gdbstub::protocol::response_writer > --> $mp01.01#cd
102 TRACE gdbstub::gdbstub_impl              > <-- $qsThreadInfo#c8
103 TRACE gdbstub::protocol::response_writer > --> $l#6c
104 TRACE gdbstub::gdbstub_impl              > <-- $qXfer:memory-map:read::0,ffb#18
105 TRACE gdbstub::protocol::response_writer > --> $l<?xml version="1.0"?>
106<!DOCTYPE memory-map
107    PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
108            "http://sourceware.org/gdb/gdb-memory-map.dtd">
109<memory-map>
110    <memory type="ram" start="0x0" length="0x100000000"/>
111</memory-map>#75
112 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
113 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
114 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffc,4#35
115 TRACE gdbstub::protocol::response_writer > --> $00000000#7e
116 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
117 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
118 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffc,4#35
119 TRACE gdbstub::protocol::response_writer > --> $00000000#7e
120 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,2#5f
121 TRACE gdbstub::protocol::response_writer > --> $04b0#f6
122 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffe,2#35
123 TRACE gdbstub::protocol::response_writer > --> $0000#7a
124 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffc,2#33
125 TRACE gdbstub::protocol::response_writer > --> $0000#7a
126 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,2#5f
127 TRACE gdbstub::protocol::response_writer > --> $04b0#f6
128 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffe,2#35
129 TRACE gdbstub::protocol::response_writer > --> $0000#7a
130 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffc,2#33
131 TRACE gdbstub::protocol::response_writer > --> $0000#7a
132 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
133 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
134 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffc,4#35
135 TRACE gdbstub::protocol::response_writer > --> $00000000#7e
136 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
137 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
138 TRACE gdbstub::gdbstub_impl              > <-- $m5554fffc,4#35
139 TRACE gdbstub::protocol::response_writer > --> $00000000#7e
140 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
141 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
142 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
143 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
144 TRACE gdbstub::gdbstub_impl              > <-- $m55550000,4#61
145 TRACE gdbstub::protocol::response_writer > --> $04b02de5#26
146 TRACE gdbstub::gdbstub_impl              > <-- $m0,4#fd
147 TRACE gdbstub::protocol::response_writer > --> $00000000#7e
148```
149</details>
150