blob: be8d685cfb223ffafd9b0744454a6ce796de30c0 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
# SPDX-License-Identifier: MIT
###############################################################
# Function: Generate symbol table and rebuild image.
###############################################################
STACK_TRACE_CONFIG_STR='CONFIG_STACK_TRACE=y'
STACK_TRACE_CONFIG_GEN='CONFIG_STACK_TRACE_SYM=y'
STACK_TRACE_EXPAND_CONFIG_STR='CONFIG_STACK_TRACE_EXPAND=y'
STACK_TRACE_KCONFIG_STR='\nconfig STACK_TRACE_SYM\n\tbool "stackmark"'
STACK_TRACE_CMAKE_FILE=${SDK_BASE}/libs/stack_trace/CMakeLists.txt
STACK_TRACE_CONFIG_FILE=${SDK_BASE}/products/${PRODUCT}/prj.conf
STACK_TRACE_KCONFIG_FILE=${SDK_BASE}/libs/stack_trace/Kconfig
STACK_TRACE_PROJECT_OUT_FILE=${kernel_BUILD_DIR}/.config
STACK_TRACE_BUILD_ELF_IMAGE_FILE=${kernel_BUILD_DIR}/freertos.elf
#generate symbol table and rebuild
rebuild_back_trace_image() {
make -f ${SDK_BASE}/build/symtable.mk backtrace
touch ${STACK_TRACE_CMAKE_FILE}
echo -en ${STACK_TRACE_KCONFIG_STR} >>$STACK_TRACE_KCONFIG_FILE
sed -i '/'${STACK_TRACE_CONFIG_STR}'/a '${STACK_TRACE_CONFIG_GEN}'' ${STACK_TRACE_CONFIG_FILE}
make -f ${SDK_BASE}/Makefile
sed -i '/^'${STACK_TRACE_CONFIG_GEN}'/d' ${STACK_TRACE_CONFIG_FILE}
sed -i '/config STACK_TRACE_SYM/,'/stackmark'/d' $STACK_TRACE_KCONFIG_FILE
truncate -s -1 $STACK_TRACE_KCONFIG_FILE
rm ${SDK_BASE}/libs/stack_trace/system_map_addr.c ${SDK_BASE}/libs/stack_trace/system_map_sym.c
}
#elf file validity judgment
elf_file_validity_judgment() {
currentTime=$(date +%s)
elfFileTime=$(stat -c %Y $STACK_TRACE_BUILD_ELF_IMAGE_FILE)
diffTime=$(expr $currentTime - $elfFileTime)
if [ $diffTime -lt 2 ]; then
echo "ready rebuild ${BOARD}-${PRODUCT} image"
rebuild_back_trace_image
fi
}
# #check need to recompile
if [ $(grep -c "$STACK_TRACE_EXPAND_CONFIG_STR" $STACK_TRACE_PROJECT_OUT_FILE) -ne '0' ] &&
[ $(grep -c "$STACK_TRACE_CONFIG_GEN" $STACK_TRACE_CONFIG_FILE) -eq '0' ] &&
[ -f "$STACK_TRACE_BUILD_ELF_IMAGE_FILE" ]; then
elf_file_validity_judgment
exit 0
fi