I can't think if an easy way to add a test for this or I would have. Greg
> On Jun 21, 2018, at 11:19 AM, Jonas Devlieghere <jdevliegh...@apple.com> > wrote: > > Hi Greg, > > Would you mind adding a test case for this? > > Thanks, > Jonas > >> On Jun 21, 2018, at 6:58 PM, Greg Clayton via lldb-commits >> <lldb-commits@lists.llvm.org> wrote: >> >> Author: gclayton >> Date: Thu Jun 21 10:58:06 2018 >> New Revision: 335263 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=335263&view=rev >> Log: >> Fix an issue where DW_OP_deref might be dereferencing a file address. >> Convert the file address to a load address so this works. >> >> https://bugs.llvm.org/show_bug.cgi?id=36871 >> >> >> Modified: >> lldb/trunk/source/Expression/DWARFExpression.cpp >> >> Modified: lldb/trunk/source/Expression/DWARFExpression.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/DWARFExpression.cpp?rev=335263&r1=335262&r2=335263&view=diff >> ============================================================================== >> --- lldb/trunk/source/Expression/DWARFExpression.cpp (original) >> +++ lldb/trunk/source/Expression/DWARFExpression.cpp Thu Jun 21 10:58:06 2018 >> @@ -15,6 +15,7 @@ >> // C++ Includes >> #include <vector> >> >> +#include "lldb/Core/Module.h" >> #include "lldb/Core/RegisterValue.h" >> #include "lldb/Core/Scalar.h" >> #include "lldb/Core/Value.h" >> @@ -1452,6 +1453,33 @@ bool DWARFExpression::Evaluate( >> stack.back().GetScalar() = ptr; >> stack.back().ClearContext(); >> } break; >> + case Value::eValueTypeFileAddress: { >> + auto file_addr = stack.back().GetScalar().ULongLong( >> + LLDB_INVALID_ADDRESS); >> + if (!module_sp) { >> + if (error_ptr) >> + error_ptr->SetErrorStringWithFormat( >> + "need module to resolve file address for DW_OP_deref"); >> + return false; >> + } >> + Address so_addr; >> + if (!module_sp->ResolveFileAddress(file_addr, so_addr)) { >> + if (error_ptr) >> + error_ptr->SetErrorStringWithFormat( >> + "failed to resolve file address in module"); >> + return false; >> + } >> + addr_t load_Addr = so_addr.GetLoadAddress(exe_ctx->GetTargetPtr()); >> + if (load_Addr == LLDB_INVALID_ADDRESS) { >> + if (error_ptr) >> + error_ptr->SetErrorStringWithFormat( >> + "failed to resolve load address"); >> + return false; >> + } >> + stack.back().GetScalar() = load_Addr; >> + stack.back().SetValueType(Value::eValueTypeLoadAddress); >> + // Fall through to load address code below... >> + } LLVM_FALLTHROUGH; >> case Value::eValueTypeLoadAddress: >> if (exe_ctx) { >> if (process) { >> >> >> _______________________________________________ >> lldb-commits mailing list >> lldb-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits