brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 6e29796 Raw
129 lines · python
1"""Test that conflicting symbols in different shared libraries work correctly"""2 3 4import lldb5from lldbsuite.test.decorators import *6from lldbsuite.test.lldbtest import *7from lldbsuite.test import lldbutil8 9 10class TestConflictingSymbols(TestBase):11    NO_DEBUG_INFO_TESTCASE = True12 13    def setUp(self):14        TestBase.setUp(self)15        lldbutil.mkdir_p(self.getBuildArtifact("One"))16        lldbutil.mkdir_p(self.getBuildArtifact("Two"))17 18    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24489")19    def test_conflicting_symbols(self):20        self.build()21        exe = self.getBuildArtifact("a.out")22        target = self.dbg.CreateTarget(exe)23        self.assertTrue(target, VALID_TARGET)24 25        # Register our shared libraries for remote targets so they get26        # automatically uploaded27        environment = self.registerSharedLibrariesWithTarget(target, ["One", "Two"])28 29        lldbutil.run_break_set_by_source_regexp(30            self, "// break here", extra_options="-f One.c", num_expected_locations=-231        )32        lldbutil.run_break_set_by_source_regexp(33            self, "// break here", extra_options="-f Two.c", num_expected_locations=-234        )35        lldbutil.run_break_set_by_source_regexp(36            self, "// break here", extra_options="-f main.c", num_expected_locations=137        )38 39        process = target.LaunchSimple(40            None, environment, self.get_process_working_directory()41        )42        self.assertTrue(process, PROCESS_IS_VALID)43 44        # The stop reason of the thread should be breakpoint.45        self.expect(46            "thread list",47            STOPPED_DUE_TO_BREAKPOINT,48            substrs=["stopped", "stop reason = breakpoint"],49        )50 51        lldbutil.check_breakpoint(self, bpno=1, expected_hit_count=1)52 53        # This should display correctly.54        self.expect(55            "expr (unsigned long long)conflicting_symbol",56            "Symbol from One should be found",57            substrs=["11111"],58        )59 60        self.runCmd("continue", RUN_SUCCEEDED)61 62        # The stop reason of the thread should be breakpoint.63        self.expect(64            "thread list",65            STOPPED_DUE_TO_BREAKPOINT,66            substrs=["stopped", "stop reason = breakpoint"],67        )68 69        lldbutil.check_breakpoint(self, bpno=1, expected_hit_count=1)70 71        self.expect(72            "expr (unsigned long long)conflicting_symbol",73            "Symbol from Two should be found",74            substrs=["22222"],75        )76 77        self.runCmd("continue", RUN_SUCCEEDED)78 79        # The stop reason of the thread should be breakpoint.80        self.expect(81            "thread list",82            STOPPED_DUE_TO_BREAKPOINT,83            substrs=["stopped", "stop reason = breakpoint"],84        )85 86        lldbutil.check_breakpoint(self, bpno=1, expected_hit_count=1)87 88        self.expect(89            "expr (unsigned long long)conflicting_symbol",90            "An error should be printed when symbols can't be ordered",91            error=True,92            substrs=["Multiple internal symbols"],93        )94 95    @expectedFailureAll(bugnumber="llvm.org/pr35043")96    @skipIfWindows  # This test is "passing" on Windows, but it is a false positive.97    def test_shadowed(self):98        self.build()99        exe = self.getBuildArtifact("a.out")100        target = self.dbg.CreateTarget(exe)101        self.assertTrue(target, VALID_TARGET)102 103        # Register our shared libraries for remote targets so they get104        # automatically uploaded105        environment = self.registerSharedLibrariesWithTarget(target, ["One", "Two"])106 107        lldbutil.run_break_set_by_source_regexp(108            self, "// break here", extra_options="-f main.c", num_expected_locations=1109        )110 111        process = target.LaunchSimple(112            None, environment, self.get_process_working_directory()113        )114        self.assertTrue(process, PROCESS_IS_VALID)115 116        # The stop reason of the thread should be breakpoint.117        self.expect(118            "thread list",119            STOPPED_DUE_TO_BREAKPOINT,120            substrs=["stopped", "stop reason = breakpoint"],121        )122 123        # As we are shadowing the conflicting symbol, there should be no124        # ambiguity in this expression.125        self.expect(126            "expr int conflicting_symbol = 474747; conflicting_symbol",127            substrs=["474747"],128        )129