2023-05-06 23:26:00 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
MSPDEBUG="$1"
|
|
|
|
MSPDEBUG_PROGRAMMER="$2"
|
|
|
|
PROTOCOL="$3"
|
|
|
|
MSPDEBUG_TTY="$4"
|
|
|
|
DEBUG_ADAPTER_ID="$5"
|
2024-02-06 15:23:02 +01:00
|
|
|
DEBUG_TARGET_ID="$6"
|
|
|
|
GDBPORT="$7"
|
|
|
|
ELFFILE="$8"
|
|
|
|
PREFIX="$9"
|
|
|
|
RIOTBASE="$10"
|
2023-05-06 23:26:00 +02:00
|
|
|
|
|
|
|
# The setsid command is needed so that Ctrl+C in GDB doesn't kill mspdebug
|
|
|
|
: "${SETSID:=setsid}"
|
|
|
|
|
|
|
|
if "${PREFIX}-gdb" -v > /dev/null 2>&1; then
|
|
|
|
GDB="${PREFIX}-gdb"
|
|
|
|
elif gdb-multiarch -v > /dev/null 2>&1; then
|
|
|
|
GDB=gdb-multiarch
|
|
|
|
else
|
|
|
|
echo "Couldn't find GDB (tried ${PREFIX}-gdb and gdb-multiarch). Check \$PATH."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "${MSPDEBUG_PROGRAMMER}" ]; then
|
|
|
|
echo "MSPDEBUG_PROGRAMMER unset, cannot use mspdebug"
|
|
|
|
fi
|
|
|
|
|
|
|
|
sleep 2
|
|
|
|
args=()
|
2024-02-06 15:23:02 +01:00
|
|
|
args+=("--expect-id" "$DEBUG_TARGET_ID")
|
2023-05-06 23:26:00 +02:00
|
|
|
if [ "JTAG" = "${PROTOCOL}" ]; then
|
|
|
|
args+=("-j")
|
|
|
|
elif [ "Spy-Bi-Wire" != "${PROTOCOL}" ]; then
|
|
|
|
echo "Debugger protocol \"${PROTOCOL}\" not supported, use JTAG or Spy-Bi-Wire"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
args+=("${MSPDEBUG_PROGRAMMER}")
|
|
|
|
if [ -n "${DEBUG_ADAPTER_ID}" ]; then
|
|
|
|
args+=("s" "{$DEBUG_ADAPTER_ID}")
|
|
|
|
fi
|
|
|
|
if [ -n "${MSPDEBUG_TTY}" ]; then
|
|
|
|
args+=("-d" "${MSPDEBUG_TTY}")
|
|
|
|
fi
|
|
|
|
args+=("gdb ${GDBPORT}")
|
|
|
|
|
|
|
|
${SETSID} -w "${MSPDEBUG}" "${args[@]}" > /dev/null 2>&1 &
|
|
|
|
echo "Please wait..."
|
|
|
|
|
|
|
|
sleep 3
|
|
|
|
exec "$GDB" \
|
|
|
|
-ex "target remote localhost:${GDBPORT}" \
|
|
|
|
-ex "monitor reset halt" "$ELFFILE" \
|
|
|
|
-ex "set substitute-path /data/riotbuild/riotbase $RIOTBASE"
|