summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2016-03-16 09:19:57 +0000
committerPavel Labath <labath@google.com>2016-03-16 09:19:57 +0000
commit39aab4d60664a3ee56e7add57aafed453cab1df7 (patch)
tree0192011097f92f710b73d62c5d237d80b5ef60b5 /lldb/packages/Python/lldbsuite/test
parent302f83ac4e5ba37d9b116867ba6a537b0f0adb9a (diff)
downloadbcm5719-llvm-39aab4d60664a3ee56e7add57aafed453cab1df7.tar.gz
bcm5719-llvm-39aab4d60664a3ee56e7add57aafed453cab1df7.zip
Fix thread/process ID reading from linux core files
Summary: This also adds a basic smoke test for linux core file reading. I'm checking in the core files as well, so that the tests can run on all platforms. With some tricks I was able to produce reasonably-sized core files (~40K). This fixes the first part of pr26322. Reviewers: zturner Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D18176 llvm-svn: 263628
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/TestLinuxCore.py45
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.corebin0 -> 28672 bytes
-rwxr-xr-xlldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.outbin0 -> 1971 bytes
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/main.c17
-rwxr-xr-xlldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/make-core.sh32
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.corebin0 -> 40960 bytes
-rwxr-xr-xlldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.outbin0 -> 2575 bytes
7 files changed, 94 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/TestLinuxCore.py b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/TestLinuxCore.py
new file mode 100644
index 00000000000..3efd3ec3f7b
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/TestLinuxCore.py
@@ -0,0 +1,45 @@
+"""
+Test basics of linux core file debugging.
+"""
+
+from __future__ import print_function
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class LinuxCoreTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @skipIf(bugnumber="llvm.org/pr26947")
+ @no_debug_info_test
+ def test_i386(self):
+ """Test that lldb can read the process information from an i386 linux core file."""
+ self.do_test("i386", 32306)
+
+ @no_debug_info_test
+ def test_x86_64(self):
+ """Test that lldb can read the process information from an x86_64 linux core file."""
+ self.do_test("x86_64", 32259)
+
+ def do_test(self, arch, pid):
+ target = self.dbg.CreateTarget(arch + ".out")
+ process = target.LoadCore(arch + ".core")
+ self.assertTrue(process, PROCESS_IS_VALID)
+ self.assertEqual(process.GetNumThreads(), 1)
+ self.assertEqual(process.GetProcessID(), pid)
+
+ thread = process.GetSelectedThread()
+ self.assertTrue(thread)
+ self.assertEqual(thread.GetThreadID(), pid)
+ backtrace = ["bar", "foo", "_start"]
+ self.assertEqual(thread.GetNumFrames(), len(backtrace))
+ for i in range(len(backtrace)):
+ frame = thread.GetFrameAtIndex(i)
+ self.assertTrue(frame)
+ self.assertEqual(frame.GetFunctionName(), backtrace[i])
+ self.assertEqual(frame.GetLineEntry().GetLine(),
+ line_number("main.c", "Frame " + backtrace[i]))
+ self.assertEqual(frame.FindVariable("F").GetValueAsUnsigned(), ord(backtrace[i][0]))
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.core b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.core
new file mode 100644
index 00000000000..f8deff474d1
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.core
Binary files differ
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.out b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.out
new file mode 100755
index 00000000000..3cdd4eeca10
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/i386.out
Binary files differ
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/main.c b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/main.c
new file mode 100644
index 00000000000..f5bde4171ca
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/main.c
@@ -0,0 +1,17 @@
+static void bar(char *boom)
+{
+ char F = 'b';
+ *boom = 47; // Frame bar
+}
+
+static void foo(char *boom, void (*boomer)(char *))
+{
+ char F = 'f';
+ boomer(boom); // Frame foo
+}
+
+void _start(void)
+{
+ char F = '_';
+ foo(0, bar); // Frame _start
+}
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/make-core.sh b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/make-core.sh
new file mode 100755
index 00000000000..10f5f06c505
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/make-core.sh
@@ -0,0 +1,32 @@
+#! /bin/bash
+
+set -e -x
+
+if grep -q '^|' </proc/sys/kernel/core_pattern; then
+ cat <<EOF
+Your system uses a crash report tool ($(cat /proc/sys/kernel/core_pattern)). Core files
+will not be generated. Please reset /proc/sys/kernel/core_pattern (requires root
+privileges) to enable core generation.
+EOF
+ exit 1
+fi
+
+ulimit -c 1000
+real_limit=$(ulimit -c)
+if [ $real_limit -lt 100 ]; then
+ cat <<EOF
+Unable to increase the core file limit. Core file may be truncated!
+To fix this, increase HARD core file limit (ulimit -H -c 1000). This may require root
+privileges.
+EOF
+fi
+
+${CC:-cc} -nostdlib -static -g $CFLAGS main.c -o a.out
+
+cat <<EOF
+Executable file is in a.out.
+Core file will be saved according to pattern $(cat /proc/sys/kernel/core_pattern).
+EOF
+
+ulimit -s 8 # Decrease stack size to 8k => smaller core files.
+exec ./a.out
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.core b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.core
new file mode 100644
index 00000000000..e2fa69e4558
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.core
Binary files differ
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.out b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.out
new file mode 100755
index 00000000000..842402fd519
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/linux-core/x86_64.out
Binary files differ
OpenPOWER on IntegriCloud