198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam# This file was written by Yao Qi <qiyao@cn.ibm.com>.
298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamset testfile "print-instruction-pointer"
498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamset srcfile ${testfile}.c
598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamset binfile ${testfile}
698d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamverbose "compiling source file now....."
998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam# Build the shared libraries this test case needs.
104627fc493db8459e6ef0597a4155a06b7d120d20Zachary T Welchif { [ltrace_compile "${srcdir}/${subdir}/${srcfile}" "${objdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
1198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam     send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
1298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam}
1398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
1498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam# set options for ltrace.
1598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamltrace_options "-i"
16aee093126654f722523b47848a0c5449e39cf4bbJuan Cespedes# Run PUT for ltrace.
174627fc493db8459e6ef0597a4155a06b7d120d20Zachary T Welchset exec_output [ltrace_runtest $objdir/$subdir $objdir/$subdir/$binfile]
1898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
1998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam# Check the output of this program.
2098d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamverbose "ltrace runtest output: $exec_output\n"
2198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamif [regexp {ELF from incompatible architecture} $exec_output] {
2298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam	fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
2398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam	return
2498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
2598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam	fail "Couldn't get .hash data!"
2698d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam	return
2798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam}
2898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
2998d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam# Get the addrss by objdump and sed.
304627fc493db8459e6ef0597a4155a06b7d120d20Zachary T Welchcatch "exec sh -c {objdump -d $objdir/$subdir/$binfile | sed -n '/^\[0-9a-fA-F\]\[0-9a-fA-F\]* <main>/,/^\[0-9a-fA-F\]\[0-9a-fA-F\]* </p'| grep -A 1 'call\\|bl' }" output
3198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam#verbose "output=$output"
3298d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamcatch "exec sh -c {echo \"$output\" | sed -n '2p'| awk -F' ' '{print \$1}'|awk -F: '{print \$1}'}" addr1
3398d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamcatch "exec sh -c {echo \"$output\" | sed -n '5p'| awk -F' ' '{print \$1}'|awk -F: '{print \$1}'}" addr2
3498d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
3598d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamverbose "addr1 = $addr1"
3698d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamverbose "addr2 = $addr2"
3798d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam# Verify the output by checking numbers of print in main.ltrace.
3898d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamset pattern "$addr1.*printf"
394627fc493db8459e6ef0597a4155a06b7d120d20Zachary T Welchltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
4098d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliam
4198d884bfd78ea7a37f46515c6e9e3635a95d8cbcPaul Gilliamset pattern "$addr2.*printf"
424627fc493db8459e6ef0597a4155a06b7d120d20Zachary T Welchltrace_verify_output ${objdir}/${subdir}/${testfile}.ltrace $pattern 1
43