clang and drm issue: objtool warnings from clang build
Nathan Chancellor
nathan at kernel.org
Sat Apr 26 20:05:13 UTC 2025
Hi Linus,
On Sat, Apr 26, 2025 at 10:42:40AM -0700, Linus Torvalds wrote:
> But I *really* think that clang silently just generating known bad
> code for invalida operations like this is very very dangerous, and is
> a bug in clang.
>
> Can we *please* get a flag for clang that it doesn't just stop
> generating code because it has decided some path is unreachable or
> undefined? Add a TRAP instruction, for Chrissake! PLEASE!
>
> Maybe such a flag already exists, and the kernel just doesn't know
> about it. This whole "do random things for undefined behavior" is a
> bug, dammit.
I think there is an internal LLVM flag, '-trap-unreachable', that does
what we would want here. Within the last year, I tested adding something
like
KBUILD_CFLAGS += -mllvm -trap-unreachable
to Makefile under an 'ifdef CONFIG_CC_IS_CLANG' and it eliminated most
objtool warnings but I seem to recall it introducing some new ones, I
think around __noreturn functions? I know Josh has done a lot of work on
objtool recently so I should retest. GCC has this behavior exposed under
-funreachable-traps, I could see about trying to expose that in clang.
This specific case started with clang-20 and your analysis is spot on:
https://lore.kernel.org/20241220223403.GA2605890@ax162/
On Sat, Apr 26, 2025 at 10:52:10AM -0700, Linus Torvalds wrote:
> Please people: "ASSERT()" like behavior is simply not acceptable in
> the kernel. WARN_ON() and friends need to either be otherwise benign
> (ie "warn but then continue to do valid things") or they need to be
> *handled* (ie "warn and then refuse to do things that aren't valid").
>
> Just warning and then doing random crap is not sane. If you aren't
> capable of dealing with the situation, don't do the bogus test. Just
> warning about it isn't fixing the code, and can make things actively
> worse as in these two examples.
This was the most recent series to clear up those objtool warnings in
the AMD driver:
https://lore.kernel.org/20250114132856.19463-1-yangtiezhu@loongson.cn/
Not sure if other ASSERT() uses should be audited or eliminated too but
that would at least make the build cleaner.
> Not this silent "now I generate random code by falling through to
> something else entirely" that clang does now. Not good.
Aside from what I mention above, I suppose getting OBJTOOL_WERROR in
useful shape would help with this a little bit because it will be easier
for me and others testing tip of tree LLVM to notice when optimizations
introduce new warnings.
Cheers,
Nathan
More information about the dri-devel
mailing list