diff options
| author | Enrico Granata <egranata@apple.com> | 2014-08-11 19:16:35 +0000 |
|---|---|---|
| committer | Enrico Granata <egranata@apple.com> | 2014-08-11 19:16:35 +0000 |
| commit | 4ec130dcab557a1c04a93c63de2c35206aa476ef (patch) | |
| tree | 8deffb13ae1958d770651eda26f6754273577c9a /lldb/source/Expression | |
| parent | 55b3254ea29d68641aacc1f44b6af61b0e032d6c (diff) | |
| download | bcm5719-llvm-4ec130dcab557a1c04a93c63de2c35206aa476ef.tar.gz bcm5719-llvm-4ec130dcab557a1c04a93c63de2c35206aa476ef.zip | |
Patch to enable LLDB to extract value bytes from DWARF block forms and udata/sdata forms. By Greg Clayton
llvm-svn: 215379
Diffstat (limited to 'lldb/source/Expression')
| -rw-r--r-- | lldb/source/Expression/DWARFExpression.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index 7f87635cb55..17dac7588e9 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -282,6 +282,33 @@ DWARFExpression::CopyOpcodeData (lldb::ModuleSP module_sp, const DataExtractor& } void +DWARFExpression::CopyOpcodeData (const void *data, + lldb::offset_t data_length, + ByteOrder byte_order, + uint8_t addr_byte_size) +{ + if (data && data_length) + { + m_data.SetData(DataBufferSP(new DataBufferHeap(data, data_length))); + m_data.SetByteOrder(byte_order); + m_data.SetAddressByteSize(addr_byte_size); + } +} + +void +DWARFExpression::CopyOpcodeData (uint64_t const_value, + lldb::offset_t const_value_byte_size, + uint8_t addr_byte_size) +{ + if (const_value_byte_size) + { + m_data.SetData(DataBufferSP(new DataBufferHeap(&const_value, const_value_byte_size))); + m_data.SetByteOrder(endian::InlHostByteOrder()); + m_data.SetAddressByteSize(addr_byte_size); + } +} + +void DWARFExpression::SetOpcodeData (lldb::ModuleSP module_sp, const DataExtractor& data, lldb::offset_t data_offset, lldb::offset_t data_length) { m_module_wp = module_sp; @@ -1307,7 +1334,7 @@ DWARFExpression::Evaluate ClangExpressionVariableList *expr_locals, ClangExpressionDeclMap *decl_map, RegisterContext *reg_ctx, - lldb::ModuleSP opcode_ctx, + lldb::ModuleSP module_sp, const DataExtractor& opcodes, const lldb::offset_t opcodes_offset, const lldb::offset_t opcodes_length, @@ -2882,7 +2909,7 @@ DWARFExpression::Evaluate return false; } - if (!exe_ctx || !opcode_ctx) + if (!exe_ctx || !module_sp) { if (error_ptr) error_ptr->SetErrorString("No context to evaluate TLS within."); @@ -2898,7 +2925,7 @@ DWARFExpression::Evaluate } // Lookup the TLS block address for this thread and module. - addr_t tls_addr = thread->GetThreadLocalData (opcode_ctx); + addr_t tls_addr = thread->GetThreadLocalData (module_sp); if (tls_addr == LLDB_INVALID_ADDRESS) { |

