forked from mirrors/nixpkgs
* Cleanup the kernel coverage analysis.
svn path=/nixos/trunk/; revision=16919
This commit is contained in:
parent
4d8d704fba
commit
e7acca2ba3
|
@ -22,6 +22,27 @@ sub startAll {
|
||||||
sub runTests {
|
sub runTests {
|
||||||
eval "$context $ENV{tests}";
|
eval "$context $ENV{tests}";
|
||||||
die $@ if $@;
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,11 @@ with pkgs.lib;
|
||||||
ln -s /hostfs/$hostTmpDir/coverage-data /tmp/coverage-data
|
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" ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,6 @@ rec {
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
boot.kernelModules = [ "gcov-proc" ];
|
|
||||||
services.httpd.enable = true;
|
services.httpd.enable = true;
|
||||||
services.httpd.adminAddr = "e.dolstra@tudelft.nl";
|
services.httpd.adminAddr = "e.dolstra@tudelft.nl";
|
||||||
services.httpd.extraSubservices =
|
services.httpd.extraSubservices =
|
||||||
|
@ -131,13 +130,6 @@ rec {
|
||||||
# Stop Apache to gather all the coverage data.
|
# Stop Apache to gather all the coverage data.
|
||||||
$webserver->stopJob("httpd");
|
$webserver->stopJob("httpd");
|
||||||
$webserver->execute("sleep 10"); # !!!
|
$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;
|
report = makeReport test;
|
||||||
|
|
Loading…
Reference in a new issue