199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest process attach when executable was deleted. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprechtimport os 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 12*2238dcc3SJonas Devlieghere 1399451b44SJordan Rupprechtclass TestDeletedExecutable(TestBase): 1499451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht @skipIfWindows # cannot delete a running executable 1799451b44SJordan Rupprecht def test(self): 1899451b44SJordan Rupprecht self.build() 1999451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht # Use a file as a synchronization point between test and inferior. 22*2238dcc3SJonas Devlieghere pid_file_path = lldbutil.append_to_process_working_directory( 23*2238dcc3SJonas Devlieghere self, "token_pid_%d" % (int(os.getpid())) 24*2238dcc3SJonas Devlieghere ) 2599451b44SJordan Rupprecht self.addTearDownHook( 26*2238dcc3SJonas Devlieghere lambda: self.run_platform_command("rm %s" % (pid_file_path)) 27*2238dcc3SJonas Devlieghere ) 2899451b44SJordan Rupprecht 2999451b44SJordan Rupprecht # Spawn a new process 3099451b44SJordan Rupprecht popen = self.spawnSubprocess(exe, [pid_file_path]) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht # Wait until process has fully started up. 3399451b44SJordan Rupprecht pid = lldbutil.wait_for_file_on_target(self, pid_file_path) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht # Now we can safely remove the executable and test if we can attach. 3699451b44SJordan Rupprecht os.remove(exe) 3799451b44SJordan Rupprecht 3899451b44SJordan Rupprecht self.runCmd("process attach -p " + str(popen.pid)) 3999451b44SJordan Rupprecht self.runCmd("kill") 40