#!/usr/bin/env bash

MAKECONF="${OBJ_BASE}/source/tool/bin/makeconf"

source <("$MAKECONF" "$OBJ_BASE" FVP_PATH FVP_OPTIONS)

if [[ -z "$TARGET_IMAGE" ]]; then
    export TARGET_IMAGE="$(mktemp --tmpdir "bootstrap-qemu-XXXXXXXXXX.elf")"
    trap 'rm $TARGET_IMAGE' EXIT
fi

"$(dirname $0)/elfimage" || exit $?

declare optlist=( $MAKECONF_FVP_OPTIONS "-a" "cluster0*=$TARGET_IMAGE" )

if [[ -n "$COVERAGE_DUMP_FILE" ]]; then
    if [[ -z "$COVERAGE_MEMBUF_START" ||
          -z "$COVERAGE_MEMBUF_SIZE" ]]; then
        echo "Please set the environment variables COVERAGE_MEMBUF_START and COVERAGE_MEMBUF_SIZE according to the values specified in the Kernel" >&2
        exit 1
    fi

    optlist+=(
        # Where to dump what
        "--dump" "cluster0.cpu0=${COVERAGE_DUMP_FILE}@${COVERAGE_MEMBUF_START},${COVERAGE_MEMBUF_SIZE}"

        # Triggers exit and thus dumping on shutdown
        "-C" "bp.ve_sysregs.exit_on_shutdown=1"
    )
fi

echo "FVP executable: $MAKECONF_FVP_PATH"

echo -n "FVP options:"
printf " '%s'" "${optlist[@]}"

echo "FVP --version:"
:| "$MAKECONF_FVP_PATH" --version
echo; echo;

# We need to override the stdout buffering, otherwise tap-wrapper won't see
# the last couple of lines.
stdbuf -o0 "$MAKECONF_FVP_PATH" "${optlist[@]}"
