build: generate symbols file

Optional way for generating symbols file using binutils. This file will
be generated on demand for tests which will then be parsed by twister to
create an accurate test plan from the listed testcase/suites.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2022-06-27 10:08:37 -04:00 committed by Carles Cufí
commit 47a673f2f4
6 changed files with 55 additions and 0 deletions

View file

@ -1642,6 +1642,21 @@ if(CONFIG_OUTPUT_DISASSEMBLE_ALL)
)
endif()
if(CONFIG_OUTPUT_SYMBOLS)
list(APPEND
post_build_commands
COMMAND $<TARGET_PROPERTY:bintools,symbols_command>
$<TARGET_PROPERTY:bintools,symbols_flag>
$<TARGET_PROPERTY:bintools,symbols_infile>${KERNEL_ELF_NAME}
$<TARGET_PROPERTY:bintools,symbols_outfile>${KERNEL_SYMBOLS_NAME}
$<TARGET_PROPERTY:bintools,symbols_final>
)
list(APPEND
post_build_byproducts
${KERNEL_SYMBOLS_NAME}
)
endif()
if(CONFIG_OUTPUT_STAT)
# zephyr_post_build(TOOLS bintools COMMAND readelf FLAGS headers INFILE file OUTFILE outfile)
list(APPEND

View file

@ -377,6 +377,11 @@ config OUTPUT_STAT
help
Create a stat file using readelf -e <elf>
config OUTPUT_SYMBOLS
bool "Create a symbol file"
help
Create a symbol file using nm <elf>
config OUTPUT_DISASSEMBLY
bool "Create a disassembly file"
default y

View file

@ -11,6 +11,7 @@
# - elfconvert : Tool for converting from elf into another format.
# - readelf : Tool for elf file processing
# - strip : Tool for symbol stripping
# - symbols : Tool for listing symbols in a binary
#
# Each tool will have the following minimum properties:
# - <tool>_command : Name of executable to call
@ -108,6 +109,13 @@
# strip_flag_dwo : Flag for removing dwarf sections
# strip_flag_infile : Flag for specifying the input file
# strip_flag_outfile : Flag for specifying the output file
#
# - symbols : Name of command for printing out symbols
# For GNU binary utilities this is nm
# symbols_command : empty
# symbols_final : empty
# symbols_infile : ELF file name
# symbols_outfile : output file
set(COMMAND_NOT_SUPPORTED "command not supported on bintools: ")
@ -156,3 +164,10 @@ set_property(TARGET bintools PROPERTY strip_flag_debug "")
set_property(TARGET bintools PROPERTY strip_flag_dwo "")
set_property(TARGET bintools PROPERTY strip_flag_infile "")
set_property(TARGET bintools PROPERTY strip_flag_outfile "")
# list symbols in a binary
set_property(TARGET bintools PROPERTY symbols_command ${CMAKE_NM})
set_property(TARGET bintools PROPERTY symbols_flag "")
set_property(TARGET bintools PROPERTY symbols_final "")
set_property(TARGET bintools PROPERTY symbols_infile "")
set_property(TARGET bintools PROPERTY symbols_outfile ">;" )

View file

@ -124,3 +124,10 @@ set_property(TARGET bintools PROPERTY readelf_flag_outfile ">;" )
#set_property(TARGET bintools PROPERTY readelf_flag_headers -E)
#set_property(TARGET bintools PROPERTY readelf_flag_infile "")
#set_property(TARGET bintools PROPERTY readelf_flag_outfile "-O file=" )
set_property(TARGET bintools PROPERTY symbols_command ${CMAKE_NM})
set_property(TARGET bintools PROPERTY symbols_flag "")
set_property(TARGET bintools PROPERTY symbols_final "")
set_property(TARGET bintools PROPERTY symbols_infile "")
set_property(TARGET bintools PROPERTY symbols_outfile ">;" )

View file

@ -70,6 +70,18 @@ set_property(TARGET bintools PROPERTY disassembly_flag_all "")
set_property(TARGET bintools PROPERTY disassembly_flag_infile "")
set_property(TARGET bintools PROPERTY disassembly_flag_outfile ">;" )
#
# - symbols : Name of command for printing out symbols
# symbols_command : empty
# symbols_final : empty
# symbols_infile : ELF file name
# symbols_outfile : output file
set_property(TARGET bintools PROPERTY symbols_command ${CMAKE_NM})
set_property(TARGET bintools PROPERTY symbols_flag "")
set_property(TARGET bintools PROPERTY symbols_final "")
set_property(TARGET bintools PROPERTY symbols_infile "")
set_property(TARGET bintools PROPERTY symbols_outfile ">;" )
#
# - strip: Name of command for stripping symbols
# In this implementation `strip` is used

View file

@ -162,6 +162,7 @@ set(KERNEL_EXE_NAME ${KERNEL_NAME}.exe)
set(KERNEL_STAT_NAME ${KERNEL_NAME}.stat)
set(KERNEL_STRIP_NAME ${KERNEL_NAME}.strip)
set(KERNEL_META_NAME ${KERNEL_NAME}.meta)
set(KERNEL_SYMBOLS_NAME ${KERNEL_NAME}.symbols)
include(${BOARD_DIR}/board.cmake OPTIONAL)