• Ard Biesheuvel's avatar
    kallsyms: Avoid weak references for kallsyms symbols · 951bcae6
    Ard Biesheuvel authored
    kallsyms is a directory of all the symbols in the vmlinux binary, and so
    creating it is somewhat of a chicken-and-egg problem, as its non-zero
    size affects the layout of the binary, and therefore the values of the
    symbols.
    
    For this reason, the kernel is linked more than once, and the first pass
    does not include any kallsyms data at all. For the linker to accept
    this, the symbol declarations describing the kallsyms metadata are
    emitted as having weak linkage, so they can remain unsatisfied. During
    the subsequent passes, the weak references are satisfied by the kallsyms
    metadata that was constructed based on information gathered from the
    preceding passes.
    
    Weak references lead to somewhat worse codegen, because taking their
    address may need to produce NULL (if the reference was unsatisfied), and
    this is not usually supported by RIP or PC relative symbol references.
    
    Given that these references are ultimately always satisfied in the final
    link, let's drop the weak annotation, and instead, provide fallback
    definitions in the linker script that are only emitted if an unsatisfied
    reference exists.
    
    While at it, drop the FRV specific annotation that these symbols reside
    in .rodata - FRV is long gone.
    
    Tested-by: Nick Desaulniers <ndesaulniers@google.com> # Boot
    Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
    Link: https://lkml.kernel.org/r/20230504174320.3930345-1-ardb%40kernel.orgSigned-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    951bcae6
kallsyms.c 23.4 KB