diff -r 000000000000 -r 044383f39525 imgtools/romtools/maksym/hpsym.pl --- /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 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 () + { + 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 <] [ []] + +Where: + Offset in hex of logical address from physical address of ROM. + Defaults to 50000000. Use 0 for single-process builds. + Log from maksym tool. + Output filename. Default is 'symbols.gpa'. Use - for stdout. + 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 + }