mirror of https://github.com/OpenIPC/firmware.git
163 lines
3.8 KiB
Diff
163 lines
3.8 KiB
Diff
diff -drupN a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
|
|
--- a/scripts/link-vmlinux.sh 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/scripts/link-vmlinux.sh 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -53,9 +53,40 @@ archive_builtin()
|
|
${AR} rcsT${KBUILD_ARFLAGS} built-in.o \
|
|
${KBUILD_VMLINUX_INIT} \
|
|
${KBUILD_VMLINUX_MAIN}
|
|
+
|
|
+ if [ -n "${CONFIG_LTO_CLANG}" ]; then
|
|
+ mv -f built-in.o built-in.o.tmp
|
|
+ ${LLVM_AR} rcsT${KBUILD_ARFLAGS} built-in.o $(${AR} t built-in.o.tmp)
|
|
+ rm -f built-in.o.tmp
|
|
+ fi
|
|
fi
|
|
}
|
|
|
|
+# If CONFIG_LTO_CLANG is selected, collect generated symbol versions into
|
|
+# .tmp_symversions
|
|
+modversions()
|
|
+{
|
|
+ if [ -z "${CONFIG_LTO_CLANG}" ]; then
|
|
+ return
|
|
+ fi
|
|
+
|
|
+ if [ -z "${CONFIG_MODVERSIONS}" ]; then
|
|
+ return
|
|
+ fi
|
|
+
|
|
+ rm -f .tmp_symversions
|
|
+
|
|
+ for a in built-in.o ${KBUILD_VMLINUX_LIBS}; do
|
|
+ for o in $(${AR} t $a); do
|
|
+ if [ -f ${o}.symversions ]; then
|
|
+ cat ${o}.symversions >> .tmp_symversions
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+
|
|
+ echo "-T .tmp_symversions"
|
|
+}
|
|
+
|
|
# Link of vmlinux.o used for section mismatch analysis
|
|
# ${1} output file
|
|
modpost_link()
|
|
@@ -70,7 +101,29 @@ modpost_link()
|
|
${KBUILD_VMLINUX_MAIN} \
|
|
--end-group"
|
|
fi
|
|
- ${LD} ${LDFLAGS} -r -o ${1} ${objects}
|
|
+
|
|
+ if [ -n "${CONFIG_LTO_CLANG}" ]; then
|
|
+ # This might take a while, so indicate that we're doing
|
|
+ # an LTO link
|
|
+ info LTO vmlinux.o
|
|
+ else
|
|
+ info LD vmlinux.o
|
|
+ fi
|
|
+
|
|
+ ${LD} ${LDFLAGS} -r -o ${1} $(modversions) ${objects}
|
|
+}
|
|
+
|
|
+# If CONFIG_LTO_CLANG is selected, we postpone running recordmcount until
|
|
+# we have compiled LLVM IR to an object file.
|
|
+recordmcount()
|
|
+{
|
|
+ if [ -z "${CONFIG_LTO_CLANG}" ]; then
|
|
+ return
|
|
+ fi
|
|
+
|
|
+ if [ -n "${CONFIG_FTRACE_MCOUNT_RECORD}" ]; then
|
|
+ scripts/recordmcount ${RECORDMCOUNT_FLAGS} $*
|
|
+ fi
|
|
}
|
|
|
|
# Link of vmlinux
|
|
@@ -82,7 +135,15 @@ vmlinux_link()
|
|
local objects
|
|
|
|
if [ "${SRCARCH}" != "um" ]; then
|
|
- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
|
|
+ local ld=${LD}
|
|
+ local ldflags="${LDFLAGS} ${LDFLAGS_vmlinux}"
|
|
+
|
|
+ if [ -n "${LDFINAL_vmlinux}" ]; then
|
|
+ ld=${LDFINAL_vmlinux}
|
|
+ ldflags="${LDFLAGS_FINAL_vmlinux} ${LDFLAGS_vmlinux}"
|
|
+ fi
|
|
+
|
|
+ if [[ -n "${CONFIG_THIN_ARCHIVES}" && -z "${CONFIG_LTO_CLANG}" ]]; then
|
|
objects="--whole-archive built-in.o ${1}"
|
|
else
|
|
objects="${KBUILD_VMLINUX_INIT} \
|
|
@@ -92,8 +153,7 @@ vmlinux_link()
|
|
${1}"
|
|
fi
|
|
|
|
- ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
|
|
- -T ${lds} ${objects}
|
|
+ ${ld} ${ldflags} -o ${2} -T ${lds} ${objects}
|
|
else
|
|
if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
|
|
objects="-Wl,--whole-archive built-in.o ${1}"
|
|
@@ -113,7 +173,6 @@ vmlinux_link()
|
|
fi
|
|
}
|
|
|
|
-
|
|
# Create ${2} .o file with all symbols from the ${1} object file
|
|
kallsyms()
|
|
{
|
|
@@ -164,6 +223,7 @@ cleanup()
|
|
rm -f .tmp_System.map
|
|
rm -f .tmp_kallsyms*
|
|
rm -f .tmp_version
|
|
+ rm -f .tmp_symversions
|
|
rm -f .tmp_vmlinux*
|
|
rm -f built-in.o
|
|
rm -f System.map
|
|
@@ -209,15 +269,6 @@ case "${KCONFIG_CONFIG}" in
|
|
. "./${KCONFIG_CONFIG}"
|
|
esac
|
|
|
|
-archive_builtin
|
|
-
|
|
-#link vmlinux.o
|
|
-info LD vmlinux.o
|
|
-modpost_link vmlinux.o
|
|
-
|
|
-# modpost vmlinux.o to check for section mismatches
|
|
-${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o
|
|
-
|
|
# Update version
|
|
info GEN .version
|
|
if [ ! -r .version ]; then
|
|
@@ -228,9 +279,27 @@ else
|
|
expr 0$(cat .old_version) + 1 >.version;
|
|
fi;
|
|
|
|
+archive_builtin
|
|
+
|
|
+#link vmlinux.o
|
|
+modpost_link vmlinux.o
|
|
+
|
|
+# modpost vmlinux.o to check for section mismatches
|
|
+${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o
|
|
+
|
|
# final build of init/
|
|
${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init GCC_PLUGINS_CFLAGS="${GCC_PLUGINS_CFLAGS}"
|
|
|
|
+if [ -n "${CONFIG_LTO_CLANG}" ]; then
|
|
+ # Re-use vmlinux.o, so we can avoid the slow LTO link step in
|
|
+ # vmlinux_link
|
|
+ KBUILD_VMLINUX_INIT=
|
|
+ KBUILD_VMLINUX_MAIN=vmlinux.o
|
|
+
|
|
+ # Call recordmcount if needed
|
|
+ recordmcount vmlinux.o
|
|
+fi
|
|
+
|
|
kallsymso=""
|
|
kallsyms_vmlinux=""
|
|
if [ -n "${CONFIG_KALLSYMS}" ]; then
|