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