summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-11-27 19:31:11 +0000
committerTed Kremenek <kremenek@apple.com>2007-11-27 19:31:11 +0000
commit8330b0e5d409e2bce093c680348459f24d8b0932 (patch)
tree0abed91a24aeae1006d48698315ed4298c6a2a53
parentd73ab8884f5c95d2704be3c00af4cc3dba963da6 (diff)
downloadllvm-8330b0e5d409e2bce093c680348459f24d8b0932.tar.gz
llvm-8330b0e5d409e2bce093c680348459f24d8b0932.tar.bz2
llvm-8330b0e5d409e2bce093c680348459f24d8b0932.tar.xz
Updated GenLibDeps.pl to employ "use strict" to help prevent uses of variables
that have not yet been defined. Removed used of grep and sed when parsing the results of "nm". This was originally motivated because if the user has specified options to grep using the environment variable GREP_OPTIONS this could break the script. Piping through grep/sed/sort/uniq is also (to my understanding) not necessary, and the equivalent operations can be done much faster in the Perl script. Using a crude benchmark, these changes resulted in a 3x speedup in the execution of GenLibDeps.pl. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44372 91177308-0d34-0410-b5e6-96231b3b80d8
-rwxr-xr-xutils/GenLibDeps.pl29
1 files changed, 16 insertions, 13 deletions
diff --git a/utils/GenLibDeps.pl b/utils/GenLibDeps.pl
index 419d8f92d8..16aed89474 100755
--- a/utils/GenLibDeps.pl
+++ b/utils/GenLibDeps.pl
@@ -8,6 +8,7 @@
#
# Syntax: GenLibDeps.pl [-flat] <directory_with_libraries_in_it> [path_to_nm_binary]
#
+use strict;
# Parse arguments...
my $FLAT = 0;
@@ -47,8 +48,8 @@ if (!defined($nmPath) || $nmPath eq "") {
opendir DIR,$Directory;
my @files = readdir DIR;
closedir DIR;
-@libs = grep(/libLLVM.*\.a$/,sort(@files));
-@objs = grep(/LLVM.*\.o$/,sort(@files));
+my @libs = grep(/libLLVM.*\.a$/,sort(@files));
+my @objs = grep(/LLVM.*\.o$/,sort(@files));
# Declare the hashes we will use to keep track of the library and object file
# symbol definitions.
@@ -56,10 +57,11 @@ my %libdefs;
my %objdefs;
# Gather definitions from the libraries
-foreach $lib (@libs ) {
- open DEFS,
- "$nmPath -g $Directory/$lib | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
+foreach my $lib (@libs ) {
+ open DEFS, "$nmPath -g $Directory/$lib|";
while (<DEFS>) {
+ next if (! / [ABCDGRST] /);
+ s/^[^ ]* [ABCDGRST] //;
chomp($_);
$libdefs{$_} = $lib;
}
@@ -67,10 +69,11 @@ foreach $lib (@libs ) {
}
# Gather definitions from the object files.
-foreach $obj (@objs ) {
- open DEFS,
- "$nmPath -g $Directory/$obj | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
+foreach my $obj (@objs ) {
+ open DEFS, "$nmPath -g $Directory/$obj |";
while (<DEFS>) {
+ next if (! / [ABCDGRST] /);
+ s/^[^ ]* [ABCDGRST] //;
chomp($_);
$objdefs{$_} = $obj;
}
@@ -100,7 +103,7 @@ sub gen_one_entry {
$DepLibs{$libdefs{$_}} = [] unless exists $DepLibs{$libdefs{$_}};
push(@{$DepLibs{$libdefs{$_}}}, $_);
} elsif (defined($objdefs{$_}) && $objdefs{$_} ne $lib) {
- $libroot = $lib;
+ my $libroot = $lib;
$libroot =~ s/lib(.*).a/$1/;
if ($objdefs{$_} ne "$libroot.o") {
$DepLibs{$objdefs{$_}} = [] unless exists $DepLibs{$objdefs{$_}};
@@ -115,14 +118,14 @@ sub gen_one_entry {
if ($WHY) {
print "\n";
my @syms = @{$DepLibs{$key}};
- foreach $sym (@syms) {
+ foreach my $sym (@syms) {
print " $sym\n";
}
}
} else {
print " <li>$key</li>\n";
}
- $suffix = substr($key,length($key)-1,1);
+ my $suffix = substr($key,length($key)-1,1);
$key =~ s/(.*)\.[oa]/$1/;
if ($suffix eq "a") {
if (!$FLAT) { print DOT "$lib_ns -> $key [ weight=0 ];\n" };
@@ -169,7 +172,7 @@ if (!$FLAT) {
}
# Print libraries first
-foreach $lib (@libs) {
+foreach my $lib (@libs) {
gen_one_entry($lib);
}
@@ -196,7 +199,7 @@ if (!$FLAT) {
}
# Print objects second
-foreach $obj (@objs) {
+foreach my $obj (@objs) {
gen_one_entry($obj);
}