blob: ea8b2749a651568c6241f68d4b400e9fee137b77 [file] [log] [blame]
Jens Wiklander5976a0a2017-05-25 07:48:20 +02001#!/usr/bin/env python
2#
3# Copyright (c) 2017, Linaro Limited
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions are met:
8#
9# 1. Redistributions of source code must retain the above copyright notice,
10# this list of conditions and the following disclaimer.
11#
12# 2. Redistributions in binary form must reproduce the above copyright notice,
13# this list of conditions and the following disclaimer in the documentation
14# and/or other materials provided with the distribution.
15#
16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26# POSSIBILITY OF SUCH DAMAGE.
27#
28
29import sys
30import re
31
32def usage():
33 print "Usage: {} <section reg exp match> [<skip section>...]".format( \
34 sys.argv[0])
35 sys.exit (1)
36
37def main():
38 if len(sys.argv) < 2 :
39 usage()
40
41 in_shdr = False
42 section_headers = re.compile("Section Headers:")
43 key_to_flags = re.compile("Key to Flags:")
44 match_rule = re.compile(sys.argv[1])
45 skip_sections = sys.argv[2:]
46
47 for line in sys.stdin:
48 if section_headers.match(line) :
49 in_shdr = True;
50 continue
51 if key_to_flags.match(line) :
52 in_shdr = False;
53 continue
54
55 if not in_shdr :
56 continue
57
58 words = line.split()
59
60 if len(words) < 3 :
61 continue
62
63 if words[0] == "[" :
64 name_offs = 2
65 else :
66 name_offs = 1;
67
68 sect_name = words[name_offs]
69 sect_type = words[name_offs + 1]
70
71 if sect_type != "PROGBITS" :
72 continue
73
74 if not match_rule.match(sect_name) :
75 continue
76
77 if sect_name in skip_sections :
78 continue
79
80 print '\t*({})'.format(sect_name)
81
82if __name__ == "__main__":
83 main()