diff --git a/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py b/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py index 2572600a1829f5..e12a638f9c03fb 100644 --- a/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py +++ b/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/TestBundleWithDotInFilename.py @@ -32,15 +32,25 @@ def tearDown(self): @skipUnlessDarwin # This test is explicitly a dSYM test, it doesn't need to run for any other config. @skipIf(debug_info=no_match(["dsym"])) + @skipIfReproducer # File synchronization is not supported during replay. def test_attach_and_check_dsyms(self): """Test attach to binary, see if the bundle dSYM is found""" exe = self.getBuildArtifact(exe_name) self.build() os.chdir(self.getBuildDir()); - popen = self.spawnSubprocess(exe) - # Give the inferior time to start up, dlopen a bundle, remove the bundle it linked in - sleep(5) + # Use a file as a synchronization point between test and inferior. + pid_file_path = lldbutil.append_to_process_working_directory(self, + "token_pid_%d" % (int(os.getpid()))) + self.addTearDownHook( + lambda: self.run_platform_command( + "rm %s" % + (pid_file_path))) + + popen = self.spawnSubprocess(exe, [pid_file_path]) + + # Wait for the inferior to start up, dlopen a bundle, remove the bundle it linked in + pid = lldbutil.wait_for_file_on_target(self, pid_file_path) # Since the library that was dlopen()'ed is now removed, lldb will need to find the # binary & dSYM via target.exec-search-paths @@ -64,6 +74,3 @@ def test_attach_and_check_dsyms(self): self.assertTrue (dsym_name == 'com.apple.sbd', "Check that we found the dSYM for the bundle that was loaded") i=i+1 os.chdir(self.getSourceDir()); - -if __name__ == '__main__': - unittest.main() diff --git a/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/main.c b/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/main.c index 30761eb1b4091b..a4cffc840731ba 100644 --- a/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/main.c +++ b/lldb/test/API/macosx/find-dsym/bundle-with-dot-in-filename/main.c @@ -1,10 +1,11 @@ #include #include #include +#include int setup_is_complete = 0; -int main() +int main(int argc, const char** argv) { void *handle = dlopen ("com.apple.sbd.xpc/com.apple.sbd", RTLD_NOW); @@ -13,6 +14,9 @@ int main() if (dlsym(handle, "foo")) { system ("/bin/rm -rf com.apple.sbd.xpc com.apple.sbd.xpc.dSYM"); + + FILE *fp = fopen (argv[1], "w"); + fclose (fp); setup_is_complete = 1; // At this point we want lldb to attach to the process. If lldb attaches diff --git a/lldb/test/API/macosx/find-dsym/deep-bundle/TestDeepBundle.py b/lldb/test/API/macosx/find-dsym/deep-bundle/TestDeepBundle.py index a486c5159f01a9..358a4b70d2f5e0 100644 --- a/lldb/test/API/macosx/find-dsym/deep-bundle/TestDeepBundle.py +++ b/lldb/test/API/macosx/find-dsym/deep-bundle/TestDeepBundle.py @@ -31,14 +31,24 @@ def tearDown(self): @skipUnlessDarwin # This test is explicitly a dSYM test, it doesn't need to run for any other config. @skipIf(debug_info=no_match(["dsym"])) + @skipIfReproducer # File synchronization is not supported during replay. def test_attach_and_check_dsyms(self): """Test attach to binary, see if the framework dSYM is found""" exe = self.getBuildArtifact(exe_name) self.build() - popen = self.spawnSubprocess(exe, [self.getBuildDir()]) - # Give the inferior time to start up, dlopen a bundle, remove the bundle it linked in - sleep(5) + # Use a file as a synchronization point between test and inferior. + pid_file_path = lldbutil.append_to_process_working_directory(self, + "token_pid_%d" % (int(os.getpid()))) + self.addTearDownHook( + lambda: self.run_platform_command( + "rm %s" % + (pid_file_path))) + + popen = self.spawnSubprocess(exe, [self.getBuildDir(), pid_file_path]) + + # Wait for the inferior to start up, dlopen a bundle, remove the bundle it linked in + pid = lldbutil.wait_for_file_on_target(self, pid_file_path) # Since the library that was dlopen()'ed is now removed, lldb will need to find the # binary & dSYM via target.exec-search-paths diff --git a/lldb/test/API/macosx/find-dsym/deep-bundle/main.c b/lldb/test/API/macosx/find-dsym/deep-bundle/main.c index b5ef5cff74a390..0a44b96068c2eb 100644 --- a/lldb/test/API/macosx/find-dsym/deep-bundle/main.c +++ b/lldb/test/API/macosx/find-dsym/deep-bundle/main.c @@ -13,6 +13,8 @@ int main(int argc, const char **argv) argv[1], argv[1], argv[1]); system (command); + FILE *fp = fopen (argv[2], "w"); + fclose (fp); setup_is_complete = 1; // At this point we want lldb to attach to the process. If lldb attaches