1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
# arg_write.exp
#
# This script searches the systemtap.syscall/arg_write directory for
# C files to test. See the README file for details on the C files.
#
# To restrict C files to test, set the CHECK_ONLY environment variable.
# For example, to only test the readwrite and accept C files, run:
#
# make installcheck RUNTESTFLAGS=arg_write.exp CHECK_ONLY="readwrite accept"
set test_script "arg_write.stp"
set test_module_name "arg_write_longlonglong"
set wd [pwd]
set test_module "${wd}/${test_module_name}.ko"
source $srcdir/$subdir/test.tcl
if { ![expr { [string equal $tcl_platform(machine) "x86_64"]
&& [string compare $tcl_platform(osVersion) "4.17"] >= 0 }]
&& ![expr { [string equal $tcl_platform(machine) "aarch64"]
&& [string compare $tcl_platform(osVersion) "4.19"] >= 0 }] } {
untested $test_script
return
}
proc test_procedure {} {
global env srcdir subdir test_script test_module test_module_name
set wd [pwd]
set flags ""
set patterns []
if {[info exists env(CHECK_ONLY)]} {
foreach file $env(CHECK_ONLY) {
lappend patterns "$file.c"
}
} else {
lappend patterns "*.c"
}
if {$srcdir == ""} {
set basedir "arg_write/"
} else {
set basedir "$srcdir/$subdir/arg_write/"
}
set test_files []
foreach pattern $patterns {
set test_files [concat $test_files \
[glob -nocomplain "${basedir}${pattern}"]]
}
if {[llength $test_files] == 0} {
# If our globbing didn't find any test files, there isn't any
# point in proceeding.
fail "$test_module_name: no tests found"
return
}
# To speed things up, go ahead and compile the test module once
# here, then just use it down in run_one_test(). The test script
# uses wildcards to cover every syscall and takes time to parse.
#
# Note that at one point we were passing '--skip-badvars' when
# compiling the syscall module. This tends to hide errors and not
# give errors when we expect them.
set script "$srcdir/$subdir/${test_script}"
set cmd "stap -p4 -m ${test_module_name} ${script}"
exec /bin/rm -f ${test_module}
# Remember any set value of SYSTEMTAP_DEBUGINFO_PATH
if {[info exists env(SYSTEMTAP_DEBUGINFO_PATH)]} {
set old_path $env(SYSTEMTAP_DEBUGINFO_PATH)
set restore_old_path 1
} else {
set restore_old_path 0
}
# Override SYSTEMTAP_DEBUGINFO_PATH to ensure no debuginfo could be used
set env(SYSTEMTAP_DEBUGINFO_PATH) ""
catch {eval exec $cmd} output
# Restore any previous value, otherwise unset it
if {$restore_old_path} {
set env(SYSTEMTAP_DEBUGINFO_PATH) $old_path
} else {
unset env(SYSTEMTAP_DEBUGINFO_PATH)
}
send_log "${output}\n"
if {[file exists ${test_module}]} {
pass "${script} compilation"
} else {
# If compiling the test module failed, there isn't much point
# in trying to run any of the real tests.
fail "${script} compilation"
return
}
for {set i 0} {$i < [arch_compile_flags]} {incr i} {
set flags [arch_compile_flag $i]
set arch [arch_compile_flag_name $i]
set arch_size [arch_compile_flag_bits $i]
verbose -log "i: $i flags: $flags arch: $arch size: $arch_size"
foreach filename [lsort $test_files] {
set testname [file tail [string range $filename 0 end-2]]
if {![installtest_p]} {
untested "${arch_size}-bit $testname"; continue
}
send_log "Testing ${arch_size}-bit ${testname} nd_syscall\n"
run_one_test $filename $flags ${arch_size} "nd_syscall"
}
}
# Cleeanup
exec /bin/rm -f ${test_module}
}
test_procedure
|