#! /bin/sh

if command -v gdb-multiarch &> /dev/null
then
	GDB_CMD=$(command -v gdb-multiarch)

elif command -v arm-none-eabi-gdb &> /dev/null
then
	GDB_CMD=$(command -v arm-none-eabi-gdb)

else
	echo "gdb arm-none-eabi or multi-arch not found"
	exit 1
fi

file ${1}

gdb_cmd_file=$(mktemp)

cat >"${gdb_cmd_file}" <<EOL
target remote localhost:2331
monitor reset 0
load
monitor reset 0
monitor go
EOL

for i in 1 2 3;
do
	${GDB_CMD} -silent --nh --nx --nw -batch -x ${gdb_cmd_file} ${1}
	gdb_ret=$?

	if [ $gdb_ret -ne 0 ]; then
		echo "GDB error, retrying"
		killall JLinkGDBServerCLExe
		sleep 5
	else
		exit 0
	fi
done

exit 1