|
@@ -37,12 +37,40 @@ info()
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
+# Thin archive build here makes a final archive with
|
|
|
+# symbol table and indexes from vmlinux objects, which can be
|
|
|
+# used as input to linker.
|
|
|
+#
|
|
|
+# Traditional incremental style of link does not require this step
|
|
|
+#
|
|
|
+# built-in.o output file
|
|
|
+#
|
|
|
+archive_builtin()
|
|
|
+{
|
|
|
+ if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
|
|
|
+ info AR built-in.o
|
|
|
+ rm -f built-in.o;
|
|
|
+ ${AR} rcsT${KBUILD_ARFLAGS} built-in.o \
|
|
|
+ ${KBUILD_VMLINUX_INIT} \
|
|
|
+ ${KBUILD_VMLINUX_MAIN}
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
# Link of vmlinux.o used for section mismatch analysis
|
|
|
# ${1} output file
|
|
|
modpost_link()
|
|
|
{
|
|
|
- ${LD} ${LDFLAGS} -r -o ${1} ${KBUILD_VMLINUX_INIT} \
|
|
|
- --start-group ${KBUILD_VMLINUX_MAIN} --end-group
|
|
|
+ local objects
|
|
|
+
|
|
|
+ if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
|
|
|
+ objects="--whole-archive built-in.o"
|
|
|
+ else
|
|
|
+ objects="${KBUILD_VMLINUX_INIT} \
|
|
|
+ --start-group \
|
|
|
+ ${KBUILD_VMLINUX_MAIN} \
|
|
|
+ --end-group"
|
|
|
+ fi
|
|
|
+ ${LD} ${LDFLAGS} -r -o ${1} ${objects}
|
|
|
}
|
|
|
|
|
|
# Link of vmlinux
|
|
@@ -51,18 +79,36 @@ modpost_link()
|
|
|
vmlinux_link()
|
|
|
{
|
|
|
local lds="${objtree}/${KBUILD_LDS}"
|
|
|
+ local objects
|
|
|
|
|
|
if [ "${SRCARCH}" != "um" ]; then
|
|
|
- ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
|
|
|
- -T ${lds} ${KBUILD_VMLINUX_INIT} \
|
|
|
- --start-group ${KBUILD_VMLINUX_MAIN} --end-group ${1}
|
|
|
+ if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
|
|
|
+ objects="--whole-archive built-in.o ${1}"
|
|
|
+ else
|
|
|
+ objects="${KBUILD_VMLINUX_INIT} \
|
|
|
+ --start-group \
|
|
|
+ ${KBUILD_VMLINUX_MAIN} \
|
|
|
+ --end-group \
|
|
|
+ ${1}"
|
|
|
+ fi
|
|
|
+
|
|
|
+ ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
|
|
|
+ -T ${lds} ${objects}
|
|
|
else
|
|
|
- ${CC} ${CFLAGS_vmlinux} -o ${2} \
|
|
|
- -Wl,-T,${lds} ${KBUILD_VMLINUX_INIT} \
|
|
|
- -Wl,--start-group \
|
|
|
- ${KBUILD_VMLINUX_MAIN} \
|
|
|
- -Wl,--end-group \
|
|
|
- -lutil -lrt -lpthread ${1}
|
|
|
+ if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
|
|
|
+ objects="-Wl,--whole-archive built-in.o ${1}"
|
|
|
+ else
|
|
|
+ objects="${KBUILD_VMLINUX_INIT} \
|
|
|
+ -Wl,--start-group \
|
|
|
+ ${KBUILD_VMLINUX_MAIN} \
|
|
|
+ -Wl,--end-group \
|
|
|
+ ${1}"
|
|
|
+ fi
|
|
|
+
|
|
|
+ ${CC} ${CFLAGS_vmlinux} -o ${2} \
|
|
|
+ -Wl,-T,${lds} \
|
|
|
+ ${objects} \
|
|
|
+ -lutil -lrt -lpthread
|
|
|
rm -f linux
|
|
|
fi
|
|
|
}
|
|
@@ -119,6 +165,7 @@ cleanup()
|
|
|
rm -f .tmp_kallsyms*
|
|
|
rm -f .tmp_version
|
|
|
rm -f .tmp_vmlinux*
|
|
|
+ rm -f built-in.o
|
|
|
rm -f System.map
|
|
|
rm -f vmlinux
|
|
|
rm -f vmlinux.o
|
|
@@ -162,6 +209,8 @@ case "${KCONFIG_CONFIG}" in
|
|
|
. "./${KCONFIG_CONFIG}"
|
|
|
esac
|
|
|
|
|
|
+archive_builtin
|
|
|
+
|
|
|
#link vmlinux.o
|
|
|
info LD vmlinux.o
|
|
|
modpost_link vmlinux.o
|