How to read the file generated by ARM Linker?
I'm a little confused about the Stack Size, Thumb and Max Depth shown on the file. Which is generated by the ARM Linker.
1. Where could I found the information what these several words exactly meaning?
for example:
f_open (Thumb, 450 bytes, Stack size 608 bytes, ff.o(i.f_open)) [Stack]Max Depth = 840Call Chain = f_open ⇒ dir_register ⇒ dir_find ⇒ dir_next ⇒ create_chain ⇒ put_fat ⇒ move_window ⇒ sync_window ⇒ disk_write [Calls]>> get_fattime>> st_clust>> remove_chain>> move_window>> ld_clust>> inc_lock>> follow_path>> find_volume>> enq_lock>> dir_register>> chk_lock
I know the Max Depth is the Stack needed of the Longest Call Chain. Is that means, for this function, the stack it needed is exactly equal the Max Depth?
If so, what about the 'Stack Size'? Is which means the stack size of the current function itself needed?
If so, what's the 'Thumb'? Is which means that, 'Thumb' Instruction Set?
Could I say:
Max Depth=Thumb + all Stack Size in the call chain + some other unknown exception?
2. How to read the Call Graph file?I've noticed that there are several piece in the file
z. Maximum Stack Usage = xxxx bytes + Unknown(Cycles, Untraceable Function Pointers) a. Call chain for Maximum Stack Depth b. Mutually Recursive functions c. Function Pointers d. Global Symbols e. Local Symbols f. Undefined Global Symbols
Is the 'Local Symbols' response to the functions which aren't referenced on the .h header file?
3. Why the call chain doesn't show the Heap Size of the function?
4. Could the Maximum Stack Usage indicate the real Max Stack Needed?
for example, one of my project, it shows
Maximum Stack Usage = 78160 bytes + Unknown(Cycles, Untraceable Function Pointers)in the Static Call Graph file.
But the stack size I setted in the startup file is 0xDFA0 (I find out this value by experiment), in this size of stack, my program works well in most time, and in some case it doesn't work well. Why it could still work well?
5. Where could I get the knowledge about my question upper?
for these several questions, I've found answer on internet for about one whole but finally get nothing. Where and how could I learn about those knowledge?
Thanks.
c-compiler call-stack arm-gcc st-linker stack cortex-mx linker-stm32 linker stm32-jump-function-call