|
4 | 4 | """
|
5 | 5 |
|
6 | 6 | import os
|
| 7 | +import signal |
7 | 8 | import socket
|
8 | 9 | import shutil
|
9 | 10 | import lldbgdbserverutils
|
@@ -58,3 +59,45 @@ def test_platform_process_launch_gdb_server(self):
|
58 | 59 |
|
59 | 60 | self.runCmd("target create {}".format(self.getBuildArtifact("a.out")))
|
60 | 61 | 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