summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/Makefile9
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/TestFrameRecognizer.py119
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/main.m27
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/recognizer.py21
4 files changed, 176 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/Makefile
new file mode 100644
index 00000000000..8248c01fe6a
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/Makefile
@@ -0,0 +1,9 @@
+OBJC_SOURCES := main.m
+
+CFLAGS_EXTRAS := -g0 # No debug info.
+MAKE_DSYM := NO
+
+
+
+LD_EXTRAS := -framework Foundation
+include Makefile.rules
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/TestFrameRecognizer.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/TestFrameRecognizer.py
new file mode 100644
index 00000000000..2ecbe1e4c15
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/TestFrameRecognizer.py
@@ -0,0 +1,119 @@
+# encoding: utf-8
+"""
+Test lldb's frame recognizers.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+import recognizer
+
+class FrameRecognizerTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+ NO_DEBUG_INFO_TESTCASE = True
+
+ @skipUnlessDarwin
+ def test_frame_recognizer_1(self):
+ self.build()
+
+ target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
+ self.assertTrue(target, VALID_TARGET)
+
+ self.runCmd("command script import " + os.path.join(self.getSourceDir(), "recognizer.py"))
+
+ self.expect("frame recognizer list",
+ substrs=['no matching results found.'])
+
+ self.runCmd("frame recognizer add -l recognizer.MyFrameRecognizer -s a.out -n foo")
+
+ self.expect("frame recognizer list",
+ substrs=['0: recognizer.MyFrameRecognizer, module a.out, function foo'])
+
+ self.runCmd("frame recognizer add -l recognizer.MyOtherFrameRecognizer -s a.out -n bar -x")
+
+ self.expect("frame recognizer list",
+ substrs=['0: recognizer.MyFrameRecognizer, module a.out, function foo',
+ '1: recognizer.MyOtherFrameRecognizer, module a.out, function bar (regexp)'
+ ])
+
+ self.runCmd("frame recognizer delete 0")
+
+ self.expect("frame recognizer list",
+ substrs=['1: recognizer.MyOtherFrameRecognizer, module a.out, function bar (regexp)'])
+
+ self.runCmd("frame recognizer clear")
+
+ self.expect("frame recognizer list",
+ substrs=['no matching results found.'])
+
+ self.runCmd("frame recognizer add -l recognizer.MyFrameRecognizer -s a.out -n foo")
+
+ lldbutil.run_break_set_by_symbol(self, "foo")
+ self.runCmd("r")
+
+ self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+ substrs=['stopped', 'stop reason = breakpoint'])
+
+ process = target.GetProcess()
+ thread = process.GetSelectedThread()
+ frame = thread.GetSelectedFrame()
+
+ self.assertEqual(frame.GetSymbol().GetName(), "foo")
+ self.assertFalse(frame.GetLineEntry().IsValid())
+
+ self.expect("frame variable",
+ substrs=['(int) a = 42', '(int) b = 56'])
+
+ # Recognized arguments don't show up by default...
+ variables = frame.GetVariables(lldb.SBVariablesOptions())
+ self.assertEqual(variables.GetSize(), 0)
+
+ # ...unless you set target.display-recognized-arguments to 1...
+ self.runCmd("settings set target.display-recognized-arguments 1")
+ variables = frame.GetVariables(lldb.SBVariablesOptions())
+ self.assertEqual(variables.GetSize(), 2)
+
+ # ...and you can reset it back to 0 to hide them again...
+ self.runCmd("settings set target.display-recognized-arguments 0")
+ variables = frame.GetVariables(lldb.SBVariablesOptions())
+ self.assertEqual(variables.GetSize(), 0)
+
+ # ... or explicitly ask for them with SetIncludeRecognizedArguments(True).
+ opts = lldb.SBVariablesOptions()
+ opts.SetIncludeRecognizedArguments(True)
+ variables = frame.GetVariables(opts)
+
+ self.assertEqual(variables.GetSize(), 2)
+ self.assertEqual(variables.GetValueAtIndex(0).name, "a")
+ self.assertEqual(variables.GetValueAtIndex(0).signed, 42)
+ self.assertEqual(variables.GetValueAtIndex(0).GetValueType(), lldb.eValueTypeVariableArgument)
+ self.assertEqual(variables.GetValueAtIndex(1).name, "b")
+ self.assertEqual(variables.GetValueAtIndex(1).signed, 56)
+ self.assertEqual(variables.GetValueAtIndex(1).GetValueType(), lldb.eValueTypeVariableArgument)
+
+ self.expect("frame recognizer info 0",
+ substrs=['frame 0 is recognized by recognizer.MyFrameRecognizer'])
+
+ self.expect("frame recognizer info 999", error=True,
+ substrs=['no frame with index 999'])
+
+ self.expect("frame recognizer info 1",
+ substrs=['frame 1 not recognized by any recognizer'])
+
+ # FIXME: The following doesn't work yet, but should be fixed.
+ """
+ lldbutil.run_break_set_by_symbol(self, "bar")
+ self.runCmd("c")
+
+ self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+ substrs=['stopped', 'stop reason = breakpoint'])
+
+ self.expect("frame variable -t",
+ substrs=['(int *) a = '])
+
+ self.expect("frame variable -t *a",
+ substrs=['*a = 78'])
+ """
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/main.m b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/main.m
new file mode 100644
index 00000000000..9c6ce9d2102
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/main.m
@@ -0,0 +1,27 @@
+//===-- main.m ------------------------------------------------*- ObjC -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#import <Foundation/Foundation.h>
+
+void foo(int a, int b)
+{
+ printf("%d %d\n", a, b);
+}
+
+void bar(int *ptr)
+{
+ printf("%d\n", *ptr);
+}
+
+int main (int argc, const char * argv[])
+{
+ foo(42, 56);
+ int i = 78;
+ bar(&i);
+ return 0;
+}
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/recognizer.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/recognizer.py
new file mode 100644
index 00000000000..548676c0a4c
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/commands/frame/recognizer/recognizer.py
@@ -0,0 +1,21 @@
+# encoding: utf-8
+
+import lldb
+
+class MyFrameRecognizer(object):
+ def get_recognized_arguments(self, frame):
+ if frame.name == "foo":
+ arg1 = frame.EvaluateExpression("$arg1").signed
+ arg2 = frame.EvaluateExpression("$arg2").signed
+ val1 = frame.GetThread().GetProcess().GetTarget().CreateValueFromExpression("a", "%d" % arg1)
+ val2 = frame.GetThread().GetProcess().GetTarget().CreateValueFromExpression("b", "%d" % arg2)
+ return [val1, val2]
+ elif frame.name == "bar":
+ arg1 = frame.EvaluateExpression("$arg1").signed
+ val1 = frame.GetThread().GetProcess().GetTarget().CreateValueFromExpression("a", "(int *)%d" % arg1)
+ return [val1]
+ return []
+
+class MyOtherFrameRecognizer(object):
+ def get_recognized_arguments(self, frame):
+ return []