]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/env python | |
2 | ||
3 | """ This file holds all static values that debugging macros need. These are typically object type strings, #defines in C etc. | |
4 | The objective is to provide a single place to be the bridge between C code in xnu and the python macros used by lldb. | |
5 | If you define a variable which has been copied/referred over from C code and has high chance of changing over time. It would | |
6 | be best to define a supporting function of format "populate_<variable_name>". This will help in running them to repopulate. | |
7 | ||
8 | Please take a look at example of kobject_types below before making changes to this file. | |
9 | Note: The Format of the function has to be populate_<variable_name> so that the automated updating will pick it up. | |
10 | """ | |
11 | import os, re | |
12 | ||
13 | lcpu_self = 0xFFFE | |
14 | arm_level2_access_strings = [ " noaccess", | |
15 | " supervisor(readwrite) user(noaccess)", | |
16 | " supervisor(readwrite) user(readonly)", | |
17 | " supervisor(readwrite) user(readwrite)", | |
18 | " noaccess(reserved)", | |
19 | " supervisor(readonly) user(noaccess)", | |
20 | " supervisor(readonly) user(readonly)", | |
21 | " supervisor(readonly) user(readonly)", | |
22 | " " | |
23 | ] | |
24 | kq_state_strings = {0:"", 1:"SEL", 2:"SLEEP", 4:"PROCWAIT", 8:"KEV32", 16:"KEV64", 32:"QOS", 64:"WORKQ", 128:"PROCESS", 256: "DRAIN"} | |
25 | ||
26 | kn_state_strings = {0:"", 1:"ACTIVE", 2:"QUEUED", 4:"DISABLED", 8:"DROPPING", 16:"USERWAIT", 32:"ATTACHING", 64:"STAYQUED", 128:"DEFERDROP"} | |
27 | ||
28 | mach_msg_type_descriptor_strings = {0: "PORT", 1: "OOLDESC", 2: "OOLPORTS", 3: "OOLVOLATILE"} | |
29 | ||
30 | proc_state_strings = [ "", "Idle", "Run", "Sleep", "Stop", "Zombie", "Reaping" ] | |
31 | proc_flag_explain_strings = ["!0x00000004 - process is 32 bit", #only exception that does not follow bit settings | |
32 | "0x00000001 - may hold advisory locks", | |
33 | "0x00000002 - has a controlling tty", | |
34 | "0x00000004 - process is 64 bit", | |
35 | "0x00000008 - no SIGCHLD on child stop", | |
36 | "0x00000010 - waiting for child exec/exit", | |
37 | "0x00000020 - has started profiling", | |
38 | "0x00000040 - in select; wakeup/waiting danger", | |
39 | "0x00000080 - was stopped and continued", | |
40 | "0x00000100 - has set privileges since exec", | |
41 | "0x00000200 - system process: no signals, stats, or swap", | |
42 | "0x00000400 - timing out during a sleep", | |
43 | "0x00000800 - debugged process being traced", | |
44 | "0x00001000 - debugging process has waited for child", | |
45 | "0x00002000 - exit in progress", | |
46 | "0x00004000 - process has called exec", | |
47 | "0x00008000 - owe process an addupc() XXX", | |
48 | "0x00010000 - affinity for Rosetta children", | |
49 | "0x00020000 - wants to run Rosetta", | |
50 | "0x00040000 - has wait() in progress", | |
51 | "0x00080000 - kdebug tracing on for this process", | |
52 | "0x00100000 - blocked due to SIGTTOU or SIGTTIN", | |
53 | "0x00200000 - has called reboot()", | |
54 | "0x00400000 - is TBE state", | |
55 | "0x00800000 - signal exceptions", | |
56 | "0x01000000 - has thread cwd", | |
57 | "0x02000000 - has vfork() children", | |
58 | "0x04000000 - not allowed to attach", | |
59 | "0x08000000 - vfork() in progress", | |
60 | "0x10000000 - no shared libraries", | |
61 | "0x20000000 - force quota for root", | |
62 | "0x40000000 - no zombies when children exit", | |
63 | "0x80000000 - don't hang on remote FS ops" | |
64 | ] | |
65 | #File: xnu/osfmk/kern/ipc_kobject.h | |
66 | # string representations for Kobject types | |
67 | kobject_types = ['', 'THREAD', 'TASK', 'HOST', 'HOST_PRIV', 'PROCESSOR', 'PSET', 'PSET_NAME', 'TIMER', 'PAGER_REQ', 'DEVICE', 'XMM_OBJECT', 'XMM_PAGER', 'XMM_KERNEL', 'XMM_REPLY', | |
68 | 'NOTDEF 15', 'NOTDEF 16', 'HOST_SEC', 'LEDGER', 'MASTER_DEV', 'TASK_NAME', 'SUBSYTEM', 'IO_DONE_QUE', 'SEMAPHORE', 'LOCK_SET', 'CLOCK', 'CLOCK_CTRL' , 'IOKIT_SPARE', | |
69 | 'NAMED_MEM', 'IOKIT_CON', 'IOKIT_OBJ', 'UPL', 'MEM_OBJ_CONTROL', 'AU_SESSIONPORT', 'FILEPORT', 'LABELH', 'TASK_RESUME', 'VOUCHER', 'VOUCHER_ATTR_CONTROL'] | |
70 | ||
71 | def populate_kobject_types(xnu_dir_path): | |
72 | """ Function to read data from header file xnu/osfmk/kern/ipc_kobject.h | |
73 | and populate the known kobject types. | |
74 | """ | |
75 | filename = os.path.join(xnu_dir_path, 'osfmk', 'kern', 'ipc_kobject.h') | |
76 | filedata = open(filename).read() | |
77 | object_regex = re.compile("^#define\s+(IKOT_[A-Z_]*)\s+(\d+)\s*",re.MULTILINE|re.DOTALL) | |
78 | kobject_found_types =[] | |
79 | for v in object_regex.findall(filedata): | |
80 | kobject_found_types.append(v[0]) | |
81 | return kobject_found_types | |
82 | ||
83 | if __name__ == "__main__": | |
84 | populate_kobject_types("../../") | |
85 |