summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2016-09-26 20:18:51 +0000
committerSean Callanan <scallanan@apple.com>2016-09-26 20:18:51 +0000
commit5deb06eb43c73ded9debc59a87947a91649c94c0 (patch)
tree0e2413150b07544fb54fae4fff70ddb62036af6c /lldb/packages/Python/lldbsuite/test
parentd543def21097bc245dfc009aee421e8511b24b57 (diff)
downloadbcm5719-llvm-5deb06eb43c73ded9debc59a87947a91649c94c0.tar.gz
bcm5719-llvm-5deb06eb43c73ded9debc59a87947a91649c94c0.zip
Added a setting that enables saving all .o files from a given JIT expression.
This allows debugging of the JIT and other analyses of the internals of the expression parser. I've also added a testcase that verifies that the setting works correctly when off and on. llvm-svn: 282434
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/Makefile5
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py57
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/main.c14
3 files changed, 76 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/Makefile b/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/Makefile
new file mode 100644
index 00000000000..0d70f259501
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../make
+
+C_SOURCES := main.c
+
+include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py b/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py
new file mode 100644
index 00000000000..3ca7f349ca0
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/TestSaveJITObjects.py
@@ -0,0 +1,57 @@
+"""
+Test that LLDB can emit JIT objects when the appropriate setting is enabled
+"""
+
+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
+
+def enumerateJITFiles():
+ return [f for f in os.listdir(os.getcwd()) if f.startswith("jit")]
+
+def countJITFiles():
+ return len(enumerateJITFiles())
+
+def cleanJITFiles():
+ for j in enumerateJITFiles():
+ os.remove(j)
+ return
+
+class SaveJITObjectsTestCase(TestBase):
+ mydir = TestBase.compute_mydir(__file__)
+
+ def test_save_jit_objects(self):
+ self.build()
+ src_file = "main.c"
+ src_file_spec = lldb.SBFileSpec(src_file)
+
+ exe_path = os.path.join(os.getcwd(), "a.out")
+ target = self.dbg.CreateTarget(exe_path)
+
+ breakpoint = target.BreakpointCreateBySourceRegex(
+ "break", src_file_spec)
+
+ process = target.LaunchSimple(None, None,
+ self.get_process_working_directory())
+
+ thread = process.GetSelectedThread()
+ frame = thread.GetSelectedFrame()
+
+ cleanJITFiles()
+ frame.EvaluateExpression("(void*)malloc(0x1)")
+ self.assertTrue(countJITFiles() == 0,
+ "No files emitted with save-jit-objects=false")
+
+ self.runCmd("settings set target.save-jit-objects true")
+ frame.EvaluateExpression("(void*)malloc(0x1)")
+ jit_files_count = countJITFiles()
+ cleanJITFiles()
+ self.assertTrue(jit_files_count != 0,
+ "At least one file emitted with save-jit-objects=true")
+
+ process.Kill()
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/main.c b/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/main.c
new file mode 100644
index 00000000000..ec4c943dfe3
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/save_jit_objects/main.c
@@ -0,0 +1,14 @@
+//===-- main.c --------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int main (int argc, char const *argv[])
+{
+ const char* foo = "Hello world"; // break here
+ return 0;
+}
OpenPOWER on IntegriCloud