1 1.1 kamil #!/bin/bash 2 1.1 kamil # 3 1.1 kamil # Script that prints information about generated code in TSan runtime. 4 1.1 kamil 5 1.1 kamil set -e 6 1.1 kamil set -u 7 1.1 kamil 8 1.1 kamil if [[ "$#" != 1 ]]; then 9 1.1 kamil echo "Usage: $0 /path/to/binary/built/with/tsan" 10 1.1 kamil exit 1 11 1.1 kamil fi 12 1.1 kamil 13 1.1 kamil get_asm() { 14 1.1 kamil grep __tsan_$1.: -A 10000 ${OBJDUMP_CONTENTS} | \ 15 1.1 kamil awk "/[^:]$/ {print;} />:/ {c++; if (c == 2) {exit}}" 16 1.1 kamil } 17 1.1 kamil 18 1.1 kamil list="write1 \ 19 1.1 kamil write2 \ 20 1.1 kamil write4 \ 21 1.1 kamil write8 \ 22 1.1 kamil read1 \ 23 1.1 kamil read2 \ 24 1.1 kamil read4 \ 25 1.1 kamil read8 \ 26 1.1 kamil func_entry \ 27 1.1 kamil func_exit" 28 1.1 kamil 29 1.1 kamil BIN=$1 30 1.1 kamil OUTPUT_DIR=$(mktemp -t -d analyze_libtsan_out.XXXXXXXX) 31 1.1 kamil OBJDUMP_CONTENTS=${OUTPUT_DIR}/libtsan_objdump 32 1.1 kamil NM_CONTENTS=${OUTPUT_DIR}/libtsan_nm 33 1.1 kamil 34 1.1 kamil objdump -d $BIN > ${OBJDUMP_CONTENTS} 35 1.1 kamil nm -S $BIN | grep "__tsan_" > ${NM_CONTENTS} 36 1.1 kamil 37 1.1 kamil for f in $list; do 38 1.1 kamil file=${OUTPUT_DIR}/asm_$f.s 39 1.1 kamil get_asm $f > $file 40 1.1 kamil tot=$(wc -l < $file) 41 1.1 kamil size=$(grep __tsan_$f$ ${NM_CONTENTS} | awk --non-decimal-data '{print ("0x"$2)+0}') 42 1.1 kamil rsp=$(grep '(%rsp)' $file | wc -l) 43 1.1 kamil push=$(grep 'push' $file | wc -l) 44 1.1 kamil pop=$(grep 'pop' $file | wc -l) 45 1.1 kamil call=$(grep 'call' $file | wc -l) 46 1.1 kamil load=$(egrep 'mov .*\,.*\(.*\)|cmp .*\,.*\(.*\)' $file | wc -l) 47 1.1 kamil store=$(egrep 'mov .*\(.*\),' $file | wc -l) 48 1.1 kamil mov=$(grep 'mov' $file | wc -l) 49 1.1 kamil lea=$(grep 'lea' $file | wc -l) 50 1.1 kamil sh=$(grep 'shr\|shl' $file | wc -l) 51 1.1 kamil cmp=$(grep 'cmp\|test' $file | wc -l) 52 1.1 kamil printf "%10s tot %3d; size %4d; rsp %d; push %d; pop %d; call %d; load %2d; store %2d; sh %3d; mov %3d; lea %3d; cmp %3d\n" \ 53 1.1 kamil $f $tot $size $rsp $push $pop $call $load $store $sh $mov $lea $cmp; 54 1.1 kamil done 55