Clone of official tools
Diff: dev/syms.py
- Revision:
- 36:96847d42f010
- Parent:
- 35:da9c89f8be7d
- Child:
- 37:f8cfeb185c30
--- a/dev/syms.py Wed Feb 15 13:53:18 2017 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -""" -mbed SDK -Copyright (c) 2011-2013 ARM Limited - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -Utility to find which libraries could define a given symbol -""" -from argparse import ArgumentParser -from os.path import join, splitext -from os import walk -from subprocess import Popen, PIPE - - -OBJ_EXT = ['.o', '.a', '.ar'] - - -def find_sym_in_lib(sym, obj_path): - contain_symbol = False - - out = Popen(["nm", "-C", obj_path], stdout=PIPE, stderr=PIPE).communicate()[0] - for line in out.splitlines(): - tokens = line.split() - n = len(tokens) - if n == 2: - sym_type = tokens[0] - sym_name = tokens[1] - elif n == 3: - sym_type = tokens[1] - sym_name = tokens[2] - else: - continue - - if sym_type == "U": - # This object is using this symbol, not defining it - continue - - if sym_name == sym: - contain_symbol = True - - return contain_symbol - - -def find_sym_in_path(sym, dir_path): - for root, _, files in walk(dir_path): - for file in files: - - _, ext = splitext(file) - if ext not in OBJ_EXT: continue - - path = join(root, file) - if find_sym_in_lib(sym, path): - print path - - -if __name__ == '__main__': - parser = ArgumentParser(description='Find Symbol') - parser.add_argument('-s', '--sym', required=True, - help='The symbol to be searched') - parser.add_argument('-p', '--path', required=True, - help='The path where to search') - args = parser.parse_args() - - find_sym_in_path(args.sym, args.path)