blob: 41ed93eb04e80ef3e5fed59fa69cc90cfa6c7726 [file] [log] [blame]
#!/usr/bin/perl
################################################################################
## ##
## Copyright (c) International Business Machines Corp., 2009 ##
## ##
## This program is free software; you can redistribute it and/or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation; either version 2 of the License, or ##
## (at your option) any later version. ##
## ##
## This program is distributed in the hope that it will be useful, but ##
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ##
## for more details. ##
## ##
## You should have received a copy of the GNU General Public License ##
## along with this program; if not, write to the Free Software ##
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ##
## ##
################################################################################
# ##
# File : create_valgrind_check ##
# ##
# Usage: create_valgrind_check\ ##
# <LTP_COMMAND_FILE> <VALGRIND_CHECK_TYPE> ##
# ##
# Description: This is a simple perl script which will take ltp command file ##
# as input and then create a final command file while will have ##
# the following entries for each test tag: ##
# 1) <tag_name> <test_binary_name> ##
# 2) <tag_name_valgrind_check_type> <valgrind test_binary_name> ##
# ##
# Author: Subrata Modak <subrata@linux.vnet.ibm.com> ##
# ##
# History: Aug 23 2009 - Created - Subrata Modak. ##
################################################################################
my $command_file = shift (@ARGV) || syntax();
my $valgrind_check_type = shift (@ARGV) || syntax();
sub syntax() {
print "syntax: create_valgrind_check\
<LTP_COMMAND_FILE> <VALGRIND_CHECK_TYPE>\n";
exit (1);
}
sub print_memory_leak_check {
$sub_line = shift;
@sub_tag_and_actual_command = split(/\ /, $sub_line);
my $sub_token_counter = 0;
foreach my $sub_token (@sub_tag_and_actual_command) {
if ($sub_token_counter == 0 ) {#print the tagname now
print $sub_token . "_valgrind_memory_leak_check " .
" valgrind -q --leak-check=full --trace-children=yes ";
$sub_token_counter++;
next;
}
print " " . $sub_token . " ";
}
print "\n";
}
sub print_thread_concurrency_check {
$sub_line = shift;
@sub_tag_and_actual_command = split(/\ /, $sub_line);
my $sub_token_counter = 0;
foreach my $sub_token (@sub_tag_and_actual_command) {
if ($sub_token_counter == 0 ) {#print the tagname now
print $sub_token . "_valgrind_thread_concurrency_check " .
" valgrind -q --tool=helgrind --trace-children=yes ";
$sub_token_counter++;
next;
}
print " " . $sub_token . " ";
}
print "\n";
}
open (FILE, $command_file) || die "Cannot open file: $command_file\n";
while ($line = <FILE>) {
if ($line =~ /^#/) {
print "$line";
next;
}
if ($line =~ /^\n$/) {
next;
}
chomp $line;
print "$line\n"; #Print one instance for normal execution
if ($valgrind_check_type == 3) {
#Print for both Memory Leak and Thread Concurrency Checks
print_memory_leak_check($line);
print_thread_concurrency_check($line);
}
if ($valgrind_check_type == 2) {
#Print only for Thread concurrency Check
print_thread_concurrency_check($line);
}
if ($valgrind_check_type == 1) {
#Print only for Memory leak Check
print_memory_leak_check($line);
}
}
close (FILE);