Message ID | 20180626182802.19932-1-ard.biesheuvel@linaro.org |
---|---|
Headers | show |
Series | add support for relative references in special sections | expand |
Ard Biesheuvel <ard.biesheuvel@linaro.org> writes: > This adds support for emitting special sections such as initcall arrays, > PCI fixups and tracepoints as relative references rather than absolute > references. This reduces the size by 50% on 64-bit architectures, but > more importantly, it removes the need for carrying relocation metadata > for these sections in relocatable kernels (e.g., for KASLR) that needs > to be fixed up at boot time. On arm64, this reduces the vmlinux footprint > of such a reference by 8x (8 byte absolute reference + 24 byte RELA entry > vs 4 byte relative reference) ... > > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Kees Cook <keescook@chromium.org> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> This seems to be working on powerpc. It boots on a couple of machines with no obvious badness. And there's some size reduction with a random config I had lying around: Total: Before=14820494, After=14673313, chg -0.99% It can get some more testing once it's in linux-next as far as I'm concerned. Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) cheers
Hi Ard, On Tue, Jun 26, 2018 at 08:27:55PM +0200, Ard Biesheuvel wrote: > This adds support for emitting special sections such as initcall arrays, > PCI fixups and tracepoints as relative references rather than absolute > references. This reduces the size by 50% on 64-bit architectures, but > more importantly, it removes the need for carrying relocation metadata > for these sections in relocatable kernels (e.g., for KASLR) that needs > to be fixed up at boot time. On arm64, this reduces the vmlinux footprint > of such a reference by 8x (8 byte absolute reference + 24 byte RELA entry > vs 4 byte relative reference) > > Patch #3 was sent out before as a single patch. This series supersedes > the previous submission. This version makes relative ksymtab entries > dependent on the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS rather > than trying to infer from kbuild test robot replies for which architectures > it should be blacklisted. > > Patch #1 introduces the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS, > and sets it for the main architectures that are expected to benefit the > most from this feature, i.e., 64-bit architectures or ones that use > runtime relocations. > > Patch #2 add support for #define'ing __DISABLE_EXPORTS to get rid of > ksymtab/kcrctab sections in decompressor and EFI stub objects when > rebuilding existing C files to run in a different context. I had a small question on patch 3, but it's really for my understanding. So, for patches 1-3: Reviewed-by: Will Deacon <will.deacon@arm.com> Thanks, Will
On 27 June 2018 at 17:15, Will Deacon <will.deacon@arm.com> wrote: > Hi Ard, > > On Tue, Jun 26, 2018 at 08:27:55PM +0200, Ard Biesheuvel wrote: >> This adds support for emitting special sections such as initcall arrays, >> PCI fixups and tracepoints as relative references rather than absolute >> references. This reduces the size by 50% on 64-bit architectures, but >> more importantly, it removes the need for carrying relocation metadata >> for these sections in relocatable kernels (e.g., for KASLR) that needs >> to be fixed up at boot time. On arm64, this reduces the vmlinux footprint >> of such a reference by 8x (8 byte absolute reference + 24 byte RELA entry >> vs 4 byte relative reference) >> >> Patch #3 was sent out before as a single patch. This series supersedes >> the previous submission. This version makes relative ksymtab entries >> dependent on the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS rather >> than trying to infer from kbuild test robot replies for which architectures >> it should be blacklisted. >> >> Patch #1 introduces the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS, >> and sets it for the main architectures that are expected to benefit the >> most from this feature, i.e., 64-bit architectures or ones that use >> runtime relocations. >> >> Patch #2 add support for #define'ing __DISABLE_EXPORTS to get rid of >> ksymtab/kcrctab sections in decompressor and EFI stub objects when >> rebuilding existing C files to run in a different context. > > I had a small question on patch 3, but it's really for my understanding. > So, for patches 1-3: > > Reviewed-by: Will Deacon <will.deacon@arm.com> > Thanks all. Thomas, Ingo, Except for the below tweak against patch #3 for powerpc, which may apparently get confused by an input section called .discard without any suffixes, this series is good to go, but requires your ack to proceed, so I would like to ask you to share your comments and/or objections. Also, any suggestions or recommendations regarding the route these patches should take are highly appreciated. Ard. diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 2d9c63f41031..61c844d4ab48 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -287,7 +287,7 @@ unsigned long read_word_at_a_time(const void *addr) * visible to the compiler. */ #define __ADDRESSABLE(sym) \ - static void * __attribute__((section(".discard"), used)) \ + static void * __attribute__((section(".discard.addressable"), used)) \ __PASTE(__addressable_##sym, __LINE__) = (void *)&sym; /**
* Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > On 27 June 2018 at 17:15, Will Deacon <will.deacon@arm.com> wrote: > > Hi Ard, > > > > On Tue, Jun 26, 2018 at 08:27:55PM +0200, Ard Biesheuvel wrote: > >> This adds support for emitting special sections such as initcall arrays, > >> PCI fixups and tracepoints as relative references rather than absolute > >> references. This reduces the size by 50% on 64-bit architectures, but > >> more importantly, it removes the need for carrying relocation metadata > >> for these sections in relocatable kernels (e.g., for KASLR) that needs > >> to be fixed up at boot time. On arm64, this reduces the vmlinux footprint > >> of such a reference by 8x (8 byte absolute reference + 24 byte RELA entry > >> vs 4 byte relative reference) > >> > >> Patch #3 was sent out before as a single patch. This series supersedes > >> the previous submission. This version makes relative ksymtab entries > >> dependent on the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS rather > >> than trying to infer from kbuild test robot replies for which architectures > >> it should be blacklisted. > >> > >> Patch #1 introduces the new Kconfig symbol HAVE_ARCH_PREL32_RELOCATIONS, > >> and sets it for the main architectures that are expected to benefit the > >> most from this feature, i.e., 64-bit architectures or ones that use > >> runtime relocations. > >> > >> Patch #2 add support for #define'ing __DISABLE_EXPORTS to get rid of > >> ksymtab/kcrctab sections in decompressor and EFI stub objects when > >> rebuilding existing C files to run in a different context. > > > > I had a small question on patch 3, but it's really for my understanding. > > So, for patches 1-3: > > > > Reviewed-by: Will Deacon <will.deacon@arm.com> > > > > Thanks all. > > Thomas, Ingo, > > Except for the below tweak against patch #3 for powerpc, which may > apparently get confused by an input section called .discard without > any suffixes, this series is good to go, but requires your ack to > proceed, so I would like to ask you to share your comments and/or > objections. Also, any suggestions or recommendations regarding the > route these patches should take are highly appreciated. LGTM: Acked-by: Ingo Molnar <mingo@kernel.org> Regarding route - I suspect -mm would be good, or any other tree that does a lot of cross-arch testing? Thanks, Ingo