diff options
| author | Ed Maste <emaste@freebsd.org> | 2014-04-01 17:27:25 +0000 |
|---|---|---|
| committer | Ed Maste <emaste@freebsd.org> | 2014-04-01 17:27:25 +0000 |
| commit | af58e02d1cba15fd23aede80f8f817dcb5e0884b (patch) | |
| tree | 3ea902492861984a308fe46d6b7b0fdd49d5c452 | |
| parent | 17f416085916e969a19bda802ad3d2968064a8cd (diff) | |
| download | bcm5719-llvm-af58e02d1cba15fd23aede80f8f817dcb5e0884b.tar.gz bcm5719-llvm-af58e02d1cba15fd23aede80f8f817dcb5e0884b.zip | |
mips64: clean up register context storage
Store the gpr data in a DataBufferHeap and use a DataExtractor to
extract register values with appropriate endianness. This avoids hard-
coding the register count, and with some further work would allow this
class to provide generic register context storage for any CPU.
llvm-svn: 205329
| -rw-r--r-- | lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp | 22 | ||||
| -rw-r--r-- | lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.h | 4 |
2 files changed, 14 insertions, 12 deletions
diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp index b95a51130ca..fbf397b933c 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp @@ -21,13 +21,9 @@ RegisterContextCorePOSIX_mips64::RegisterContextCorePOSIX_mips64(Thread &thread, const DataExtractor &fpregset) : RegisterContextPOSIX_mips64(thread, 0, register_info) { - size_t i; - lldb::offset_t offset = 0; - - for (i = 0; i < k_num_gpr_registers_mips64; i++) - { - m_reg[i] = gpregset.GetU64(&offset); - } + m_gpr_buffer.reset(new DataBufferHeap(gpregset.GetDataStart(), gpregset.GetByteSize())); + m_gpr.SetData(m_gpr_buffer); + m_gpr.SetByteOrder(gpregset.GetByteOrder()); } RegisterContextCorePOSIX_mips64::~RegisterContextCorePOSIX_mips64() @@ -63,10 +59,14 @@ RegisterContextCorePOSIX_mips64::WriteFPR() bool RegisterContextCorePOSIX_mips64::ReadRegister(const RegisterInfo *reg_info, RegisterValue &value) { - int reg_num = reg_info->byte_offset / 8; - assert(reg_num < k_num_gpr_registers_mips64); - value = m_reg[reg_num]; - return true; + lldb::offset_t offset = reg_info->byte_offset; + uint64_t v = m_gpr.GetMaxU64(&offset, reg_info->byte_size); + if (offset == reg_info->byte_offset + reg_info->byte_size) + { + value = v; + return true; + } + return false; } bool diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.h b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.h index ca6618d87ab..b496ddd2991 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.h +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.h @@ -10,6 +10,7 @@ #ifndef liblldb_RegisterContextCorePOSIX_mips64_H_ #define liblldb_RegisterContextCorePOSIX_mips64_H_ +#include "lldb/Core/DataBufferHeap.h" #include "Plugins/Process/Utility/RegisterContextPOSIX_mips64.h" class RegisterContextCorePOSIX_mips64 : @@ -52,7 +53,8 @@ protected: WriteFPR(); private: - uint64_t m_reg[40]; + lldb::DataBufferSP m_gpr_buffer; + lldb_private::DataExtractor m_gpr; }; #endif // #ifndef liblldb_RegisterContextCorePOSIX_mips64_H_ |

