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

Reply via email to