一键导入
analyze-jitc-log
// Analyze jitc.log to find JIT compilation issues — fragment gaps, branch overflow, bad codegen
// Analyze jitc.log to find JIT compilation issues — fragment gaps, branch overflow, bad codegen
Check that aarch64 JIT interpreter functions match generic CPU behavior
Analyze a kernel Oops from the printk buffer in a PearPC memory dump
Analyze the JIT dispatch trace to diagnose boot stalls or crashes
Compare memory regions between generic and JIT memory dumps to find divergences
Extract and display the Linux kernel printk ring buffer from a PearPC memory dump
| name | analyze-jitc-log |
| description | Analyze jitc.log to find JIT compilation issues — fragment gaps, branch overflow, bad codegen |
| allowed-tools | Bash, Read, Grep |
| argument-hint | ["log-file"] |
The jitc.log file contains all translated PPC→AArch64 code. Each entry shows:
Read the END of the log first — the most recently compiled code is at the bottom:
tail -100 ${ARGUMENTS:-jitc.log}
Check for fragment gaps — look for large jumps in native addresses between consecutive instructions. Two consecutive AArch64 instructions should be 4 bytes apart. If the gap is >512 bytes, a new fragment was allocated:
python3 -c "
import re, sys
lines = open('${ARGUMENTS:-jitc.log}').readlines()
prev_addr = None
for line in lines:
m = re.match(r'\s+([0-9a-f]+)\s+[0-9a-f]+\s+', line)
if m and len(m.group(1)) > 6: # native address (long hex)
addr = int(m.group(1), 16)
if prev_addr and addr - prev_addr > 512:
print(f'FRAGMENT GAP: {prev_addr:x} -> {addr:x} (distance: {addr - prev_addr} bytes)')
prev_addr = addr
"
Check for conditional branch overflow risk — any B.cc (0x54xxxxxx) instruction followed by a fragment gap means the conditional branch might not reach its target. B.cc range is ±1MB (±0x100000):
54 prefix instructions near fragment boundariesCheck for unresolved fixups — 14000000 is B #0 (branch to self), which means a fixup was never resolved:
grep '14000000' ${ARGUMENTS:-jitc.log}
Check for GEN_INTERPRET overhead — look for the pattern: store current_opc, compute pc from base+offset, store pc, store npc, mov x0 cpu, blr interpreter. Count how many bytes each PPC instruction takes in native code.
Identify the PPC page being compiled — the first column shows PPC offsets within the page. The current_code_base (stored at CPU offset 904) gives the page base EA.