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