All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.