findsym.pl revision e264f62ca09a8f65c87a46d562a4d0f9ec5d457
1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#!/usr/bin/perl -w 2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# 3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Program: findsym.pl 4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# 5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Synopsis: Generate a list of the libraries in which a symbol is defined or 6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# referenced. 7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# 8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Syntax: findsym.pl <directory_with_libraries_in_it> <symbol> 9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# 10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Give first option a name. 12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaomy $Directory = $ARGV[0]; 13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaomy $Symbol = $ARGV[1]; 14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Open the directory and read its contents, sorting by name and differentiating 16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# by whether its a library (.a) or an object file (.o) 17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoopendir DIR,$Directory; 18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaomy @files = readdir DIR; 19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoclosedir DIR; 20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao@objects = grep(/l?i?b?LLVM.*\.[oa]$/,sort(@files)); 21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Gather definitions from the libraries 23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoforeach $lib (@objects) { 24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao my $head = 0; 25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao open SYMS, 26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao "nm $Directory/$lib | grep '$Symbol' | sort --key=3 | uniq |"; 27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao while (<SYMS>) { 28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if (!$head) { print "$lib:\n"; $head = 1; } 29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao chomp($_); 30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print " $_\n"; 31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao } 32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao close SYMS; 33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 34