blob: 7cc3c0775cedcddf907b19d167c021ecd59809c6 [file] [log] [blame]
"""
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)