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