Thread (92 messages) 92 messages, 10 authors, 2020-10-29

Re: [PATCH v6 13/29] arm64/build: Assert for unwanted sections

From: Arvind Sankar <hidden>
Date: 2020-10-27 20:30:08
Also in: linux-arch, linux-arm-kernel, linux-efi, linux-renesas-soc

On Tue, Oct 27, 2020 at 01:17:55PM -0700, Nick Desaulniers wrote:
On Tue, Oct 27, 2020 at 1:15 PM Ard Biesheuvel [off-list ref] wrote:
quoted
On Tue, 27 Oct 2020 at 21:12, Nick Desaulniers [off-list ref] wrote:
quoted
On Tue, Oct 27, 2020 at 12:25 PM Geert Uytterhoeven
[off-list ref] wrote:
quoted
Hi Nick,

CC Josh

On Mon, Oct 26, 2020 at 6:49 PM Nick Desaulniers
[off-list ref] wrote:
quoted
On Mon, Oct 26, 2020 at 10:44 AM Geert Uytterhoeven
[off-list ref] wrote:
quoted
On Mon, Oct 26, 2020 at 6:39 PM Ard Biesheuvel [off-list ref] wrote:
quoted
On Mon, 26 Oct 2020 at 17:01, Geert Uytterhoeven [off-list ref] wrote:
quoted
On Mon, Oct 26, 2020 at 2:29 PM Geert Uytterhoeven [off-list ref] wrote:
quoted
On Mon, Oct 26, 2020 at 1:29 PM Geert Uytterhoeven [off-list ref] wrote:
quoted
I.e. including the ".eh_frame" warning. I have tried bisecting that
warning (i.e. with be2881824ae9eb92 reverted), but that leads me to
commit b3e5d80d0c48c0cc ("arm64/build: Warn on orphan section
placement"), which is another red herring.
kernel/bpf/core.o is the only file containing an eh_frame section,
causing the warning.
When I see .eh_frame, I think -fno-asynchronous-unwind-tables is
missing from someone's KBUILD_CFLAGS.
But I don't see anything curious in kernel/bpf/Makefile, unless
cc-disable-warning is somehow broken.
I tracked it down to kernel/bpf/core.c:___bpf_prog_run() being tagged
with __no_fgcse aka __attribute__((optimize("-fno-gcse"))).

Even if the function is trivially empty ("return 0;"), a ".eh_frame" section
is generated.  Removing the __no_fgcse tag fixes that.
That's weird.  I feel pretty strongly that unless we're working around
a well understood compiler bug with a comment that links to a
submitted bug report, turning off rando compiler optimizations is a
terrible hack for which one must proceed straight to jail; do not pass
go; do not collect $200.  But maybe I'd feel differently for this case
given the context of the change that added it.  (Ard mentions
retpolines+orc+objtool; can someone share the relevant SHA if you have
it handy so I don't have to go digging?)
commit 3193c0836f203a91bef96d88c64cccf0be090d9c
Author: Josh Poimboeuf [off-list ref]
Date:   Wed Jul 17 20:36:45 2019 -0500

    bpf: Disable GCC -fgcse optimization for ___bpf_prog_run()

has

Fixes: e55a73251da3 ("bpf: Fix ORC unwinding in non-JIT BPF code")

and mentions objtool and CONFIG_RETPOLINE.
quoted
 (I feel the same about there
being an empty asm(); statement in the definition of asm_volatile_goto
for compiler-gcc.h).  Might be time to "fix the compiler."

(It sounds like Arvind is both in agreement with my sentiment, and has
the root cause).
I agree that the __no_fgcse hack is terrible. Does Clang support the
following pragmas?

#pragma GCC push_options
#pragma GCC optimize ("-fno-gcse")
#pragma GCC pop_options

?
Put it in godbolt.org.  Pretty sure it's `#pragma clang` though.
`#pragma GCC` might be supported in clang or silently ignored, but
IIRC pragmas were a bit of a compat nightmare.  I think Arnd wrote
some macros to set pragmas based on toolchain.  (Uses _Pragma, for
pragmas in macros, IIRC).

-- 
Thanks,
~Nick Desaulniers
https://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html#Function-Specific-Option-Pragmas

#pragma GCC optimize is equivalent to the function attribute, so does
that actually help?

Btw, the bug mentioned in asm_volatile_goto seems like its been fixed in
4.9, so the hack could be dropped now?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help