Add support for "slim", which is "stem" + removal of some exports and checking of import details
For this to work, the static_dependencies.txt file needs to contain the augmented dependency information.
To help with this, it can now consume a mixture of both rom_content.csv lines and static_dependencies.txt lines: the
best way to update the information would be something like
(edit rom_content.csv to add "slim" to XXX.dll)
findstr /i "xxx.dll" rom_content.csv > slim.txt
findstr /i "xxx.dll" static_dependencies.txt >> slim.txt
perl ..\tools\static_dependencies.pl -u static_dependencies.txt slim.txt > new_dependencies.txt
This will notice the "slim" marking for xxx.dll, and record the detailed import and export lists for
xxx.dll and everything which links to it. The new information will look something like
sys\bin\xxx.dll /epoc32/release/armv5/urel/stem_xxx.dll exports=1-98.100-102:euser[100039e5].dll
sys\bin\yyy.dll /epoc32/release/armv5/urel/yyy.dll euser[100039e5].dll:xxx[102750c7].dll@2.4-5.77.104-106:scppnwdl.dll
sys\bin\zzz.dll /epoc32/release/armv5/urel/zzz.dll euser[100039e5].dll:xxx[102750c7].dll@23.25.74-77:scppnwdl.dll
Only executables for which there is a "slim" marking will have this level of detail.
The filtering script now does the detailed cross-checking of imports to exports for "slim" executables.
In this case, it will observe the stem_xxx.dll does not export ordinal 104, and so the filtering will include
deleting sys\bin\yyy.dll (xxx.dll Missing ordinal 104)
sys\bin\zzz.dll will be acceptable, because it only uses ordinals which are still present in stem_xxx.dll
# Copyright (c) 2010 Symbian Foundation Ltd.
# 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:
# Symbian Foundation - initial contribution.
#
# Contributors:
#
# Description:
# This script filters kernel trace output to the bare essentials
use strict;
my %processes;
my %threadcount;
my %instancecount;
my %originalname;
my @deathlist;
my $line;
while ($line = <>)
{
# AddThread ekern.exe::NVMem-ecc10dce to ekern.exe
# Process FLogSvr.exe Die: 0 0 Kill
# DLibrary domainSrv.exe::domainpolicy2.dll Close m=-1
# Thread MTMInit::Via Infrared Via Infrared Panic MTMInit 5
# DProcess::Rename MSexe.exe to !MsvServer
if ( $line =~ /^(AddThread |Process \S+ Die: |DLibrary |Thread |DProcess::Rename )/o)
{
if ($line =~ /^DProcess::Rename (\S+) to (\S+)/o)
{
my $oldname = $1;
my $process = $2;
printf "Renaming %s (%d,%d) to %s\n", $oldname, $processes{$oldname}, $threadcount{$oldname}, $process;
$processes{$process} = $processes{$oldname};
$threadcount{$process} = $threadcount{$oldname};
$instancecount{$process} = $instancecount{$oldname};
$originalname{$process} = $oldname;
delete $processes{$oldname};
delete $threadcount{$oldname};
}
if ($line =~ /^AddThread (\S+)::(\S+) to (\S+)$/o)
{
my $process = $1;
my $thread = $2;
if ($thread eq "Main" || $thread eq "Null")
{
# New process created
$processes{$process} = $.;
$threadcount{$process} = 0;
}
$threadcount{$process} += 1;
if (!defined $instancecount{$process})
{
$instancecount{$process} = 0;
}
$instancecount{$process} += 1;
}
print "$.: $line";
if ($line =~ /^Process (\S+) Die: (.*)$/o)
{
my $process = $1;
my $details = $2;
my $summary = sprintf "#%d, %d threads, lifetime %d-%d",
$instancecount{$process},$threadcount{$process},$processes{$process},$.;
print "\t$process: $summary\n";
delete $processes{$process};
delete $threadcount{$process};
chomp $line;
push @deathlist, sprintf "%7d\t%-20s %s, died %s", $., $process, $summary, $details;
}
next;
}
# Initiating transition to state 0000.ffff.
# R:\sf\os\devicesrv\sysstatemgmt\systemstatemgr\cmd\src\ssmcommandbase.cpp 135: Completing command with errorcode 0
# ***** Execute cmd no. 11 without a delay
# Starting : Z:\sys\bin\splashscreen.exe with arguments : and Execution behaviour : 1
if ( $line =~ /^(Initiating transition |\*\*\*\*\* |Starting : )/o)
{
print "SSM: $line";
next;
}
if ($line =~ /^(MODE_USR:)/o)
{
# it's crashed
print $line, <>;
last;
}
}
printf "\n\nActive processes (%d):\n", scalar keys %processes;
foreach my $process (sort keys %processes)
{
printf "%-25s\t%d threads, created at line %d\n", $process, $threadcount{$process}, $processes{$process};
}
printf "\n\nDead processes (%d)\n", scalar @deathlist;
print join("\n", sort @deathlist, "");