Re: [PATCH v2 3/4] Kbuild: Create intermediate vmlinux build with relocations preserved

Palmer Dabbelt
2025-04-30T16:29:13Z

On Wed, 30 Apr 2025 09:03:56 PDT (-0700), Conor Dooley wrote:
> +CC Palmer
>
> On Tue, Mar 11, 2025 at 12:06:20PM +0100, Ard Biesheuvel wrote:
>> From: Ard Biesheuvel <ardb@kernel.org>
>>
>> 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>
>
> Delayed report since I have been slacking on my testing, but looks like
> this has broken boot for me on riscv (mpfs-icicle-kit), no output after
> "Starting kernel", defconfig should be:
> https://raw.githubusercontent.com/ConchuOD/riscv-env/refs/heads/dev/conf/defconfig
> Toolchain is llvm 16. LMK if there's some salient info missing.

Thanks for tracking this down. It's not manifesting on my end, but we
talked this morning about this maybe being some config-specific issue.
I'm also on LLVM 18.

I'm going to start poking around with the configs...

>
> Cheers,
> Conor.