Merge tag 'kbuild-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[linux-2.6-microblaze.git] / scripts / link-vmlinux.sh
index d7f26f0..a7f6196 100755 (executable)
@@ -56,20 +56,6 @@ gen_initcalls()
                > .tmp_initcalls.lds
 }
 
-# If CONFIG_LTO_CLANG is selected, collect generated symbol versions into
-# .tmp_symversions.lds
-gen_symversions()
-{
-       info GEN .tmp_symversions.lds
-       rm -f .tmp_symversions.lds
-
-       for o in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
-               if [ -f ${o}.symversions ]; then
-                       cat ${o}.symversions >> .tmp_symversions.lds
-               fi
-       done
-}
-
 # Link of vmlinux.o used for section mismatch analysis
 # ${1} output file
 modpost_link()
@@ -88,11 +74,6 @@ modpost_link()
                gen_initcalls
                lds="-T .tmp_initcalls.lds"
 
-               if is_enabled CONFIG_MODVERSIONS; then
-                       gen_symversions
-                       lds="${lds} -T .tmp_symversions.lds"
-               fi
-
                # This might take a while, so indicate that we're doing
                # an LTO link
                info LTO ${1}
@@ -199,6 +180,10 @@ vmlinux_link()
                libs="${KBUILD_VMLINUX_LIBS}"
        fi
 
+       if is_enabled CONFIG_MODULES; then
+               objs="${objs} .vmlinux.export.o"
+       fi
+
        if [ "${SRCARCH}" = "um" ]; then
                wl=-Wl,
                ld="${CC}"
@@ -320,13 +305,14 @@ cleanup()
        rm -f .btf.*
        rm -f .tmp_System.map
        rm -f .tmp_initcalls.lds
-       rm -f .tmp_symversions.lds
        rm -f .tmp_vmlinux*
        rm -f System.map
        rm -f vmlinux
        rm -f vmlinux.map
        rm -f vmlinux.o
        rm -f .vmlinux.d
+       rm -f .vmlinux.objs
+       rm -f .vmlinux.export.c
 }
 
 # Use "make V=1" to debug this script
@@ -358,6 +344,16 @@ ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init need-builtin=1
 modpost_link vmlinux.o
 objtool_link vmlinux.o
 
+# Generate the list of objects in vmlinux
+for f in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
+       case ${f} in
+       *.a)
+               ${AR} t ${f} ;;
+       *)
+               echo ${f} ;;
+       esac
+done > .vmlinux.objs
+
 # modpost vmlinux.o to check for section mismatches
 ${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1
 
@@ -368,6 +364,10 @@ info GEN modules.builtin
 tr '\0' '\n' < modules.builtin.modinfo | sed -n 's/^[[:alnum:]:_]*\.file=//p' |
        tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$/.ko/' > modules.builtin
 
+if is_enabled CONFIG_MODULES; then
+       ${MAKE} -f "${srctree}/scripts/Makefile.vmlinux" .vmlinux.export.o
+fi
+
 btf_vmlinux_bin_o=""
 if is_enabled CONFIG_DEBUG_INFO_BTF; then
        btf_vmlinux_bin_o=.btf.vmlinux.bin.o