1. 23 May, 2022 2 commits
    • Masahiro Yamada's avatar
      modpost: extract symbol versions from *.cmd files · f292d875
      Masahiro Yamada authored
      Currently, CONFIG_MODVERSIONS needs extra link to embed the symbol
      versions into ELF objects. Then, modpost extracts the version CRCs
      from them.
      
      The following figures show how it currently works, and how I am trying
      to change it.
      
      Current implementation
      ======================
                                                                 |----------|
                       embed CRC      -------------------------->| final    |
             $(CC)       $(LD)       /  |---------|              | link for |
             -----> *.o -------> *.o -->| modpost |              | vmlinux  |
            /              /            |         |-- *.mod.c -->| or       |
           / genksyms     /             |---------|              | module   |
        *.c ------> *.symversions                                |----------|
      
      Genksyms outputs the calculated CRCs in the form of linker script
      (*.symversions), which is used by $(LD) to update the object.
      
      If CONFIG_LTO_CLANG=y, the build process is much more complex. Embedding
      the CRCs is postponed until the LLVM bitcode is converted into ELF,
      creating another intermediate *.prelink.o.
      
      However, this complexity is unneeded. There is no reason why we must
      embed version CRCs in objects so early.
      
      There is final link stage for vmlinux (scripts/link-vmlinux.sh) and
      modules (scripts/Makefile.modfinal). We can link CRCs at the very last
      moment.
      
      New implementation
      ==================
                                                                 |----------|
                         --------------------------------------->| final    |
             $(CC)      /    |---------|                         | link for |
             -----> *.o ---->|         |                         | vmlinux  |
            /                | modpost |--- .vmlinux.export.c -->| or       |
           / genksyms        |         |--- *.mod.c ------------>| module   |
        *.c ------> *.cmd -->|---------|                         |----------|
      
      Pass the symbol versions to modpost as separate text data, which are
      available in *.cmd files.
      
      This commit changes modpost to extract CRCs from *.cmd files instead of
      from ELF objects.
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Reviewed-by: default avatarNicolas Schier <nicolas@fjasle.eu>
      Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarSami Tolvanen <samitolvanen@google.com>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
      f292d875
    • Masahiro Yamada's avatar
      modpost: add sym_find_with_module() helper · 69c4cc99
      Masahiro Yamada authored
      find_symbol() returns the first symbol found in the hash table. This
      table is global, so it may return a symbol from an unexpected module.
      
      There is a case where we want to search for a symbol with a given name
      in a specified module.
      
      Add sym_find_with_module(), which receives the module pointer as the
      second argument. It is equivalent to find_module() if NULL is passed
      as the module pointer.
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Reviewed-by: default avatarNicolas Schier <nicolas@fjasle.eu>
      Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
      69c4cc99
  2. 11 May, 2022 8 commits
  3. 07 May, 2022 30 commits