Files
linux-kernel-module-cheat/trace2line
Ciro Santilli 六四事件 法轮功 fa1e4ffa7d run kind of runs
2018-12-09 00:00:01 +00:00

63 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
'''
TODO port this to Python fully. I started it, but then it was hanging on some
IO blocking annoyance in the pipeline, and I don't have the time to deal with
it, so I'm just going to forward the common options to the old shell script for
now...
'''
import os
import re
import subprocess
import sys
import common
parser = self.get_argparse(argparse_args={
'description': 'Convert an execution trace containing PC values into the Linux kernel linex executed'
})
args = self.setup(parser)
sys.exit(subprocess.Popen([
os.path.join(kwargs['root_dir'], 'trace2line.sh'),
'true' if kwargs['emulator'] == 'gem5' else 'false',
kwargs['trace_txt_file'],
self.get_toolchain_tool('addr2line'),
kwargs['vmlinux'],
kwargs['run_dir'],
]).wait())
# This was the full conversion attempt.
# if kwargs['emulator'] == 'gem5':
# def get_pc(line):
# # TODO
# # stdin = sed -r 's/^.* (0x[^. ]*)[. ].*/\1/' "$common_trace_txt_file")
# pass
# else:
# def get_pc(line):
# return line.split('=')[-1]
# with \
# subprocess.Popen(
# [
# self.get_toolchain_tool('addr2line'),
# '-e',
# kwargs['vmlinux'],
# '-f',
# '-p',
# ],
# stdout=subprocess.PIPE,
# stdin=subprocess.PIPE,
# ) as proc, \
# open(kwargs['trace_txt_file'], 'r') as infile, \
# open(os.path.join(kwargs['run_dir'], 'trace-lines.txt'), 'w') as outfile \
# :
# for in_line in infile:
# proc.stdin.write(get_pc(in_line).encode())
# proc.stdin.flush()
# stdout = proc.stdout.read()
# outfile.write(stdout.decode())
# # TODO
# # sed -E "s|at ${kwargs['linux_build_dir']}/(\./\|)||"
# # uniq -c