forked from cyyself/m1-pmu-gen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcore_imp_def.py
More file actions
executable file
·57 lines (51 loc) · 1.77 KB
/
core_imp_def.py
File metadata and controls
executable file
·57 lines (51 loc) · 1.77 KB
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
#!/usr/bin/env python3
import plistlib
from apple_pdf_extract import extract_event_desc
def get_brief_desc(desc):
return desc.split("(")[0].split("Note:")[0].split(".")[0] \
.split(",")[0].strip()
def gen_core_imp_def_dict(pl, desc=dict()):
events = pl["system"]["cpu"]["events"]
res = []
for key, value in events.items():
if value.get('number') is not None:
# Use key itself if the desc not found
PublicDescription = desc.get(key, key)
BriefDescription = get_brief_desc(PublicDescription)
res.append({
"PublicDescription": PublicDescription,
"EventCode": str(hex(value['number'])),
"EventName": key,
"BriefDescription": BriefDescription,
})
return res
def gen_core_json_patch(filename, pl, desc):
res = gen_core_imp_def_dict(pl, desc)
import json
lines = json.dumps(res, indent=4).split("\n")
return f"""
diff --git a/{filename} b/{filename}
new file mode 100644
--- /dev/null
+++ b/{filename}
@@ -0,0 +1,{len(lines)} @@
{"\n".join(map(lambda x: f"+{x}", lines))}
""".strip()
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <plist_filename> [apple_pdf=None]")
print(f"Example: {sys.argv[0]} /usr/share/kpep/a14.plist",
"Apple-Silicon-CPU-Optimization-Guide.pdf")
sys.exit(1)
filename = sys.argv[1]
apple_pdf = sys.argv[2] if len(sys.argv) > 2 else None
pl = dict()
with open(filename, 'rb') as f:
pl = plistlib.load(f)
desc_db = dict()
if apple_pdf:
desc_db = extract_event_desc(apple_pdf)
res = gen_core_imp_def_dict(pl, desc_db)
import json
json.dump(res, sys.stdout, indent=4)