]> git.ipfire.org Git - thirdparty/linux.git/commit
kbuild: Create intermediate vmlinux build with relocations preserved
authorArd Biesheuvel <ardb@kernel.org>
Tue, 11 Mar 2025 11:06:20 +0000 (12:06 +0100)
committerMasahiro Yamada <masahiroy@kernel.org>
Sun, 16 Mar 2025 15:29:50 +0000 (00:29 +0900)
commitac4f06789b4f9c17357e81e918879c6e2ffdd075
tree1ad760f9cf97cbbd1f6930dc002a8341603a08e0
parent9b400d17259b70d1d68585028e96b30152d0796a
kbuild: Create intermediate vmlinux build with relocations preserved

The imperative paradigm used to build vmlinux, extract some info from it
or perform some checks on it, and subsequently modify it again goes
against the declarative paradigm that is usually employed for defining
make rules.

In particular, the Makefile.postlink files that consume their input via
an output rule result in some dodgy logic in the decompressor makefiles
for RISC-V and x86, given that the vmlinux.relocs input file needed to
generate the arch-specific relocation tables may not exist or be out of
date, but cannot be constructed using the ordinary Make dependency based
rules, because the info needs to be extracted while vmlinux is in its
ephemeral, non-stripped form.

So instead, for architectures that require the static relocations that
are emitted into vmlinux when passing --emit-relocs to the linker, and
are subsequently stripped out again, introduce an intermediate vmlinux
target called vmlinux.unstripped, and organize the reset of the build
logic accordingly:

- vmlinux.unstripped is created only once, and not updated again
- build rules under arch/*/boot can depend on vmlinux.unstripped without
  running the risk of the data disappearing or being out of date
- the final vmlinux generated by the build is not bloated with static
  relocations that are never needed again after the build completes.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
.gitignore
Makefile
arch/mips/Makefile.postlink
arch/riscv/Makefile.postlink
arch/riscv/boot/Makefile
arch/s390/Makefile.postlink
arch/x86/Makefile.postlink
scripts/Makefile.lib
scripts/Makefile.vmlinux