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
|