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