Improve ExtractSymbols (pprof).
Iterated downward through both libraries and PCs. This allows PCs to resolve even when library address ranges overlap.
This commit is contained in:
parent
7cb5b5ea21
commit
af366593a4
@ -3682,16 +3682,9 @@ sub ExtractSymbols {
|
|||||||
|
|
||||||
# Map each PC value to the containing library
|
# Map each PC value to the containing library
|
||||||
my @pcs = (sort { $a cmp $b } keys(%{$pcset}));
|
my @pcs = (sort { $a cmp $b } keys(%{$pcset}));
|
||||||
my @slibs = (sort {$a->[1] cmp $b->[1]} @{$libs});
|
my $pc = pop(@pcs);
|
||||||
my $bin = shift(@slibs);
|
|
||||||
if ($bin->[1] == 0) {
|
foreach my $lib (reverse sort {$a->[1] cmp $b->[1]} @{$libs}) {
|
||||||
# Move binary to end (starts at address 0).
|
|
||||||
push(@slibs, $bin);
|
|
||||||
} else {
|
|
||||||
unshift(@slibs, $bin);
|
|
||||||
}
|
|
||||||
my $pc = shift(@pcs);
|
|
||||||
foreach my $lib (@slibs) {
|
|
||||||
my $libname = $lib->[0];
|
my $libname = $lib->[0];
|
||||||
my $start = $lib->[1];
|
my $start = $lib->[1];
|
||||||
my $finish = $lib->[2];
|
my $finish = $lib->[2];
|
||||||
@ -3701,7 +3694,7 @@ sub ExtractSymbols {
|
|||||||
my $contained = [];
|
my $contained = [];
|
||||||
while (($pc ge $start) && ($pc le $finish)) {
|
while (($pc ge $start) && ($pc le $finish)) {
|
||||||
push(@{$contained}, $pc);
|
push(@{$contained}, $pc);
|
||||||
$pc = shift(@pcs);
|
$pc = pop(@pcs);
|
||||||
if (!defined $pc) {
|
if (!defined $pc) {
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user