xref: /optee_os/scripts/gen_ld_sects.py (revision 85ab358f65d303fd9865da549aebc44da195616a)
15976a0a5SJens Wiklander#!/usr/bin/env python
25976a0a5SJens Wiklander#
35976a0a5SJens Wiklander# Copyright (c) 2017, Linaro Limited
45976a0a5SJens Wiklander# All rights reserved.
55976a0a5SJens Wiklander#
65976a0a5SJens Wiklander# Redistribution and use in source and binary forms, with or without
75976a0a5SJens Wiklander# modification, are permitted provided that the following conditions are met:
85976a0a5SJens Wiklander#
95976a0a5SJens Wiklander# 1. Redistributions of source code must retain the above copyright notice,
105976a0a5SJens Wiklander# this list of conditions and the following disclaimer.
115976a0a5SJens Wiklander#
125976a0a5SJens Wiklander# 2. Redistributions in binary form must reproduce the above copyright notice,
135976a0a5SJens Wiklander# this list of conditions and the following disclaimer in the documentation
145976a0a5SJens Wiklander# and/or other materials provided with the distribution.
155976a0a5SJens Wiklander#
165976a0a5SJens Wiklander# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
175976a0a5SJens Wiklander# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
185976a0a5SJens Wiklander# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
195976a0a5SJens Wiklander# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
205976a0a5SJens Wiklander# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
215976a0a5SJens Wiklander# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
225976a0a5SJens Wiklander# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
235976a0a5SJens Wiklander# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
245976a0a5SJens Wiklander# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
255976a0a5SJens Wiklander# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
265976a0a5SJens Wiklander# POSSIBILITY OF SUCH DAMAGE.
275976a0a5SJens Wiklander#
285976a0a5SJens Wiklander
295976a0a5SJens Wiklanderimport sys
305976a0a5SJens Wiklanderimport re
315976a0a5SJens Wiklander
325976a0a5SJens Wiklanderdef usage():
33*85ab358fSAndrew F. Davis	print "Usage: {0} <section reg exp match> [<skip section>...]".format( \
345976a0a5SJens Wiklander		sys.argv[0])
355976a0a5SJens Wiklander	sys.exit (1)
365976a0a5SJens Wiklander
375976a0a5SJens Wiklanderdef main():
385976a0a5SJens Wiklander	if len(sys.argv) < 2 :
395976a0a5SJens Wiklander		usage()
405976a0a5SJens Wiklander
415976a0a5SJens Wiklander	in_shdr = False
425976a0a5SJens Wiklander	section_headers = re.compile("Section Headers:")
435976a0a5SJens Wiklander	key_to_flags = re.compile("Key to Flags:")
445976a0a5SJens Wiklander	match_rule = re.compile(sys.argv[1])
455976a0a5SJens Wiklander	skip_sections = sys.argv[2:]
465976a0a5SJens Wiklander
475976a0a5SJens Wiklander	for line in sys.stdin:
485976a0a5SJens Wiklander		if section_headers.match(line) :
495976a0a5SJens Wiklander			in_shdr = True;
505976a0a5SJens Wiklander			continue
515976a0a5SJens Wiklander		if key_to_flags.match(line) :
525976a0a5SJens Wiklander			in_shdr = False;
535976a0a5SJens Wiklander			continue
545976a0a5SJens Wiklander
555976a0a5SJens Wiklander		if not in_shdr :
565976a0a5SJens Wiklander			continue
575976a0a5SJens Wiklander
585976a0a5SJens Wiklander		words = line.split()
595976a0a5SJens Wiklander
605976a0a5SJens Wiklander		if len(words) < 3 :
615976a0a5SJens Wiklander			continue
625976a0a5SJens Wiklander
635976a0a5SJens Wiklander		if words[0] == "[" :
645976a0a5SJens Wiklander			name_offs = 2
655976a0a5SJens Wiklander		else :
665976a0a5SJens Wiklander			name_offs = 1;
675976a0a5SJens Wiklander
685976a0a5SJens Wiklander		sect_name = words[name_offs]
695976a0a5SJens Wiklander		sect_type = words[name_offs + 1]
705976a0a5SJens Wiklander
715976a0a5SJens Wiklander		if sect_type != "PROGBITS" :
725976a0a5SJens Wiklander			continue
735976a0a5SJens Wiklander
745976a0a5SJens Wiklander		if not match_rule.match(sect_name) :
755976a0a5SJens Wiklander			continue
765976a0a5SJens Wiklander
775976a0a5SJens Wiklander		if sect_name in skip_sections :
785976a0a5SJens Wiklander			continue
795976a0a5SJens Wiklander
80*85ab358fSAndrew F. Davis		print '\t*({0})'.format(sect_name)
815976a0a5SJens Wiklander
825976a0a5SJens Wiklanderif __name__ == "__main__":
835976a0a5SJens Wiklander        main()
84