On Wed, Sep 25, 2024 at 05:01:24PM +0200, Ard Biesheuvel wrote: > + if (insn->type == INSN_CALL_DYNAMIC) { > + if (!reloc) > + continue; > + > + /* > + * GCC 13 and older on x86 will always emit the call to > + * __fentry__ using a relaxable GOT-based symbol > + * reference when operating in PIC mode, i.e., > + * > + * call *0x0(%rip) > + * R_X86_64_GOTPCRELX __fentry__-0x4 > + * > + * where it is left up to the linker to relax this into > + * > + * call __fentry__ > + * nop > + * > + * if __fentry__ turns out to be DSO local, which is > + * always the case for vmlinux. Given that this > + * relaxation is mandatory per the x86_64 psABI, these > + * calls can simply be treated as direct calls. > + */ > + if (arch_ftrace_match(reloc->sym->name)) { > + insn->type = INSN_CALL; > + add_call_dest(file, insn, reloc->sym, false); > + } Can the compiler also do this for non-fentry direct calls? If so would it make sense to generalize this by converting all INSN_CALL_DYNAMIC+reloc to INSN_CALL? And maybe something similar for add_jump_destinations(). -- Josh