186 changes: 34 additions & 152 deletions lldb/test/API/tools/lldb-server/TestLldbGdbServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -505,26 +505,26 @@ def Hc_then_Csignal_signals_correct_thread(self, segfault_signo):
post_handle_thread_id = int(post_handle_thread_id, 16)
self.assertEqual(post_handle_thread_id, print_thread_id)

@expectedFailure
@debugserver_test
def test_Hc_then_Csignal_signals_correct_thread_launch_debugserver(self):
self.build()
self.set_inferior_startup_launch()
# Darwin debugserver translates some signals like SIGSEGV into some gdb
# expectations about fixed signal numbers.
self.Hc_then_Csignal_signals_correct_thread(self.TARGET_EXC_BAD_ACCESS)

@expectedFailureDarwin
@skipIfWindows # no SIGSEGV support
@expectedFailureAll(oslist=["freebsd"], bugnumber="llvm.org/pr48419")
@expectedFailureNetBSD
@llgs_test
def test_Hc_then_Csignal_signals_correct_thread_launch_llgs(self):
def test_Hc_then_Csignal_signals_correct_thread_launch(self):
self.build()
self.set_inferior_startup_launch()
self.Hc_then_Csignal_signals_correct_thread(
lldbutil.get_signal_number('SIGSEGV'))

def m_packet_reads_memory(self):
if self.platformIsDarwin():
# Darwin debugserver translates some signals like SIGSEGV into some gdb
# expectations about fixed signal numbers.
self.Hc_then_Csignal_signals_correct_thread(self.TARGET_EXC_BAD_ACCESS)
else:
self.Hc_then_Csignal_signals_correct_thread(
lldbutil.get_signal_number('SIGSEGV'))

@skipIfWindows # No pty support to test any inferior output
def test_m_packet_reads_memory(self):
self.build()
self.set_inferior_startup_launch()
# This is the memory we will write into the inferior and then ensure we
# can read back with $m.
MEMORY_CONTENTS = "Test contents 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"
Expand Down Expand Up @@ -576,20 +576,9 @@ def m_packet_reads_memory(self):
read_contents = seven.unhexlify(context.get("read_contents"))
self.assertEqual(read_contents, MEMORY_CONTENTS)

@debugserver_test
def test_m_packet_reads_memory_debugserver(self):
def test_qMemoryRegionInfo_is_supported(self):
self.build()
self.set_inferior_startup_launch()
self.m_packet_reads_memory()

@skipIfWindows # No pty support to test any inferior output
@llgs_test
def test_m_packet_reads_memory_llgs(self):
self.build()
self.set_inferior_startup_launch()
self.m_packet_reads_memory()

def qMemoryRegionInfo_is_supported(self):
# Start up the inferior.
procs = self.prep_debug_monitor_and_inferior()

Expand All @@ -600,19 +589,11 @@ def qMemoryRegionInfo_is_supported(self):
], True)
self.expect_gdbremote_sequence()

