1 #!/usr/bin/ksh 2 # 3 # This file and its contents are supplied under the terms of the 4 # Common Development and Distribution License ("CDDL"), version 1.0. 5 # You may only use this file in accordance with the terms of version 6 # 1.0 of the CDDL. 7 # 8 # A full copy of the text of the CDDL should have accompanied this 9 # source. A copy of the CDDL is also available via the Internet at 10 # http://www.illumos.org/license/CDDL. 11 # 12 # Copyright (c) 2019, Joyent, Inc. 13 # 14 15 set -e 16 17 result=0 18 19 progname=$(basename $0) 20 21 fail() 22 { 23 echo "Failed: $*" 2>&1 24 result=1 25 } 26 27 fail_non_c() 28 { 29 cmd="$@" 30 set +e 31 out=$($ctf_convert $cmd 2>&1) 32 33 if [[ $? -eq 0 ]]; then 34 fail "$cmd succeeded but should have failed" 35 set -e 36 return; 37 fi 38 39 set -e 40 41 if ! echo "$out" | \ 42 grep "No C source to convert from" >/dev/null; then 43 fail "$cmd: incorrect output $out" 44 return; 45 fi 46 } 47 48 no_ctf() 49 { 50 for f in "$@"; do 51 if elfdump -c -N .SUNW_ctf "$f" | 52 grep '.SUNW_ctf' >/dev/null; then 53 fail "$f has CTF section" 54 return 55 fi 56 done 57 } 58 59 cat <<EOF >file1.c 60 #include <stdio.h> 61 struct foo { int a; }; 62 int main(void) { struct foo foo = { 4 }; printf("%d\n", foo.a); } 63 EOF 64 65 cat <<EOF >file2.cc 66 struct bar { char *tar; }; 67 void mycxxfunc(char *c) { c[0] = '9'; }; 68 EOF 69 70 cat <<EOF >file3.s 71 .globl caller 72 .type caller,@function 73 caller: 74 movl 4(%ebp), %eax 75 ret 76 EOF 77 78 echo "$progname: ctfconvert should fail on a .cc-derived object" 79 $ctf_cxx -c -o file2.o file2.cc 80 fail_non_c file2.o 81 $ctf_cxx -c -o file2.o file2.cc 82 $ctf_convert -i file2.o 83 84 echo "$progname: ctfconvert shouldn't process .cc-derived DWARF" 85 $ctf_cc $DEBUGFLAGS -c -o file2.o file2.cc 86 $ctf_convert -i file2.o 87 no_ctf file2.o 88 89 echo "$progname: ctfconvert should fail on a .s-derived object" 90 $ctf_as -o file3.o file3.s 91 fail_non_c file3.o 92 $ctf_as -o file3.o file3.s 93 $ctf_convert -i file3.o 94 no_ctf file3.o 95 96 echo "result is $result" 97 exit $result