[Lldb-commits] [lldb] r331480 - Revert "DWARFExpression: Convert file addresses to load addresses early on."
Adrian Prantl via lldb-commits
lldb-commits at lists.llvm.org
Thu May 3 13:19:39 PDT 2018
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
More information about the lldb-commits
mailing list