| """ |
| Test that LLDB can launch a linux executable through the dynamic loader where |
| the main executable has an extra exported "_r_debug" symbol that used to mess |
| up shared library loading with DYLDRendezvous and the POSIX dynamic loader |
| plug-in. What used to happen is that any shared libraries other than the main |
| executable and the dynamic loader and VSDO would not get loaded. This test |
| checks to make sure that we still load libraries correctly when we have |
| multiple "_r_debug" symbols. See comments in the main.cpp source file for full |
| details on what the problem is. |
| """ |
| |
| import lldb |
| import os |
| |
| from lldbsuite.test import lldbutil |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| |
| |
| class TestDyldWithMultipleRDebug(TestBase): |
| @skipIf(oslist=no_match(["linux"])) |
| @no_debug_info_test |
| def test(self): |
| self.build() |
| # Run to a breakpoint in main.cpp to ensure we can hit breakpoints |
| # in the main executable. Setting breakpoints by file and line ensures |
| # that the main executable was loaded correctly by the dynamic loader |
| (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( |
| self, "// Break here", lldb.SBFileSpec("main.cpp"), extra_images=["testlib"] |
| ) |
| # Set breakpoints both on shared library function to ensure that |
| # we hit a source breakpoint in the shared library which only will |
| # happen if we load the shared library correctly in the dynamic |
| # loader. |
| lldbutil.continue_to_source_breakpoint( |
| self, |
| process, |
| "// Library break here", |
| lldb.SBFileSpec("library_file.cpp", False), |
| ) |