123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/usr/bin/perl
- #===-- test_bcc_debuginfo.pl - Debugger integration test driver script ---===#
- #
- # The LLVM Compiler Infrastructure
- #
- # This file is distributed under the University of Illinois Open Source
- # License. See LICENSE.TXT for details.
- #
- #===----------------------------------------------------------------------===#
- #
- # This script tests debugging information generated by a compiler.
- # Input arguments
- # - Path to FileCheck tool.
- # - Input source program. Usually this source file is decorated using
- # special comments (//DEBUGGER:, //CHECK:)to communicate debugger commands.
- # - Executable file. This file is generated by the compiler.
- #
- # This perl script extracts debugger commands from input source program
- # comments in a script. A debugger is used to load the executable file
- # and run the script generated from source program comments. Finally,
- # the debugger output is checked, using FileCheck, to validate
- # debugging information.
- #
- #===----------------------------------------------------------------------===#
- use File::Basename;
- my $filecheck_tool = $ARGV[0];
- my $testcase_file = $ARGV[1];
- my $testcase_output = $ARGV[2];
- my $input_filename = basename $testcase_file;
- my $output_dir = dirname $testcase_output;
- my $debugger_script_file = "$output_dir/$input_filename.debugger.script";
- my $output_file = "$output_dir/$input_filename.gdb.output";
- open(OUTPUT, ">$debugger_script_file");
- # Enable extra verbosity in GDB
- print OUTPUT "set verbose on\n";
- # Extract debugger commands from testcase. They are marked with DEBUGGER:
- # at the beginning of a comment line.
- open(INPUT, $testcase_file);
- while(<INPUT>) {
- my($line) = $_;
- $i = index($line, "DEBUGGER:");
- if ( $i >= 0) {
- $l = length("DEBUGGER:");
- $s = substr($line, $i + $l);
- $s =~ s/\%s/$input_filename/g;
- $s =~ s/\%t/$testcase_output/g;
- print OUTPUT "$s";
- }
- }
- print OUTPUT "\n";
- print OUTPUT "quit\n";
- close(INPUT);
- close(OUTPUT);
- # setup debugger and debugger options to run a script.
- my $debugger = $ENV{'DEBUGGER'};
- my $debugger_options = $ENV{'DEBUGGER_ARGS'};
- if (!$debugger) {
- print "Please set DEBUGGER prior to using this script";
- exit 1;
- }
- $debugger_options = "-x $debugger_script_file $debugger_options $testcase_output";
- # run debugger and capture output.
- system("$debugger $debugger_options > $output_file 2>&1") ;
- if ($?>>8 != 0) {
- print "Error during debugger invocation. Command used was: \n";
- print("$debugger $debugger_options > $output_file 2>&1\n") ;
- exit 1;
- }
- # validate output.
- system("$filecheck_tool", "-input-file", "$output_file", "$testcase_file");
- if ($?>>8 != 0) {
- print "Error during verification. Debugger command used was: \n";
- print("$debugger $debugger_options > $output_file 2>&1\n") ;
- print "Verification command used was: \n";
- print "$filecheck_tool -input-file $output_file $testcase_file\n";
- exit 1;
- }
- else {
- exit 0;
- }
|