[lldb-dev] Offset Calculations for Registers on Linux x86_64

Greg Clayton via lldb-dev lldb-dev at lists.llvm.org
Thu Aug 13 09:42:45 PDT 2015


All registers are placed into one large buffer that contains everything. All offsets should be the global offset in the register context's data. Typically we should see:


GPR
   rax offset 0
   rbx offset 8
   ....
FPR
   mm0 offset 128
   mm1 offset 160
   ...
EXC
   fpsr offset 256
   ...


So the offsets should be based on the offset from the start of the one large buffer that contains all register values.

> On Aug 13, 2015, at 2:26 AM, Abhishek Aggarwal via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> 
> 
> Hello 
> 
> I have a question regarding offset calculations of registers for x86_64 architecture. In file source/Plugins/Process/Utility/RegisterInfos_x86_64.h:
> 
> The macro FPR_OFFSET(reg) calculates the offset of floating point register 'reg' with respect to 'UserArea' struct while GPR_OFFSET(reg) calculates it wrt to 'GPR' struct. Is there any specific reason of calculating the offsets of floating point registers wrt 'UserArea' struct and not wrt 'FPR' struct (defined in source/Plugins/Process/Utility/RegisterContext_x86.h) ?
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev



More information about the lldb-dev mailing list