diff options
author | Kuba Brecka <kuba.brecka@gmail.com> | 2016-04-07 10:02:43 +0000 |
---|---|---|
committer | Kuba Brecka <kuba.brecka@gmail.com> | 2016-04-07 10:02:43 +0000 |
commit | 0f63c3e85987eaf9f12b4196284e3718b28dc47b (patch) | |
tree | ffefc3633d4af9d292ed94965070184db98cac47 /lldb/source/Plugins/InstrumentationRuntime | |
parent | 26aef5462618a57b48e28bf4ea23444875a4a3b3 (diff) |
Tentative fix (add `extern "C"` declarations to expression prefix) and printing evaluation errors for AddressSanitizer (both MemoryHistoryASan.cpp and AddressSanitizerRuntime.cpp). Hopefully this will make the ASan testcases pass or at least the failure should be easier to diagnose.
Diffstat (limited to 'lldb/source/Plugins/InstrumentationRuntime')
-rw-r--r-- | lldb/source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/lldb/source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp b/lldb/source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp index 366b7b05c0e..2a003dcd190 100644 --- a/lldb/source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp +++ b/lldb/source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp @@ -19,6 +19,7 @@ #include "lldb/Core/Stream.h" #include "lldb/Core/StreamFile.h" #include "lldb/Core/ValueObject.h" +#include "lldb/Expression/UserExpression.h" #include "lldb/Interpreter/CommandReturnObject.h" #include "lldb/Symbol/Symbol.h" #include "lldb/Symbol/SymbolContext.h" @@ -189,12 +190,19 @@ AddressSanitizerRuntime::RetrieveReportData() options.SetAutoApplyFixIts(false); ValueObjectSP return_value_sp; - std::string fixed_expression; - if (process_sp->GetTarget().EvaluateExpression(address_sanitizer_retrieve_report_data_command, - frame_sp.get(), - return_value_sp, - options) != eExpressionCompleted) + ExecutionContext exe_ctx; + Error eval_error; + frame_sp->CalculateExecutionContext(exe_ctx); + ExpressionResults result = UserExpression::Evaluate (exe_ctx, + options, + address_sanitizer_retrieve_report_data_command, + "", + return_value_sp, + eval_error); + if (result != eExpressionCompleted) { + process_sp->GetTarget().GetDebugger().GetAsyncOutputStream()->Printf("Warning: Cannot evaluate AddressSanitizer expression:\n%s\n", eval_error.AsCString()); return StructuredData::ObjectSP(); + } int present = return_value_sp->GetValueForExpressionPath(".present")->GetValueAsUnsigned(0); if (present != 1) |