* Cleanup the kernel coverage analysis.

svn path=/nixos/trunk/; revision=16919
This commit is contained in:
Eelco Dolstra 2009-09-01 22:50:46 +00:00
parent 4d8d704fba
commit e7acca2ba3
3 changed files with 26 additions and 8 deletions

View File

@ -22,6 +22,27 @@ sub startAll {
sub runTests {
eval "$context $ENV{tests}";
die $@ if $@;
# Copy the kernel coverage data for each machine, if the kernel
# has been compiled with coverage instrumentation.
foreach my $vm (values %vms) {
my ($status, $out) = $vm->execute("test -e /proc/gcov");
next if $status != 0;
# Figure out where to put the *.gcda files so that the report
# generator can find the corresponding kernel sources.
my $kernelDir = $vm->mustSucceed("echo \$(dirname \$(readlink -f /var/run/current-system/kernel))/.build/linux-*");
chomp $kernelDir;
my $coverageDir = "/hostfs" . $vm->stateDir() . "/coverage-data/$kernelDir";
# Copy all the *.gcda files. The ones under
# /proc/gcov/module/nix/store are the kernel modules in the
# initrd to which we have applied nuke-refs in
# makeModuleClosure. This confuses the gcov module a bit.
$vm->execute("for i in \$(cd /proc/gcov && find -name module -prune -o -name '*.gcda'); do echo \$i; mkdir -p $coverageDir/\$(dirname \$i); cp -v /proc/gcov/\$i $coverageDir/\$i; done");
$vm->execute("for i in \$(cd /proc/gcov/module/nix/store/*/.build/* && find -name module -prune -o -name '*.gcda'); do mkdir -p $coverageDir/\$(dirname \$i); cp /proc/gcov/module/nix/store/*/.build/*/\$i $coverageDir/\$i; done");
}
}

View File

@ -31,6 +31,11 @@ with pkgs.lib;
ln -s /hostfs/$hostTmpDir/coverage-data /tmp/coverage-data
)
'';
# If the kernel has been built with coverage instrumentation, make
# it available under /proc/gcov.
boot.kernelModules = [ "gcov-proc" ];
};
}

View File

@ -51,7 +51,6 @@ rec {
{ config, pkgs, ... }:
{
boot.kernelModules = [ "gcov-proc" ];
services.httpd.enable = true;
services.httpd.adminAddr = "e.dolstra@tudelft.nl";
services.httpd.extraSubservices =
@ -131,13 +130,6 @@ rec {
# Stop Apache to gather all the coverage data.
$webserver->stopJob("httpd");
$webserver->execute("sleep 10"); # !!!
# !!! move this to build-vms.nix
my $kernelDir = $webserver->mustSucceed("echo \$(dirname \$(readlink -f /var/run/current-system/kernel))/.build/linux-*");
chomp $kernelDir;
my $coverageDir = "/hostfs" . $webserver->stateDir() . "/coverage-data/$kernelDir";
$webserver->execute("for i in \$(cd /proc/gcov && find -name module -prune -o -name '*.gcda'); do echo \$i; mkdir -p $coverageDir/\$(dirname \$i); cp -v /proc/gcov/\$i $coverageDir/\$i; done");
$webserver->execute("for i in \$(cd /proc/gcov/module/nix/store/*/.build/* && find -name module -prune -o -name '*.gcda'); do mkdir -p $coverageDir/\$(dirname \$i); cp /proc/gcov/module/nix/store/*/.build/*/\$i $coverageDir/\$i; done");
'';
report = makeReport test;