Make object glomming properly follow region sizes

asm
Hamish Coleman 8 years ago
parent 839e6c2a8d
commit d5b684eb76

@ -173,6 +173,17 @@ sub region_size {
return $region->{size};
}
sub region_base {
my $self = shift;
my $phys_addr = shift;
my $region = $self->_addr2region($phys_addr,4);
if (!defined($region)) {
return undef;
}
return $region->{phys_addr};
}
1;
package main;
@ -268,13 +279,28 @@ sub glom_objects {
$db->{p}{obj}{$addr} = $object;
my $next_addr = $addrs[0];
my $size;
$object->{_}{next_addr} = $next_addr;
if (!defined($next_addr)) {
$next_addr = $addr;
$size = 0;
} else {
$size = $next_addr - $addr;
}
my $region_base = $db->{regions}->region_base($addr);
$object->{_}{region_base} = $region_base;
# if we know nothing, then we cannot glom anything
if (!defined($region_base)) {
$object->{size} = "-1";
next;
}
my $region_end = $region_base + $db->{regions}->region_size($addr);
$object->{_}{region_end} = $region_end;
if ($next_addr > $region_end) {
$next_addr = $region_end;
}
$object->{_}{glom_end} = $next_addr;
my $size = $next_addr - $addr;
$object->{size} = $size;
my $offset = 0;

Loading…
Cancel
Save