[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <877etylo6i.fsf@concordia.ellerman.id.au>
Date: Thu, 07 Dec 2017 23:25:57 +1100
From: Michael Ellerman <mpe@...erman.id.au>
To: Desnes Augusto Nunes do Rosario <desnesn@...ux.vnet.ibm.com>,
linuxppc-dev@...ts.ozlabs.org, linux-kernel@...r.kernel.org,
amodra@...il.com
Cc: desnesn@...ux.vnet.ibm.com, benh@...nel.crashing.org,
paulus@...ba.org, ard.biesheuvel@...aro.org, rusty@...tcorp.com.au
Subject: Re: [PATCH] [powerpc-next] Fix powerpc64 alignment of .toc section in kernel modules
Hi Desnes,
Am I right that Alan largely wrote this patch?
If so it should probably be From: him, so that he is the author in the
git log.
Desnes Augusto Nunes do Rosario <desnesn@...ux.vnet.ibm.com> writes:
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 1381693..c472f5b 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -63,6 +63,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
> ifdef CONFIG_PPC32
> KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
> else
> +KBUILD_LDFLAGS_MODULE += -T arch/powerpc/kernel/module.lds
This needs to be:
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/powerpc/kernel/module.lds
Otherwise building with O=../build fails with:
ld: cannot open linker script file arch/powerpc/kernel/module.lds: No such file or directory
I'll fix it up.
> diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
> index 759104b..9b2c5c1 100644
> --- a/arch/powerpc/kernel/module_64.c
> +++ b/arch/powerpc/kernel/module_64.c
> @@ -374,11 +377,13 @@ int module_frob_arch_sections(Elf64_Ehdr *hdr,
> }
>
> /* r2 is the TOC pointer: it actually points 0x8000 into the TOC (this
> - gives the value maximum span in an instruction which uses a signed
> - offset) */
> + * gives the value maximum span in an instruction which uses a signed
> + * offset). Round down to a 256 byte boundary for the odd case where
> + * we are setting up r2 without a .toc section.
> + */
> static inline unsigned long my_r2(const Elf64_Shdr *sechdrs, struct module *me)
> {
> - return sechdrs[me->arch.toc_section].sh_addr + 0x8000;
> + return (sechdrs[me->arch.toc_section].sh_addr & -256) + 0x8000;
I think it's more typical in the kernel to write -256 as ~0xff.
Again I can fix it up.
cheers
Powered by blists - more mailing lists