[Lldb-commits] [PATCH] D16508: NetBSD: Define initial RegisterContextNetBSD_x86_64
Greg Clayton via lldb-commits
lldb-commits at lists.llvm.org
Mon Jan 25 10:45:39 PST 2016
clayborg added a comment.
This kind of stuff:
struct UserArea {
GPR gpr;
FPR fpr;
DBG dbg;
};
Was done on MacOSX systems because we have thread_get_state() and thread_set_state() that take a flavor (enumeration) that specifies which registers we should read. It also takes a pointer to a structure to fill in and the size in bytes of that structure. For this reason, we ended up making a UserArea that looked like above.
What you should be doing for your register context is duplicating the structures that are in the system headers so that they can be compiled on a system without these header files. So, this should be a duplication (don't use the exact same names for the structure types):
typedef struct {
__gregset_t __gregs;
__greg_t _mc_tlsbase;
__fpregset_t __fpregs;
} mcontext_t;
Then if you have only one "read all registers" call that fills in all registers, you should make any single register read kick off a single read of all registers and mark all registers as valid. For MacOSX, a register read will trigger a thread_get_state() and the GPR, FPU or DBG register flavor will be used to fill in the register context for the thread and all registers one of GPR, FPU, DBG will be marked as valid. If you have an API on your system that allows each register to be read/written individually, you could do them separately and mark each individual register valid after it is read. So this really depends on your system interface for reading registers. There is usually ptrace() calls for most unix based systems to read registers and you end up reading them in sets.
The other thing to note, is that LLDB expects your registers numbers to start at zero, and never have any register number gaps.
So as long as your changes adhere to what was said above, it is a good start.
Repository:
rL LLVM
http://reviews.llvm.org/D16508
More information about the lldb-commits
mailing list