199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest process attach when executable was deleted. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport os 899451b44SJordan Rupprechtimport lldb 999451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 1099451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1199451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprechtclass TestDeletedExecutable(TestBase): 1499451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht @skipIfWindows # cannot delete a running executable 17*266c90feSMichał Górny @expectedFailureAll(oslist=["linux"], 1899451b44SJordan Rupprecht triple=no_match('aarch64-.*-android')) 1999451b44SJordan Rupprecht # determining the architecture of the process fails 2099451b44SJordan Rupprecht def test(self): 2199451b44SJordan Rupprecht self.build() 2299451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht # Use a file as a synchronization point between test and inferior. 2599451b44SJordan Rupprecht pid_file_path = lldbutil.append_to_process_working_directory(self, 2699451b44SJordan Rupprecht "token_pid_%d" % (int(os.getpid()))) 2799451b44SJordan Rupprecht self.addTearDownHook( 2899451b44SJordan Rupprecht lambda: self.run_platform_command( 2999451b44SJordan Rupprecht "rm %s" % 3099451b44SJordan Rupprecht (pid_file_path))) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht # Spawn a new process 3399451b44SJordan Rupprecht popen = self.spawnSubprocess(exe, [pid_file_path]) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht # Wait until process has fully started up. 3699451b44SJordan Rupprecht pid = lldbutil.wait_for_file_on_target(self, pid_file_path) 3799451b44SJordan Rupprecht 3899451b44SJordan Rupprecht # Now we can safely remove the executable and test if we can attach. 3999451b44SJordan Rupprecht os.remove(exe) 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht self.runCmd("process attach -p " + str(popen.pid)) 4299451b44SJordan Rupprecht self.runCmd("kill") 43