[PATCH 1/2] powerpc/vdso64: link vdso64 with linker

Christophe Leroy christophe.leroy at csgroup.eu
Sat Apr 24 03:18:34 AEST 2021



Le 23/04/2021 à 00:44, Nick Desaulniers a écrit :
> On Wed, Sep 2, 2020 at 11:02 AM Christophe Leroy
> <christophe.leroy at csgroup.eu> wrote:
>>
>>
>>
>> Le 02/09/2020 à 19:41, Nick Desaulniers a écrit :
>>> On Wed, Sep 2, 2020 at 5:14 AM Michael Ellerman <mpe at ellerman.id.au> wrote:
>>>>
>>>> Nick Desaulniers <ndesaulniers at google.com> writes:
>>>>> Fixes: commit f2af201002a8 ("powerpc/build: vdso linker warning for orphan sections")
>>>>
>>>> I think I'll just revert that for v5.9 ?
>>>
>>> SGTM; you'll probably still want these changes with some modifications
>>> at some point; vdso32 did have at least one orphaned section, and will
>>> be important for hermetic builds.  Seeing crashes in supported
>>> versions of the tools ties our hands at the moment.
>>>
>>
>> Keeping the tool problem aside with binutils 2.26, do you have a way to
>> really link an elf32ppc object when  building vdso32 for PPC64 ?
> 
> Sorry, I'm doing a bug scrub and found
> https://github.com/ClangBuiltLinux/linux/issues/774 still open (and my
> reply to this thread still in Drafts; never sent). With my patches
> rebased:
> $ file arch/powerpc/kernel/vdso32/vdso32.so
> arch/powerpc/kernel/vdso32/vdso32.so: ELF 32-bit MSB shared object,
> PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, stripped
> 
> Are you still using 2.26?
> 
> I'm not able to repro Nathan's reported issue from
> https://lore.kernel.org/lkml/20200902052123.GA2687902@ubuntu-n2-xlarge-x86/,
> so I'm curious if I should resend the rebased patches as v2?

One comment on your rebased patch:

 > diff --git a/arch/powerpc/include/asm/vdso.h b/arch/powerpc/include/asm/vdso.h
 > index 8542e9bbeead..0bd06ec06aaa 100644
 > --- a/arch/powerpc/include/asm/vdso.h
 > +++ b/arch/powerpc/include/asm/vdso.h
 > @@ -25,19 +25,7 @@ int vdso_getcpu_init(void);
 >
 >   #else /* __ASSEMBLY__ */
 >
 > -#ifdef __VDSO64__
 > -#define V_FUNCTION_BEGIN(name)		\
 > -	.globl name;			\
 > -	name:				\
 > -
 > -#define V_FUNCTION_END(name)		\
 > -	.size name,.-name;
 > -
 > -#define V_LOCAL_FUNC(name) (name)
 > -#endif /* __VDSO64__ */
 > -
 > -#ifdef __VDSO32__
 > -
 > +#if defined(__VDSO32__) || defined (__VDSO64__)

You always have either __VDSO32__ or __VDSO64__ so this #if is pointless

 >   #define V_FUNCTION_BEGIN(name)		\
 >   	.globl name;			\
 >   	.type name, at function; 		\
 > @@ -47,8 +35,7 @@ int vdso_getcpu_init(void);
 >   	.size name,.-name;
 >
 >   #define V_LOCAL_FUNC(name) (name)
 > -
 > -#endif /* __VDSO32__ */
 > +#endif /* __VDSO{32|64}__ */
 >
 >   #endif /* __ASSEMBLY__ */
 >


Christophe


More information about the Linuxppc-dev mailing list