forked from Archive/PX4-Autopilot
68 lines
1.3 KiB
Bash
Executable File
68 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
usage="Usage: $0 [-t <tmp-file>] <test-dir-path>"
|
|
|
|
# Check for the optional tempory file name
|
|
|
|
tmpfile=varlist.tmp
|
|
if [ "X${1}" = "X-t" ]; then
|
|
shift
|
|
tmpfile=$1
|
|
shift
|
|
|
|
if [ -z "$tmpfile" ]; then
|
|
echo "ERROR: Missing <tmpfile>"
|
|
echo ""
|
|
echo $usage
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Check for the required ROMFS directory path
|
|
|
|
dir=$1
|
|
if [ -z "$dir" ]; then
|
|
echo "ERROR: Missing <test-dir-path>"
|
|
echo ""
|
|
echo $usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$dir" ]; then
|
|
echo "ERROR: Directory $dir does not exist"
|
|
echo ""
|
|
echo $usage
|
|
exit 1
|
|
fi
|
|
|
|
# Extract all of the undefined symbols from the ELF files and create a
|
|
# list of sorted, unique undefined variable names.
|
|
|
|
varlist=`find ${dir} -executable -type f | xargs nm | fgrep ' U ' | sed -e "s/^[ ]*//g" | cut -d' ' -f2 | sort | uniq`
|
|
|
|
# Now output the symbol table as a structure in a C source file. All
|
|
# undefined symbols are declared as void* types. If the toolchain does
|
|
# any kind of checking for function vs. data objects, then this could
|
|
# faile
|
|
|
|
echo "#include <nuttx/compiler.h>"
|
|
echo "#include <nuttx/binfmt/symtab.h>"
|
|
echo ""
|
|
|
|
for var in $varlist; do
|
|
echo "extern void *${var};"
|
|
done
|
|
|
|
echo ""
|
|
echo "const struct symtab_s exports[] = "
|
|
echo "{"
|
|
|
|
for var in $varlist; do
|
|
echo " {\"${var}\", &${var}},"
|
|
done
|
|
|
|
echo "};"
|
|
echo ""
|
|
echo "const int nexports = sizeof(exports) / sizeof(struct symtab_s);"
|
|
|