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