xref: /optee_os/scripts/gen_ld_sects.py (revision 5976a0a5b9bf7aaebe65320eb5e1709f7bd1f04e)
1#!/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()
84