#!/usr/bin/env bash usage="Usage: $0 " # Check for the required ROMFS directory path dir=$1 if [ -z "$dir" ]; then echo "ERROR: Missing " 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} -type f -perm -a=x | 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 " echo "#include " echo "" for var in $varlist; do echo "extern void *${var};" done echo "" echo "const struct symtab_s g_elf_exports[] = " echo "{" for var in $varlist; do echo " {\"${var}\", &${var}}," done echo "};" echo "" echo "const int g_elf_nexports = sizeof(g_elf_exports) / sizeof(struct symtab_s);"