#!/bin/bash

USAGE="$0 output_dir nb_tests
You may also set COMPILE_CMD to eg. 'gcc -O2' if you want to override the
default command."

if [ -z "$COMPILE_CMD" ] ; then
    COMPILE_CMD='gcc -O2'
fi

if [ "$#" -lt 2 ] ; then
    >&2 echo -e "Missing argument(s). Usage:\n$USAGE"
    exit 1
fi

DIR=$1
NB_TESTS=$2
shift ; shift

check_gen_eh_frame=0
while [ "$#" -gt 0 ]; do
    if [ "$1" = "--check-gen-eh-frame" ] ; then
        check_gen_eh_frame=1
    fi
    shift
done

mkdir -p "$DIR"
echo -n ">>>          "
for _num in $(seq 1 $NB_TESTS); do
    num=$(printf "%02d" $_num)
    echo -ne "\r>>> $num.c          "
    path="$DIR/$num"
    csmith > "$path.c"
    sed -i 's/^static \(.* func_\)/\1/g' "$path.c"
    echo -ne "\r>>> $num.bin          "
    $COMPILE_CMD -I/usr/include/csmith-2.3.0/ -w "$path.c" -o "$path.orig.bin"
    objcopy --remove-section '.eh_frame' --remove-section '.eh_frame_hdr' \
        "$path.orig.bin" "$path.bin"
    echo -ne "\r>>> $num.eh.bin          "
    BAP_ARGS='--dwarfsynth-no-rbp-undef' ../synthesize_dwarf.sh "$path.bin" "$path.eh.bin"

    if [ "$check_gen_eh_frame" -gt 0 ] ; then
        ./check_generated_eh_frame.sh "$path"
    fi
done

echo ""
