diff options
author | 2015-04-24 16:26:14 +0900 | |
---|---|---|
committer | 2015-04-24 16:26:14 +0900 | |
commit | 1fe4406f374291ab2e86e95a97341fd9c475fcb8 (patch) | |
tree | 1be0e16b4b07b5a31ea97ec50a9eb13a288c3d27 /tool/mbed/mbed-sdk/workspace_tools/dev/syms.py | |
parent | a20ef7052c6e937d2f7672dd59456e55a5c08296 (diff) | |
download | qmk_firmware-1fe4406f374291ab2e86e95a97341fd9c475fcb8.tar.gz |
b9e0ea0 Merge commit '7fa9d8bdea3773d1195b04d98fcf27cf48ddd81d' as 'tool/mbed/mbed-sdk'
7fa9d8b Squashed 'tool/mbed/mbed-sdk/' content from commit 7c21ce5
git-subtree-dir: tmk_core
git-subtree-split: b9e0ea08cb940de20b3610ecdda18e9d8cd7c552
Diffstat (limited to 'tool/mbed/mbed-sdk/workspace_tools/dev/syms.py')
-rw-r--r-- | tool/mbed/mbed-sdk/workspace_tools/dev/syms.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tool/mbed/mbed-sdk/workspace_tools/dev/syms.py b/tool/mbed/mbed-sdk/workspace_tools/dev/syms.py new file mode 100644 index 000000000..2fdbd2dfb --- /dev/null +++ b/tool/mbed/mbed-sdk/workspace_tools/dev/syms.py @@ -0,0 +1,75 @@ +""" +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) |