On Mon, Aug 15, 2022 at 05:41:27PM +0200, Peter Zijlstra wrote: > On Mon, Aug 15, 2022 at 05:28:02PM +0200, Peter Zijlstra wrote: > > On Mon, Aug 15, 2022 at 08:17:42AM -0700, Alexei Starovoitov wrote: > > > It's hiding a fake function from ftrace, since it's not a function > > > and ftrace infra shouldn't show it tracing logs. > > > In other words it's a _notrace_ function with nop5. > > > > Then make it a notrace function with a nop5 in it. That isn't hard. > > > > The whole problem is that it isn't a notrace function and you're abusing > > a __fentry__ site. > > https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git/commit/?h=x86/fineibt&id=8d075bdf11193f1d276bf19fa56b4b8dfe24df9e > > foo.c: > > __attribute__((__no_instrument_function__)) > __attribute__((patchable_function_entry(5))) > void my_func(void) > { > } > > void my_foo(void) > { > } > > gcc -c foo.c -pg -mfentry -mcmodel=kernel -fno-PIE -O2 > > foo.o: file format elf64-x86-64 > > > Disassembly of section .text: > > 0000000000000000 <my_func>: > 0: f3 0f 1e fa endbr64 > 4: 90 nop > 5: 90 nop > 6: 90 nop > 7: 90 nop > 8: 90 nop > 9: c3 ret > a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) > > 0000000000000010 <my_foo>: > 10: f3 0f 1e fa endbr64 > 14: e8 00 00 00 00 call 19 <my_foo+0x9> 15: R_X86_64_PLT32 __fentry__-0x4 > 19: c3 ret > ok, so the problem with __attribute__((patchable_function_entry(5))) is that it puts function address into __patchable_function_entries section, which is one of ftrace locations source: #define MCOUNT_REC() . = ALIGN(8); \ __start_mcount_loc = .; \ KEEP(*(__mcount_loc)) \ KEEP(*(__patchable_function_entries)) \ __stop_mcount_loc = .; \ ... it looks like __patchable_function_entries is used for other than x86 archs, so we perhaps we could have x86 specific MCOUNT_REC macro just with __mcount_loc section? jirka