# This file was written by Yao Qi <qiyao@cn.ibm.com>.

set testfile "main-threaded"
set srcfile ${testfile}.c
set binfile ${testfile}
set libfile "main-lib"
set libsrc $srcdir/$subdir/$libfile.c
set lib_sl $objdir/$subdir/lib$testfile.so


if [get_compiler_info $binfile] {
  return -1
}

verbose "compiling source file now....."
if { [ltrace_compile_shlib $libsrc $lib_sl debug ] != "" 
  || [ltrace_compile $srcdir/$subdir/$srcfile $objdir/$subdir/$binfile executable [list debug shlib=$lib_sl ldflags=-pthread] ] != ""} {
  send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
}

# set options for ltrace.
ltrace_options "-l" "lib$testfile.so" "-f"

# Run PUT for ltarce.
set exec_output [ltrace_runtest $objdir/$subdir $objdir/$subdir/$binfile]

# Check the output of this program.
verbose "ltrace runtest output: $exec_output\n"
if [regexp {ELF from incompatible architecture} $exec_output] {
	fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
	return 
} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
	fail "Couldn't get .hash data!"
	return
}

# Verify the output by checking numbers of print in main-threaded.ltrace.
set pattern "print"
ltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 30
