1ee44310aSJonas Devlieghereimport lldbsuite.test.lldbutil as lldbutil 2ee44310aSJonas Devliegherefrom lldbsuite.test.lldbtest import * 3ee44310aSJonas Devliegherefrom lldbsuite.test.decorators import * 4ee44310aSJonas Devlieghereimport shutil 5ee44310aSJonas Devlieghereimport os 6ee44310aSJonas Devlieghere 7ee44310aSJonas Devlieghere 8ee44310aSJonas Devlieghereclass TestCTF(TestBase): 9ee44310aSJonas Devlieghere NO_DEBUG_INFO_TESTCASE = True 10ee44310aSJonas Devlieghere 11ee44310aSJonas Devlieghere def no_ctf_convert(self): 12ee44310aSJonas Devlieghere if not shutil.which("ctfconvert"): 13ee44310aSJonas Devlieghere return "ctfconvert not found in path" 14ee44310aSJonas Devlieghere return None 15ee44310aSJonas Devlieghere 16ee44310aSJonas Devlieghere def no_objcopy(self): 17ee44310aSJonas Devlieghere if not "OBJCOPY" in os.environ: 18ee44310aSJonas Devlieghere return "llvm-objcopy not found in environment" 19ee44310aSJonas Devlieghere return None 20ee44310aSJonas Devlieghere 21b716d4e5SJonas Devlieghere @skipTestIfFn(no_ctf_convert) 22b716d4e5SJonas Devlieghere @skipTestIfFn(no_objcopy) 23b716d4e5SJonas Devlieghere @skipUnlessDarwin 240e285a13SJonas Devlieghere def test(self): 250e285a13SJonas Devlieghere self.build() 260e285a13SJonas Devlieghere self.do_test() 270e285a13SJonas Devlieghere 28ee44310aSJonas Devlieghere @skipTestIfFn(no_ctf_convert) 29ee44310aSJonas Devlieghere @skipTestIfFn(no_objcopy) 30ee44310aSJonas Devlieghere @skipUnlessDarwin 31b716d4e5SJonas Devlieghere def test_compressed(self): 32b716d4e5SJonas Devlieghere self.build(dictionary={"COMPRESS_CTF": "YES"}) 33b716d4e5SJonas Devlieghere self.do_test() 34b716d4e5SJonas Devlieghere 350e285a13SJonas Devlieghere def do_test(self): 36ee44310aSJonas Devlieghere lldbutil.run_to_name_breakpoint(self, "printf") 37ee44310aSJonas Devlieghere 38ee44310aSJonas Devlieghere symbol_file = self.getBuildArtifact("a.ctf") 39ee44310aSJonas Devlieghere 40b9867df6SJonas Devlieghere if self.TraceOn(): 41b9867df6SJonas Devlieghere self.runCmd("log enable -v lldb symbol") 42b9867df6SJonas Devlieghere 43ee44310aSJonas Devlieghere self.runCmd("target symbols add {}".format(symbol_file)) 44ee44310aSJonas Devlieghere self.expect( 45ee44310aSJonas Devlieghere "target variable foo", 46ee44310aSJonas Devlieghere substrs=[ 47ee44310aSJonas Devlieghere "(MyStructT) foo", 48ee44310aSJonas Devlieghere "i = 1", 49ee44310aSJonas Devlieghere "foo", 50ee44310aSJonas Devlieghere "'c'", 51ee44310aSJonas Devlieghere "[0] = 'c'", 52ee44310aSJonas Devlieghere "[1] = 'a'", 53ee44310aSJonas Devlieghere "[2] = 'b'", 54ee44310aSJonas Devlieghere "[3] = 'c'", 55ee44310aSJonas Devlieghere 'u = (i = 1, s = "")', 56*fd4399cbSJonas Devlieghere "b = false", 57ee44310aSJonas Devlieghere "f = 0x0000000000000000", 58ee44310aSJonas Devlieghere ], 59ee44310aSJonas Devlieghere ) 60ee44310aSJonas Devlieghere self.expect("target variable foo.n.i", substrs=["(MyInt) foo.n.i = 1"]) 61ee44310aSJonas Devlieghere self.expect( 62ee44310aSJonas Devlieghere "target variable foo.n.s", substrs=["(const char *) foo.n.s", '"foo"'] 63ee44310aSJonas Devlieghere ) 64ee44310aSJonas Devlieghere self.expect( 65ee44310aSJonas Devlieghere "target variable foo.n.c", substrs=["(volatile char) foo.n.c = 'c'"] 66ee44310aSJonas Devlieghere ) 67ee44310aSJonas Devlieghere self.expect( 68ee44310aSJonas Devlieghere "target variable foo.n.a", 69ee44310aSJonas Devlieghere substrs=[ 70ee44310aSJonas Devlieghere "(char[4]:8) foo.n.a", 71ee44310aSJonas Devlieghere "[0] = 'c'", 72ee44310aSJonas Devlieghere "[1] = 'a'", 73ee44310aSJonas Devlieghere "[2] = 'b'", 74ee44310aSJonas Devlieghere "[3] = 'c'", 75ee44310aSJonas Devlieghere ], 76ee44310aSJonas Devlieghere ) 77ee44310aSJonas Devlieghere self.expect( 78ee44310aSJonas Devlieghere "target variable foo.n.u", substrs=['(MyUnionT) foo.n.u = (i = 1, s = "")'] 79ee44310aSJonas Devlieghere ) 80ee44310aSJonas Devlieghere self.expect( 81ee44310aSJonas Devlieghere "target variable foo.f", 82ee44310aSJonas Devlieghere substrs=["(void (*)(int)) foo.f = 0x0000000000000000"], 83ee44310aSJonas Devlieghere ) 840a5e0d3fSJonas Devlieghere 850a5e0d3fSJonas Devlieghere self.expect( 860a5e0d3fSJonas Devlieghere "type lookup MyEnum", 870a5e0d3fSJonas Devlieghere substrs=[ 880a5e0d3fSJonas Devlieghere "enum MyEnum {", 890a5e0d3fSJonas Devlieghere "eOne,", 900a5e0d3fSJonas Devlieghere "eTwo,", 910a5e0d3fSJonas Devlieghere "eThree", 920a5e0d3fSJonas Devlieghere "}", 930a5e0d3fSJonas Devlieghere ], 940a5e0d3fSJonas Devlieghere ) 9512f3d97fSJonas Devlieghere 9612f3d97fSJonas Devlieghere self.expect("type lookup RecursiveStruct", substrs=["RecursiveStruct *n;"]) 97