mbox series

[0/3] MIPS: Add support for LTO

Message ID 20211213224914.1501303-1-paul@crapouillou.net (mailing list archive)
Headers show
Series MIPS: Add support for LTO | expand

Message

Paul Cercueil Dec. 13, 2021, 10:49 p.m. UTC
Hi,

With this set of patches, it becomes possible to build a LTO'd kernel
with LLVM/Clang on MIPS.

This was tested on a Ingenic JZ4770 based system. It requires the
linking step of the vmlinuz.bin to be done with binutils' LD instead of
LLVM's ld.lld [1], but the vmlinuz ELF itself can be completely built
with LLVM.

Strangely, the LTO'd kernel is bigger in size (3.6 MiB vs. 3.1 MiB
without LTO), which might be completely normal and I just have wrong
expectations.

Cheers,
-Paul

[1]: https://github.com/ClangBuiltLinux/linux/issues/1333

Paul Cercueil (3):
  MIPS: boot/compressed: Disable abicalls
  MIPS: boot/compressed: Build without LTO
  MIPS: Add support for LTO

 arch/mips/Kconfig                  | 1 +
 arch/mips/boot/compressed/Makefile | 7 +++++--
 2 files changed, 6 insertions(+), 2 deletions(-)

Comments

Nathan Chancellor Dec. 14, 2021, 6:11 p.m. UTC | #1
On Mon, Dec 13, 2021 at 10:49:11PM +0000, Paul Cercueil wrote:
> Hi,
> 
> With this set of patches, it becomes possible to build a LTO'd kernel
> with LLVM/Clang on MIPS.
> 
> This was tested on a Ingenic JZ4770 based system. It requires the
> linking step of the vmlinuz.bin to be done with binutils' LD instead of
> LLVM's ld.lld [1], but the vmlinuz ELF itself can be completely built
> with LLVM.

The patches seem fine to me but it might be nice to have this fixed up
before the series is merged so that everything just works when this
configuration is selected. I have added some thoughts on the GitHub
issue.

> Strangely, the LTO'd kernel is bigger in size (3.6 MiB vs. 3.1 MiB
> without LTO), which might be completely normal and I just have wrong
> expectations.
> 
> Cheers,
> -Paul
> 
> [1]: https://github.com/ClangBuiltLinux/linux/issues/1333
> 
> Paul Cercueil (3):
>   MIPS: boot/compressed: Disable abicalls
>   MIPS: boot/compressed: Build without LTO
>   MIPS: Add support for LTO
> 
>  arch/mips/Kconfig                  | 1 +
>  arch/mips/boot/compressed/Makefile | 7 +++++--
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> -- 
> 2.33.0
> 
>
Nick Desaulniers Dec. 14, 2021, 7:34 p.m. UTC | #2
On Mon, Dec 13, 2021 at 2:49 PM Paul Cercueil <paul@crapouillou.net> wrote:
>
> Hi,
>
> With this set of patches, it becomes possible to build a LTO'd kernel
> with LLVM/Clang on MIPS.

Paul,
Overall, nice work pursuing this and working through all the related
issues; thanks for the series!

We should clarify whether this is LTO_CLANG_THIN or LTO_CLANG_FULL.
Getting support for either would be nice, but for each architecture
has had its own distinct challenges.

>
> This was tested on a Ingenic JZ4770 based system. It requires the
> linking step of the vmlinuz.bin to be done with binutils' LD instead of
> LLVM's ld.lld [1], but the vmlinuz ELF itself can be completely built
> with LLVM.

eh, this patch set sounds incomplete then; Can we wait to resolve
https://github.com/ClangBuiltLinux/linux/issues/1333 BEFORE this
series?  Hacking up arch/mips/boot/compressed/Makefile to force a
different linker is not something we should encourage.

>
> Strangely, the LTO'd kernel is bigger in size (3.6 MiB vs. 3.1 MiB
> without LTO), which might be completely normal and I just have wrong
> expectations.

Are you building with CC_OPTIMIZE_FOR_SIZE or CC_OPTIMIZE_FOR_SIZE?
LTO != LD_DEAD_CODE_DATA_ELIMINATION

>
> Cheers,
> -Paul
>
> [1]: https://github.com/ClangBuiltLinux/linux/issues/1333
>
> Paul Cercueil (3):
>   MIPS: boot/compressed: Disable abicalls
>   MIPS: boot/compressed: Build without LTO
>   MIPS: Add support for LTO
>
>  arch/mips/Kconfig                  | 1 +
>  arch/mips/boot/compressed/Makefile | 7 +++++--
>  2 files changed, 6 insertions(+), 2 deletions(-)
>
> --
> 2.33.0
>