brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · 40d25b4 Raw
263 lines · python
1import re2 3import gdbremote_testcase4from lldbsuite.test.decorators import *5from lldbsuite.test.lldbtest import *6from lldbsuite.test import lldbutil7 8 9class TestSignal(gdbremote_testcase.GdbRemoteTestCaseBase):10    def start_threads(self, num):11        procs = self.prep_debug_monitor_and_inferior(inferior_args=[str(num)])12        self.test_sequence.add_log_lines(13            [14                "read packet: $c#63",15                {"direction": "send", "regex": "[$]T.*;reason:signal.*"},16            ],17            True,18        )19        self.add_threadinfo_collection_packets()20 21        context = self.expect_gdbremote_sequence()22        self.assertIsNotNone(context)23        threads = self.parse_threadinfo_packets(context)24        self.assertIsNotNone(threads)25        self.assertEqual(len(threads), num + 1)26 27        self.reset_test_sequence()28        return threads29 30    SIGNAL_MATCH_RE = re.compile(r"received SIGUSR1 on thread id: ([0-9a-f]+)")31 32    def send_and_check_signal(self, vCont_data, threads):33        self.test_sequence.add_log_lines(34            [35                "read packet: $vCont;{0}#00".format(vCont_data),36                "send packet: $W00#00",37            ],38            True,39        )40        exp = self.expect_gdbremote_sequence()41        self.reset_test_sequence()42        tids = []43        for line in exp["O_content"].decode().splitlines():44            m = self.SIGNAL_MATCH_RE.match(line)45            if m is not None:46                tids.append(int(m.group(1), 16))47        self.assertEqual(sorted(tids), sorted(threads))48 49    def get_pid(self):50        self.add_process_info_collection_packets()51        context = self.expect_gdbremote_sequence()52        self.assertIsNotNone(context)53        procinfo = self.parse_process_info_response(context)54        return int(procinfo["pid"], 16)55 56    @skipIfWindows57    @skipIfDarwin58    @expectedFailureNetBSD59    @expectedFailureAll(60        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"61    )62    @skipIfAsan  # Times out under asan63    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot64    def test_signal_process_without_tid(self):65        self.build()66        self.set_inferior_startup_launch()67 68        threads = self.start_threads(1)69        self.send_and_check_signal(70            "C{0:x}".format(lldbutil.get_signal_number("SIGUSR1")), threads71        )72 73    @skipUnlessPlatform(["netbsd"])74    @expectedFailureNetBSD75    @skipIfAsan  # Times out under asan76    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot77    def test_signal_one_thread(self):78        self.build()79        self.set_inferior_startup_launch()80 81        threads = self.start_threads(1)82        # try sending a signal to one of the two threads83        self.send_and_check_signal(84            "C{0:x}:{1:x};c".format(lldbutil.get_signal_number("SIGUSR1")), threads[:1]85        )86 87    @skipIfWindows88    @skipIfDarwin89    @expectedFailureNetBSD90    @expectedFailureAll(91        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"92    )93    @skipIfAsan  # Times out under asan94    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot95    def test_signal_all_threads(self):96        self.build()97        self.set_inferior_startup_launch()98 99        threads = self.start_threads(1)100        # try sending a signal to two threads (= the process)101        self.send_and_check_signal(102            "C{0:x}:{1:x};C{0:x}:{2:x}".format(103                lldbutil.get_signal_number("SIGUSR1"), *threads104            ),105            threads,106        )107 108    @skipIfWindows109    @expectedFailureNetBSD110    @expectedFailureAll(111        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"112    )113    @add_test_categories(["llgs"])114    @skipIfAsan  # Times out under asan115    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot116    def test_signal_process_by_pid(self):117        self.build()118        self.set_inferior_startup_launch()119 120        threads = self.start_threads(1)121        self.send_and_check_signal(122            "C{0:x}:p{1:x}".format(123                lldbutil.get_signal_number("SIGUSR1"), self.get_pid()124            ),125            threads,126        )127 128    @skipIfWindows129    @expectedFailureNetBSD130    @expectedFailureAll(131        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"132    )133    @add_test_categories(["llgs"])134    @skipIfAsan  # Times out under asan135    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot136    def test_signal_process_minus_one(self):137        self.build()138        self.set_inferior_startup_launch()139 140        threads = self.start_threads(1)141        self.send_and_check_signal(142            "C{0:x}:p-1".format(lldbutil.get_signal_number("SIGUSR1")), threads143        )144 145    @skipIfWindows146    @expectedFailureNetBSD147    @expectedFailureAll(148        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"149    )150    @add_test_categories(["llgs"])151    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot152    def test_signal_minus_one(self):153        self.build()154        self.set_inferior_startup_launch()155 156        threads = self.start_threads(1)157        self.send_and_check_signal(158            "C{0:x}:-1".format(lldbutil.get_signal_number("SIGUSR1")), threads159        )160 161    @skipIfWindows162    @expectedFailureNetBSD163    @expectedFailureAll(164        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"165    )166    @add_test_categories(["llgs"])167    @skipIfAsan  # Times out under asan168    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot169    def test_signal_all_threads_by_pid(self):170        self.build()171        self.set_inferior_startup_launch()172 173        threads = self.start_threads(1)174        # try sending a signal to two threads (= the process)175        self.send_and_check_signal(176            "C{0:x}:p{1:x}.{2:x};C{0:x}:p{1:x}.{3:x}".format(177                lldbutil.get_signal_number("SIGUSR1"), self.get_pid(), *threads178            ),179            threads,180        )181 182    @skipIfWindows183    @expectedFailureNetBSD184    @expectedFailureAll(185        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"186    )187    @add_test_categories(["llgs"])188    @skipIfAsan  # Times out under asan189    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot190    def test_signal_minus_one_by_pid(self):191        self.build()192        self.set_inferior_startup_launch()193 194        threads = self.start_threads(1)195        self.send_and_check_signal(196            "C{0:x}:p{1:x}.-1".format(197                lldbutil.get_signal_number("SIGUSR1"), self.get_pid()198            ),199            threads,200        )201 202    @skipIfWindows203    @expectedFailureNetBSD204    @expectedFailureAll(205        oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56086"206    )207    @add_test_categories(["llgs"])208    @skipIfAsan  # Times out under asan209    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot210    def test_signal_minus_one_by_minus_one(self):211        self.build()212        self.set_inferior_startup_launch()213 214        threads = self.start_threads(1)215        self.send_and_check_signal(216            "C{0:x}:p-1.-1".format(lldbutil.get_signal_number("SIGUSR1")), threads217        )218 219    @skipUnlessPlatform(["netbsd"])220    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot221    def test_signal_two_of_three_threads(self):222        self.build()223        self.set_inferior_startup_launch()224 225        threads = self.start_threads(2)226        # try sending a signal to 2 out of 3 threads227        self.test_sequence.add_log_lines(228            [229                "read packet: $vCont;C{0:x}:{1:x};C{0:x}:{2:x};c#00".format(230                    lldbutil.get_signal_number("SIGUSR1"), threads[1], threads[2]231                ),232                {"direction": "send", "regex": r"^\$E1e#db$"},233            ],234            True,235        )236 237        context = self.expect_gdbremote_sequence()238        self.assertIsNotNone(context)239 240    @skipUnlessPlatform(["netbsd"])241    @skipIf(oslist=["linux"], archs=["arm$", "aarch64"])  # Randomly fails on buildbot242    def test_signal_two_signals(self):243        self.build()244        self.set_inferior_startup_launch()245 246        threads = self.start_threads(1)247        # try sending two different signals to two threads248        self.test_sequence.add_log_lines(249            [250                "read packet: $vCont;C{0:x}:{1:x};C{2:x}:{3:x}#00".format(251                    lldbutil.get_signal_number("SIGUSR1"),252                    threads[0],253                    lldbutil.get_signal_number("SIGUSR2"),254                    threads[1],255                ),256                {"direction": "send", "regex": r"^\$E1e#db$"},257            ],258            True,259        )260 261        context = self.expect_gdbremote_sequence()262        self.assertIsNotNone(context)263