OpenOCD
Todo List
Class adapter_driver
We need a per-instance structure too, and changes to pass that structure to the driver. Instances can for example be in either SWD or JTAG modes. This will help remove globals, and eventually to cope with systems which have more than one such debugging interface.
Global adapter_register_commands (struct command_context *ctx)
Remove internal assumptions that all debug adapters use JTAG for transport. Various types and data structures are not named generically.
Global arm11_check_init (struct arm11_common *arm11)
TODO: this needs further scrutiny because arm11_debug_entry() never gets called. (WHY NOT?) As a result we don't read the actual register states from the target.
Global arm11_debug_entry (struct arm11_common *arm11)
TODO: Test drain write buffer.
Global arm11_examine (struct target *target)
TODO: reserve one brp slot if we allow breakpoints during step
Global arm11_read_memory_inner (struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer, bool arm11_config_memrw_no_increment)

TODO: buffer cast to uint32_t* causes alignment warnings

TODO: check if buffer cast to uint32_t* and uint16_t* might cause alignment problems

Global arm11_step (struct target *target, int current, target_addr_t address, int handle_breakpoints)

TODO: check if disabling IRQs might be a good idea here. Alternatively the VCR might be something worth looking into.

TODO: check if break-/watchpoints make any sense at all in combination with this.

TODO: Thumb not supported here

Global arm11_write_memory_inner (struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer, bool no_increment)
TODO: buffer cast to uint32_t* causes alignment warnings
Global flash_drivers []
Make this dynamically extendable with loadable modules.
Global jtag_add_sleep (uint32_t us)
Here, keep_alive() appears to be a layering violation!!!
Global jtag_add_tms_seq (unsigned nbits, const uint8_t *seq, enum tap_state t)
Update naming conventions to stop assuming everything is JTAG.
Global jtag_callback_t )(jtag_callback_data_t data0, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
Make that behavior consistent.
Global jtag_event_handler_t )(enum jtag_event event, void *priv)
Change to return void or define a use for its return code.
Class jtag_interface

We need a per-instance structure too, and changes to pass that structure to the driver. Instances can for example be in either SWD or JTAG modes. This will help remove globals, and eventually to cope with systems which have more than one such debugging interface.

Rename; perhaps "debug_driver". This isn't an interface, it's a driver! Also, not all drivers support JTAG.

Global jtag_tap_init (struct jtag_tap *tap)
cope better with ir_length bigger than 32 bits
File lpc2000.c
Provide a way to update CCLK after declaring the flash bank. The value which is correct after chip reset will rarely still work right after the clocks switch to use the PLL (e.g. 4MHz --> 100 MHz).
Global riscv_add_breakpoint (struct target *target, struct breakpoint *breakpoint)
check RVC for size/alignment
Global target_resume (struct target *target, int current, target_addr_t address, int handle_breakpoints, int debug_execution)
Resolve the ambiguity about what the "debug_execution" flag signifies. For example, Target implementations don't agree on how it relates to invalidation of the register cache, or to whether breakpoints and watchpoints should be enabled. (It would seem wrong to enable breakpoints when running downloaded "helper" algorithms (debug_execution true), since the breakpoints would be set to match target firmware being debugged, not the helper algorithm.... and enabling them could cause such helpers to malfunction (for example, by overwriting data with a breakpoint instruction. On the other hand the infrastructure for running such helpers might use this procedure but rely on hardware breakpoint to detect termination.)
Global target_write_memory (struct target *target, target_addr_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
TODO: Really buffer should have been defined as "const void *" and buffer should have been aligned to size in the host memory.
Global trace_status_t
This enum is one of the few things in this file related to hardware tracing ...
Global xscale_read_core_reg (struct target *target, struct reg *r, int num, enum arm_mode mode)
add debug handler support for core register reads
Global xscale_read_phys_memory (struct target *target, target_addr_t address, uint32_t size, uint32_t count, uint8_t *buffer)
: provide a non-stub implementation of this routine.
Global xscale_write_core_reg (struct target *target, struct reg *r, int num, enum arm_mode mode, uint8_t *value)
add debug handler support for core register writes
Global xscale_write_phys_memory (struct target *target, target_addr_t address, uint32_t size, uint32_t count, const uint8_t *buffer)
: provide a non-stub implementation of this routine.