On Thu, 15 Oct 2020 18:54:34 -0700 Linus Torvalds <[email protected]> wrote:
> On Thu, Oct 15, 2020 at 10:53 AM Steven Rostedt <[email protected]> wrote: > > > > Updates for tracing and bootconfig: > > Hmm. I haven't verified that this came from you, but it seems likely.. > Once again my clang build shows something that I don't see in my > allmodconfig gcc build: > > WARNING: modpost: vmlinux.o(.text+0x1e5b06): Section mismatch in > reference from the function __trace_early_add_events() to the function > .init.text:__trace_early_add_new_event() > The function __trace_early_add_events() references > the function __init __trace_early_add_new_event(). > This is often because __trace_early_add_events lacks a __init > annotation or the annotation of __trace_early_add_new_event is wrong. > > Hmm? > > Linus I see the issue, and I wonder if it has to do with optimization, for gcc not to warn. The issue is that we have: trace_array_create() that can be called at any time. And it has: if (trace_instance_dir) { ret = trace_array_create_dir(tr); if (ret) goto out_free_tr; } else __trace_early_add_events(tr); Where trace_instance_dir gets set at boot up, and thus the else statement will never get called after that. The __trace_early_add_events() then calls __trace_early_add_new_events() which is __init. I don't know how gcc didn't trigger this and clang does. I'll have to think about how to untangle this. Is there some kind of annotation that makes it show that a path can only be called at boot up and not later? -- Steve

