[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250212233242.pnzazr3lxu3f6p6e@jpoimboe>
Date: Wed, 12 Feb 2025 15:32:42 -0800
From: Josh Poimboeuf <jpoimboe@...hat.com>
To: Jan Beulich <jbeulich@...e.com>
Cc: lkml <linux-kernel@...r.kernel.org>, Juergen Gross <jgross@...e.com>,
Peter Zijlstra <peterz@...radead.org>,
Luc Van Oostenryck <luc.vanoostenryck@...il.com>
Subject: Re: [PATCH] compiler: remove stringification from __ADDRESSABLE_ASM()
On Wed, Feb 12, 2025 at 04:11:51PM +0100, Jan Beulich wrote:
> __ADDRESSABLE_ASM_STR() is where the necessary stringification happens.
> As long as "sym" doesn't contain any odd characters, no quoting is
> required for its use with .quad / .long. In fact the quotation gets in
> the way with gas 2.25; it's only from 2.26 onwards that quoted symbols
> are half-way properly supported.
>
> Fixes: 0ef8047b737d ("x86/static-call: provide a way to do very early static-call updates")
> Signed-off-by: Jan Beulich <jbeulich@...e.com>
> Cc: stable@...r.kernel.org
> ---
> I think that __ADDRESSABLE_ASM{,_STR}() better would have a separate
> comment, as that presently kind of shared with {_,}__ADDRESSABLE() isn't
> really applicable to assembly code.
>
> Is data allocation actually necessary in __ADDRESSABLE_ASM()? Aiui the
> sole goal is to have sym in the symbol table. That could be achieved by
> a simple .global (or e.g. .hidden) directive.
Hm, yes, but isn't that a bug? It shouldn't be defining the symbol, as
that will already be defined elsewhere. So it would link to the local
symbol instead of the actual static key defined in another object.
Even worse, the local symbol gets discarded during linking? Not sure
how that works without a linker error...
.global sounds like it would work, then we can just remove all the
__ADDRESSABLE_ASM() cruft.
> Shouldn't Xen's __ADDRESSABLE_xen_hypercall use STATIC_CALL_KEY() rather
> than open-coding it?
Indeed...
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -245,7 +245,7 @@ static inline void *offset_to_ptr(const
> #define __ADDRESSABLE_ASM(sym) \
> .pushsection .discard.addressable,"aw"; \
> .align ARCH_SEL(8,4); \
> - ARCH_SEL(.quad, .long) __stringify(sym); \
> + ARCH_SEL(.quad, .long) sym; \
> .popsection;
>
> #define __ADDRESSABLE_ASM_STR(sym) __stringify(__ADDRESSABLE_ASM(sym))
--
Josh
Powered by blists - more mailing lists