@debugserver_test
def test_qMemoryRegionInfo_is_supported_debugserver(self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_is_supported()

@llgs_test
def test_qMemoryRegionInfo_is_supported_llgs(self):
@skipIfWindows # No pty support to test any inferior output
def test_qMemoryRegionInfo_reports_code_address_as_executable(self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_is_supported()

def qMemoryRegionInfo_reports_code_address_as_executable(self):
# Start up the inferior.
procs = self.prep_debug_monitor_and_inferior(
inferior_args=["get-code-address-hex:hello", "sleep:5"])
Expand Down Expand Up @@ -660,21 +641,11 @@ def qMemoryRegionInfo_reports_code_address_as_executable(self):
# Ensure the start address and size encompass the address we queried.
self.assert_address_within_memory_region(code_address, mem_region_dict)

@debugserver_test
def test_qMemoryRegionInfo_reports_code_address_as_executable_debugserver(
self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_reports_code_address_as_executable()

@skipIfWindows # No pty support to test any inferior output
@llgs_test
def test_qMemoryRegionInfo_reports_code_address_as_executable_llgs(self):
def test_qMemoryRegionInfo_reports_stack_address_as_rw(self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_reports_code_address_as_executable()

def qMemoryRegionInfo_reports_stack_address_as_readable_writeable(self):
# Start up the inferior.
procs = self.prep_debug_monitor_and_inferior(
inferior_args=["get-stack-address-hex:", "sleep:5"])
Expand Down Expand Up @@ -723,22 +694,11 @@ def qMemoryRegionInfo_reports_stack_address_as_readable_writeable(self):
self.assert_address_within_memory_region(
stack_address, mem_region_dict)

@debugserver_test
def test_qMemoryRegionInfo_reports_stack_address_as_readable_writeable_debugserver(
self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_reports_stack_address_as_readable_writeable()

@skipIfWindows # No pty support to test any inferior output
@llgs_test
def test_qMemoryRegionInfo_reports_stack_address_as_readable_writeable_llgs(
self):
def test_qMemoryRegionInfo_reports_heap_address_as_rw(self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_reports_stack_address_as_readable_writeable()

def qMemoryRegionInfo_reports_heap_address_as_readable_writeable(self):
# Start up the inferior.
procs = self.prep_debug_monitor_and_inferior(
inferior_args=["get-heap-address-hex:", "sleep:5"])
Expand Down Expand Up @@ -786,22 +746,7 @@ def qMemoryRegionInfo_reports_heap_address_as_readable_writeable(self):
# Ensure the start address and size encompass the address we queried.
self.assert_address_within_memory_region(heap_address, mem_region_dict)

@debugserver_test
def test_qMemoryRegionInfo_reports_heap_address_as_readable_writeable_debugserver(
self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_reports_heap_address_as_readable_writeable()

@skipIfWindows # No pty support to test any inferior output
@llgs_test
def test_qMemoryRegionInfo_reports_heap_address_as_readable_writeable_llgs(
self):
self.build()
self.set_inferior_startup_launch()
self.qMemoryRegionInfo_reports_heap_address_as_readable_writeable()

def breakpoint_set_and_remove_work(self, want_hardware=False):
def breakpoint_set_and_remove_work(self, want_hardware):
# Start up the inferior.
procs = self.prep_debug_monitor_and_inferior(
inferior_args=[
Expand Down Expand Up @@ -933,20 +878,8 @@ def breakpoint_set_and_remove_work(self, want_hardware=False):
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)

@debugserver_test
def test_software_breakpoint_set_and_remove_work_debugserver(self):
if self.getArchitecture() == "arm":
# TODO: Handle case when setting breakpoint in thumb code
self.build(dictionary={'CFLAGS_EXTRAS': '-marm'})
else:
self.build()
self.set_inferior_startup_launch()
self.breakpoint_set_and_remove_work(want_hardware=False)

@skipIfWindows # No pty support to test any inferior output
@llgs_test
@expectedFlakeyLinux("llvm.org/pr25652")
def test_software_breakpoint_set_and_remove_work_llgs(self):
def test_software_breakpoint_set_and_remove_work(self):
if self.getArchitecture() == "arm":
# TODO: Handle case when setting breakpoint in thumb code
self.build(dictionary={'CFLAGS_EXTRAS': '-marm'})
Expand All @@ -955,11 +888,9 @@ def test_software_breakpoint_set_and_remove_work_llgs(self):
self.set_inferior_startup_launch()
self.breakpoint_set_and_remove_work(want_hardware=False)

@debugserver_test
@skipUnlessPlatform(oslist=['linux'])
@expectedFailureAndroid
@skipIf(archs=no_match(['arm', 'aarch64']))
def test_hardware_breakpoint_set_and_remove_work_debugserver(self):
def test_hardware_breakpoint_set_and_remove_work(self):
if self.getArchitecture() == "arm":
# TODO: Handle case when setting breakpoint in thumb code
self.build(dictionary={'CFLAGS_EXTRAS': '-marm'})
Expand All @@ -968,19 +899,10 @@ def test_hardware_breakpoint_set_and_remove_work_debugserver(self):
self.set_inferior_startup_launch()
self.breakpoint_set_and_remove_work(want_hardware=True)

@llgs_test
@skipUnlessPlatform(oslist=['linux'])
@skipIf(archs=no_match(['arm', 'aarch64']))
def test_hardware_breakpoint_set_and_remove_work_llgs(self):
if self.getArchitecture() == "arm":
# TODO: Handle case when setting breakpoint in thumb code
self.build(dictionary={'CFLAGS_EXTRAS': '-marm'})
else:
self.build()
def test_qSupported_returns_known_stub_features(self):
self.build()
self.set_inferior_startup_launch()
self.breakpoint_set_and_remove_work(want_hardware=True)

def qSupported_returns_known_stub_features(self):
# Start up the stub and start/prep the inferior.
procs = self.prep_debug_monitor_and_inferior()
self.add_qSupported_packets()
Expand All @@ -994,19 +916,11 @@ def qSupported_returns_known_stub_features(self):
self.assertIsNotNone(supported_dict)
self.assertTrue(len(supported_dict) > 0)

@debugserver_test
def test_qSupported_returns_known_stub_features_debugserver(self):
self.build()
self.set_inferior_startup_launch()
self.qSupported_returns_known_stub_features()

@llgs_test
def test_qSupported_returns_known_stub_features_llgs(self):
@skipIfWindows # No pty support to test any inferior output
def test_written_M_content_reads_back_correctly(self):
self.build()
self.set_inferior_startup_launch()
self.qSupported_returns_known_stub_features()

def written_M_content_reads_back_correctly(self):
TEST_MESSAGE = "Hello, memory"

# Start up the stub and start/prep the inferior.
Expand Down Expand Up @@ -1065,21 +979,13 @@ def written_M_content_reads_back_correctly(self):
self.assertIsNotNone(printed_message)
self.assertEqual(printed_message, TEST_MESSAGE + "X")

@debugserver_test
def test_written_M_content_reads_back_correctly_debugserver(self):
self.build()
self.set_inferior_startup_launch()
self.written_M_content_reads_back_correctly()

@skipIfWindows # No pty support to test any inferior output
@llgs_test
@expectedFlakeyLinux("llvm.org/pr25652")
def test_written_M_content_reads_back_correctly_llgs(self):
# Note: as of this moment, a hefty number of the GPR writes are failing with E32 (everything except rax-rdx, rdi, rsi, rbp).
# Come back to this. I have the test rigged to verify that at least some
# of the bit-flip writes work.
def test_P_writes_all_gpr_registers(self):
self.build()
self.set_inferior_startup_launch()
self.written_M_content_reads_back_correctly()

def P_writes_all_gpr_registers(self):
# Start inferior debug session, grab all register info.
procs = self.prep_debug_monitor_and_inferior(inferior_args=["sleep:2"])
self.add_register_info_collection_packets()
Expand Down Expand Up @@ -1110,22 +1016,13 @@ def P_writes_all_gpr_registers(self):
self.trace("successful writes: {}, failed writes: {}".format(successful_writes, failed_writes))
self.assertTrue(successful_writes > 0)

# Note: as of this moment, a hefty number of the GPR writes are failing with E32 (everything except rax-rdx, rdi, rsi, rbp).
# Come back to this. I have the test rigged to verify that at least some
# of the bit-flip writes work.
@debugserver_test
def test_P_writes_all_gpr_registers_debugserver(self):
self.build()
self.set_inferior_startup_launch()
self.P_writes_all_gpr_registers()

@llgs_test
def test_P_writes_all_gpr_registers_llgs(self):
# Note: as of this moment, a hefty number of the GPR writes are failing
# with E32 (everything except rax-rdx, rdi, rsi, rbp).
@skipIfWindows
def test_P_and_p_thread_suffix_work(self):
self.build()
self.set_inferior_startup_launch()
self.P_writes_all_gpr_registers()

def P_and_p_thread_suffix_work(self):
# Startup the inferior with three threads.
procs = self.prep_debug_monitor_and_inferior(
inferior_args=["thread:new", "thread:new"])
Expand Down Expand Up @@ -1232,18 +1129,3 @@ def P_and_p_thread_suffix_work(self):
# Make sure we read back what we wrote.
self.assertEqual(read_value, expected_reg_values[thread_index])
thread_index += 1

# Note: as of this moment, a hefty number of the GPR writes are failing
# with E32 (everything except rax-rdx, rdi, rsi, rbp).
@debugserver_test
def test_P_and_p_thread_suffix_work_debugserver(self):
self.build()
self.set_inferior_startup_launch()
self.P_and_p_thread_suffix_work()

@skipIfWindows
@llgs_test
def test_P_and_p_thread_suffix_work_llgs(self):
self.build()
self.set_inferior_startup_launch()
self.P_and_p_thread_suffix_work()
48 changes: 9 additions & 39 deletions lldb/test/API/tools/lldb-server/commandline/TestStubSetSID.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


import gdbremote_testcase
import lldbgdbserverutils
import os
Expand All @@ -8,7 +6,6 @@
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class TestStubSetSIDTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):

mydir = TestBase.compute_mydir(__file__)
Expand All @@ -27,53 +24,26 @@ def get_stub_sid(self, extra_stub_args=None):
# Get the process id for the stub.
return os.getsid(server.pid)

def sid_is_same_without_setsid(self):
stub_sid = self.get_stub_sid()
self.assertEqual(stub_sid, os.getsid(0))

def sid_is_different_with_setsid(self):
stub_sid = self.get_stub_sid(["--setsid"])
self.assertNotEqual(stub_sid, os.getsid(0))

def sid_is_different_with_S(self):
stub_sid = self.get_stub_sid(["-S"])
self.assertNotEqual(stub_sid, os.getsid(0))

@debugserver_test
@skipIfRemote # --setsid not used on remote platform and currently it is also impossible to get the sid of lldb-platform running on a remote target
def test_sid_is_same_without_setsid_debugserver(self):
self.set_inferior_startup_launch()
self.sid_is_same_without_setsid()

@skipIfWindows
@llgs_test
@skipIfRemote # --setsid not used on remote platform and currently it is also impossible to get the sid of lldb-platform running on a remote target
def test_sid_is_same_without_setsid_llgs(self):
def test_sid_is_same_without_setsid(self):
self.set_inferior_startup_launch()
self.sid_is_same_without_setsid()

@debugserver_test
@skipIfRemote # --setsid not used on remote platform and currently it is also impossible to get the sid of lldb-platform running on a remote target
def test_sid_is_different_with_setsid_debugserver(self):
self.set_inferior_startup_launch()
self.sid_is_different_with_setsid()
stub_sid = self.get_stub_sid()
self.assertEqual(stub_sid, os.getsid(0))

@skipIfWindows
@llgs_test
@skipIfRemote # --setsid not used on remote platform and currently it is also impossible to get the sid of lldb-platform running on a remote target
def test_sid_is_different_with_setsid_llgs(self):
def test_sid_is_different_with_setsid(self):
self.set_inferior_startup_launch()
self.sid_is_different_with_setsid()

@debugserver_test
@skipIfRemote # --setsid not used on remote platform and currently it is also impossible to get the sid of lldb-platform running on a remote target
def test_sid_is_different_with_S_debugserver(self):
self.set_inferior_startup_launch()
self.sid_is_different_with_S()
stub_sid = self.get_stub_sid(["--setsid"])
self.assertNotEqual(stub_sid, os.getsid(0))

@skipIfWindows
@llgs_test
@skipIfRemote # --setsid not used on remote platform and currently it is also impossible to get the sid of lldb-platform running on a remote target
def test_sid_is_different_with_S_llgs(self):
self.set_inferior_startup_launch()
self.sid_is_different_with_S()

stub_sid = self.get_stub_sid(["-S"])
self.assertNotEqual(stub_sid, os.getsid(0))
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@


import gdbremote_testcase
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class TestGdbRemoteAbort(gdbremote_testcase.GdbRemoteTestCaseBase):
mydir = TestBase.compute_mydir(__file__)

def inferior_abort_received(self):
@skipIfWindows # No signal is sent on Windows.
# std::abort() on <= API 16 raises SIGSEGV - b.android.com/179836
@expectedFailureAndroid(api_levels=list(range(16 + 1)))
def test_inferior_abort_received_llgs(self):
self.build()

procs = self.prep_debug_monitor_and_inferior(inferior_args=["abort"])
self.assertIsNotNone(procs)

Expand All @@ -27,16 +29,3 @@ def inferior_abort_received(self):
self.assertIsNotNone(hex_exit_code)
self.assertEqual(int(hex_exit_code, 16),
lldbutil.get_signal_number('SIGABRT'))

@debugserver_test
def test_inferior_abort_received_debugserver(self):
self.build()
self.inferior_abort_received()

@skipIfWindows # No signal is sent on Windows.
@llgs_test
# std::abort() on <= API 16 raises SIGSEGV - b.android.com/179836
@expectedFailureAndroid(api_levels=list(range(16 + 1)))
def test_inferior_abort_received_llgs(self):
self.build()
self.inferior_abort_received()
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@


import gdbremote_testcase
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class TestGdbRemoteSegFault(gdbremote_testcase.GdbRemoteTestCaseBase):
mydir = TestBase.compute_mydir(__file__)

Expand All @@ -30,13 +27,10 @@ def inferior_seg_fault_received(self, expected_signo):
self.assertIsNotNone(hex_exit_code)
self.assertEqual(int(hex_exit_code, 16), expected_signo)

@debugserver_test
def test_inferior_seg_fault_received_debugserver(self):
self.build()
self.inferior_seg_fault_received(self.GDB_REMOTE_STOP_CODE_BAD_ACCESS)

@skipIfWindows # No signal is sent on Windows.
@llgs_test
def test_inferior_seg_fault_received_llgs(self):
def test_inferior_seg_fault_received(self):
self.build()
self.inferior_seg_fault_received(lldbutil.get_signal_number('SIGSEGV'))
if self.platformIsDarwin():
self.inferior_seg_fault_received(self.GDB_REMOTE_STOP_CODE_BAD_ACCESS)
else:
self.inferior_seg_fault_received(lldbutil.get_signal_number('SIGSEGV'))