# Copyright (C) 2004 Free Software Foundation, Inc. # 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. # This file was written by Baurjan Ismagulov . # $Id: openp.exp,v 1.7 2004/09/25 21:14:05 ibr Exp $ # This file tests whether gdb finds the files properly given the # following file names: # 1. basename: file # 2. absolute: /dir/file # 3. relative: dir/file # 4. in current: ./file # 5. in upper: ../file # Resolve possibe /./ and /../ within the given path. We are paranoid # about cases like "mkdir -p a/../b" (although GNU coreutils and Solaris # 8 seem to handle this particular case). # XXX: Can this be replaced with tcl path manipulation routines? proc canonize_path {dir} { set old_dir [pwd] cd $dir set new_dir [pwd] cd $old_dir return $new_dir } # Compile $src to $bin in $cdir. # XXX: build == host. proc cdir_compile {cdir src bin} { if [catch {set old_dir [pwd]} msg] { perror $msg return -1 } if [catch {cd $cdir} msg] { perror $msg return -1 } if {[gdb_compile $src $bin executable debug] != ""} { perror "Testcase compile failed." return -1 } if [catch {cd $old_dir} msg] { perror $msg return -1 } return 0 } # Move the binary to $bin_dir, add $path_dir to PATH, gdb_test in the # $gdb_wd directory. # XXX: build == host. proc test_bin {gdb_wd bin_dir path_dir gdb_test_cmd gdb_resp txt} { global binname global binfile global env if {$bin_dir != ""} { if {[lindex [remote_exec host "mv $binfile $bin_dir"] 0] != 0} { unresolved "Failed to move $binfile to $bin_dir." return -1 } } if {$path_dir != "" && [info exists env(PATH)]} { if [catch {set old_path $env(PATH)} msg] { perror $msg return -1 } # XXX: Directory separator in PATH? if [catch {set env(PATH) $env(PATH):$path_dir} msg] { perror $msg return -1 } } if [catch {set old_dir [pwd]} msg] { perror $msg return -1 } if [catch {cd $gdb_wd} msg] { perror $msg return -1 } gdb_start gdb_test $gdb_test_cmd $gdb_resp $txt gdb_exit if [catch {cd $old_dir} msg] { perror $msg return -1 } if [info exists old_path] { if [catch {set env(PATH) $old_path} msg] { perror $msg return -1 } } if {$bin_dir != ""} { if {[lindex [remote_exec host "mv $bin_dir/$binname $binfile"] 0] != 0} { unresolved "Failed to move $bin_dir/$binname to $binfile." return -1 } } return 0 } # Compile in $comp_dir, move the source to $srcfile_dir, perform $cmd1 # and $cmd2, gdb_test in gdb_wd. # XXX: build == host. proc test_src {comp_dir comp_srcfile comp_binfile srcfile_dir gdb_wd cmd1 cmd2 gdb_test_cmd gdb_resp txt} { global srcname global srcfile if [catch {set old_dir [pwd]} msg] { perror $msg return -1 } if {[cdir_compile $comp_dir $comp_srcfile $comp_binfile] != 0} { unresolved "Failed to compile $comp_srcfile to $comp_binfile in $comp_dir." return -1 } if {$srcfile_dir != ""} { if {[lindex [remote_exec host "mv $srcfile $srcfile_dir"] 0] != 0} { unresolved "Failed to move $srcfile to $srcfile_dir." return -1 } } if [catch {cd $gdb_wd} msg] { perror $msg return -1 } gdb_start if {$cmd1 != ""} { gdb_test $cmd1 "" } if {$cmd2 != ""} { gdb_test $cmd2 "" } gdb_test $gdb_test_cmd $gdb_resp $txt gdb_exit if [catch {cd $old_dir} msg] { perror $msg return -1 } if {$srcfile_dir != ""} { if {[lindex [remote_exec host "mv $srcfile_dir/$srcname $srcfile"] 0] != 0} { unresolved "Failed to move $srcfile_dir/$srcname to $srcfile." return -1 } } return 0 } if {[is_remote host]} { unresolved "This test script does not work on a remote host." return -1 } if $tracelevel then { strace $tracelevel } set prms_id 0 set bug_id 0 set testname "openp" set srcname $testname.c set binname $testname.bin set testtmpdir [canonize_path $objdir/$subdir]/$testname set srcfile $testtmpdir/subdir/src/$srcname set binfile $testtmpdir/subdir/bin/$binname set src_txt {1.int main\(\){return 0;}.*} if {[lindex [remote_exec host "mkdir -p \ $testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/bin/subdir \ $testtmpdir/subdir/cwd/bin \ $testtmpdir/subdir/cwd/src \ $testtmpdir/subdir/dir$testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/dir$testtmpdir/subdir/bin \ $testtmpdir/subdir/dir/src"] 0] != 0} { unresolved "Failed to create the directories under $testtmpdir/subdir." return -1 } if {[lindex [remote_exec host "cp $srcdir/$subdir/$testname.c $srcfile"] 0] != 0} { unresolved "Failed to copy $srcdir/$subdir/$testname.c to $srcfile." return -1 } if {[cdir_compile $testtmpdir $srcfile $binfile] != 0} { unresolved "Failed to compile $srcfile to $binfile in $testtmpdir." return -1 } gdb_exit # b1+ test_bin $testtmpdir/subdir/bin \ "" \ "" \ "file $binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b1+ (existing binary, basename)" # b1- test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file $binname" \ "Reading symbols from $binfile\\.\\.\\..*done\\..*" \ "openp b1- (non-existent binary, basename, find in PATH)" # b2+ test_bin $testtmpdir/subdir/cwd \ "" \ "" \ "file $binfile" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b2+ (existing binary, absolute name)" # b2-a # XXX: Should we match locale-specific messages? test_bin $testtmpdir/subdir/cwd \ $testtmpdir/subdir/dir$testtmpdir/subdir/bin \ $testtmpdir/subdir/dir \ "file $binfile" \ "$binfile: .*" \ "openp b2-a (non-existent binary, absolute name, don't look in /absolute)" # b2- # XXX: Should we match locale-specific messages? test_bin $testtmpdir/subdir/cwd \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/dir \ "file $binfile" \ "$binfile: .*" \ "openp b2- (non-existent binary, absolute name, don't look for /basename)" # b3+ test_bin $testtmpdir/subdir \ "" \ "" \ "file bin/$binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b3+ (existing binary, relative name)" # b3-r # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir \ "file bin/$binname" \ "bin/$binname: .*" \ "openp b3-r (non-existent binary, relative name, don't look in /relative)" # b3- # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file bin/$binname" \ "bin/$binname: .*" \ "openp b3- (non-existent binary, relative name, don't look in /basename)" # b4+ test_bin $testtmpdir/subdir/bin \ "" \ "" \ "file ./$binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b4+ (existing binary, in the current dir)" # b4- # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file ./$binname" \ "\\./$binname: .*" \ "openp b4- (non-existent binary, in the current dir, don't look in PATH)" # b5+ test_bin $testtmpdir/subdir/bin/subdir \ "" \ "" \ "file ../$binname" \ "Reading symbols from $binfile\\.\\.\\.done\\..*" \ "openp b5+ (existing binary, in the upper dir)" # b5-r # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin/subdir \ "file ../$binname" \ "\\.\\./$binname: .*" \ "openp b5-r (non-existent binary, in the upper dir name, don't look in /relative)" # b5- # XXX: locale test_bin $testtmpdir/subdir/cwd \ "" \ $testtmpdir/subdir/bin \ "file ../$binname" \ "\\.\\./$binname: .*" \ "openp b5- (non-existent binary, in the upper dir name, don't look in /basename)" # s1+ test_src $testtmpdir/subdir/src $srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s1+ (existing source, basename)" # s1-. test_src $testtmpdir/subdir/src $srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s1-. (non-existent source, basename, find in \$cwd/basename)" # s1-da test_src $testtmpdir/subdir/src $srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s1-da (non-existent source, basename, find in /\$cdir/basename)" # s1-d test_src $testtmpdir/subdir/src $srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s1-d (non-existent source, basename, find in /basename)" # s2+ test_src $testtmpdir $srcfile $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" ""\ "l main" \ $src_txt \ "openp s2+ (existing source, absolute name)" # s2-. test_src $testtmpdir $srcfile $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s2-. (non-existent source, absolute name, find in \$cwd/basename)" # s2-da test_src $testtmpdir $srcfile $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s2-da (non-existent source, absolute name, find in /absolute)" # s2-d test_src $testtmpdir $srcfile $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s2-d (non-existent source, absolute name, find in /basename)" # s3+ test_src $testtmpdir/subdir src/$srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3+ (existing source, relative name)" # s3-.r test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/cwd/src \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3-.r (non-existent source, relative name, find in \$cwd/relative)" # s3-c test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3-c (non-existent source, relative name, find in \$cdir/basename)" # s3-. test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s3-. (non-existent source, relative name, find in \$cwd/basename)" # s3-da test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s3-da (non-existent source, relative name, find in /\$cdir/relative)" # s3-dr test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/dir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s3-dr (non-existent source, relative name, find in /relative)" # s3-d test_src $testtmpdir/subdir src/$srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s3-d (non-existent source, relative name, find in /basename)" # s4+ test_src $testtmpdir/subdir/src ./$srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s4+ (existing source, in the current dir)" # s4-. test_src $testtmpdir/subdir/src ./$srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s4-. (non-existent source, in the current dir, find in \$cwd/basename)" # s4-da test_src $testtmpdir/subdir/src ./$srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s4-da (non-existent source, in the current dir, find in /\$cdir/basename)" # s4-d test_src $testtmpdir/subdir/src ./$srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s4-d (non-existent source, in the current dir, find in /basename)" # s5+ test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ "" \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5+ (existing source, in the upper dir)" # s5-.r test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5-.r (non-existent source, in the upper dir, find in \$cwd/relative)" # s5-c test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5-c (non-existent source, in the upper dir, find in \$cdir/basename)" # s5-. test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/cwd \ $testtmpdir/subdir/cwd \ "file $binfile" "" \ "l main" \ $src_txt \ "openp s5-. (non-existent source, in the upper dir, find in \$cdir/basename)" # s5-da test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/dir$testtmpdir/subdir/src/subdir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s5-da (non-existent source, in the upper dir, find in /\$cdir/relative)" # s5-dr test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s5-dr (non-existent source, in the upper dir, find in /relative)" # s5-d test_src $testtmpdir/subdir/src/subdir ../$srcname $binfile \ $testtmpdir/subdir/dir \ $testtmpdir/subdir/cwd \ "dir $testtmpdir/subdir/dir" "file $binfile" \ "l main" \ $src_txt \ "openp s5-d (non-existent source, in the upper dir, find in /basename)"