in tools/lldbmacros/misc.py [0:0]
def GetKernelDebugBufferEntry(kdbg_entry):
""" Extract the information from given kernel debug buffer entry and return the summary
params:
kdebug_entry - kd_buf - address of kernel debug buffer entry
returns:
str - formatted output information of kd_buf entry
"""
out_str = ""
code_info_str = ""
kdebug_entry = kern.GetValueFromAddress(kdbg_entry, 'kd_buf *')
debugid = kdebug_entry.debugid
kdebug_arg1 = kdebug_entry.arg1
kdebug_arg2 = kdebug_entry.arg2
kdebug_arg3 = kdebug_entry.arg3
kdebug_arg4 = kdebug_entry.arg4
if kern.arch == 'x86_64' or kern.arch.startswith('arm64'):
kdebug_cpu = kdebug_entry.cpuid
ts_hi = (kdebug_entry.timestamp >> 32) & 0xFFFFFFFF
ts_lo = kdebug_entry.timestamp & 0xFFFFFFFF
else:
kdebug_cpu = (kdebug_entry.timestamp >> 56)
ts_hi = (kdebug_entry.timestamp >> 32) & 0x00FFFFFF
ts_lo = kdebug_entry.timestamp & 0xFFFFFFFF
kdebug_class = (debugid >> 24) & 0x000FF
kdebug_subclass = (debugid >> 16) & 0x000FF
kdebug_code = (debugid >> 2) & 0x03FFF
kdebug_qual = (debugid) & 0x00003
if kdebug_qual == 0:
kdebug_qual = '-'
elif kdebug_qual == 1:
kdebug_qual = 'S'
elif kdebug_qual == 2:
kdebug_qual = 'E'
elif kdebug_qual == 3:
kdebug_qual = '?'
# preamble and qual
out_str += "{:<#20x} {:>6d} {:>#12x} ".format(kdebug_entry, kdebug_cpu, kdebug_entry.arg5)
out_str += " {:#010x}{:08x} {:>6s} ".format(ts_hi, ts_lo, kdebug_qual)
# class
kdbg_class = ""
if kdebug_class == 1:
kdbg_class = "MACH"
elif kdebug_class == 2:
kdbg_class = "NET "
elif kdebug_class == 3:
kdbg_class = "FS "
elif kdebug_class == 4:
kdbg_class = "BSD "
elif kdebug_class == 5:
kdbg_class = "IOK "
elif kdebug_class == 6:
kdbg_class = "DRVR"
elif kdebug_class == 7:
kdbg_class = "TRAC"
elif kdebug_class == 8:
kdbg_class = "DLIL"
elif kdebug_class == 9:
kdbg_class = "WQ "
elif kdebug_class == 10:
kdbg_class = "CS "
elif kdebug_class == 11:
kdbg_class = "CG "
elif kdebug_class == 20:
kdbg_class = "MISC"
elif kdebug_class == 30:
kdbg_class = "SEC "
elif kdebug_class == 31:
kdbg_class = "DYLD"
elif kdebug_class == 32:
kdbg_class = "QT "
elif kdebug_class == 33:
kdbg_class = "APPS"
elif kdebug_class == 34:
kdbg_class = "LAUN"
elif kdebug_class == 36:
kdbg_class = "PPT "
elif kdebug_class == 37:
kdbg_class = "PERF"
elif kdebug_class == 38:
kdbg_class = "IMP "
elif kdebug_class == 39:
kdbg_class = "PCTL"
elif kdebug_class == 40:
kdbg_class = "BANK"
elif kdebug_class == 41:
kdbg_class = "XPC "
elif kdebug_class == 42:
kdbg_class = "ATM "
elif kdebug_class == 128:
kdbg_class = "ANS "
elif kdebug_class == 129:
kdbg_class = "SIO "
elif kdebug_class == 130:
kdbg_class = "SEP "
elif kdebug_class == 131:
kdbg_class = "ISP "
elif kdebug_class == 132:
kdbg_class = "OSCA"
elif kdebug_class == 133:
kdbg_class = "EGFX"
elif kdebug_class == 255:
kdbg_class = "MIG "
else:
out_str += "{:^#10x} ".format(kdebug_class)
if kdbg_class:
out_str += "{:^10s} ".format(kdbg_class)
# subclass and code
out_str += " {:>#5x} {:>8d} ".format(kdebug_subclass, kdebug_code)
# space for debugid-specific processing
code_info_str += "arg1={:#010x} ".format(kdebug_arg1)
code_info_str += "arg2={:#010x} ".format(kdebug_arg2)
code_info_str += "arg3={:#010x} ".format(kdebug_arg3)
code_info_str += "arg4={:#010x} ".format(kdebug_arg4)
# finish up
out_str += "{:<25s}\n".format(code_info_str)
return out_str