Author: adrian Date: Thu May 3 13:19:39 2018 New Revision: 331480 URL: http://llvm.org/viewvc/llvm-project?rev=331480&view=rev Log: Revert "DWARFExpression: Convert file addresses to load addresses early on."
This reverts commit 331462 while investigating bot breakage. Modified: lldb/trunk/include/lldb/Core/Value.h lldb/trunk/source/Core/Value.cpp lldb/trunk/source/Core/ValueObjectVariable.cpp lldb/trunk/source/Expression/DWARFExpression.cpp Modified: lldb/trunk/include/lldb/Core/Value.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Value.h?rev=331480&r1=331479&r2=331480&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/Value.h (original) +++ lldb/trunk/include/lldb/Core/Value.h Thu May 3 13:19:39 2018 @@ -228,9 +228,6 @@ public: static const char *GetContextTypeAsCString(ContextType context_type); - /// Convert this value's file address to a load address, if possible. - void ConvertToLoadAddress(SymbolContext sc); - bool GetData(DataExtractor &data); void Clear(); Modified: lldb/trunk/source/Core/Value.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Value.cpp?rev=331480&r1=331479&r2=331480&view=diff ============================================================================== --- lldb/trunk/source/Core/Value.cpp (original) +++ lldb/trunk/source/Core/Value.cpp Thu May 3 13:19:39 2018 @@ -669,28 +669,6 @@ const char *Value::GetContextTypeAsCStri return "???"; } -void Value::ConvertToLoadAddress(SymbolContext sc) { - if (GetValueType() != eValueTypeFileAddress) - return; - - if (!sc.module_sp) - return; - - lldb::addr_t file_addr = GetScalar().ULongLong(LLDB_INVALID_ADDRESS); - if (file_addr == LLDB_INVALID_ADDRESS) - return; - - Address so_addr; - if (!sc.module_sp->ResolveFileAddress(file_addr, so_addr)) - return; - lldb::addr_t load_addr = so_addr.GetLoadAddress(sc.target_sp.get()); - if (load_addr == LLDB_INVALID_ADDRESS) - return; - - SetValueType(Value::eValueTypeLoadAddress); - GetScalar() = load_addr; -} - ValueList::ValueList(const ValueList &rhs) { m_values = rhs.m_values; } const ValueList &ValueList::operator=(const ValueList &rhs) { Modified: lldb/trunk/source/Core/ValueObjectVariable.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectVariable.cpp?rev=331480&r1=331479&r2=331480&view=diff ============================================================================== --- lldb/trunk/source/Core/ValueObjectVariable.cpp (original) +++ lldb/trunk/source/Core/ValueObjectVariable.cpp Thu May 3 13:19:39 2018 @@ -236,9 +236,23 @@ bool ValueObjectVariable::UpdateValue() // If we have a file address, convert it to a load address if we can. if (value_type == Value::eValueTypeFileAddress && process_is_alive) { - SymbolContext var_sc; - variable->CalculateSymbolContext(&var_sc); - m_value.ConvertToLoadAddress(var_sc); + lldb::addr_t file_addr = + m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS); + if (file_addr != LLDB_INVALID_ADDRESS) { + SymbolContext var_sc; + variable->CalculateSymbolContext(&var_sc); + if (var_sc.module_sp) { + ObjectFile *objfile = var_sc.module_sp->GetObjectFile(); + if (objfile) { + Address so_addr(file_addr, objfile->GetSectionList()); + lldb::addr_t load_addr = so_addr.GetLoadAddress(target); + if (load_addr != LLDB_INVALID_ADDRESS) { + m_value.SetValueType(Value::eValueTypeLoadAddress); + m_value.GetScalar() = load_addr; + } + } + } + } } if (!CanProvideValue()) { Modified: lldb/trunk/source/Expression/DWARFExpression.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/DWARFExpression.cpp?rev=331480&r1=331479&r2=331480&view=diff ============================================================================== --- lldb/trunk/source/Expression/DWARFExpression.cpp (original) +++ lldb/trunk/source/Expression/DWARFExpression.cpp Thu May 3 13:19:39 2018 @@ -1379,13 +1379,10 @@ bool DWARFExpression::Evaluate( // The DW_OP_addr operation has a single operand that encodes a machine // address and whose size is the size of an address on the target machine. //---------------------------------------------------------------------- - case DW_OP_addr: { + case DW_OP_addr: stack.push_back(Scalar(opcodes.GetAddress(&offset))); stack.back().SetValueType(Value::eValueTypeFileAddress); - auto sc = frame->GetSymbolContext(eSymbolContextFunction); - stack.back().ConvertToLoadAddress(sc); break; - } //---------------------------------------------------------------------- // The DW_OP_addr_sect_offset4 is used for any location expressions in _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits