tools/mksymtab.sh: Support adding additional symbols that are not in undefined list

e.g. For CHRE dynamic nanoapps, pre-saving symbols that may be used later, no need recompiling.

Test: (unique & sorted)
    $ nm ./hello_world.o | grep " U "
             U __aeabi_unwind_cpp_pr1
             U chreGetTime
             U chreGetVersion
             U chreLog
             U __stack_chk_fail
             U __stack_chk_guard

    $ cat additional.txt -n
         1  test_symbol
         2  test_symbol

    $ /PATH/TO/APPS/tools/mksymtab.sh ./hello_world.o MY_PREFIX -a additional.txt
    #include <nuttx/compiler.h>
    #include <nuttx/symtab.h>

    extern void *__aeabi_unwind_cpp_pr1;
    extern void *__stack_chk_fail;
    extern void *__stack_chk_guard;
    extern void *chreGetTime;
    extern void *chreGetVersion;
    extern void *chreLog;
    extern void *test_symbol;

    const struct symtab_s MY_PREFIX_exports[] =
    {
      {"__aeabi_unwind_cpp_pr1", &__aeabi_unwind_cpp_pr1},
      {"__stack_chk_fail", &__stack_chk_fail},
      {"__stack_chk_guard", &__stack_chk_guard},
      {"chreGetTime", &chreGetTime},
      {"chreGetVersion", &chreGetVersion},
      {"chreLog", &chreLog},
      {"test_symbol", &test_symbol},
    };

    const int MY_PREFIX_nexports = sizeof(MY_PREFIX_exports) / sizeof(struct symtab_s);

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
This commit is contained in:
wangjianyu3 2024-03-27 11:04:45 +08:00 committed by Xiang Xiao
parent da83fa8ab2
commit 7f7ff8c7d4

View File

@ -21,7 +21,7 @@
export LC_ALL=C
usage="Usage: $0 <imagedirpath> [symtabprefix]"
usage="Usage: $0 <imagedirpath> [symtabprefix [additionalsymbolspath]]"
# Check for the required directory path
@ -36,6 +36,7 @@ fi
# Get the symbol table prefix
prefix=$2
add_sym=$3
# Extract all of the undefined symbols from the ELF files and create a
# list of sorted, unique undefined variable names.
@ -59,6 +60,18 @@ if [ -z "$varlist" ]; then
fi
fi
if [ "x$add_sym" != "x" ]; then
if [ -f $add_sym ]; then
varlist="${varlist}\n$(cat $add_sym)"
elif [ -d $add_sym ]; then
varlist="${varlist}\n$(find $add_sym -type f | xargs cat)"
else
echo $usage
exit 1
fi
varlist=$(echo -e "${varlist}" | sort -u)
fi
# 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