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