29 lines
741 B
Python
29 lines
741 B
Python
|
"""Prints the pcs that access each stack location in a function. Useful for finding
|
||
|
infrequently used stack space.
|
||
|
|
||
|
Pipe in disassembly like so:
|
||
|
|
||
|
arm-none-eabi-objdump --disassemble=mp_execute_bytecode build-metro_m0_express/firmware.elf | python ../../tools/stack-loc-to-pc.py
|
||
|
"""
|
||
|
|
||
|
import sys
|
||
|
import re
|
||
|
|
||
|
offset = re.compile(r"sp, #(\d+)")
|
||
|
|
||
|
offsets = {}
|
||
|
for line in sys.stdin:
|
||
|
if "sp" in line:
|
||
|
m = offset.search(line)
|
||
|
o = int(m.groups()[0])
|
||
|
pc = line.split(":")[0]
|
||
|
if o not in offsets:
|
||
|
offsets[o] = []
|
||
|
offsets[o].append(pc.strip())
|
||
|
|
||
|
print("Offset", "Size", "PCs", sep="\t")
|
||
|
last_o = 0
|
||
|
for o in sorted(offsets):
|
||
|
print(o, o - last_o, offsets[o], sep="\t")
|
||
|
last_o = o
|