TITLE: Trampoline Call Finder ISSUE_NAME: Trampoline call finder DESCRIPTION: A trampoline call is a call to a jump, which is typically used to make calls to a shared object or DLL, or for symbol preemption. RELEVANCE: On Unix based platforms: All global symbols (functions and variables) are preemptible by default when generating position independent code. Because of this, the compiler must generate the most expensive relocation (trampoline calls) that allows for preemption and symbol resolution to occur at load time. However, symbol preemption is a rarely used feature, and thus many of the trampoline calls used to support symbol preemption are an unnecessary performance penalty. Additionally, symbol preemption prevents a global function from being inlined, reducing optimization opportunities. Windows uses no-symbol-preemption by default. EXAMPLE: call func func: jmp SOLUTION: Trampoline calls can often be removed by marking global symbols with the proper visibility. By using the correct symbol visibility, it is possibly to not only to improve the code generated, but also to limit the number of symbols in the dynamic symbol table to improve load time resolution of symbols. If a global function or variable does not need to be preempted then define its visibility as protected, hidden, or internal. RELATED_SOURCES: http://redfort-software.intel.com/en-us/blogs/2010/11/10/limit-performan... "Global Symbols and Visibility Attributes" section of Intel® Compiler Documentation NOTES:
For more complete information about compiler optimizations, see our Optimization Notice.