From: Nathan Chancellor <nathan@kernel.org>
To: Josh Poimboeuf <jpoimboe@redhat.com>,
Peter Zijlstra <peterz@infradead.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>,
Sami Tolvanen <samitolvanen@google.com>,
Kees Cook <keescook@chromium.org>,
clang-built-linux@googlegroups.com, llvm@lists.linux.dev,
linux-kernel@vger.kernel.org
Subject: objtool warning in cfg80211_edmg_chandef_valid() with ThinLTO
Date: Tue, 24 Aug 2021 13:08:58 -0700 [thread overview]
Message-ID: <5913cdf4-9c8e-38f8-8914-d3b8a3565d73@kernel.org> (raw)
Hi Josh and Peter,
An in-review LLVM patch [1] introduces an optimization around switch
cases, marking the default case unreachable when all known values are
covered. This ended up introducing a boot regression when building a
kernel with ThinLTO, which Sami reported initially [2] and I reported it
upstream, generating some discussion starting from [3].
There is an objtool warning about the function that the author of the
patch tracked down to be problematic:
vmlinux.o: warning: objtool: cfg80211_edmg_chandef_valid()+0x169: can't
find jump dest instruction at .text.cfg80211_edmg_chandef_valid+0x17b
The LLVM developers are under the impression that this is an issue with
objtool; specifically quoting Eli Friedman:
"The backend can, in general, create basic blocks that don't contain any
instructions, and don't fall through to another block. A jump table
entry can refer to such a block. I guess certain tools could be confused
by this.
If that's the issue, it should be possible to work around it using
'-mllvm -trap-unreachable'."
I can confirm that adding '-mllvm -trap-unreachable' to
KBUILD_{C,LD}FLAGS does resolve the issue but I am curious if that is an
adequate solution (as Nick has frowned upon the presence of '-mllvm'
flags) or if there is something that could be done on the objtool side.
I do have a small reproducer on Phabricator [4] and I can provide any
binary files that would be helpful for seeing what is going on here.
[1] https://reviews.llvm.org/D106056
[2] https://github.com/ClangBuiltLinux/linux/issues/1440
[3] https://reviews.llvm.org/D106056#2953104
[4] https://reviews.llvm.org/D106056#2961136
Cheers,
Nathan
next reply other threads:[~2021-08-24 20:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-24 20:08 Nathan Chancellor [this message]
2021-08-24 21:05 ` objtool warning in cfg80211_edmg_chandef_valid() with ThinLTO Peter Zijlstra
2021-08-24 21:19 ` Nathan Chancellor
2021-08-25 5:30 ` Josh Poimboeuf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5913cdf4-9c8e-38f8-8914-d3b8a3565d73@kernel.org \
--to=nathan@kernel.org \
--cc=clang-built-linux@googlegroups.com \
--cc=jpoimboe@redhat.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=ndesaulniers@google.com \
--cc=peterz@infradead.org \
--cc=samitolvanen@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox