#!/usr/bin/env python # # Mark functions in an arm assembly file. This is done by surrounding the # function with "# -- Begin Name" and "# -- End Name" # (This script is designed for arm ios assembly syntax) import sys import re inp = open(sys.argv[1], "r").readlines() # First pass linenum = 0 INVALID=-100 last_align = INVALID last_code = INVALID last_globl = INVALID begin = INVALID begins = dict() for line in inp: linenum += 1 if ".align" in line: last_align = linenum if ".code" in line: last_code = linenum if ".globl" in line: last_globl = linenum m = re.search(r'.thumb_func\s+(\w+)', line) if m: funcname = m.group(1) if last_code == last_align+1 and (linenum - last_code) < 4: begin = last_align if last_globl+1 == last_align: begin = last_globl if line == "\n" and begin != INVALID: end = linenum triple = (funcname, begin, end) begins[begin] = triple begin = INVALID # Second pass: Mark out = open(sys.argv[1], "w") in_func = None linenum = 0 for line in inp: linenum += 1 if in_func is not None and linenum == end: out.write("# -- End %s\n" % in_func) in_func = None triple = begins.get(linenum) if triple is not None: in_func, begin, end = triple out.write("# -- Begin %s\n" % in_func) out.write(line)