blob: bc82dd8b6b7d80c72ca9d86dbbe5f53b4cd9d9ab [file] [log] [blame]
Rouven Czerwinskibbaeed42019-08-07 20:07:00 +02001#!/usr/bin/env python3
Jerome Forissier1bb92982017-12-15 14:27:02 +01002# SPDX-License-Identifier: BSD-2-Clause
Jens Wiklander5976a0a2017-05-25 07:48:20 +02003#
4# Copyright (c) 2017, Linaro Limited
Jens Wiklander5976a0a2017-05-25 07:48:20 +02005#
Jens Wiklander5976a0a2017-05-25 07:48:20 +02006
7import sys
8import re
9
Jerome Forissier51f42eb2018-11-14 11:02:49 +010010
Jens Wiklander5976a0a2017-05-25 07:48:20 +020011def usage():
Volodymyr Babchuk666bec32018-12-18 23:55:26 +020012 print("Usage: {0} <section reg exp match> [<skip section>...]".format(
13 sys.argv[0]))
Jerome Forissier51f42eb2018-11-14 11:02:49 +010014 sys.exit(1)
15
Jens Wiklander5976a0a2017-05-25 07:48:20 +020016
17def main():
Jerome Forissier51f42eb2018-11-14 11:02:49 +010018 if len(sys.argv) < 2:
19 usage()
Jens Wiklander5976a0a2017-05-25 07:48:20 +020020
Jerome Forissier51f42eb2018-11-14 11:02:49 +010021 in_shdr = False
22 section_headers = re.compile("Section Headers:")
23 key_to_flags = re.compile("Key to Flags:")
24 match_rule = re.compile(sys.argv[1])
25 skip_sections = sys.argv[2:]
Jens Wiklander5976a0a2017-05-25 07:48:20 +020026
Jerome Forissier51f42eb2018-11-14 11:02:49 +010027 for line in sys.stdin:
28 if section_headers.match(line):
29 in_shdr = True
30 continue
31 if key_to_flags.match(line):
32 in_shdr = False
33 continue
Jens Wiklander5976a0a2017-05-25 07:48:20 +020034
Jerome Forissier51f42eb2018-11-14 11:02:49 +010035 if not in_shdr:
36 continue
Jens Wiklander5976a0a2017-05-25 07:48:20 +020037
Jerome Forissier51f42eb2018-11-14 11:02:49 +010038 words = line.split()
Jens Wiklander5976a0a2017-05-25 07:48:20 +020039
Jerome Forissier51f42eb2018-11-14 11:02:49 +010040 if len(words) < 3:
41 continue
Jens Wiklander5976a0a2017-05-25 07:48:20 +020042
Jerome Forissier51f42eb2018-11-14 11:02:49 +010043 if words[0] == "[":
44 name_offs = 2
45 else:
46 name_offs = 1
Jens Wiklander5976a0a2017-05-25 07:48:20 +020047
Jerome Forissier51f42eb2018-11-14 11:02:49 +010048 sect_name = words[name_offs]
49 sect_type = words[name_offs + 1]
Jens Wiklander5976a0a2017-05-25 07:48:20 +020050
Jerome Forissier51f42eb2018-11-14 11:02:49 +010051 if sect_type != "PROGBITS":
52 continue
Jens Wiklander5976a0a2017-05-25 07:48:20 +020053
Jerome Forissier51f42eb2018-11-14 11:02:49 +010054 if not match_rule.match(sect_name):
55 continue
Jens Wiklander5976a0a2017-05-25 07:48:20 +020056
Jerome Forissier51f42eb2018-11-14 11:02:49 +010057 if sect_name in skip_sections:
58 continue
Jens Wiklander5976a0a2017-05-25 07:48:20 +020059
Volodymyr Babchuk666bec32018-12-18 23:55:26 +020060 print('\t*({0})'.format(sect_name))
Jerome Forissier51f42eb2018-11-14 11:02:49 +010061
Jens Wiklander5976a0a2017-05-25 07:48:20 +020062
63if __name__ == "__main__":
Jerome Forissier51f42eb2018-11-14 11:02:49 +010064 main()