xref: /llvm-project/lldb/test/API/functionalities/plugins/python_os_plugin/operating_system.py (revision ec456ba9ca0a097da63daafbb031cb2024f5513a)
199451b44SJordan Rupprechtimport lldb
299451b44SJordan Rupprechtimport struct
399451b44SJordan Rupprecht
4*ec456ba9SMed Ismail Bennanifrom lldb.plugins.operating_system import OperatingSystem
599451b44SJordan Rupprecht
6*ec456ba9SMed Ismail Bennani
7*ec456ba9SMed Ismail Bennaniclass OperatingSystemPlugIn(OperatingSystem):
899451b44SJordan Rupprecht    """Class that provides data for an instance of a LLDB 'OperatingSystemPython' plug-in class"""
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht    def __init__(self, process):
11*ec456ba9SMed Ismail Bennani        super().__init__(process)
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprecht    def create_thread(self, tid, context):
1499451b44SJordan Rupprecht        if tid == 0x444444444:
1599451b44SJordan Rupprecht            thread_info = {
162238dcc3SJonas Devlieghere                "tid": tid,
172238dcc3SJonas Devlieghere                "name": "four",
182238dcc3SJonas Devlieghere                "queue": "queue4",
192238dcc3SJonas Devlieghere                "state": "stopped",
202238dcc3SJonas Devlieghere                "stop_reason": "none",
212238dcc3SJonas Devlieghere            }
2299451b44SJordan Rupprecht            self.threads.append(thread_info)
2399451b44SJordan Rupprecht            return thread_info
2499451b44SJordan Rupprecht        return None
2599451b44SJordan Rupprecht
2699451b44SJordan Rupprecht    def get_thread_info(self):
2799451b44SJordan Rupprecht        if not self.threads:
282238dcc3SJonas Devlieghere            self.threads = [
292238dcc3SJonas Devlieghere                {
302238dcc3SJonas Devlieghere                    "tid": 0x111111111,
312238dcc3SJonas Devlieghere                    "name": "one",
322238dcc3SJonas Devlieghere                    "queue": "queue1",
332238dcc3SJonas Devlieghere                    "state": "stopped",
342238dcc3SJonas Devlieghere                    "stop_reason": "breakpoint",
352238dcc3SJonas Devlieghere                },
362238dcc3SJonas Devlieghere                {
372238dcc3SJonas Devlieghere                    "tid": 0x222222222,
382238dcc3SJonas Devlieghere                    "name": "two",
392238dcc3SJonas Devlieghere                    "queue": "queue2",
402238dcc3SJonas Devlieghere                    "state": "stopped",
412238dcc3SJonas Devlieghere                    "stop_reason": "none",
422238dcc3SJonas Devlieghere                },
432238dcc3SJonas Devlieghere                {
442238dcc3SJonas Devlieghere                    "tid": 0x333333333,
452238dcc3SJonas Devlieghere                    "name": "three",
462238dcc3SJonas Devlieghere                    "queue": "queue3",
472238dcc3SJonas Devlieghere                    "state": "stopped",
482238dcc3SJonas Devlieghere                    "stop_reason": "trace",
492238dcc3SJonas Devlieghere                },
502238dcc3SJonas Devlieghere            ]
5199451b44SJordan Rupprecht        return self.threads
5299451b44SJordan Rupprecht
5399451b44SJordan Rupprecht    def get_register_info(self):
5499451b44SJordan Rupprecht        if self.registers is None:
5599451b44SJordan Rupprecht            self.registers = dict()
562238dcc3SJonas Devlieghere            self.registers["sets"] = ["GPR"]
572238dcc3SJonas Devlieghere            self.registers["registers"] = [
582238dcc3SJonas Devlieghere                {
592238dcc3SJonas Devlieghere                    "name": "rax",
602238dcc3SJonas Devlieghere                    "bitsize": 64,
612238dcc3SJonas Devlieghere                    "offset": 0,
622238dcc3SJonas Devlieghere                    "encoding": "uint",
632238dcc3SJonas Devlieghere                    "format": "hex",
642238dcc3SJonas Devlieghere                    "set": 0,
652238dcc3SJonas Devlieghere                    "gcc": 0,
662238dcc3SJonas Devlieghere                    "dwarf": 0,
672238dcc3SJonas Devlieghere                },
682238dcc3SJonas Devlieghere                {
692238dcc3SJonas Devlieghere                    "name": "rbx",
702238dcc3SJonas Devlieghere                    "bitsize": 64,
712238dcc3SJonas Devlieghere                    "offset": 8,
722238dcc3SJonas Devlieghere                    "encoding": "uint",
732238dcc3SJonas Devlieghere                    "format": "hex",
742238dcc3SJonas Devlieghere                    "set": 0,
752238dcc3SJonas Devlieghere                    "gcc": 3,
762238dcc3SJonas Devlieghere                    "dwarf": 3,
772238dcc3SJonas Devlieghere                },
782238dcc3SJonas Devlieghere                {
792238dcc3SJonas Devlieghere                    "name": "rcx",
802238dcc3SJonas Devlieghere                    "bitsize": 64,
812238dcc3SJonas Devlieghere                    "offset": 16,
822238dcc3SJonas Devlieghere                    "encoding": "uint",
832238dcc3SJonas Devlieghere                    "format": "hex",
842238dcc3SJonas Devlieghere                    "set": 0,
852238dcc3SJonas Devlieghere                    "gcc": 2,
862238dcc3SJonas Devlieghere                    "dwarf": 2,
872238dcc3SJonas Devlieghere                    "generic": "arg4",
882238dcc3SJonas Devlieghere                    "alt-name": "arg4",
892238dcc3SJonas Devlieghere                },
902238dcc3SJonas Devlieghere                {
912238dcc3SJonas Devlieghere                    "name": "rdx",
922238dcc3SJonas Devlieghere                    "bitsize": 64,
932238dcc3SJonas Devlieghere                    "offset": 24,
942238dcc3SJonas Devlieghere                    "encoding": "uint",
952238dcc3SJonas Devlieghere                    "format": "hex",
962238dcc3SJonas Devlieghere                    "set": 0,
972238dcc3SJonas Devlieghere                    "gcc": 1,
982238dcc3SJonas Devlieghere                    "dwarf": 1,
992238dcc3SJonas Devlieghere                    "generic": "arg3",
1002238dcc3SJonas Devlieghere                    "alt-name": "arg3",
1012238dcc3SJonas Devlieghere                },
1022238dcc3SJonas Devlieghere                {
1032238dcc3SJonas Devlieghere                    "name": "rdi",
1042238dcc3SJonas Devlieghere                    "bitsize": 64,
1052238dcc3SJonas Devlieghere                    "offset": 32,
1062238dcc3SJonas Devlieghere                    "encoding": "uint",
1072238dcc3SJonas Devlieghere                    "format": "hex",
1082238dcc3SJonas Devlieghere                    "set": 0,
1092238dcc3SJonas Devlieghere                    "gcc": 5,
1102238dcc3SJonas Devlieghere                    "dwarf": 5,
1112238dcc3SJonas Devlieghere                    "generic": "arg1",
1122238dcc3SJonas Devlieghere                    "alt-name": "arg1",
1132238dcc3SJonas Devlieghere                },
1142238dcc3SJonas Devlieghere                {
1152238dcc3SJonas Devlieghere                    "name": "rsi",
1162238dcc3SJonas Devlieghere                    "bitsize": 64,
1172238dcc3SJonas Devlieghere                    "offset": 40,
1182238dcc3SJonas Devlieghere                    "encoding": "uint",
1192238dcc3SJonas Devlieghere                    "format": "hex",
1202238dcc3SJonas Devlieghere                    "set": 0,
1212238dcc3SJonas Devlieghere                    "gcc": 4,
1222238dcc3SJonas Devlieghere                    "dwarf": 4,
1232238dcc3SJonas Devlieghere                    "generic": "arg2",
1242238dcc3SJonas Devlieghere                    "alt-name": "arg2",
1252238dcc3SJonas Devlieghere                },
1262238dcc3SJonas Devlieghere                {
1272238dcc3SJonas Devlieghere                    "name": "rbp",
1282238dcc3SJonas Devlieghere                    "bitsize": 64,
1292238dcc3SJonas Devlieghere                    "offset": 48,
1302238dcc3SJonas Devlieghere                    "encoding": "uint",
1312238dcc3SJonas Devlieghere                    "format": "hex",
1322238dcc3SJonas Devlieghere                    "set": 0,
1332238dcc3SJonas Devlieghere                    "gcc": 6,
1342238dcc3SJonas Devlieghere                    "dwarf": 6,
1352238dcc3SJonas Devlieghere                    "generic": "fp",
1362238dcc3SJonas Devlieghere                    "alt-name": "fp",
1372238dcc3SJonas Devlieghere                },
1382238dcc3SJonas Devlieghere                {
1392238dcc3SJonas Devlieghere                    "name": "rsp",
1402238dcc3SJonas Devlieghere                    "bitsize": 64,
1412238dcc3SJonas Devlieghere                    "offset": 56,
1422238dcc3SJonas Devlieghere                    "encoding": "uint",
1432238dcc3SJonas Devlieghere                    "format": "hex",
1442238dcc3SJonas Devlieghere                    "set": 0,
1452238dcc3SJonas Devlieghere                    "gcc": 7,
1462238dcc3SJonas Devlieghere                    "dwarf": 7,
1472238dcc3SJonas Devlieghere                    "generic": "sp",
1482238dcc3SJonas Devlieghere                    "alt-name": "sp",
1492238dcc3SJonas Devlieghere                },
1502238dcc3SJonas Devlieghere                {
1512238dcc3SJonas Devlieghere                    "name": "r8",
1522238dcc3SJonas Devlieghere                    "bitsize": 64,
1532238dcc3SJonas Devlieghere                    "offset": 64,
1542238dcc3SJonas Devlieghere                    "encoding": "uint",
1552238dcc3SJonas Devlieghere                    "format": "hex",
1562238dcc3SJonas Devlieghere                    "set": 0,
1572238dcc3SJonas Devlieghere                    "gcc": 8,
1582238dcc3SJonas Devlieghere                    "dwarf": 8,
1592238dcc3SJonas Devlieghere                    "generic": "arg5",
1602238dcc3SJonas Devlieghere                    "alt-name": "arg5",
1612238dcc3SJonas Devlieghere                },
1622238dcc3SJonas Devlieghere                {
1632238dcc3SJonas Devlieghere                    "name": "r9",
1642238dcc3SJonas Devlieghere                    "bitsize": 64,
1652238dcc3SJonas Devlieghere                    "offset": 72,
1662238dcc3SJonas Devlieghere                    "encoding": "uint",
1672238dcc3SJonas Devlieghere                    "format": "hex",
1682238dcc3SJonas Devlieghere                    "set": 0,
1692238dcc3SJonas Devlieghere                    "gcc": 9,
1702238dcc3SJonas Devlieghere                    "dwarf": 9,
1712238dcc3SJonas Devlieghere                    "generic": "arg6",
1722238dcc3SJonas Devlieghere                    "alt-name": "arg6",
1732238dcc3SJonas Devlieghere                },
1742238dcc3SJonas Devlieghere                {
1752238dcc3SJonas Devlieghere                    "name": "r10",
1762238dcc3SJonas Devlieghere                    "bitsize": 64,
1772238dcc3SJonas Devlieghere                    "offset": 80,
1782238dcc3SJonas Devlieghere                    "encoding": "uint",
1792238dcc3SJonas Devlieghere                    "format": "hex",
1802238dcc3SJonas Devlieghere                    "set": 0,
1812238dcc3SJonas Devlieghere                    "gcc": 10,
1822238dcc3SJonas Devlieghere                    "dwarf": 10,
1832238dcc3SJonas Devlieghere                },
1842238dcc3SJonas Devlieghere                {
1852238dcc3SJonas Devlieghere                    "name": "r11",
1862238dcc3SJonas Devlieghere                    "bitsize": 64,
1872238dcc3SJonas Devlieghere                    "offset": 88,
1882238dcc3SJonas Devlieghere                    "encoding": "uint",
1892238dcc3SJonas Devlieghere                    "format": "hex",
1902238dcc3SJonas Devlieghere                    "set": 0,
1912238dcc3SJonas Devlieghere                    "gcc": 11,
1922238dcc3SJonas Devlieghere                    "dwarf": 11,
1932238dcc3SJonas Devlieghere                },
1942238dcc3SJonas Devlieghere                {
1952238dcc3SJonas Devlieghere                    "name": "r12",
1962238dcc3SJonas Devlieghere                    "bitsize": 64,
1972238dcc3SJonas Devlieghere                    "offset": 96,
1982238dcc3SJonas Devlieghere                    "encoding": "uint",
1992238dcc3SJonas Devlieghere                    "format": "hex",
2002238dcc3SJonas Devlieghere                    "set": 0,
2012238dcc3SJonas Devlieghere                    "gcc": 12,
2022238dcc3SJonas Devlieghere                    "dwarf": 12,
2032238dcc3SJonas Devlieghere                },
2042238dcc3SJonas Devlieghere                {
2052238dcc3SJonas Devlieghere                    "name": "r13",
2062238dcc3SJonas Devlieghere                    "bitsize": 64,
2072238dcc3SJonas Devlieghere                    "offset": 104,
2082238dcc3SJonas Devlieghere                    "encoding": "uint",
2092238dcc3SJonas Devlieghere                    "format": "hex",
2102238dcc3SJonas Devlieghere                    "set": 0,
2112238dcc3SJonas Devlieghere                    "gcc": 13,
2122238dcc3SJonas Devlieghere                    "dwarf": 13,
2132238dcc3SJonas Devlieghere                },
2142238dcc3SJonas Devlieghere                {
2152238dcc3SJonas Devlieghere                    "name": "r14",
2162238dcc3SJonas Devlieghere                    "bitsize": 64,
2172238dcc3SJonas Devlieghere                    "offset": 112,
2182238dcc3SJonas Devlieghere                    "encoding": "uint",
2192238dcc3SJonas Devlieghere                    "format": "hex",
2202238dcc3SJonas Devlieghere                    "set": 0,
2212238dcc3SJonas Devlieghere                    "gcc": 14,
2222238dcc3SJonas Devlieghere                    "dwarf": 14,
2232238dcc3SJonas Devlieghere                },
2242238dcc3SJonas Devlieghere                {
2252238dcc3SJonas Devlieghere                    "name": "r15",
2262238dcc3SJonas Devlieghere                    "bitsize": 64,
2272238dcc3SJonas Devlieghere                    "offset": 120,
2282238dcc3SJonas Devlieghere                    "encoding": "uint",
2292238dcc3SJonas Devlieghere                    "format": "hex",
2302238dcc3SJonas Devlieghere                    "set": 0,
2312238dcc3SJonas Devlieghere                    "gcc": 15,
2322238dcc3SJonas Devlieghere                    "dwarf": 15,
2332238dcc3SJonas Devlieghere                },
2342238dcc3SJonas Devlieghere                {
2352238dcc3SJonas Devlieghere                    "name": "rip",
2362238dcc3SJonas Devlieghere                    "bitsize": 64,
2372238dcc3SJonas Devlieghere                    "offset": 128,
2382238dcc3SJonas Devlieghere                    "encoding": "uint",
2392238dcc3SJonas Devlieghere                    "format": "hex",
2402238dcc3SJonas Devlieghere                    "set": 0,
2412238dcc3SJonas Devlieghere                    "gcc": 16,
2422238dcc3SJonas Devlieghere                    "dwarf": 16,
2432238dcc3SJonas Devlieghere                    "generic": "pc",
2442238dcc3SJonas Devlieghere                    "alt-name": "pc",
2452238dcc3SJonas Devlieghere                },
2462238dcc3SJonas Devlieghere                {
2472238dcc3SJonas Devlieghere                    "name": "rflags",
2482238dcc3SJonas Devlieghere                    "bitsize": 64,
2492238dcc3SJonas Devlieghere                    "offset": 136,
2502238dcc3SJonas Devlieghere                    "encoding": "uint",
2512238dcc3SJonas Devlieghere                    "format": "hex",
2522238dcc3SJonas Devlieghere                    "set": 0,
2532238dcc3SJonas Devlieghere                    "generic": "flags",
2542238dcc3SJonas Devlieghere                    "alt-name": "flags",
2552238dcc3SJonas Devlieghere                },
2562238dcc3SJonas Devlieghere                {
2572238dcc3SJonas Devlieghere                    "name": "cs",
2582238dcc3SJonas Devlieghere                    "bitsize": 64,
2592238dcc3SJonas Devlieghere                    "offset": 144,
2602238dcc3SJonas Devlieghere                    "encoding": "uint",
2612238dcc3SJonas Devlieghere                    "format": "hex",
2622238dcc3SJonas Devlieghere                    "set": 0,
2632238dcc3SJonas Devlieghere                },
2642238dcc3SJonas Devlieghere                {
2652238dcc3SJonas Devlieghere                    "name": "fs",
2662238dcc3SJonas Devlieghere                    "bitsize": 64,
2672238dcc3SJonas Devlieghere                    "offset": 152,
2682238dcc3SJonas Devlieghere                    "encoding": "uint",
2692238dcc3SJonas Devlieghere                    "format": "hex",
2702238dcc3SJonas Devlieghere                    "set": 0,
2712238dcc3SJonas Devlieghere                },
2722238dcc3SJonas Devlieghere                {
2732238dcc3SJonas Devlieghere                    "name": "gs",
2742238dcc3SJonas Devlieghere                    "bitsize": 64,
2752238dcc3SJonas Devlieghere                    "offset": 160,
2762238dcc3SJonas Devlieghere                    "encoding": "uint",
2772238dcc3SJonas Devlieghere                    "format": "hex",
2782238dcc3SJonas Devlieghere                    "set": 0,
2792238dcc3SJonas Devlieghere                },
28099451b44SJordan Rupprecht            ]
28199451b44SJordan Rupprecht        return self.registers
28299451b44SJordan Rupprecht
28399451b44SJordan Rupprecht    def get_register_data(self, tid):
28499451b44SJordan Rupprecht        return struct.pack(
2852238dcc3SJonas Devlieghere            "21Q",
28699451b44SJordan Rupprecht            tid + 1,
28799451b44SJordan Rupprecht            tid + 2,
28899451b44SJordan Rupprecht            tid + 3,
28999451b44SJordan Rupprecht            tid + 4,
29099451b44SJordan Rupprecht            tid + 5,
29199451b44SJordan Rupprecht            tid + 6,
29299451b44SJordan Rupprecht            tid + 7,
29399451b44SJordan Rupprecht            tid + 8,
29499451b44SJordan Rupprecht            tid + 9,
29599451b44SJordan Rupprecht            tid + 10,
29699451b44SJordan Rupprecht            tid + 11,
29799451b44SJordan Rupprecht            tid + 12,
29899451b44SJordan Rupprecht            tid + 13,
29999451b44SJordan Rupprecht            tid + 14,
30099451b44SJordan Rupprecht            tid + 15,
30199451b44SJordan Rupprecht            tid + 16,
30299451b44SJordan Rupprecht            tid + 17,
30399451b44SJordan Rupprecht            tid + 18,
30499451b44SJordan Rupprecht            tid + 19,
30599451b44SJordan Rupprecht            tid + 20,
3062238dcc3SJonas Devlieghere            tid + 21,
3072238dcc3SJonas Devlieghere        )
308