--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/maksym/hpsym.pl Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,196 @@
+#
+# Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "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:
+# munge maksym.log into form suitable for an HP logic analyser
+# History
+# 0.1 08/06/99 First release.
+# 0.2 09/06/99 Always include symbols from E32 and device drivers.
+# 0.3 15/06/99 Added rombase flag & argument.
+# 0.4 11/11/99 Remove c++filt step. Ensure symbols don't contain spaces.
+#
+
+# Globals
+my $rombase = 0x50000000;
+my @executables = ( 'euser' );
+
+my $maksym = 'maksym.log';
+my $gpa = 'symbols.gpa';
+my $arg;
+my $skip;
+
+# Standard e32toolp path scanning
+use FindBin; # for FindBin::Bin
+
+my $PerlLibPath; # fully qualified pathname of the directory containing our Perl modules
+
+BEGIN {
+# check user has a version of perl that will cope
+ require 5.005_03;
+# establish the path to the Perl libraries: currently the same directory as this script
+ $PerlLibPath = $FindBin::Bin; # X:/epoc32/tools
+ $PerlLibPath =~ s/\//\\/g; # X:\epoc32\tools
+ $PerlLibPath .= "\\";
+}
+
+use lib $PerlLibPath;
+use Modload;
+Load_SetModulePath($PerlLibPath);
+
+if (@ARGV)
+ {
+ $maksym = shift;
+ if ($maksym =~ /^-[h\?]$/i)
+ {
+ &help;
+ }
+ elsif ($maksym =~ /^(-r)/i)
+ {
+ if (@ARGV)
+ {
+ $rombase=hex(shift);
+ if (@ARGV)
+ {
+ $maksym = shift;
+ }
+ else
+ {
+ print "\nError: missing <infile> argument.\n";
+ &usage;
+ exit 1;
+ }
+ }
+ else
+ {
+ print "\nError: rombase flag '-r' requires an argument.\n";
+ &usage;
+ exit 1;
+ }
+ }
+ elsif ($maksym =~ /^(-.*)/)
+ {
+ print "\nError: invalid flag '$1'\n.";
+ &usage;
+ exit 1;
+ }
+
+ if (@ARGV)
+ {
+ my $file;
+
+ $gpa = shift;
+
+ foreach $file (@ARGV)
+ {
+ push @executables, quotemeta($file);
+ }
+ }
+ }
+else
+ {
+ &help;
+ }
+
+open (GPA, ">$gpa") or die "Can't write to '$gpa'";
+open (LOG, "$maksym") or die "Can't read '$maksym'";
+
+while (<LOG>)
+ {
+ if (/^From\s+\S+\\(.+)\\.+\\(.+)$/)
+ {
+ # Found a new file
+ $abi = $1;
+ $file = $2;
+
+ # Decode this file if it's kernel-side or matches the supplied regexp
+ if ($abi =~ /^(M|S)/i)
+ {
+ $skip = 0;
+ }
+ else
+ {
+ $skip = 1;
+ foreach $re (@executables)
+ {
+ $skip = 0 if ($file =~ /$re/i);
+ }
+ }
+ print "$file\n" if not $skip;
+ }
+ elsif (!/^$/ && !$skip)
+ {
+ /^(\S*)\s*(\S*)\s*(.*)$/;
+ $addr=hex($1) - $rombase;
+ $len=(hex($2)<0) ? 4 : hex($2);
+ $name = $3;
+ $name =~ s/\(.*//; # remove arguments and any const qualifier
+
+ # remove spaces from symbol names
+ if ($name =~ 'global constructors keyed to (.*)')
+ {
+ $name = $1.'_CTOR';
+ }
+ elsif ($name =~ 'global destructors keyed to (.*)')
+ {
+ $name = $1.'_DTOR';
+ }
+ elsif ($name =~ '(.*) virtual table')
+ {
+ $name = $1.'_VTBL';
+ }
+ else
+ {
+ $name =~ s/ /_/g;
+ }
+ print GPA "$name\t", sprintf('%08x', $addr), '..',
+ sprintf('%08x', $addr+$len-1), "\n";
+ }
+ }
+
+close LOG;
+close GPA;
+exit 0;
+
+
+sub help ()
+ {
+ my $build;
+
+ &Load_ModuleL('E32TPVER');
+ print "\nhpsym - Produce symbolic info in \"HP GPA Symbol File Format\"" .
+ " suitable for use\n with a HP logic analyser (Build ",
+ &E32tpver, ")\n";
+ &usage;
+ exit 0;
+ }
+
+sub usage ()
+ {
+ print <<EOF
+
+Usage:
+ hpsym [-r <rombase>] <logfile> [<outfile> [<executables>]]
+
+Where:
+ <rombase> Offset in hex of logical address from physical address of ROM.
+ Defaults to 50000000. Use 0 for single-process builds.
+ <logfile> Log from maksym tool.
+ <outfile> Output filename. Default is 'symbols.gpa'. Use - for stdout.
+ <executables> Names of additional executables to list the symbols of.
+ ASSP-specific executables and EUSER are always included.
+
+Example:
+ hpsym maksym.log symbols.gpa efile efsrv .fsy
+
+EOF
+ }