Ftrace¶
This section describes how to generate function call graph for user Trusted
Applications using ftrace.
The configuration option CFG_TA_FTRACE_SUPPORT=y enables OP-TEE to collect
function graph information from Trusted Applications running in user mode and
compiled with -pg. Once collected, the function graph data is formatted
in the ftrace.out format and sent to tee-supplicant via RPC, so they
can be saved to disk, later processed and displayed using helper script called
symbolize.py present as part of optee_os repo.
Usage¶
- Build OP-TEE OS and OP-TEE Client with
CFG_TA_FTRACE_SUPPORT=y. You may also setCFG_ULIBS_MCOUNT=yin OP-TEE OS to instrument the user TA libraries (libutee, libutils, libmpa).- Build user TAs with
-pg, for instance enableCFG_TA_MCOUNT=yto instrument whole TA. Also, in case user wants to set-pgfor a particular file, following should go in corresponding sub.mk:cflags-<file-name>-y+=-pg. Note that instrumented TAs have a larger.bsssection. The memory overhead depends onCFG_FTRACE_BUF_SIZEmacro which can be configured specific to user TAs using config:CFG_FTRACE_BUF_SIZE=4096(default value: 2048, refer to the TA linker script for details:ta/arch/arm/ta.ld.S).- Run the application normally. When the current session exits or there is any abort during TA execution,
tee-supplicantwill write function graph data to/tmp/ftrace-<ta_uuid>.out. If the file already exists, a number is appended, such as:ftrace-<ta_uuid>.1.out.- Run helper script called
symbolize.pyto translate the function graph addresses into function names:cat ftrace-<ta_uuid>.out | ./optee_os/scripts/symbolize.py -d <ta_uuid>.elf