--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv1/abld/platform/findimp.pl Wed Jun 30 11:35:58 2010 +0800
@@ -0,0 +1,77 @@
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+my $argc=scalar(@ARGV);
+$argc==2 or die "findimp <map file> <output file>\n";
+my $infile=@ARGV[0];
+my $outfile=@ARGV[1];
+
+my @imp_dll_names;
+my @imp_dll_ordinal_lists;
+my $i=0;
+open INFILE, $infile or die "Can't open input file $infile\n";
+while (<INFILE>) {
+ if (/^\s*(\d+)\:(([0-9|a-f|A-F])+)\s+__imp_(\S+)\s+(([0-9|a-f|A-F])+)\s+(\S+?)\:(.*?)\s*$/) {
+ my $section_num=$1;
+ my $section_offset=hex $2;
+ my $import_name="__imp_$4";
+ my $addr=$5;
+ my $dllname=$8;
+ my $implist;
+ for ($i=0; $i<scalar(@imp_dll_names); ++$i) {
+ if ($imp_dll_names[$i] eq $dllname) {
+ $implist=$imp_dll_ordinal_lists[$i];
+ push @$implist, $section_offset;
+ last;
+ }
+ }
+ if ($i==scalar(@imp_dll_names)) {
+ my @new_list;
+ push @new_list, $section_offset;
+ push @imp_dll_names, $dllname;
+ push @imp_dll_ordinal_lists, \@new_list;
+ }
+ }
+}
+close INFILE;
+my $noffset=4;
+my $n_imp_dlls=scalar(@imp_dll_names);
+for ($i=0; $i<$n_imp_dlls; ++$i) {
+ $noffset+=8;
+ my $implist=$imp_dll_ordinal_lists[$i];
+ foreach (@$implist) {
+ $noffset+=4;
+ }
+}
+open OUTFILE, ">$outfile" or die "Can't open output file $outfile\n";
+binmode OUTFILE;
+printf OUTFILE "%c%c%c%c",$n_imp_dlls&0xff,($n_imp_dlls>>8)&0xff,($n_imp_dlls>>16)&0xff,$n_imp_dlls>>24;
+$i=0;
+for ($i=0; $i<$n_imp_dlls; ++$i) {
+ my $nlen=length $imp_dll_names[$i];
+ printf OUTFILE "%c%c%c%c",$noffset&0xff,($noffset>>8)&0xff,($noffset>>16)&0xff,$noffset>>24;
+ $noffset+=$nlen + 1;
+ my $implist=$imp_dll_ordinal_lists[$i];
+ my $nimp=scalar(@$implist);
+ printf OUTFILE "%c%c%c%c",$nimp&0xff,($nimp>>8)&0xff,($nimp>>16)&0xff,$nimp>>24;
+ foreach (@$implist) {
+ printf OUTFILE "%c%c%c%c",$_&0xff,($_>>8)&0xff,($_>>16)&0xff,$_>>24;
+ }
+}
+for ($i=0; $i<$n_imp_dlls; ++$i) {
+ print OUTFILE $imp_dll_names[$i];
+ printf OUTFILE "%c",0;
+}
+close OUTFILE;