summaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/python_api/watchpoint
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2019-08-20 18:01:57 +0000
committerDimitry Andric <dim@FreeBSD.org>2019-08-20 18:01:57 +0000
commit88c643b6fec27eec436c8d138fee6346e92337d6 (patch)
tree82cd13b2f3cde1c9e5f79689ba4e6ba67694843f /packages/Python/lldbsuite/test/python_api/watchpoint
parent94994d372d014ce4c8758b9605d63fae651bd8aa (diff)
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/python_api/watchpoint')
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/.categories1
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/Makefile5
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/TestSetWatchpoint.py111
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIgnoreCount.py97
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIter.py130
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/condition/Makefile5
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py101
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/condition/main.cpp28
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/main.c24
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/Makefile6
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py105
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py150
-rw-r--r--packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/main.cpp104
13 files changed, 0 insertions, 867 deletions
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/.categories b/packages/Python/lldbsuite/test/python_api/watchpoint/.categories
deleted file mode 100644
index 50c1613cda72..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/.categories
+++ /dev/null
@@ -1 +0,0 @@
-watchpoint
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/Makefile b/packages/Python/lldbsuite/test/python_api/watchpoint/Makefile
deleted file mode 100644
index 0d70f2595019..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-LEVEL = ../../make
-
-C_SOURCES := main.c
-
-include $(LEVEL)/Makefile.rules
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/TestSetWatchpoint.py b/packages/Python/lldbsuite/test/python_api/watchpoint/TestSetWatchpoint.py
deleted file mode 100644
index 0236d4b2c6d8..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/TestSetWatchpoint.py
+++ /dev/null
@@ -1,111 +0,0 @@
-"""
-Use lldb Python SBValue API to create a watchpoint for read_write of 'globl' var.
-"""
-
-from __future__ import print_function
-
-
-import os
-import time
-import re
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class SetWatchpointAPITestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Our simple source filename.
- self.source = 'main.c'
- # Find the line number to break inside main().
- self.line = line_number(
- self.source, '// Set break point at this line.')
-
- @add_test_categories(['pyapi'])
- @expectedFailureAll(
- oslist=["windows"],
- bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")
- # Read-write watchpoints not supported on SystemZ
- @expectedFailureAll(archs=['s390x'])
- def test_watch_val(self):
- """Exercise SBValue.Watch() API to set a watchpoint."""
- self.build()
- exe = self.getBuildArtifact("a.out")
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Now create a breakpoint on main.c.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- # Watch 'global' for read and write.
- value = frame0.FindValue('global', lldb.eValueTypeVariableGlobal)
- error = lldb.SBError()
- watchpoint = value.Watch(True, True, True, error)
- self.assertTrue(value and watchpoint,
- "Successfully found the variable and set a watchpoint")
- self.DebugSBValue(value)
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- print(watchpoint)
-
- # Continue. Expect the program to stop due to the variable being
- # written to.
- process.Continue()
-
- if (self.TraceOn()):
- lldbutil.print_stacktraces(process)
-
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonWatchpoint)
- self.assertTrue(thread, "The thread stopped due to watchpoint")
- self.DebugSBValue(value)
-
- # Continue. Expect the program to stop due to the variable being read
- # from.
- process.Continue()
-
- if (self.TraceOn()):
- lldbutil.print_stacktraces(process)
-
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonWatchpoint)
- self.assertTrue(thread, "The thread stopped due to watchpoint")
- self.DebugSBValue(value)
-
- # Continue the process. We don't expect the program to be stopped
- # again.
- process.Continue()
-
- # At this point, the inferior process should have exited.
- self.assertTrue(
- process.GetState() == lldb.eStateExited,
- PROCESS_EXITED)
-
- self.dbg.DeleteTarget(target)
- self.assertFalse(watchpoint.IsValid())
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIgnoreCount.py b/packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIgnoreCount.py
deleted file mode 100644
index 603b7a805008..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIgnoreCount.py
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-Use lldb Python SBWatchpoint API to set the ignore count.
-"""
-
-from __future__ import print_function
-
-
-import os
-import time
-import re
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class WatchpointIgnoreCountTestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Our simple source filename.
- self.source = 'main.c'
- # Find the line number to break inside main().
- self.line = line_number(
- self.source, '// Set break point at this line.')
-
- @add_test_categories(['pyapi'])
- @expectedFailureAll(
- oslist=["windows"],
- bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")
- # Read-write watchpoints not supported on SystemZ
- @expectedFailureAll(archs=['s390x'])
- def test_set_watch_ignore_count(self):
- """Test SBWatchpoint.SetIgnoreCount() API."""
- self.build()
- exe = self.getBuildArtifact("a.out")
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Create a breakpoint on main.c in order to set our watchpoint later.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertEqual(process.GetState(), lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- # Watch 'global' for read and write.
- value = frame0.FindValue('global', lldb.eValueTypeVariableGlobal)
- error = lldb.SBError()
- watchpoint = value.Watch(True, True, True, error)
- self.assertTrue(value and watchpoint,
- "Successfully found the variable and set a watchpoint")
- self.DebugSBValue(value)
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- # There should be only 1 watchpoint location under the target.
- self.assertEqual(target.GetNumWatchpoints(), 1)
- watchpoint = target.GetWatchpointAtIndex(0)
- self.assertTrue(watchpoint.IsEnabled())
- self.assertEqual(watchpoint.GetIgnoreCount(), 0)
- watch_id = watchpoint.GetID()
- self.assertNotEqual(watch_id, 0)
- print(watchpoint)
-
- # Now immediately set the ignore count to 2. When we continue, expect the
- # inferior to run to its completion without stopping due to watchpoint.
- watchpoint.SetIgnoreCount(2)
- print(watchpoint)
- process.Continue()
-
- # At this point, the inferior process should have exited.
- self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
-
- # Verify some vital statistics.
- self.assertTrue(watchpoint)
- self.assertEqual(watchpoint.GetWatchSize(), 4)
- self.assertEqual(watchpoint.GetHitCount(), 2)
- print(watchpoint)
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIter.py b/packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIter.py
deleted file mode 100644
index b9fc7ceb1af6..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/TestWatchpointIter.py
+++ /dev/null
@@ -1,130 +0,0 @@
-"""
-Use lldb Python SBTarget API to iterate on the watchpoint(s) for the target.
-"""
-
-from __future__ import print_function
-
-
-import os
-import re
-import time
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class WatchpointIteratorTestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- # hardware watchpoints are not reported with a hardware index # on armv7 on ios devices
- def affected_by_radar_34564183(self):
- return (self.getArchitecture() == 'armv7' or self.getArchitecture() == 'armv7k') and self.platformIsDarwin()
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Our simple source filename.
- self.source = 'main.c'
- # Find the line number to break inside main().
- self.line = line_number(
- self.source, '// Set break point at this line.')
-
- @add_test_categories(['pyapi'])
- @expectedFailureAll(
- oslist=["windows"],
- bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")
- def test_watch_iter(self):
- """Exercise SBTarget.watchpoint_iter() API to iterate on the available watchpoints."""
- self.build()
- exe = self.getBuildArtifact("a.out")
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Create a breakpoint on main.c in order to set our watchpoint later.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- # Watch 'global' for read and write.
- value = frame0.FindValue('global', lldb.eValueTypeVariableGlobal)
- error = lldb.SBError()
- watchpoint = value.Watch(True, False, True, error)
- self.assertTrue(value and watchpoint,
- "Successfully found the variable and set a watchpoint")
- self.DebugSBValue(value)
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- # There should be only 1 watchpoint location under the target.
- self.assertTrue(target.GetNumWatchpoints() == 1)
- self.assertTrue(watchpoint.IsEnabled())
- watch_id = watchpoint.GetID()
- self.assertTrue(watch_id != 0)
-
- # Continue. Expect the program to stop due to the variable being
- # written to.
- process.Continue()
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- # Print the stack traces.
- lldbutil.print_stacktraces(process)
-
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonWatchpoint)
- self.assertTrue(thread, "The thread stopped due to watchpoint")
- self.DebugSBValue(value)
-
- # We currently only support hardware watchpoint. Verify that we have a
- # meaningful hardware index at this point. Exercise the printed repr of
- # SBWatchpointLocation.
- print(watchpoint)
- if not self.affected_by_radar_34564183():
- self.assertTrue(watchpoint.GetHardwareIndex() != -1)
-
- # SBWatchpoint.GetDescription() takes a description level arg.
- print(lldbutil.get_description(watchpoint, lldb.eDescriptionLevelFull))
-
- # Now disable the 'rw' watchpoint. The program won't stop when it reads
- # 'global' next.
- watchpoint.SetEnabled(False)
- self.assertTrue(watchpoint.GetHardwareIndex() == -1)
- self.assertFalse(watchpoint.IsEnabled())
-
- # Continue. The program does not stop again when the variable is being
- # read from because the watchpoint location has been disabled.
- process.Continue()
-
- # At this point, the inferior process should have exited.
- self.assertTrue(
- process.GetState() == lldb.eStateExited,
- PROCESS_EXITED)
-
- # Verify some vital statistics and exercise the iterator API.
- for watchpoint in target.watchpoint_iter():
- self.assertTrue(watchpoint)
- self.assertTrue(watchpoint.GetWatchSize() == 4)
- self.assertTrue(watchpoint.GetHitCount() == 1)
- print(watchpoint)
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/condition/Makefile b/packages/Python/lldbsuite/test/python_api/watchpoint/condition/Makefile
deleted file mode 100644
index 314f1cb2f077..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/condition/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-LEVEL = ../../../make
-
-CXX_SOURCES := main.cpp
-
-include $(LEVEL)/Makefile.rules
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py b/packages/Python/lldbsuite/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
deleted file mode 100644
index bb32869543c7..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
+++ /dev/null
@@ -1,101 +0,0 @@
-"""
-Test watchpoint condition API.
-"""
-
-from __future__ import print_function
-
-
-import os
-import time
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class WatchpointConditionAPITestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Our simple source filename.
- self.source = 'main.cpp'
- # Find the line number to break inside main().
- self.line = line_number(
- self.source, '// Set break point at this line.')
- # And the watchpoint variable declaration line number.
- self.decl = line_number(self.source,
- '// Watchpoint variable declaration.')
- # Build dictionary to have unique executable names for each test
- # method.
- self.exe_name = self.testMethodName
- self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}
-
- @expectedFailureAll(
- oslist=["linux"],
- archs=["aarch64"],
- bugnumber="llvm.org/pr27710")
- @skipIfWindows # Watchpoints not supported on Windows, and this test hangs
- def test_watchpoint_cond_api(self):
- """Test watchpoint condition API."""
- self.build(dictionary=self.d)
- self.setTearDownCleanup(dictionary=self.d)
- exe = self.getBuildArtifact(self.exe_name)
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Now create a breakpoint on main.c.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- # Watch 'global' for write.
- value = frame0.FindValue('global', lldb.eValueTypeVariableGlobal)
- error = lldb.SBError()
- watchpoint = value.Watch(True, False, True, error)
- self.assertTrue(value and watchpoint,
- "Successfully found the variable and set a watchpoint")
- self.DebugSBValue(value)
-
- # Now set the condition as "global==5".
- watchpoint.SetCondition('global==5')
- self.expect(watchpoint.GetCondition(), exe=False,
- startstr='global==5')
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- print(watchpoint)
-
- # Continue. Expect the program to stop due to the variable being
- # written to.
- process.Continue()
-
- if (self.TraceOn()):
- lldbutil.print_stacktraces(process)
-
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonWatchpoint)
- self.assertTrue(thread, "The thread stopped due to watchpoint")
- self.DebugSBValue(value)
-
- # Verify that the condition is met.
- self.assertTrue(value.GetValueAsUnsigned() == 5)
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/condition/main.cpp b/packages/Python/lldbsuite/test/python_api/watchpoint/condition/main.cpp
deleted file mode 100644
index f4c3527f8af2..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/condition/main.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- main.c --------------------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-#include <stdio.h>
-#include <stdint.h>
-
-int32_t global = 0; // Watchpoint variable declaration.
-
-static void modify(int32_t &var) {
- ++var;
-}
-
-int main(int argc, char** argv) {
- int local = 0;
- printf("&global=%p\n", &global);
- printf("about to write to 'global'...\n"); // Set break point at this line.
- // When stopped, watch 'global',
- // for the condition "global == 5".
- for (int i = 0; i < 10; ++i)
- modify(global);
-
- printf("global=%d\n", global);
-}
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/main.c b/packages/Python/lldbsuite/test/python_api/watchpoint/main.c
deleted file mode 100644
index 4753edfba991..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/main.c
+++ /dev/null
@@ -1,24 +0,0 @@
-//===-- main.c --------------------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-#include <stdio.h>
-#include <stdint.h>
-
-int32_t global = 10; // Watchpoint variable declaration.
-
-int main(int argc, char** argv) {
- int local = 0;
- printf("&global=%p\n", &global);
- printf("about to write to 'global'...\n"); // Set break point at this line.
- // When stopped, watch 'global' for read&write.
- global = 20;
- local += argc;
- ++local;
- printf("local: %d\n", local);
- printf("global=%d\n", global);
-}
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/Makefile b/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/Makefile
deleted file mode 100644
index 8817fff55e8c..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-LEVEL = ../../../make
-
-ENABLE_THREADS := YES
-CXX_SOURCES := main.cpp
-
-include $(LEVEL)/Makefile.rules
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py b/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
deleted file mode 100644
index fdc8ac053d76..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
+++ /dev/null
@@ -1,105 +0,0 @@
-"""
-Use lldb Python SBValue.WatchPointee() API to create a watchpoint for write of '*g_char_ptr'.
-"""
-
-from __future__ import print_function
-
-
-import os
-import re
-import time
-
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class SetWatchlocationAPITestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Our simple source filename.
- self.source = 'main.cpp'
- # Find the line number to break inside main().
- self.line = line_number(
- self.source, '// Set break point at this line.')
- # This is for verifying that watch location works.
- self.violating_func = "do_bad_thing_with_location"
-
- @add_test_categories(['pyapi'])
- @expectedFailureAll(
- oslist=["windows"],
- bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")
- def test_watch_location(self):
- """Exercise SBValue.WatchPointee() API to set a watchpoint."""
- self.build()
- exe = self.getBuildArtifact("a.out")
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Now create a breakpoint on main.c.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- value = frame0.FindValue('g_char_ptr',
- lldb.eValueTypeVariableGlobal)
- pointee = value.CreateValueFromAddress(
- "pointee",
- value.GetValueAsUnsigned(0),
- value.GetType().GetPointeeType())
- # Watch for write to *g_char_ptr.
- error = lldb.SBError()
- watchpoint = value.WatchPointee(True, False, True, error)
- self.assertTrue(value and watchpoint,
- "Successfully found the pointer and set a watchpoint")
- self.DebugSBValue(value)
- self.DebugSBValue(pointee)
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- print(watchpoint)
-
- # Continue. Expect the program to stop due to the variable being
- # written to.
- process.Continue()
-
- if (self.TraceOn()):
- lldbutil.print_stacktraces(process)
-
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonWatchpoint)
- self.assertTrue(thread, "The thread stopped due to watchpoint")
- self.DebugSBValue(value)
- self.DebugSBValue(pointee)
-
- self.expect(
- lldbutil.print_stacktrace(
- thread,
- string_buffer=True),
- exe=False,
- substrs=[
- self.violating_func])
-
- # This finishes our test.
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py b/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
deleted file mode 100644
index 3c19c589b7a7..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
+++ /dev/null
@@ -1,150 +0,0 @@
-"""
-Use lldb Python SBtarget.WatchAddress() API to create a watchpoint for write of '*g_char_ptr'.
-"""
-
-from __future__ import print_function
-
-
-import os
-import time
-import re
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class TargetWatchAddressAPITestCase(TestBase):
-
- mydir = TestBase.compute_mydir(__file__)
-
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Our simple source filename.
- self.source = 'main.cpp'
- # Find the line number to break inside main().
- self.line = line_number(
- self.source, '// Set break point at this line.')
- # This is for verifying that watch location works.
- self.violating_func = "do_bad_thing_with_location"
-
- @add_test_categories(['pyapi'])
- @expectedFailureAll(
- oslist=["windows"],
- bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")
- def test_watch_address(self):
- """Exercise SBTarget.WatchAddress() API to set a watchpoint."""
- self.build()
- exe = self.getBuildArtifact("a.out")
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Now create a breakpoint on main.c.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- value = frame0.FindValue('g_char_ptr',
- lldb.eValueTypeVariableGlobal)
- pointee = value.CreateValueFromAddress(
- "pointee",
- value.GetValueAsUnsigned(0),
- value.GetType().GetPointeeType())
- # Watch for write to *g_char_ptr.
- error = lldb.SBError()
- watchpoint = target.WatchAddress(
- value.GetValueAsUnsigned(), 1, False, True, error)
- self.assertTrue(value and watchpoint,
- "Successfully found the pointer and set a watchpoint")
- self.DebugSBValue(value)
- self.DebugSBValue(pointee)
-
- # Hide stdout if not running with '-t' option.
- if not self.TraceOn():
- self.HideStdout()
-
- print(watchpoint)
-
- # Continue. Expect the program to stop due to the variable being
- # written to.
- process.Continue()
-
- if (self.TraceOn()):
- lldbutil.print_stacktraces(process)
-
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonWatchpoint)
- self.assertTrue(thread, "The thread stopped due to watchpoint")
- self.DebugSBValue(value)
- self.DebugSBValue(pointee)
-
- self.expect(
- lldbutil.print_stacktrace(
- thread,
- string_buffer=True),
- exe=False,
- substrs=[
- self.violating_func])
-
- # This finishes our test.
-
- @add_test_categories(['pyapi'])
- # No size constraint on MIPS for watches
- @skipIf(archs=['mips', 'mipsel', 'mips64', 'mips64el'])
- @skipIf(archs=['s390x']) # Likewise on SystemZ
- def test_watch_address_with_invalid_watch_size(self):
- """Exercise SBTarget.WatchAddress() API but pass an invalid watch_size."""
- self.build()
- exe = self.getBuildArtifact("a.out")
-
- # Create a target by the debugger.
- target = self.dbg.CreateTarget(exe)
- self.assertTrue(target, VALID_TARGET)
-
- # Now create a breakpoint on main.c.
- breakpoint = target.BreakpointCreateByLocation(self.source, self.line)
- self.assertTrue(breakpoint and
- breakpoint.GetNumLocations() == 1,
- VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at the entry point.
- process = target.LaunchSimple(
- None, None, self.get_process_working_directory())
-
- # We should be stopped due to the breakpoint. Get frame #0.
- process = target.GetProcess()
- self.assertTrue(process.GetState() == lldb.eStateStopped,
- PROCESS_STOPPED)
- thread = lldbutil.get_stopped_thread(
- process, lldb.eStopReasonBreakpoint)
- frame0 = thread.GetFrameAtIndex(0)
-
- value = frame0.FindValue('g_char_ptr',
- lldb.eValueTypeVariableGlobal)
- pointee = value.CreateValueFromAddress(
- "pointee",
- value.GetValueAsUnsigned(0),
- value.GetType().GetPointeeType())
- # Watch for write to *g_char_ptr.
- error = lldb.SBError()
- watchpoint = target.WatchAddress(
- value.GetValueAsUnsigned(), 365, False, True, error)
- self.assertFalse(watchpoint)
- self.expect(error.GetCString(), exe=False,
- substrs=['watch size of %d is not supported' % 365])
diff --git a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/main.cpp b/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/main.cpp
deleted file mode 100644
index a197a92a4814..000000000000
--- a/packages/Python/lldbsuite/test/python_api/watchpoint/watchlocation/main.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-//===-- main.cpp ------------------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <chrono>
-#include <condition_variable>
-#include <cstdio>
-#include <random>
-#include <thread>
-
-std::default_random_engine g_random_engine{std::random_device{}()};
-std::uniform_int_distribution<> g_distribution{0, 3000000};
-std::condition_variable g_condition_variable;
-std::mutex g_mutex;
-int g_count;
-
-char *g_char_ptr = nullptr;
-
-void
-barrier_wait()
-{
- std::unique_lock<std::mutex> lock{g_mutex};
- if (--g_count > 0)
- g_condition_variable.wait(lock);
- else
- g_condition_variable.notify_all();
-}
-
-void
-do_bad_thing_with_location(char *char_ptr, char new_val)
-{
- *char_ptr = new_val;
-}
-
-uint32_t
-access_pool (bool flag = false)
-{
- static std::mutex g_access_mutex;
- if (!flag)
- g_access_mutex.lock();
-
- char old_val = *g_char_ptr;
- if (flag)
- do_bad_thing_with_location(g_char_ptr, old_val + 1);
-
- if (!flag)
- g_access_mutex.unlock();
- return *g_char_ptr;
-}
-
-void
-thread_func (uint32_t thread_index)
-{
- printf ("%s (thread index = %u) startng...\n", __FUNCTION__, thread_index);
-
- barrier_wait();
-
- uint32_t count = 0;
- uint32_t val;
- while (count++ < 15)
- {
- // random micro second sleep from zero to 3 seconds
- int usec = g_distribution(g_random_engine);
- printf ("%s (thread = %u) doing a usleep (%d)...\n", __FUNCTION__, thread_index, usec);
- std::this_thread::sleep_for(std::chrono::microseconds{usec});
-
- if (count < 7)
- val = access_pool ();
- else
- val = access_pool (true);
-
- printf ("%s (thread = %u) after usleep access_pool returns %d (count=%d)...\n", __FUNCTION__, thread_index, val, count);
- }
- printf ("%s (thread index = %u) exiting...\n", __FUNCTION__, thread_index);
-}
-
-
-int main (int argc, char const *argv[])
-{
- g_count = 4;
- std::thread threads[3];
-
- g_char_ptr = new char{};
-
- // Create 3 threads
- for (auto &thread : threads)
- thread = std::thread{thread_func, std::distance(threads, &thread)};
-
- printf ("Before turning all three threads loose...\n"); // Set break point at this line.
- barrier_wait();
-
- // Join all of our threads
- for (auto &thread : threads)
- thread.join();
-
- delete g_char_ptr;
-
- return 0;
-}