1import lldbsuite.test.lldbutil as lldbutil 2from lldbsuite.test.lldbtest import * 3from lldbsuite.test.decorators import * 4import shutil 5import os 6 7 8class TestCTF(TestBase): 9 NO_DEBUG_INFO_TESTCASE = True 10 11 def no_ctf_convert(self): 12 if not shutil.which("ctfconvert"): 13 return "ctfconvert not found in path" 14 return None 15 16 def no_objcopy(self): 17 if not "OBJCOPY" in os.environ: 18 return "llvm-objcopy not found in environment" 19 return None 20 21 @skipTestIfFn(no_ctf_convert) 22 @skipTestIfFn(no_objcopy) 23 @skipUnlessDarwin 24 def test(self): 25 self.build() 26 self.do_test() 27 28 @skipTestIfFn(no_ctf_convert) 29 @skipTestIfFn(no_objcopy) 30 @skipUnlessDarwin 31 def test_compressed(self): 32 self.build(dictionary={"COMPRESS_CTF": "YES"}) 33 self.do_test() 34 35 def do_test(self): 36 lldbutil.run_to_name_breakpoint(self, "printf") 37 38 symbol_file = self.getBuildArtifact("a.ctf") 39 40 if self.TraceOn(): 41 self.runCmd("log enable -v lldb symbol") 42 43 self.runCmd("target symbols add {}".format(symbol_file)) 44 self.expect( 45 "target variable foo", 46 substrs=[ 47 "(MyStructT) foo", 48 "i = 1", 49 "foo", 50 "'c'", 51 "[0] = 'c'", 52 "[1] = 'a'", 53 "[2] = 'b'", 54 "[3] = 'c'", 55 'u = (i = 1, s = "")', 56 "b = false", 57 "f = 0x0000000000000000", 58 ], 59 ) 60 self.expect("target variable foo.n.i", substrs=["(MyInt) foo.n.i = 1"]) 61 self.expect( 62 "target variable foo.n.s", substrs=["(const char *) foo.n.s", '"foo"'] 63 ) 64 self.expect( 65 "target variable foo.n.c", substrs=["(volatile char) foo.n.c = 'c'"] 66 ) 67 self.expect( 68 "target variable foo.n.a", 69 substrs=[ 70 "(char[4]:8) foo.n.a", 71 "[0] = 'c'", 72 "[1] = 'a'", 73 "[2] = 'b'", 74 "[3] = 'c'", 75 ], 76 ) 77 self.expect( 78 "target variable foo.n.u", substrs=['(MyUnionT) foo.n.u = (i = 1, s = "")'] 79 ) 80 self.expect( 81 "target variable foo.f", 82 substrs=["(void (*)(int)) foo.f = 0x0000000000000000"], 83 ) 84 85 self.expect( 86 "type lookup MyEnum", 87 substrs=[ 88 "enum MyEnum {", 89 "eOne,", 90 "eTwo,", 91 "eThree", 92 "}", 93 ], 94 ) 95 96 self.expect("type lookup RecursiveStruct", substrs=["RecursiveStruct *n;"]) 97