blob: 0edf42e8a83c49028e0785d761ed7569337d7393 [file] [log] [blame]
Matthias Braun7111bb52016-03-26 00:23:59 +00001#!/usr/bin/env python
2#
3# Mark functions in an arm assembly file. This is done by surrounding the
4# function with "# -- Begin Name" and "# -- End Name"
5# (This script is designed for arm ios assembly syntax)
6import sys
7import re
8
9inp = open(sys.argv[1], "r").readlines()
10
11# First pass
12linenum = 0
13INVALID=-100
14last_align = INVALID
15last_code = INVALID
16last_globl = INVALID
17begin = INVALID
18begins = dict()
19for line in inp:
20 linenum += 1
21 if ".align" in line:
22 last_align = linenum
23 if ".code" in line:
24 last_code = linenum
25 if ".globl" in line:
26 last_globl = linenum
27 m = re.search(r'.thumb_func\s+(\w+)', line)
28 if m:
29 funcname = m.group(1)
30 if last_code == last_align+1 and (linenum - last_code) < 4:
31 begin = last_align
32 if last_globl+1 == last_align:
33 begin = last_globl
34 if line == "\n" and begin != INVALID:
35 end = linenum
36 triple = (funcname, begin, end)
37 begins[begin] = triple
38 begin = INVALID
39
40# Second pass: Mark
41out = open(sys.argv[1], "w")
42in_func = None
43linenum = 0
44for line in inp:
45 linenum += 1
46 if in_func is not None and linenum == end:
47 out.write("# -- End %s\n" % in_func)
48 in_func = None
49
50 triple = begins.get(linenum)
51 if triple is not None:
52 in_func, begin, end = triple
53 out.write("# -- Begin %s\n" % in_func)
54 out.write(line)