====== Differences ====== This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
soc:2008:stefanha:project_plan:start [2008/05/21 01:05] stefanha |
soc:2008:stefanha:project_plan:start [2008/05/22 23:27] (current) stefanha |
||
---|---|---|---|
Line 25: | Line 25: | ||
Additional GDB protocol commands provide more advanced features, like hardware breakpoints, or optimizations of existing commands, like binary memory dumps for faster transfer. | Additional GDB protocol commands provide more advanced features, like hardware breakpoints, or optimizations of existing commands, like binary memory dumps for faster transfer. | ||
- | I will start by implementing the minimal set of commands. If we find that additional commands are useful in practice, I will also implement them. | + | I will implement the minimal set of commands. If we find that additional commands are useful in practice, I will also implement them. |
=== Execution Model === | === Execution Model === | ||
Line 46: | Line 46: | ||
=== Transports === | === Transports === | ||
- | Several transports are supported by GDB including serial, UDP, and TCP. Serial is simple and serves as a good starting point. UDP and TCP are more flexible but also more complex. After discussion with mcb30, it looks like UDP is in scope and should be implemented. I believe TCP is not a big win if UDP support is already in place. | + | Several transports are supported by GDB including serial, UDP, and TCP. Serial is simple and serves as a good starting point. UDP and TCP are more flexible but also more complex. After discussion with mcb30, it looks like UDP is in scope and should be implemented. |
+ | |||
+ | I believe TCP is not a big win if UDP support is already in place. The problem with TCP is that it depends on the TCP/IP stack and therefore blacklists a lot of gPXE code for breakpoints, due to isolation issues discussed above. | ||
==== Milestones and Timeline ==== | ==== Milestones and Timeline ==== | ||
- | * Set up IDT and write interrupt handler. | + | * **Week 1** |
- | * Decide on interface for GDB transports and refactor serial console code to support serving as a GDB transport. | + | - Set up IDT and write interrupt handler. |
- | * Implement GDB protocol encoder and decoder. | + | * **Week 2** |
- | * Implement memory read/write, including GDB scripts as tests. | + | - Decide on interface for GDB transports and refactor serial console code to support serving as a GDB transport. |
- | * Implement register read/write, including GDB scripts as tests. | + | - Implement GDB protocol encoder and decoder. |
- | * Implement continue and single-step, including GDB scripts as tests. | + | * **Week 3** |
- | * Ensure that breakpoints are working, including GDB scripts as tests. | + | - Implement memory read/write, including GDB scripts as tests. |
- | * Implement UDP transport. | + | - Implement register read/write, including GDB scripts as tests. |
- | * Documentation (how to debug, how to run tests). | + | * **Week 4** |
- | * (Possibly) implement TCP transport and support TCP listen sockets. | + | - Implement continue and single-step, including GDB scripts as tests. |
+ | - Ensure breakpoints are working, including GDB scripts as tests. | ||
+ | * **Week 5** | ||
+ | - Ensure source-level debugging works. | ||
+ | * **Week 6** | ||
+ | - Half-term buffer for any schedule slip. | ||
+ | * **Week 7** | ||
+ | - Implement UDP transport. | ||
+ | * **Week 8** | ||
+ | - Documentation (how to debug, how to run tests). | ||
+ | * **Week 9** | ||
+ | - Usability and testing. Work with other gPXE developers, encourage remote GDB usage, fix issues. | ||
* (Possibly) support running as a gPXE process for memory peek/poke during execution. | * (Possibly) support running as a gPXE process for memory peek/poke during execution. | ||
+ | * (Possibly) refactor PXE UDP to bypass IP stack? | ||
+ | * (Possibly) implement TCP transport and support TCP listen sockets. | ||
==== Reference links ==== | ==== Reference links ==== |