summaryrefslogtreecommitdiffstats
path: root/lldb/test/Shell/ExecControl/StopHook/Inputs
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-10-09 19:22:02 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-10-09 19:22:02 +0000
commit87aa9c9e4d41ed881453e2fab85b3d25f648bb55 (patch)
tree63efe79832bf3de4f63e4e81c62e73923947b882 /lldb/test/Shell/ExecControl/StopHook/Inputs
parentfd18e94697c987d5f24e25aa4e27adaffff3cce4 (diff)
downloadbcm5719-llvm-87aa9c9e4d41ed881453e2fab85b3d25f648bb55.tar.gz
bcm5719-llvm-87aa9c9e4d41ed881453e2fab85b3d25f648bb55.zip
Re-land "[test] Split LLDB tests into API, Shell & Unit"
The original patch got reverted because it broke `check-lldb` on a clean build. This fixes that. llvm-svn: 374201
Diffstat (limited to 'lldb/test/Shell/ExecControl/StopHook/Inputs')
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-1.lldbinit1
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit1
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit3
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit7
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit5
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads.cpp79
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook.c53
7 files changed, 149 insertions, 0 deletions
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-1.lldbinit b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-1.lldbinit
new file mode 100644
index 00000000000..4ab5d56f036
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-1.lldbinit
@@ -0,0 +1 @@
+target stop-hook add -n b -o "expr ptr"
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit
new file mode 100644
index 00000000000..31817bdaaa5
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-2.lldbinit
@@ -0,0 +1 @@
+target stop-hook add -f stop-hook.c -l 29 -e 34 -o "expr ptr"
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit
new file mode 100644
index 00000000000..36e144deecc
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-3.lldbinit
@@ -0,0 +1,3 @@
+target stop-hook add -f stop-hook.c -l 29 -e 34
+expr ptr
+DONE
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit
new file mode 100644
index 00000000000..004bd34abfb
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-1.lldbinit
@@ -0,0 +1,7 @@
+break set -f stop-hook-threads.cpp -p "Break here to set up the stop hook"
+break set -f stop-hook-threads.cpp -p "Break here to test that the stop-hook"
+run
+target stop-hook add -G true
+expr lldb_val += 1
+thread list
+DONE
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit
new file mode 100644
index 00000000000..3b7d23953c3
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads-2.lldbinit
@@ -0,0 +1,5 @@
+break set -f stop-hook-threads.cpp -p "Break here to set up the stop hook"
+break set -f stop-hook-threads.cpp -p "Break here to test that the stop-hook"
+run
+target stop-hook add -x 2 -o "expr lldb_val += 1" -o "thread list"
+target stop-hook add -G true -o "script print('Hit stop hook')
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads.cpp b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads.cpp
new file mode 100644
index 00000000000..46aae8346be
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook-threads.cpp
@@ -0,0 +1,79 @@
+//===-- stop-hook-threads.cpp -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <chrono>
+#include <cstdio>
+#include <mutex>
+#include <random>
+#include <thread>
+
+std::default_random_engine g_random_engine{std::random_device{}()};
+std::uniform_int_distribution<> g_distribution{0, 3000};
+
+uint32_t g_val = 0;
+uint32_t lldb_val = 0;
+
+uint32_t
+access_pool (bool flag = false)
+{
+ static std::mutex g_access_mutex;
+ if (!flag)
+ g_access_mutex.lock();
+
+ uint32_t old_val = g_val;
+ if (flag)
+ g_val = old_val + 1;
+
+ if (!flag)
+ g_access_mutex.unlock();
+ return g_val;
+}
+
+void
+thread_func (uint32_t thread_index)
+{
+ // Break here to test that the stop-hook mechanism works for multiple threads.
+ printf ("%s (thread index = %u) startng...\n", __FUNCTION__, thread_index);
+
+ uint32_t count = 0;
+ uint32_t val;
+ while (count++ < 4)
+ {
+ // 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}); // Set break point at this line
+
+ if (count < 2)
+ 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[])
+{
+ std::thread threads[3];
+ // Break here to set up the stop hook
+ printf("Stop hooks engaged.\n");
+ // Create 3 threads
+ for (auto &thread : threads)
+ thread = std::thread{thread_func, std::distance(threads, &thread)};
+
+ // Join all of our threads
+ for (auto &thread : threads)
+ thread.join();
+
+ // print lldb_val so we can check it here.
+ printf ("lldb_val was set to: %d.\n", lldb_val);
+ return 0;
+}
diff --git a/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook.c b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook.c
new file mode 100644
index 00000000000..e1b2579526d
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/Inputs/stop-hook.c
@@ -0,0 +1,53 @@
+//===-- main.c --------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#include <stdio.h>
+#include <stdlib.h>
+
+int a(int);
+int b(int);
+int c(int);
+
+int a(int val)
+{
+ if (val <= 1)
+ return b(val);
+ else if (val >= 3)
+ return c(val);
+
+ return val;
+}
+
+int b(int val)
+{
+ int rc = c(val);
+ void *ptr = malloc(1024);
+ if (!ptr) // Set breakpoint here to test target stop-hook.
+ return -1;
+ else
+ printf("ptr=%p\n", ptr); // We should stop here after stepping.
+ return rc; // End of the line range for which stop-hook is to be run.
+}
+
+int c(int val)
+{
+ return val + 3;
+}
+
+int main (int argc, char const *argv[])
+{
+ int A1 = a(1);
+ printf("a(1) returns %d\n", A1);
+
+ int C2 = c(2); // Another breakpoint which is outside of the stop-hook range.
+ printf("c(2) returns %d\n", C2);
+
+ int A3 = a(3);
+ printf("a(3) returns %d\n", A3);
+
+ return 0;
+}
OpenPOWER on IntegriCloud