Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
EntryExitInstrumenter: skip naked functions
The asm in a naked function may reasonably expect the argument registers and the return address register (if present) to be live. When using -pg and -finstrument-functions, functions are instrumented by adding a function call to `_mcount/__cyg_profile_func_enter/__cyg_profile_func_enter_bare`/etc, which will clobber these registers. If the return address register is clobbered, the function will be unable to return to the caller, possibly causing an infinite loop. ``` __attribute__((naked)) void g() { #if defined(__arm__) __asm__("bx lr"); #else __asm__("ret"); #endif } int main() { g(); } ``` It seems that the only one reasonable way to handle the combination is to disable instrumenting for naked functions. GCC PR: https://gcc.gnu.org/PR109707 Close #62504 Reviewed By: hans Differential Revision: https://reviews.llvm.org/D149721
- Loading branch information