aboutsummaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorZachary T Welch <zwelch@codesourcery.com>2010-12-16 15:18:23 -0800
committerJoe Damato <ice799@gmail.com>2011-01-06 11:41:20 -0800
commit68621dbd097284a7a60318815399503c24518f12 (patch)
tree503c4ce2d09ca9749aec80da1dab5832f9cf0b25 /testsuite
parent6188614fe288df30e9d7145106fc6350468d58f9 (diff)
downloadltrace-68621dbd097284a7a60318815399503c24518f12.tar.gz
Make test suite work with non-standard installations
Augment LD_LIBRARY_PATH with alternate locations of libelf and libunwind in ltrace_runtest. Also adds support for passing extra arguments, so all tests can be rewritten to use that API calls. This patch makes the test suite work (without any hacking) on systems that do not have those libraries installed in standard locations. Signed-off-by: Zachary T Welch <zwelch@codesourcery.com>
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/Makefile.am9
-rw-r--r--testsuite/lib/ltrace.exp39
-rw-r--r--testsuite/ltrace.minor/trace-clone.exp14
-rw-r--r--testsuite/ltrace.minor/trace-exec.exp25
-rw-r--r--testsuite/ltrace.minor/trace-fork.exp25
5 files changed, 62 insertions, 50 deletions
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 4802ed9..a4c7cfa 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -29,6 +29,13 @@ EXTRA_DIST = \
lib/ltrace.exp \
run-my-tests.sh
-CLEANFILES = *.o *.so *.log *.sum *.ltrace site.bak setval.tmp site.exp
+BUILT_SOURCES = env.exp
+
+env.exp: Makefile
+ rm -f env.exp
+ echo set libelf_LD_LIBRARY_PATH '"$(libelf_LD_LIBRARY_PATH)"' >> $@
+ echo set libunwind_LD_LIBRARY_PATH '"$(libunwind_LD_LIBRARY_PATH)"' >> $@
+
+CLEANFILES = *.o *.so *.log *.sum *.ltrace site.bak setval.tmp site.exp env.exp
MAINTAINERCLEANFILES = Makefile.in
diff --git a/testsuite/lib/ltrace.exp b/testsuite/lib/ltrace.exp
index eb7c960..db602ff 100644
--- a/testsuite/lib/ltrace.exp
+++ b/testsuite/lib/ltrace.exp
@@ -4,6 +4,7 @@
# need to be modified for any target, it can be done with a variable
# or by passing arguments.
+source $objdir/env.exp
global LTRACE
if [info exists TOOL_EXECUTABLE] {
@@ -14,6 +15,8 @@ if [info exists TOOL_EXECUTABLE] {
global LTRACE_OPTIONS
set LTRACE_OPTIONS "";
+global LTRACE_ARGS
+set LTRACE_ARGS "";
# ltrace_compile SOURCE DEST TYPE OPTIONS
#
@@ -196,6 +199,37 @@ proc ltrace_options { args } {
}
#
+# ltrace_args ARGS_LIST
+# Pass ltrace'd program its own commandline options.
+#
+proc ltrace_args { args } {
+
+ global LTRACE_ARGS
+ set LTRACE_ARGS $args
+}
+
+#
+# handle run-time library paths
+#
+proc ld_library_path { args } {
+
+ set ALL_LIBRARY_PATHS { }
+ if [info exists LD_LIBRARY_PATH] {
+ lappend ALL_LIBRARY_PATHS $LD_LIBRARY_PATH
+ }
+ global libelf_LD_LIBRARY_PATH
+ if {[string length $libelf_LD_LIBRARY_PATH] > 0} {
+ lappend ALL_LIBRARY_PATHS $libelf_LD_LIBRARY_PATH
+ }
+ global libunwind_LD_LIBRARY_PATH
+ if {[string length $libunwind_LD_LIBRARY_PATH] > 0} {
+ lappend ALL_LIBRARY_PATHS $libunwind_LD_LIBRARY_PATH
+ }
+ lappend ALL_LIBRARY_PATHS $args
+ join $ALL_LIBRARY_PATHS ":"
+}
+
+#
# ltrace_runtest LD_LIBRARY_PATH BIN FILE
# Trace the execution of BIN and return result.
#
@@ -208,10 +242,11 @@ proc ltrace_runtest { args } {
global LTRACE
global LTRACE_OPTIONS
+ global LTRACE_ARGS
verbose "LTRACE = $LTRACE"
- set LD_LIBRARY_PATH_ [lindex $args 0]
+ set LD_LIBRARY_PATH_ [ld_library_path [lindex $args 0]]
set BIN [lindex $args 1]
# specify the output file, the default one is $BIN.ltrace
@@ -225,7 +260,7 @@ proc ltrace_runtest { args } {
lappend LTRACE_OPTIONS "$file"
verbose "LTRACE_OPTIONS = $LTRACE_OPTIONS"
#ltrace the PUT.
- catch "exec sh -c {export LD_LIBRARY_PATH=$LD_LIBRARY_PATH_; $LTRACE $LTRACE_OPTIONS $BIN;exit}" output
+ catch "exec sh -c {export LD_LIBRARY_PATH=$LD_LIBRARY_PATH_; $LTRACE $LTRACE_OPTIONS $BIN $LTRACE_ARGS;exit}" output
# return output from ltrace.
return $output
diff --git a/testsuite/ltrace.minor/trace-clone.exp b/testsuite/ltrace.minor/trace-clone.exp
index 749cc49..3d0c8fe 100644
--- a/testsuite/ltrace.minor/trace-clone.exp
+++ b/testsuite/ltrace.minor/trace-clone.exp
@@ -10,19 +10,9 @@ verbose "compiling source file now....."
if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${objdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
}
-global LTRACE
-#Run PUT for ltrace.
-spawn $LTRACE -f $objdir/$subdir/$binfile
-set timeout 4
-expect timeout {
- fail "Time out! Maybe caused by ltrace segment fault or improper timeout value here!"
- return
-}
-
-catch "exec $LTRACE -f $objdir/$subdir/$binfile" exec_output
-# Save the output
-ltrace_saveoutput "${exec_output}" ${objdir}/${subdir}/${testfile}.ltrace
+ltrace_options "-f"
+set exec_output [ltrace_runtest $objdir/$subdir $objdir/$subdir/$binfile]
#check the output of this program.
verbose "ltrace runtest output: $exec_output\n"
diff --git a/testsuite/ltrace.minor/trace-exec.exp b/testsuite/ltrace.minor/trace-exec.exp
index 99145f5..9751c58 100644
--- a/testsuite/ltrace.minor/trace-exec.exp
+++ b/testsuite/ltrace.minor/trace-exec.exp
@@ -12,18 +12,8 @@ if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}1.c" "${objdir}/${subdir}
send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
}
-global LTRACE
-set exec_output ""
-
-#Run PUT for ltrace.
-spawn $LTRACE $objdir/$subdir/$testfile $objdir/$subdir/${testfile}1
-set timeout 4
-expect timeout {
- fail "Time out! Maybe caused by ltrace segment fault or improper timeout value here!"
- return
-}
-
-catch "exec $LTRACE $objdir/$subdir/$testfile $objdir/$subdir/${testfile}1" exec_output
+ltrace_args "$objdir/$subdir/${testfile}1"
+set exec_output [ltrace_runtest $objdir/$subdir $objdir/$subdir/$testfile]
#check the output of this program.
verbose "ltrace runtest output: $exec_output\n"
@@ -35,11 +25,12 @@ if [regexp {ELF from incompatible architecture} $exec_output] {
return
}
-ltrace_saveoutput "${exec_output}" ${objdir}/${subdir}/${testfile}.ltrace
-
# execl from first binary
-ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace {"^execl"} 1
+set pattern {^[0-9]* execl}
+ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
# puts from second binary
-ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace {"^puts"} 1
+set pattern {^[0-9]* puts}
+ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
# assume glibc and see we really trace both binaries
-ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace {"^__libc_start_main"} 2
+set pattern {^[0-9]* __libc_start_main}
+ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 2
diff --git a/testsuite/ltrace.minor/trace-fork.exp b/testsuite/ltrace.minor/trace-fork.exp
index 29a7cff..70815f5 100644
--- a/testsuite/ltrace.minor/trace-fork.exp
+++ b/testsuite/ltrace.minor/trace-fork.exp
@@ -10,18 +10,9 @@ verbose "compiling source file now....."
if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${objdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
}
-global LTRACE
-set exec_output ""
-
-#Run PUT for ltrace.
-spawn $LTRACE -f $objdir/$subdir/$binfile
-set timeout 4
-expect timeout {
- fail "Time out! Maybe caused by ltrace segment fault or improper timeout value here!"
- return
-}
-catch "exec $LTRACE -f $objdir/$subdir/$binfile" exec_output
+ltrace_options "-f"
+set exec_output [ltrace_runtest $objdir/$subdir $objdir/$subdir/$binfile]
#check the output of this program.
verbose "ltrace runtest output: $exec_output\n"
@@ -33,24 +24,22 @@ if [regexp {ELF from incompatible architecture} $exec_output] {
return
}
-ltrace_saveoutput "${exec_output}" ${objdir}/${subdir}/${testfile}.ltrace
-
if [ regexp {Cannot attach} $exec_output ] {
fail "Couldn't attach to forked process!"
return
}
-set pattern {^\[pid [0-9]*\] fork}
+set pattern {^[0-9]* fork}
ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
-set pattern {^\[pid [0-9]*\] printf}
+set pattern {^[0-9]* printf}
ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
-set pattern {^\[pid [0-9]*\] puts}
+set pattern {^[0-9]* puts}
ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
-set pattern {^\[pid [0-9]*\] wait}
+set pattern {^[0-9]* wait}
ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
-set pattern {^\[pid [0-9]*\] sleep}
+set pattern {^[0-9]* sleep}
ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1