Include the complete list of threads of all running processes in the FreeBSDKernel plugin. This makes it possible to inspect the states (including partial register dumps from PCB) of all kernel and userspace threads at the time of crash, or at the time of reading /dev/mem first. Differential Revision: https://reviews.llvm.org/D116255
37 lines
894 B
Python
37 lines
894 B
Python
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import re
|
|
import sys
|
|
|
|
|
|
def main():
|
|
argp = argparse.ArgumentParser()
|
|
argp.add_argument('infile', type=argparse.FileType('rb'),
|
|
help='Input vmcore file')
|
|
argp.add_argument('outfile', type=argparse.FileType('wb'),
|
|
help='Output vmcore file')
|
|
args = argp.parse_args()
|
|
|
|
inf = args.infile
|
|
outf = args.outfile
|
|
line_re = re.compile(r"^% RD: (\d+) (\d+)")
|
|
|
|
# copy the first chunk that usually includes ELF headers
|
|
# (not output by patched libfbsdvmcore since libelf reads this)
|
|
outf.write(inf.read(1024))
|
|
|
|
for l in sys.stdin:
|
|
m = line_re.match(l)
|
|
if m is None:
|
|
continue
|
|
offset, size = [int(x) for x in m.groups()]
|
|
|
|
inf.seek(offset)
|
|
outf.seek(offset)
|
|
outf.write(inf.read(size))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|