Messages in this thread | | | Date | Thu, 15 Oct 2020 22:21:39 -0400 | From | Steven Rostedt <> | Subject | Re: [GIT PULL] tracing: Updates for 5.10 |
| |
On Thu, 15 Oct 2020 18:54:34 -0700 Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Thu, Oct 15, 2020 at 10:53 AM Steven Rostedt <rostedt@goodmis.org> 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
| |