Files
TheRock/compiler/amd-llvm/lldb/test/API/tools/lldb-server/vCont-threads/TestSignal.py
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

264 lines
8.9 KiB
Python

import re
import gdbremote_testcase
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
@skipIfTargetDoesNotSupportThreads()
class TestSignal(gdbremote_testcase.GdbRemoteTestCaseBase):
def start_threads(self, num):
procs = self.prep_debug_monitor_and_inferior(inferior_args=[str(num)])
self.test_sequence.add_log_lines(
[
"read packet: $c#63",
{"direction": "send", "regex": "[$]T.*;reason:signal.*"},
],
True,
)
self.add_threadinfo_collection_packets()
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
threads = self.parse_threadinfo_packets(context)
self.assertIsNotNone(threads)
self.assertEqual(len(threads), num + 1)
self.reset_test_sequence()
return threads
SIGNAL_MATCH_RE = re.compile(r"received SIGUSR1 on thread id: ([0-9a-f]+)")
def send_and_check_signal(self, vCont_data, threads):
self.test_sequence.add_log_lines(
[
"read packet: $vCont;{0}#00".format(vCont_data),
"send packet: $W00#00",
],
True,
)
exp = self.expect_gdbremote_sequence()
self.reset_test_sequence()
tids = []
for line in exp["O_content"].decode().splitlines():
m = self.SIGNAL_MATCH_RE.match(line)
if m is not None:
tids.append(int(m.group(1), 16))
self.assertEqual(sorted(tids), sorted(threads))
def get_pid(self):
self.add_process_info_collection_packets()
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
procinfo = self.parse_process_info_response(context)
return int(procinfo["pid"], 16)
@skipIfWindows
@skipIfDarwin
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_process_without_tid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}".format(lldbutil.get_signal_number("SIGUSR1")), threads
)
@skipUnlessPlatform(["netbsd"])
@expectedFailureNetBSD
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_one_thread(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending a signal to one of the two threads
self.send_and_check_signal(
"C{0:x}:{1:x};c".format(lldbutil.get_signal_number("SIGUSR1")), threads[:1]
)
@skipIfWindows
@skipIfDarwin
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_all_threads(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending a signal to two threads (= the process)
self.send_and_check_signal(
"C{0:x}:{1:x};C{0:x}:{2:x}".format(
lldbutil.get_signal_number("SIGUSR1"), *threads
),
threads,
)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_process_by_pid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p{1:x}".format(
lldbutil.get_signal_number("SIGUSR1"), self.get_pid()
),
threads,
)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_process_minus_one(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p-1".format(lldbutil.get_signal_number("SIGUSR1")), threads
)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@add_test_categories(["llgs"])
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_minus_one(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:-1".format(lldbutil.get_signal_number("SIGUSR1")), threads
)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_all_threads_by_pid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending a signal to two threads (= the process)
self.send_and_check_signal(
"C{0:x}:p{1:x}.{2:x};C{0:x}:p{1:x}.{3:x}".format(
lldbutil.get_signal_number("SIGUSR1"), self.get_pid(), *threads
),
threads,
)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_minus_one_by_pid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p{1:x}.-1".format(
lldbutil.get_signal_number("SIGUSR1"), self.get_pid()
),
threads,
)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureAll(
oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"
)
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_minus_one_by_minus_one(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p-1.-1".format(lldbutil.get_signal_number("SIGUSR1")), threads
)
@skipUnlessPlatform(["netbsd"])
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_two_of_three_threads(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(2)
# try sending a signal to 2 out of 3 threads
self.test_sequence.add_log_lines(
[
"read packet: $vCont;C{0:x}:{1:x};C{0:x}:{2:x};c#00".format(
lldbutil.get_signal_number("SIGUSR1"), threads[1], threads[2]
),
{"direction": "send", "regex": r"^\$E1e#db$"},
],
True,
)
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
@skipUnlessPlatform(["netbsd"])
@skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) # Randomly fails on buildbot
def test_signal_two_signals(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending two different signals to two threads
self.test_sequence.add_log_lines(
[
"read packet: $vCont;C{0:x}:{1:x};C{2:x}:{3:x}#00".format(
lldbutil.get_signal_number("SIGUSR1"),
threads[0],
lldbutil.get_signal_number("SIGUSR2"),
threads[1],
),
{"direction": "send", "regex": r"^\$E1e#db$"},
],
True,
)
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)