Skip to content
  • Ard Biesheuvel's avatar
    kbuild: Create intermediate vmlinux build with relocations preserved · ac4f0678
    Ard Biesheuvel authored
    
    
    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: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    ac4f0678
Loading