Messages in this thread | | | From | "Huang, Kai" <> | Subject | Re: [tip:x86/tdx 8/12] vmlinux.o: warning: objtool: __tdx_hypercall+0x128: __tdx_hypercall_failed() is missing a __noreturn annotation | Date | Thu, 14 Sep 2023 10:02:40 +0000 |
| |
On Thu, 2023-09-14 at 10:59 +0200, Peter Zijlstra wrote: > On Thu, Sep 14, 2023 at 07:54:10AM +0000, Huang, Kai wrote: > > > > The point of noreturn is that the caller should know to stop generating > > > code. For that the declaration needs the attribute, because call sites > > > typically do not have access to the function definition in C. > > > > Ah that makes perfect sense. Thanks! > > > > Then I assume we don't need to annotate __noreturn in the function body, but > > only in the declaration? Because the compiler must already have seen the > > declaration when it generates the code for the function body. > > I think so, I'm sure it'll tell you if it disagrees :-) > > > Btw, I happened to notice that the objtool documentation suggests that we should > > also add the the function to tools/objtool/noreturns.h: > > > > 3. file.o: warning: objtool: foo+0x48c: bar() is missing a __noreturn annotation > > > > The call from foo() to bar() doesn't return, but bar() is missing the > > __noreturn annotation. NOTE: In addition to annotating the function > > with __noreturn, please also add it to tools/objtool/noreturns.h. > > > > Is it a behaviour that we still need to follow? > > Yes. objtool has some heuristics to detect noreturn, but is is very > difficult. Sadly noreturn is not something that is reflected in the ELF > object file so we have to guess. > > For now manually adding it to the objtool list is required, we're trying > to get to the point where it is generated/validated by the compiler, > perhaps with a plugin, but we're not there yet.
Sorry one more question, do you know what Kconfig option triggers this __noreturn objtool check? I couldn't reproduce it on my own machine but have to depend on LKP for now.
| |