From 3b275db1954730e9e4d896407b26c949df1aa7cb Mon Sep 17 00:00:00 2001 From: Kuba Brecka Date: Tue, 5 Apr 2016 14:13:22 +0000 Subject: [PATCH] Fixing AddressSanitizer tests (update expectations for current ASan, make it work on OS X 10.10 and older). llvm-svn: 265400 --- .../functionalities/asan/TestMemoryHistory.py | 20 ++++++++----------- .../functionalities/asan/TestReportData.py | 16 +++++---------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestMemoryHistory.py b/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestMemoryHistory.py index 9cd5981e5dfb..e0d74ac32795 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestMemoryHistory.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestMemoryHistory.py @@ -47,11 +47,10 @@ class AsanTestCase(TestBase): self.runCmd("run") - # ASan will relaunch the process to insert its library. - self.expect("thread list", "Process should be stopped due to exec.", - substrs = ['stopped', 'stop reason = ']) - - self.runCmd("continue") + stop_reason = self.dbg.GetSelectedTarget().process.GetSelectedThread().GetStopReason() + if stop_reason == lldb.eStopReasonExec: + # On OS X 10.10 and older, we need to re-exec to enable interceptors. + self.runCmd("continue") # the stop reason of the thread should be breakpoint. self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, @@ -89,15 +88,12 @@ class AsanTestCase(TestBase): self.assertTrue(history_thread.num_frames >= 2) self.assertEqual(history_thread.frames[1].GetLineEntry().GetFileSpec().GetFilename(), "main.c") self.assertEqual(history_thread.frames[1].GetLineEntry().GetLine(), self.line_malloc) - - # now let's break when an ASan report occurs and try the API then - self.runCmd("breakpoint set -n __asan_report_error") - + + # ASan will break when a report occurs and we'll try the API then self.runCmd("continue") - # the stop reason of the thread should be breakpoint. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, - substrs = ['stopped', 'stop reason = breakpoint']) + self.expect("thread list", "Process should be stopped due to ASan report", + substrs = ['stopped', 'stop reason = Use of deallocated memory detected']) # make sure the 'memory history' command still works even when we're generating a report now self.expect("memory history 'another_pointer'", diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestReportData.py b/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestReportData.py index 4373f8e0a7ff..8e1d5b631806 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestReportData.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/asan/TestReportData.py @@ -40,16 +40,10 @@ class AsanTestReportDataCase(TestBase): self.expect("file " + exe, patterns = [ "Current executable set to .*a.out" ]) self.runCmd("run") - # ASan will relaunch the process to insert its library. - self.expect("thread list", "Process should be stopped due to exec.", - substrs = ['stopped', 'stop reason = ']) - - # no extended info when we have no ASan report - thread = self.dbg.GetSelectedTarget().process.GetSelectedThread() - s = lldb.SBStream() - self.assertFalse(thread.GetStopReasonExtendedInfoAsJSON(s)) - - self.runCmd("continue") + stop_reason = self.dbg.GetSelectedTarget().process.GetSelectedThread().GetStopReason() + if stop_reason == lldb.eStopReasonExec: + # On OS X 10.10 and older, we need to re-exec to enable interceptors. + self.runCmd("continue") self.expect("thread list", "Process should be stopped due to ASan report", substrs = ['stopped', 'stop reason = Use of deallocated memory detected']) @@ -63,7 +57,7 @@ class AsanTestReportDataCase(TestBase): substrs = ["access_size", "access_type", "address", "pc", "description", "heap-use-after-free"]) output_lines = self.res.GetOutput().split('\n') - json_line = output_lines[2] + json_line = '\n'.join(output_lines[2:]) data = json.loads(json_line) self.assertEqual(data["description"], "heap-use-after-free") self.assertEqual(data["instrumentation_class"], "AddressSanitizer")