The attached patches implement accessing peripheral registers on bare-metal targets. Typically, these registers are memory-mapped, so one can poke at them using memory operations, but it's far from convenient. Also, on some targets the registers might require a custom way of access, which makes things even less convenient. This patch allows target XML to describe 'spaces' - contains of registers, which can be further grouped. Given that descrpiption, GDB allows one to do something like: (gdb) print $io.GPIO_PORTF.GPIO_PORTFDIR $7 = -1 to access registers. One can also do (gdb) ptype $io to see top-level register groups in space 'io', and so find the desired register. Internally, new qXfer object, called 'spaces' is used to implement this functionality. Remote target is in position to use any mechanism it sees fit to access the registers. However, there's also a shortcut that allow the target xml to specify that space is memory-mapped, and GDB will use ordinary memory operations. One can therefore write target xml that will enable register browsing with unmodified remote side - in fact I've used pristine OpenOCD to test this patch. This was written back in 2006 by Jim Blandy, Daniel Jacobowitz and myself, and was used in a product for that time, so somewhat time-tested. What I post is functional, but it does not yet add MI integration and in particular support for read-sensitive registers - those where reading has side effects, for which frontend should take special care. These bits are somewhat tricky, so before posting a complete patch I'd appreciate feedback on the current state. Any big design objections, or any other guidance? Thanks, -- Vladimir Prus CodeSourcery / Mentor Embedded http://www.mentor.com/embedded-software/