mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-02 17:55:19 +00:00
disassembleBootTrace works on first 50M lines of boot
This commit is contained in:
parent
c64ad9ff35
commit
1d234c05c9
2
.gitignore
vendored
2
.gitignore
vendored
@ -42,6 +42,8 @@ tests/linux-testgen/buildroot-image-output
|
|||||||
tests/linux-testgen/buildroot-config-src/main.config.old
|
tests/linux-testgen/buildroot-config-src/main.config.old
|
||||||
tests/linux-testgen/buildroot-config-src/linux.config.old
|
tests/linux-testgen/buildroot-config-src/linux.config.old
|
||||||
tests/linux-testgen/buildroot-config-src/busybox.config.old
|
tests/linux-testgen/buildroot-config-src/busybox.config.old
|
||||||
|
linux/testvector-generation/boottrace.S
|
||||||
|
linux/testvector-generation/boottrace_disasm.log
|
||||||
sim/slack-notifier/slack-webhook-url.txt
|
sim/slack-notifier/slack-webhook-url.txt
|
||||||
sim/logs
|
sim/logs
|
||||||
fpga/generator/IP
|
fpga/generator/IP
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
00001010: 0182b283 ld t0, 24(t0) # t0 = 80000000 - start of firmware
|
00001010: 0182b283 ld t0, 24(t0) # t0 = 80000000 - start of firmware
|
||||||
00001014: 00028067 jr t0 # jump to firmware
|
00001014: 00028067 jr t0 # jump to firmware
|
||||||
00001018: 0000000080000000 # firmware start address
|
00001018: 0000000080000000 # firmware start address
|
||||||
00001020: 0000000087000000 # flattened device tree load address
|
00001020: 000000008fe00000 # flattened device tree load address
|
||||||
00001028: 000000004942534f # a2 points to this 8 dword data structure
|
00001028: 000000004942534f # a2 points to this 8 dword data structure
|
||||||
00001030: 0000000000000002
|
00001030: 0000000000000002
|
||||||
00001038: 0000000080200000
|
00001038: 0000000080200000
|
||||||
|
74
linux/testvector-generation/disassembleBootTrace.py
Executable file
74
linux/testvector-generation/disassembleBootTrace.py
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
#
|
||||||
|
# disassembleBootTrace.py
|
||||||
|
# David_Harris@hmc.edu 22 November 2023
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||||
|
#
|
||||||
|
# Reads boottrace.log and disassembles the machine code
|
||||||
|
#
|
||||||
|
|
||||||
|
import csv
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
# read a file from sim/logs/boottrace.log and extract the second comma-separated field containing the instruction
|
||||||
|
print("Reading boottrace.log")
|
||||||
|
trace = []
|
||||||
|
count = 0
|
||||||
|
with open('../../sim/logs/boottrace.log') as f:
|
||||||
|
reader = csv.reader(f, delimiter=',')
|
||||||
|
for row in reader:
|
||||||
|
trace.append(row)
|
||||||
|
count = count + 1
|
||||||
|
if count > 50000000:
|
||||||
|
break
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
print("Disassembling boottrace.log instructions")
|
||||||
|
# Write an assembly language file with the machine code
|
||||||
|
with (open('boottrace.S', 'w')) as f:
|
||||||
|
f.write('main:\n')
|
||||||
|
for row in trace:
|
||||||
|
instr = row[1]
|
||||||
|
# scrape off leading white space from instr
|
||||||
|
instr = instr.lstrip()
|
||||||
|
# check if last character indicates an compressed or uncompressed instruction
|
||||||
|
lastNibble = instr[-1]
|
||||||
|
if (lastNibble == '3' or lastNibble == '7' or lastNibble == 'b' or lastNibble == 'f'):
|
||||||
|
# uncompressed
|
||||||
|
f.write('.word 0x' + instr + '\n')
|
||||||
|
else:
|
||||||
|
# compressed
|
||||||
|
instr = instr[-4:]
|
||||||
|
f.write('.hword 0x' + instr + '\n')
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
# Then assemble and disassemble the file
|
||||||
|
os.system('riscv64-unknown-elf-gcc -march=rv64gqc_zba_zbb_zbc_zbs_zfh_zicboz_zicbop_zicbom -mabi=lp64d -c boottrace.S')
|
||||||
|
os.system('riscv64-unknown-elf-objdump -D boottrace.o > boottrace.objdump')
|
||||||
|
|
||||||
|
# Patch disassembly back into boottrace
|
||||||
|
print("Inserting disassembly into trace")
|
||||||
|
dumpedLines = []
|
||||||
|
with (open('boottrace.objdump', 'r')) as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
f.close()
|
||||||
|
lines = lines[7:] # skip header
|
||||||
|
p = r'[^:]*:\s*(\S*)\s*(.*)'
|
||||||
|
for line in lines:
|
||||||
|
match = re.search(p, line)
|
||||||
|
if (match):
|
||||||
|
dump = [match.group(1), match.group(2)]
|
||||||
|
dumpedLines.append(dump)
|
||||||
|
|
||||||
|
linenum = 0
|
||||||
|
for i in range(len(trace)):
|
||||||
|
row = trace[i]
|
||||||
|
row.insert(2, dumpedLines[i][1])
|
||||||
|
|
||||||
|
# write trace back to csv file
|
||||||
|
print("Writing trace back to boottrace_disasm.log")
|
||||||
|
with (open('boottrace_disasm.log', 'w')) as f:
|
||||||
|
writer = csv.writer(f)
|
||||||
|
writer.writerows(trace)
|
||||||
|
f.close()
|
Loading…
Reference in New Issue
Block a user