1""" 2Test that loading of dependents works correctly for all the potential 3combinations. 4""" 5 6 7import lldb 8from lldbsuite.test.decorators import * 9from lldbsuite.test.lldbtest import * 10from lldbsuite.test import lldbutil 11 12@skipIfWindows # Windows deals differently with shared libs. 13class TargetDependentsTestCase(TestBase): 14 15 mydir = TestBase.compute_mydir(__file__) 16 17 NO_DEBUG_INFO_TESTCASE = True 18 19 def setUp(self): 20 TestBase.setUp(self) 21 self.build() 22 23 def has_exactly_one_image(self, matching, msg=""): 24 self.expect( 25 "image list", 26 "image list should contain at least one image", 27 substrs=['[ 0]']) 28 should_match = not matching 29 self.expect( 30 "image list", msg, matching=should_match, substrs=['[ 1]']) 31 32 33 @expectedFailureAll(oslist=["freebsd", "linux"], 34 triple=no_match(".*-android")) 35 #linux does not support loading dependent files, but android does 36 @expectedFailureNetBSD 37 def test_dependents_implicit_default_exe(self): 38 """Test default behavior""" 39 exe = self.getBuildArtifact("a.out") 40 self.runCmd("target create " + exe, CURRENT_EXECUTABLE_SET) 41 self.has_exactly_one_image(False) 42 43 @expectedFailureAll(oslist=["freebsd", "linux"], 44 triple=no_match(".*-android")) 45 #linux does not support loading dependent files, but android does 46 @expectedFailureNetBSD 47 def test_dependents_explicit_default_exe(self): 48 """Test default behavior""" 49 exe = self.getBuildArtifact("a.out") 50 self.runCmd("target create -ddefault " + exe, CURRENT_EXECUTABLE_SET) 51 self.has_exactly_one_image(False) 52 53 def test_dependents_explicit_true_exe(self): 54 """Test default behavior""" 55 exe = self.getBuildArtifact("a.out") 56 self.runCmd("target create -dtrue " + exe, CURRENT_EXECUTABLE_SET) 57 self.has_exactly_one_image(True) 58 59 @expectedFailureAll(oslist=["freebsd", "linux"], 60 triple=no_match(".*-android")) 61 #linux does not support loading dependent files, but android does 62 @expectedFailureNetBSD 63 def test_dependents_explicit_false_exe(self): 64 """Test default behavior""" 65 exe = self.getBuildArtifact("a.out") 66 self.runCmd("target create -dfalse " + exe, CURRENT_EXECUTABLE_SET) 67 self.has_exactly_one_image(False) 68 69 def test_dependents_implicit_false_exe(self): 70 """Test default behavior""" 71 exe = self.getBuildArtifact("a.out") 72 self.runCmd("target create -d " + exe, CURRENT_EXECUTABLE_SET) 73 self.has_exactly_one_image(True) 74 75 @expectedFailureAndroid # android will return mutiple images 76 def test_dependents_implicit_default_lib(self): 77 ctx = self.platformContext 78 dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension 79 lib = self.getBuildArtifact(dylibName) 80 self.runCmd("target create " + lib, CURRENT_EXECUTABLE_SET) 81 self.has_exactly_one_image(True) 82 83 def test_dependents_explicit_default_lib(self): 84 ctx = self.platformContext 85 dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension 86 lib = self.getBuildArtifact(dylibName) 87 self.runCmd("target create -ddefault " + lib, CURRENT_EXECUTABLE_SET) 88 self.has_exactly_one_image(True) 89 90 def test_dependents_explicit_true_lib(self): 91 ctx = self.platformContext 92 dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension 93 lib = self.getBuildArtifact(dylibName) 94 self.runCmd("target create -dtrue " + lib, CURRENT_EXECUTABLE_SET) 95 self.has_exactly_one_image(True) 96 97 @expectedFailureAll(oslist=["freebsd", "linux"], 98 triple=no_match(".*-android")) 99 #linux does not support loading dependent files, but android does 100 @expectedFailureNetBSD 101 def test_dependents_explicit_false_lib(self): 102 ctx = self.platformContext 103 dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension 104 lib = self.getBuildArtifact(dylibName) 105 self.runCmd("target create -dfalse " + lib, CURRENT_EXECUTABLE_SET) 106 self.has_exactly_one_image(False) 107 108 def test_dependents_implicit_false_lib(self): 109 ctx = self.platformContext 110 dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension 111 lib = self.getBuildArtifact(dylibName) 112 self.runCmd("target create -d " + lib, CURRENT_EXECUTABLE_SET) 113 self.has_exactly_one_image(True) 114