| """ |
| Test signal reporting when debugging with linux core files. |
| """ |
| |
| from __future__ import print_function |
| |
| import shutil |
| import struct |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class LinuxCoreThreadsTestCase(TestBase): |
| NO_DEBUG_INFO_TESTCASE = True |
| |
| mydir = TestBase.compute_mydir(__file__) |
| _initial_platform = lldb.DBG.GetSelectedPlatform() |
| |
| _i386_pid = 5193 |
| _x86_64_pid = 5222 |
| |
| # Thread id for the failing thread. |
| _i386_tid = 5195 |
| _x86_64_tid = 5250 |
| |
| @skipIf(oslist=['windows']) |
| @skipIf(triple='^mips') |
| def test_i386(self): |
| """Test that lldb can read the process information from an i386 linux core file.""" |
| self.do_test("linux-i386", self._i386_pid, self._i386_tid) |
| |
| @skipIf(oslist=['windows']) |
| @skipIf(triple='^mips') |
| def test_x86_64(self): |
| """Test that lldb can read the process information from an x86_64 linux core file.""" |
| self.do_test("linux-x86_64", self._x86_64_pid, self._x86_64_tid) |
| |
| def do_test(self, filename, pid, tid): |
| target = self.dbg.CreateTarget("") |
| process = target.LoadCore(filename + ".core") |
| self.assertTrue(process, PROCESS_IS_VALID) |
| self.assertEqual(process.GetNumThreads(), 3) |
| self.assertEqual(process.GetProcessID(), pid) |
| |
| for thread in process: |
| reason = thread.GetStopReason() |
| if( thread.GetThreadID() == tid ): |
| self.assertEqual(reason, lldb.eStopReasonSignal) |
| signal = thread.GetStopReasonDataAtIndex(1) |
| # Check we got signal 4 (SIGILL) |
| self.assertEqual(signal, 4) |
| else: |
| signal = thread.GetStopReasonDataAtIndex(1) |
| # Check we got no signal on the other threads |
| self.assertEqual(signal, 0) |
| |
| self.dbg.DeleteTarget(target) |
| lldb.DBG.SetSelectedPlatform(self._initial_platform) |