Done with debugging. Script didn't work because of low limit on open
files on the bot.
This reverts commit 220293da53.
55 lines
1.5 KiB
Bash
Executable File
55 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Script that prints information about generated code in TSan runtime.
|
|
|
|
set -e
|
|
set -u
|
|
|
|
if [[ "$#" != 1 ]]; then
|
|
echo "Usage: $0 /path/to/binary/built/with/tsan"
|
|
exit 1
|
|
fi
|
|
|
|
get_asm() {
|
|
grep __tsan_$1.: -A 10000 ${OBJDUMP_CONTENTS} | \
|
|
awk "/[^:]$/ {print;} />:/ {c++; if (c == 2) {exit}}"
|
|
}
|
|
|
|
list="write1 \
|
|
write2 \
|
|
write4 \
|
|
write8 \
|
|
read1 \
|
|
read2 \
|
|
read4 \
|
|
read8 \
|
|
func_entry \
|
|
func_exit"
|
|
|
|
BIN=$1
|
|
OUTPUT_DIR=$(mktemp -t -d analyze_libtsan_out.XXXXXXXX)
|
|
OBJDUMP_CONTENTS=${OUTPUT_DIR}/libtsan_objdump
|
|
NM_CONTENTS=${OUTPUT_DIR}/libtsan_nm
|
|
|
|
objdump -d $BIN > ${OBJDUMP_CONTENTS}
|
|
nm -S $BIN | grep "__tsan_" > ${NM_CONTENTS}
|
|
|
|
for f in $list; do
|
|
file=${OUTPUT_DIR}/asm_$f.s
|
|
get_asm $f > $file
|
|
tot=$(wc -l < $file)
|
|
size=$(grep __tsan_$f$ ${NM_CONTENTS} | awk --non-decimal-data '{print ("0x"$2)+0}')
|
|
rsp=$(grep '(%rsp)' $file | wc -l)
|
|
push=$(grep 'push' $file | wc -l)
|
|
pop=$(grep 'pop' $file | wc -l)
|
|
call=$(grep 'call' $file | wc -l)
|
|
load=$(egrep 'mov .*\,.*\(.*\)|cmp .*\,.*\(.*\)' $file | wc -l)
|
|
store=$(egrep 'mov .*\(.*\),' $file | wc -l)
|
|
mov=$(grep 'mov' $file | wc -l)
|
|
lea=$(grep 'lea' $file | wc -l)
|
|
sh=$(grep 'shr\|shl' $file | wc -l)
|
|
cmp=$(grep 'cmp\|test' $file | wc -l)
|
|
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" \
|
|
$f $tot $size $rsp $push $pop $call $load $store $sh $mov $lea $cmp;
|
|
done
|