Files
Jonas Devlieghere 08527565f2 [lldb][test] Skip even more unsupported tests on WebAssembly (#204255)
A second pass over the full API suite for tests that depend on features
unavailable on wasm32-wasip1 or in LLDB's Wasm support:

- Expression evaluation (skipIfWasm) for the C++ tests that the
"expression" category doesn't cover, since that category only applies to
commands/expression/*.

- Attaching to a running process (skipIfWasm). These tests have the
harness spawn the inferior as a host process and then attach, but a
.wasm module isn't a native executable, so exec'ing it fails with
ENOEXEC ("Exec format error"). The wasm module only runs inside the
runtime (e.g. iwasm) that LLDB launches, so there is no host process to
attach to.

Where a test also has supported, passing cases, the decorator is applied
per method.
2026-06-16 16:31:02 -07:00

53 lines
1.7 KiB
Python

import lldb
import time
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test.gdbclientutils import *
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
@skipIfWasm # attaching requires launching the inferior as a host process
class TestPlatformKill(GDBRemoteTestBase):
SHARED_BUILD_TESTCASE = False
@skipIfRemote
def test_kill_different_platform(self):
"""Test connecting to a remote linux platform"""
self.build(dictionary={"CXX_SOURCES": "sleep.cpp"})
host_process = self.spawnSubprocess(self.getBuildArtifact())
# Create a fake remote process with the same PID as host_process
class MyResponder(MockGDBServerResponder):
def __init__(self):
MockGDBServerResponder.__init__(self)
self.got_kill = False
def qC(self):
return "QC%x" % host_process.pid
def k(self):
self.got_kill = True
return "X09"
self.server.responder = MyResponder()
error = lldb.SBError()
target = self.dbg.CreateTarget(
"", "x86_64-pc-linux", "remote-linux", False, error
)
self.assertSuccess(error)
process = self.connect(target)
self.assertEqual(process.GetProcessID(), host_process.pid)
host_platform = lldb.SBPlatform("host")
self.assertSuccess(host_platform.Kill(host_process.pid))
# Host dies, remote process lives.
self.assertFalse(self.server.responder.got_kill)
self.assertIsNotNone(host_process.wait(timeout=10))
# Now kill the remote one as well
self.assertSuccess(process.Kill())
self.assertTrue(self.server.responder.got_kill)