forked from OSchip/llvm-project
Revert "DWARFExpression: Convert file addresses to load addresses early on."
This reverts commit 331462 while investigating bot breakage. llvm-svn: 331480
This commit is contained in:
parent
88fc73d544
commit
b78a577179
|
@ -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();
|
||||
|
|
|
@ -669,28 +669,6 @@ const char *Value::GetContextTypeAsCString(ContextType context_type) {
|
|||
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) {
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue