Skip to content
Snippets Groups Projects
  1. Jan 14, 2021
    • Sami Tolvanen's avatar
      init: lto: ensure initcall ordering · a8cccdd9
      Sami Tolvanen authored
      
      With LTO, the compiler doesn't necessarily obey the link order for
      initcalls, and initcall variables need globally unique names to avoid
      collisions at link time.
      
      This change exports __KBUILD_MODNAME and adds the initcall_id() macro,
      which uses it together with __COUNTER__ and __LINE__ to help ensure
      these variables have unique names, and moves each variable to its own
      section when LTO is enabled, so the correct order can be specified using
      a linker script.
      
      The generate_initcall_ordering.pl script uses nm to find initcalls from
      the object files passed to the linker, and generates a linker script
      that specifies the same order for initcalls that we would have without
      LTO. With LTO enabled, the script is called in link-vmlinux.sh through
      jobserver-exec to limit the number of jobs spawned.
      
      Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Link: https://lore.kernel.org/r/20201211184633.3213045-8-samitolvanen@google.com
      a8cccdd9
Loading