xref: /optee_os/scripts/gen_ld_sects.py (revision bbaeed4dc6258006e846543197b8aff95d80abbf)
1*bbaeed4dSRouven Czerwinski#!/usr/bin/env python3
21bb92983SJerome Forissier# SPDX-License-Identifier: BSD-2-Clause
35976a0a5SJens Wiklander#
45976a0a5SJens Wiklander# Copyright (c) 2017, Linaro Limited
55976a0a5SJens Wiklander#
65976a0a5SJens Wiklander
75976a0a5SJens Wiklanderimport sys
85976a0a5SJens Wiklanderimport re
95976a0a5SJens Wiklander
1051f42eb0SJerome Forissier
115976a0a5SJens Wiklanderdef usage():
12666bec33SVolodymyr Babchuk    print("Usage: {0} <section reg exp match> [<skip section>...]".format(
13666bec33SVolodymyr Babchuk        sys.argv[0]))
145976a0a5SJens Wiklander    sys.exit(1)
155976a0a5SJens Wiklander
1651f42eb0SJerome Forissier
175976a0a5SJens Wiklanderdef main():
185976a0a5SJens Wiklander    if len(sys.argv) < 2:
195976a0a5SJens Wiklander        usage()
205976a0a5SJens Wiklander
215976a0a5SJens Wiklander    in_shdr = False
225976a0a5SJens Wiklander    section_headers = re.compile("Section Headers:")
235976a0a5SJens Wiklander    key_to_flags = re.compile("Key to Flags:")
245976a0a5SJens Wiklander    match_rule = re.compile(sys.argv[1])
255976a0a5SJens Wiklander    skip_sections = sys.argv[2:]
265976a0a5SJens Wiklander
275976a0a5SJens Wiklander    for line in sys.stdin:
285976a0a5SJens Wiklander        if section_headers.match(line):
2951f42eb0SJerome Forissier            in_shdr = True
305976a0a5SJens Wiklander            continue
315976a0a5SJens Wiklander        if key_to_flags.match(line):
3251f42eb0SJerome Forissier            in_shdr = False
335976a0a5SJens Wiklander            continue
345976a0a5SJens Wiklander
355976a0a5SJens Wiklander        if not in_shdr:
365976a0a5SJens Wiklander            continue
375976a0a5SJens Wiklander
385976a0a5SJens Wiklander        words = line.split()
395976a0a5SJens Wiklander
405976a0a5SJens Wiklander        if len(words) < 3:
415976a0a5SJens Wiklander            continue
425976a0a5SJens Wiklander
435976a0a5SJens Wiklander        if words[0] == "[":
445976a0a5SJens Wiklander            name_offs = 2
455976a0a5SJens Wiklander        else:
4651f42eb0SJerome Forissier            name_offs = 1
475976a0a5SJens Wiklander
485976a0a5SJens Wiklander        sect_name = words[name_offs]
495976a0a5SJens Wiklander        sect_type = words[name_offs + 1]
505976a0a5SJens Wiklander
515976a0a5SJens Wiklander        if sect_type != "PROGBITS":
525976a0a5SJens Wiklander            continue
535976a0a5SJens Wiklander
545976a0a5SJens Wiklander        if not match_rule.match(sect_name):
555976a0a5SJens Wiklander            continue
565976a0a5SJens Wiklander
575976a0a5SJens Wiklander        if sect_name in skip_sections:
585976a0a5SJens Wiklander            continue
595976a0a5SJens Wiklander
60666bec33SVolodymyr Babchuk        print('\t*({0})'.format(sect_name))
615976a0a5SJens Wiklander
6251f42eb0SJerome Forissier
635976a0a5SJens Wiklanderif __name__ == "__main__":
645976a0a5SJens Wiklander    main()
65