imgtools/romtools/maksym/hpsym.pl
changeset 0 044383f39525
child 590 360bd6b35136
--- /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
+  }