File: TestCTF.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (96 lines) | stat: -rw-r--r-- 2,700 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import lldbsuite.test.lldbutil as lldbutil
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
import shutil
import os


class TestCTF(TestBase):
    NO_DEBUG_INFO_TESTCASE = True

    def no_ctf_convert(self):
        if not shutil.which("ctfconvert"):
            return "ctfconvert not found in path"
        return None

    def no_objcopy(self):
        if not "OBJCOPY" in os.environ:
            return "llvm-objcopy not found in environment"
        return None

    @skipTestIfFn(no_ctf_convert)
    @skipTestIfFn(no_objcopy)
    @skipUnlessDarwin
    def test(self):
        self.build()
        self.do_test()

    @skipTestIfFn(no_ctf_convert)
    @skipTestIfFn(no_objcopy)
    @skipUnlessDarwin
    def test_compressed(self):
        self.build(dictionary={"COMPRESS_CTF": "YES"})
        self.do_test()

    def do_test(self):
        lldbutil.run_to_name_breakpoint(self, "printf")

        symbol_file = self.getBuildArtifact("a.ctf")

        if self.TraceOn():
            self.runCmd("log enable -v lldb symbol")

        self.runCmd("target symbols add {}".format(symbol_file))
        self.expect(
            "target variable foo",
            substrs=[
                "(MyStructT) foo",
                "i = 1",
                "foo",
                "'c'",
                "[0] = 'c'",
                "[1] = 'a'",
                "[2] = 'b'",
                "[3] = 'c'",
                'u = (i = 1, s = "")',
                "b = false",
                "f = 0x0000000000000000",
            ],
        )
        self.expect("target variable foo.n.i", substrs=["(MyInt) foo.n.i = 1"])
        self.expect(
            "target variable foo.n.s", substrs=["(const char *) foo.n.s", '"foo"']
        )
        self.expect(
            "target variable foo.n.c", substrs=["(volatile char) foo.n.c = 'c'"]
        )
        self.expect(
            "target variable foo.n.a",
            substrs=[
                "(char[4]:8) foo.n.a",
                "[0] = 'c'",
                "[1] = 'a'",
                "[2] = 'b'",
                "[3] = 'c'",
            ],
        )
        self.expect(
            "target variable foo.n.u", substrs=['(MyUnionT) foo.n.u = (i = 1, s = "")']
        )
        self.expect(
            "target variable foo.f",
            substrs=["(void (*)(int)) foo.f = 0x0000000000000000"],
        )

        self.expect(
            "type lookup MyEnum",
            substrs=[
                "enum MyEnum {",
                "eOne,",
                "eTwo,",
                "eThree",
                "}",
            ],
        )

        self.expect("type lookup RecursiveStruct", substrs=["RecursiveStruct *n;"])