summaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/InstrumentationRuntime
diff options
context:
space:
mode:
authorKuba Brecka <kuba.brecka@gmail.com>2016-04-07 10:02:43 +0000
committerKuba Brecka <kuba.brecka@gmail.com>2016-04-07 10:02:43 +0000
commit0f63c3e85987eaf9f12b4196284e3718b28dc47b (patch)
treeffefc3633d4af9d292ed94965070184db98cac47 /lldb/source/Plugins/InstrumentationRuntime
parent26aef5462618a57b48e28bf4ea23444875a4a3b3 (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.cpp18
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)