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