#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later

# Simple script to disassemble a file .inc generated by
# src/helper/bin2char.sh
# Can be useful to check the correctness of the file .inc
#
# By default it decodes ARM thumb little-endian, e.g. cortex-m.
# Set CROSS_COMPILE for other toolchains.
# Set OBJDUMP_FLAGS for different objdump flags.
#
# Usage:
#   contrib/loaders/disassemble_inc.sh file.inc

default_CROSS_COMPILE="arm-none-eabi-"
default_OBJDUMP_FLAGS="-m arm -EL -M force-thumb"

if [ $# != 1 -o ! -f "$1" ]; then
	echo "Usage:"
	echo "    $0 path/to/file.inc"
	echo ""
	echo "Set CROSS_COMPILE and/or OBJDUMP_FLAGS to override current default:"
	echo "    export CROSS_COMPILE=\"${default_CROSS_COMPILE}\""
	echo "    export OBJDUMP_FLAGS=\"${default_OBJDUMP_FLAGS}\""
	exit 1
fi

if [ -z "${CROSS_COMPILE}" ]; then
	CROSS_COMPILE="${default_CROSS_COMPILE}"
fi

if [ -z "${OBJDUMP_FLAGS}" ]; then
	OBJDUMP_FLAGS="${default_OBJDUMP_FLAGS}"
fi

perl -v > /dev/null 2>&1
if [ $? != 0 ]; then
	echo "Error: 'perl' interpreter not available."
	exit 1
fi

tmpfile=$(mktemp --suffix=.bin)

echo "Disassemble $1:"
echo "${CROSS_COMPILE}objdump ${OBJDUMP_FLAGS} -b binary -D ${tmpfile}"

perl -e 'while (<>){while ($_=~/(0x..)/g){print chr(hex($1));}}' $1 > ${tmpfile}
${CROSS_COMPILE}objdump ${OBJDUMP_FLAGS} -b binary -D ${tmpfile}

rm ${tmpfile}