diff options
Diffstat (limited to 'bin/reorder-link')
-rwxr-xr-x | bin/reorder-link | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/bin/reorder-link b/bin/reorder-link deleted file mode 100755 index 3e1437696..000000000 --- a/bin/reorder-link +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env perl - -# Libraries to re-order for startup speed ... - -@libraries = ( - 'libsw%%li.so', 'sw', 'sw.lib', - 'libsfx%%li.so', 'sfx2', 'sfx.lib', - 'libsvx%%li.so', 'svx', 'svx.lib' - ); - -sub find_bindings -{ - my $file; - my $ldname = shift; - my %binds; - - print "Reading bindings for: $ldname\n"; - open ($file, $output) || die "Can't open $output: $!"; - while (<$file>) { - /$ldname:\s+.*\`([^\']*)\'/ || next; - my $sym = $1; - my $count; - $count = ++$binds{$sym}; - } - close ($file); - - return %binds; -} - -sub make_path -{ - my $base = shift; - my $fname = shift; - - print "Base '$base'\n"; - return ($base . "/unxlngi4.pro/slb/" . $fname); -} - -sub read_object_list -{ - my $base = shift; - my $fname = shift; - my $path; - my %objs; - - $path = make_path ($base, $fname); - - my $file; - open ($file, $path) || die "Can't open $path: $!\n"; - while (<$file>) { - chomp; - $_ eq '' && next; - $objs{$_} = 0; - } - close ($file); - - return %objs; -} - -sub count_symbols -{ - my $path = shift; - my $bindings = shift; - my $count = 0; - my $pipe; - - print "."; - -# FIXME - we need to check the type of re-location I think [!?] - needs to be a provides .. - open $pipe, "nm $path|" || die "Can't objdump $path: $!"; - while (<$pipe>) { - /\s+([^\s]+)$/ || next; -# hard to know which is best - this seems so, -# /[TGDBRS]\s+([^\s]+)$/ || next; - if (exists $bindings->{$1}) { - $count = $count + $bindings->{$1}; - } - } - close $pipe; - - return $count; -} - -if (@ARGV < 1) { - print "Syntax:\n"; - print " reorder-link <path-to-output>\n"; - print " where output is generated by LD_DEBUG=bindings\n"; - exit (1); -} - -$output = shift @ARGV; - -{ - print "Sucking env from setup\n"; - open ($Vars, "bash -c '. ./setup ; set'|") || die "Can't find setup: $!"; - while (<$Vars>) { - /([^=]*)=(.*)/ || next; - $setup_vars{$1} = $2; - } - close ($Vars); -} - -# Hack - clobber for test setup -$setup_vars{'OOBUILDDIR'} = '/opt/OpenOffice/OOO_STABLE_1'; - -while (@libraries) { - my $ldname = shift @libraries; - my $path = shift @libraries; - my $libname = shift @libraries; - - $ldname =~ s/%%/641/; - - my $base = $setup_vars{'OOBUILDDIR'} . "/$path"; - - my %bindings = find_bindings ($ldname); - my %objects = read_object_list ($base, $libname); - my $obj; - - printf "Counting symbols "; - foreach $obj (keys %objects) { - $objects{$obj} = count_symbols ("$base/$obj", \%bindings); - } - printf "\n"; - - my $out_path = make_path ($base, "$libname.sorted"); - my $out_file; - print "Writing new map to $out_path ...\n"; - open ($out_file, ">$out_path") || die "Can't open $out_path: $!"; - - foreach $obj (sort { $objects{$b} <=> $objects{$a} } keys %objects) { - print $objects{$obj}. ", "; - print $out_file "$obj\n"; - } - close ($out_file); - print "\ndone\n"; -} |