[Lldb-commits] [lldb] r216372 - Add a little documentation for the register kinds
Jason Molenda
jmolenda at apple.com
Mon Aug 25 01:03:10 PDT 2014
Author: jmolenda
Date: Mon Aug 25 03:03:10 2014
New Revision: 216372
URL: http://llvm.org/viewvc/llvm-project?rev=216372&view=rev
Log:
Add a little documentation for the register kinds
and the method to convert between them.
Modified:
lldb/trunk/include/lldb/Target/RegisterContext.h
lldb/trunk/include/lldb/lldb-enumerations.h
Modified: lldb/trunk/include/lldb/Target/RegisterContext.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/RegisterContext.h?rev=216372&r1=216371&r2=216372&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/RegisterContext.h (original)
+++ lldb/trunk/include/lldb/Target/RegisterContext.h Mon Aug 25 03:03:10 2014
@@ -86,7 +86,42 @@ public:
bool
CopyFromRegisterContext (lldb::RegisterContextSP context);
-
+
+ //------------------------------------------------------------------
+ /// Convert from a given register numbering scheme to the lldb register
+ /// numbering scheme
+ ///
+ /// There may be multiple ways to enumerate the registers for a given
+ /// architecture. ABI references will specify one to be used with
+ /// DWARF, the register numberings from stabs (aka "gcc"), there may
+ /// be a variation used for eh_frame unwind instructions (e.g. on Darwin),
+ /// and so on. Register 5 by itself is meaningless - RegisterKind
+ /// enumeration tells you what context that number should be translated as.
+ ///
+ /// Inside lldb, register numbers are in the eRegisterKindLLDB scheme;
+ /// arguments which take a register number should take one in that
+ /// scheme.
+ ///
+ /// eRegisterKindGeneric is a special numbering scheme which gives us
+ /// constant values for the pc, frame register, stack register, etc., for
+ /// use within lldb. They may not be defined for all architectures but
+ /// it allows generic code to translate these common registers into the
+ /// lldb numbering scheme.
+ ///
+ /// This method translates a given register kind + register number into
+ /// the eRegisterKindLLDB register numbering.
+ ///
+ /// @param [in] kind
+ /// The register numbering scheme (RegisterKind) that the following
+ /// register number is in.
+ ///
+ /// @param [in] num
+ /// A register number in the 'kind' register numbering scheme.
+ ///
+ /// @return
+ /// The equivalent register number in the eRegisterKindLLDB
+ /// numbering scheme, if possible, else LLDB_INVALID_REGNUM.
+ //------------------------------------------------------------------
virtual uint32_t
ConvertRegisterKindToRegisterNumber (lldb::RegisterKind kind, uint32_t num) = 0;
Modified: lldb/trunk/include/lldb/lldb-enumerations.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-enumerations.h?rev=216372&r1=216371&r2=216372&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-enumerations.h (original)
+++ lldb/trunk/include/lldb/lldb-enumerations.h Mon Aug 25 03:03:10 2014
@@ -157,13 +157,16 @@ namespace lldb {
//----------------------------------------------------------------------
// Register numbering types
+ // See RegisterContext::ConvertRegisterKindToRegisterNumber to convert
+ // any of these to the lldb internal register numbering scheme
+ // (eRegisterKindLLDB).
//----------------------------------------------------------------------
typedef enum RegisterKind
{
eRegisterKindGCC = 0, // the register numbers seen in eh_frame
eRegisterKindDWARF, // the register numbers seen DWARF
eRegisterKindGeneric, // insn ptr reg, stack ptr reg, etc not specific to any particular target
- eRegisterKindGDB, // the register numbers gdb uses (matches stabs numbers?)
+ eRegisterKindGDB, // the register numbers gdb uses (matches stabs numbers)
eRegisterKindLLDB, // lldb's internal register numbers
kNumRegisterKinds
} RegisterKind;
More information about the lldb-commits
mailing list