NativeProcessProtocol breakpoint setting

Hey Greg,

For this method in NativeProcessProtocol:

virtual Error
SetBreakpoint (lldb::addr_t addr, size_t size, bool hardware);

What exactly is the size meant to represent?

Also, is this method meant to be able to succeed if the breakpoint address isn’t yet loaded, or should it fail if the address isn’t loaded yet and assume that the caller would be watching for module load events and handle buffering breakpoints until the address is available?

Can you point me to where debugserver implements the equivalent?


Can you point me to where debugserver implements the equivalent?

I found this part in MachProcess.cpp on the debugserver side.

Other questions still open.

This size is primarily for ARM and Thumb breakpoints. The NativeProcessProtocol and NativeThreadProtocol protocol will be "I will do exactly what you tell me" and they shouldn't need to know how to dig through the object files to find the CPU map that shows exactly which addresses are ARM and which are Thumb. Sending the size field of 2 (for Thumb) and 4 (for ARM) helps the protocol to do its job. Most architectures will only have 1 size that is used (1 byte for x86 and x86_64 and 4 for PowerPC, etc). So this can mostly be ignored for non ARM targets.

In debugserver, the Z packets that set the breakpoints specify the size.


Great, thanks Greg!

Size is to handle things architectures like arm where you have two breakpoint sizes, the Thumb breakpoint and the Arm breakpoint. Since you don't want the lower level NativeProcessProtocol to have to call back into the symbols layer, it will need to be told this in general.

If the address is not loaded yet, the request should fail. The layers above this will manage trying again when appropriate.


Thanks, Jim!