summaryrefslogtreecommitdiffstats
path: root/scripts/link-vmlinux.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/link-vmlinux.sh')
-rwxr-xr-xscripts/link-vmlinux.sh71
1 files changed, 60 insertions, 11 deletions
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 4f727eb5ec43..f742c65108b9 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -37,12 +37,40 @@ info()
37 fi 37 fi
38} 38}
39 39
40# Thin archive build here makes a final archive with
41# symbol table and indexes from vmlinux objects, which can be
42# used as input to linker.
43#
44# Traditional incremental style of link does not require this step
45#
46# built-in.o output file
47#
48archive_builtin()
49{
50 if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
51 info AR built-in.o
52 rm -f built-in.o;
53 ${AR} rcsT${KBUILD_ARFLAGS} built-in.o \
54 ${KBUILD_VMLINUX_INIT} \
55 ${KBUILD_VMLINUX_MAIN}
56 fi
57}
58
40# Link of vmlinux.o used for section mismatch analysis 59# Link of vmlinux.o used for section mismatch analysis
41# ${1} output file 60# ${1} output file
42modpost_link() 61modpost_link()
43{ 62{
44 ${LD} ${LDFLAGS} -r -o ${1} ${KBUILD_VMLINUX_INIT} \ 63 local objects
45 --start-group ${KBUILD_VMLINUX_MAIN} --end-group 64
65 if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
66 objects="--whole-archive built-in.o"
67 else
68 objects="${KBUILD_VMLINUX_INIT} \
69 --start-group \
70 ${KBUILD_VMLINUX_MAIN} \
71 --end-group"
72 fi
73 ${LD} ${LDFLAGS} -r -o ${1} ${objects}
46} 74}
47 75
48# Link of vmlinux 76# Link of vmlinux
@@ -51,18 +79,36 @@ modpost_link()
51vmlinux_link() 79vmlinux_link()
52{ 80{
53 local lds="${objtree}/${KBUILD_LDS}" 81 local lds="${objtree}/${KBUILD_LDS}"
82 local objects
54 83
55 if [ "${SRCARCH}" != "um" ]; then 84 if [ "${SRCARCH}" != "um" ]; then
56 ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \ 85 if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
57 -T ${lds} ${KBUILD_VMLINUX_INIT} \ 86 objects="--whole-archive built-in.o ${1}"
58 --start-group ${KBUILD_VMLINUX_MAIN} --end-group ${1} 87 else
88 objects="${KBUILD_VMLINUX_INIT} \
89 --start-group \
90 ${KBUILD_VMLINUX_MAIN} \
91 --end-group \
92 ${1}"
93 fi
94
95 ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
96 -T ${lds} ${objects}
59 else 97 else
60 ${CC} ${CFLAGS_vmlinux} -o ${2} \ 98 if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
61 -Wl,-T,${lds} ${KBUILD_VMLINUX_INIT} \ 99 objects="-Wl,--whole-archive built-in.o ${1}"
62 -Wl,--start-group \ 100 else
63 ${KBUILD_VMLINUX_MAIN} \ 101 objects="${KBUILD_VMLINUX_INIT} \
64 -Wl,--end-group \ 102 -Wl,--start-group \
65 -lutil -lrt -lpthread ${1} 103 ${KBUILD_VMLINUX_MAIN} \
104 -Wl,--end-group \
105 ${1}"
106 fi
107
108 ${CC} ${CFLAGS_vmlinux} -o ${2} \
109 -Wl,-T,${lds} \
110 ${objects} \
111 -lutil -lrt -lpthread
66 rm -f linux 112 rm -f linux
67 fi 113 fi
68} 114}
@@ -119,6 +165,7 @@ cleanup()
119 rm -f .tmp_kallsyms* 165 rm -f .tmp_kallsyms*
120 rm -f .tmp_version 166 rm -f .tmp_version
121 rm -f .tmp_vmlinux* 167 rm -f .tmp_vmlinux*
168 rm -f built-in.o
122 rm -f System.map 169 rm -f System.map
123 rm -f vmlinux 170 rm -f vmlinux
124 rm -f vmlinux.o 171 rm -f vmlinux.o
@@ -162,6 +209,8 @@ case "${KCONFIG_CONFIG}" in
162 . "./${KCONFIG_CONFIG}" 209 . "./${KCONFIG_CONFIG}"
163esac 210esac
164 211
212archive_builtin
213
165#link vmlinux.o 214#link vmlinux.o
166info LD vmlinux.o 215info LD vmlinux.o
167modpost_link vmlinux.o 216modpost_link vmlinux.o