Hello people,
I'm using lldb on an Intel Mac (little endian), and working on a stub for a
program that emulates a PowerPC (big endian).
The GDB protocol says this about commands for reading registers:
> `XX...'
> Each byte of register data is described by two hex digits. The bytes with the
> register are transmitted in target byte order. The size of each register and
> their position within the `g' packet are determined by the GDB internal
> macros REGISTER_RAW_SIZE and REGISTER_NAME macros. The specification of
> several standard g packets is specified below.
So I'm doing just that, replying in big endian. However,
RegisterContextLLDB::ReadGPRValue isn't endian-aware:
GetRegisterContext()->ReadRegister (where RegisterContext is a
GDBRemoteRegisterContext) reads my big endian response and writes it one byte
at a time in the register values buffer, effectively swapping it.
From my analysis, GDBRemoteRegisterContext::ReadRegister could do the swapping
transparently, but GetRegisterSet (among others?) would still return swapped
values; otherwise, using the register metadata, it should be possible to do the
swapping when the values are read.
How hard would it be to fix lldb? Would I be better off doing a quick hack in
my own stub to throw little endian values at lldb in the short term?
Félix
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev