Skip to content

Commit fcc85b8

Browse files
[lldb] Test running lldb-server through symlink
1 parent 6f2d070 commit fcc85b8

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

lldb/test/API/commands/platform/launchgdbserver/TestPlatformLaunchGDBServer.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"""
55

66
import os
7+
import signal
78
import socket
89
import shutil
910
import lldbgdbserverutils
@@ -58,3 +59,45 @@ def test_platform_process_launch_gdb_server(self):
5859

5960
self.runCmd("target create {}".format(self.getBuildArtifact("a.out")))
6061
self.expect("run", substrs=["unable to launch a GDB server on"], error=True)
62+
63+
@skipIfRemote
64+
@skipUnlessPlatform(["linux"])
65+
@add_test_categories(["lldb-server"])
66+
def test_lldb_server_weird_symlinks(self):
67+
self.build()
68+
69+
hostname = socket.getaddrinfo("localhost", 0, proto=socket.IPPROTO_TCP)[0][4][0]
70+
listen_url = "[%s]:0" % hostname
71+
72+
port_file = self.getBuildArtifact("port")
73+
commandline_args = [
74+
"platform",
75+
"--listen",
76+
listen_url,
77+
"--socket-file",
78+
port_file,
79+
]
80+
81+
# Run lldb-server from a symlink without any binary called "lldb-server" in the directory.
82+
llgs_hiding_directory = self.getBuildArtifact("hiding-directory")
83+
new_lldb_server_link = self.getBuildArtifact(
84+
"lldb-server-with-an-unconventional-name"
85+
)
86+
new_lldb_server = os.path.join(llgs_hiding_directory, "lldb-server")
87+
os.makedirs(llgs_hiding_directory)
88+
shutil.copy(lldbgdbserverutils.get_lldb_server_exe(), new_lldb_server)
89+
os.symlink(new_lldb_server, new_lldb_server_link)
90+
91+
proc = self.spawnSubprocess(new_lldb_server_link, commandline_args)
92+
socket_id = lldbutil.wait_for_file_on_target(self, port_file)
93+
94+
new_platform = lldb.SBPlatform("remote-" + self.getPlatform())
95+
self.dbg.SetSelectedPlatform(new_platform)
96+
97+
connect_url = "connect://[%s]:%s" % (hostname, socket_id)
98+
self.runCmd("platform connect %s" % connect_url)
99+
self.runCmd("target create {}".format(self.getBuildArtifact("a.out")))
100+
self.runCmd("run")
101+
102+
# So that lldb-server doesn't crash over SIGHUP
103+
os.kill(proc.pid, signal.SIGTERM)

0 commit comments

Comments
 (0)