1 #!/bin/sh 1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 # 3 # 4 # link vmlinux 4 # link vmlinux 5 # 5 # 6 # vmlinux is linked from the objects in vmlinu !! 6 # vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_OBJS) and 7 # vmlinux.a contains objects that are linked u !! 7 # $(KBUILD_VMLINUX_LIBS). Most are built-in.a files from top-level directories >> 8 # in the kernel tree, others are specified in arch/$(ARCH)/Makefile. 8 # $(KBUILD_VMLINUX_LIBS) are archives which ar 9 # $(KBUILD_VMLINUX_LIBS) are archives which are linked conditionally 9 # (not within --whole-archive), and do not req 10 # (not within --whole-archive), and do not require symbol indexes added. 10 # 11 # 11 # vmlinux 12 # vmlinux 12 # ^ 13 # ^ 13 # | 14 # | 14 # +--< vmlinux.a !! 15 # +--< $(KBUILD_VMLINUX_OBJS) >> 16 # | +--< init/built-in.a drivers/built-in.a mm/built-in.a + more 15 # | 17 # | 16 # +--< $(KBUILD_VMLINUX_LIBS) 18 # +--< $(KBUILD_VMLINUX_LIBS) 17 # | +--< lib/lib.a + more 19 # | +--< lib/lib.a + more 18 # | 20 # | 19 # +-< ${kallsymso} (see description in KALLS 21 # +-< ${kallsymso} (see description in KALLSYMS section) 20 # 22 # 21 # vmlinux version (uname -v) cannot be updated 23 # vmlinux version (uname -v) cannot be updated during normal 22 # descending-into-subdirs phase since we do no 24 # descending-into-subdirs phase since we do not yet know if we need to 23 # update vmlinux. 25 # update vmlinux. 24 # Therefore this step is delayed until just be 26 # Therefore this step is delayed until just before final link of vmlinux. 25 # 27 # 26 # System.map is generated to document addresse 28 # System.map is generated to document addresses of all kernel symbols 27 29 28 # Error out on error 30 # Error out on error 29 set -e 31 set -e 30 32 31 LD="$1" 33 LD="$1" 32 KBUILD_LDFLAGS="$2" 34 KBUILD_LDFLAGS="$2" 33 LDFLAGS_vmlinux="$3" 35 LDFLAGS_vmlinux="$3" 34 36 35 is_enabled() { 37 is_enabled() { 36 grep -q "^$1=y" include/config/auto.co 38 grep -q "^$1=y" include/config/auto.conf 37 } 39 } 38 40 39 # Nice output in kbuild format 41 # Nice output in kbuild format 40 # Will be supressed by "make -s" 42 # Will be supressed by "make -s" 41 info() 43 info() 42 { 44 { 43 printf " %-7s %s\n" "${1}" "${2}" 45 printf " %-7s %s\n" "${1}" "${2}" 44 } 46 } 45 47 >> 48 # Generate a linker script to ensure correct ordering of initcalls. >> 49 gen_initcalls() >> 50 { >> 51 info GEN .tmp_initcalls.lds >> 52 >> 53 ${PYTHON3} ${srctree}/scripts/jobserver-exec \ >> 54 ${PERL} ${srctree}/scripts/generate_initcall_order.pl \ >> 55 ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS} \ >> 56 > .tmp_initcalls.lds >> 57 } >> 58 >> 59 # If CONFIG_LTO_CLANG is selected, collect generated symbol versions into >> 60 # .tmp_symversions.lds >> 61 gen_symversions() >> 62 { >> 63 info GEN .tmp_symversions.lds >> 64 rm -f .tmp_symversions.lds >> 65 >> 66 for o in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do >> 67 if [ -f ${o}.symversions ]; then >> 68 cat ${o}.symversions >> .tmp_symversions.lds >> 69 fi >> 70 done >> 71 } >> 72 >> 73 # Link of vmlinux.o used for section mismatch analysis >> 74 # ${1} output file >> 75 modpost_link() >> 76 { >> 77 local objects >> 78 local lds="" >> 79 >> 80 objects="--whole-archive \ >> 81 ${KBUILD_VMLINUX_OBJS} \ >> 82 --no-whole-archive \ >> 83 --start-group \ >> 84 ${KBUILD_VMLINUX_LIBS} \ >> 85 --end-group" >> 86 >> 87 if is_enabled CONFIG_LTO_CLANG; then >> 88 gen_initcalls >> 89 lds="-T .tmp_initcalls.lds" >> 90 >> 91 if is_enabled CONFIG_MODVERSIONS; then >> 92 gen_symversions >> 93 lds="${lds} -T .tmp_symversions.lds" >> 94 fi >> 95 >> 96 # This might take a while, so indicate that we're doing >> 97 # an LTO link >> 98 info LTO ${1} >> 99 else >> 100 info LD ${1} >> 101 fi >> 102 >> 103 ${LD} ${KBUILD_LDFLAGS} -r -o ${1} ${lds} ${objects} >> 104 } >> 105 >> 106 objtool_link() >> 107 { >> 108 local objtoolcmd; >> 109 local objtoolopt; >> 110 >> 111 if is_enabled CONFIG_STACK_VALIDATION && \ >> 112 ( is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT ); then >> 113 >> 114 # Don't perform vmlinux validation unless explicitly requested, >> 115 # but run objtool on vmlinux.o now that we have an object file. >> 116 if is_enabled CONFIG_UNWINDER_ORC; then >> 117 objtoolcmd="orc generate" >> 118 fi >> 119 >> 120 objtoolopt="${objtoolopt} --lto" >> 121 >> 122 if is_enabled CONFIG_X86_KERNEL_IBT; then >> 123 objtoolopt="${objtoolopt} --ibt" >> 124 fi >> 125 >> 126 if is_enabled CONFIG_FTRACE_MCOUNT_USE_OBJTOOL; then >> 127 objtoolopt="${objtoolopt} --mcount" >> 128 fi >> 129 fi >> 130 >> 131 if is_enabled CONFIG_VMLINUX_VALIDATION; then >> 132 objtoolopt="${objtoolopt} --noinstr" >> 133 if is_enabled CONFIG_CPU_UNRET_ENTRY; then >> 134 objtoolopt="${objtoolopt} --unret" >> 135 fi >> 136 fi >> 137 >> 138 if [ -n "${objtoolopt}" ]; then >> 139 if [ -z "${objtoolcmd}" ]; then >> 140 objtoolcmd="check" >> 141 fi >> 142 objtoolopt="${objtoolopt} --vmlinux" >> 143 if ! is_enabled CONFIG_FRAME_POINTER; then >> 144 objtoolopt="${objtoolopt} --no-fp" >> 145 fi >> 146 if is_enabled CONFIG_GCOV_KERNEL; then >> 147 objtoolopt="${objtoolopt} --no-unreachable" >> 148 fi >> 149 if is_enabled CONFIG_RETPOLINE; then >> 150 objtoolopt="${objtoolopt} --retpoline" >> 151 fi >> 152 if is_enabled CONFIG_X86_SMAP; then >> 153 objtoolopt="${objtoolopt} --uaccess" >> 154 fi >> 155 if is_enabled CONFIG_SLS; then >> 156 objtoolopt="${objtoolopt} --sls" >> 157 fi >> 158 info OBJTOOL ${1} >> 159 tools/objtool/objtool ${objtoolcmd} ${objtoolopt} ${1} >> 160 fi >> 161 } >> 162 46 # Link of vmlinux 163 # Link of vmlinux 47 # ${1} - output file 164 # ${1} - output file >> 165 # ${2}, ${3}, ... - optional extra .o files 48 vmlinux_link() 166 vmlinux_link() 49 { 167 { 50 local output=${1} 168 local output=${1} 51 local objs 169 local objs 52 local libs 170 local libs 53 local ld 171 local ld 54 local ldflags 172 local ldflags 55 local ldlibs 173 local ldlibs 56 174 57 info LD ${output} 175 info LD ${output} 58 176 59 # skip output file argument 177 # skip output file argument 60 shift 178 shift 61 179 62 if is_enabled CONFIG_LTO_CLANG || is_e 180 if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT; then 63 # Use vmlinux.o instead of per 181 # Use vmlinux.o instead of performing the slow LTO link again. 64 objs=vmlinux.o 182 objs=vmlinux.o 65 libs= 183 libs= 66 else 184 else 67 objs=vmlinux.a !! 185 objs="${KBUILD_VMLINUX_OBJS}" 68 libs="${KBUILD_VMLINUX_LIBS}" 186 libs="${KBUILD_VMLINUX_LIBS}" 69 fi 187 fi 70 188 71 if is_enabled CONFIG_MODULES; then << 72 objs="${objs} .vmlinux.export. << 73 fi << 74 << 75 objs="${objs} init/version-timestamp.o << 76 << 77 if [ "${SRCARCH}" = "um" ]; then 189 if [ "${SRCARCH}" = "um" ]; then 78 wl=-Wl, 190 wl=-Wl, 79 ld="${CC}" 191 ld="${CC}" 80 ldflags="${CFLAGS_vmlinux}" 192 ldflags="${CFLAGS_vmlinux}" 81 ldlibs="-lutil -lrt -lpthread" 193 ldlibs="-lutil -lrt -lpthread" 82 else 194 else 83 wl= 195 wl= 84 ld="${LD}" 196 ld="${LD}" 85 ldflags="${KBUILD_LDFLAGS} ${L 197 ldflags="${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}" 86 ldlibs= 198 ldlibs= 87 fi 199 fi 88 200 89 ldflags="${ldflags} ${wl}--script=${ob 201 ldflags="${ldflags} ${wl}--script=${objtree}/${KBUILD_LDS}" 90 202 91 # The kallsyms linking does not need d 203 # The kallsyms linking does not need debug symbols included. 92 if [ -n "${strip_debug}" ] ; then !! 204 if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then 93 ldflags="${ldflags} ${wl}--str 205 ldflags="${ldflags} ${wl}--strip-debug" 94 fi 206 fi 95 207 96 if is_enabled CONFIG_VMLINUX_MAP; then 208 if is_enabled CONFIG_VMLINUX_MAP; then 97 ldflags="${ldflags} ${wl}-Map= 209 ldflags="${ldflags} ${wl}-Map=${output}.map" 98 fi 210 fi 99 211 100 ${ld} ${ldflags} -o ${output} 212 ${ld} ${ldflags} -o ${output} \ 101 ${wl}--whole-archive ${objs} $ 213 ${wl}--whole-archive ${objs} ${wl}--no-whole-archive \ 102 ${wl}--start-group ${libs} ${w 214 ${wl}--start-group ${libs} ${wl}--end-group \ 103 ${kallsymso} ${btf_vmlinux_bin !! 215 $@ ${ldlibs} 104 } 216 } 105 217 106 # generate .BTF typeinfo from DWARF debuginfo 218 # generate .BTF typeinfo from DWARF debuginfo 107 # ${1} - vmlinux image 219 # ${1} - vmlinux image >> 220 # ${2} - file to dump raw BTF data into 108 gen_btf() 221 gen_btf() 109 { 222 { 110 local pahole_ver 223 local pahole_ver 111 local btf_data=${1}.btf.o << 112 224 113 if ! [ -x "$(command -v ${PAHOLE})" ]; 225 if ! [ -x "$(command -v ${PAHOLE})" ]; then 114 echo >&2 "BTF: ${1}: pahole ($ 226 echo >&2 "BTF: ${1}: pahole (${PAHOLE}) is not available" 115 return 1 227 return 1 116 fi 228 fi 117 229 118 pahole_ver=$(${PAHOLE} --version | sed 230 pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/') 119 if [ "${pahole_ver}" -lt "116" ]; then 231 if [ "${pahole_ver}" -lt "116" ]; then 120 echo >&2 "BTF: ${1}: pahole ve 232 echo >&2 "BTF: ${1}: pahole version $(${PAHOLE} --version) is too old, need at least v1.16" 121 return 1 233 return 1 122 fi 234 fi 123 235 124 info BTF "${btf_data}" !! 236 vmlinux_link ${1} >> 237 >> 238 info "BTF" ${2} 125 LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J 239 LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J ${PAHOLE_FLAGS} ${1} 126 240 127 # Create ${btf_data} which contains ju !! 241 # Create ${2} which contains just .BTF section but no symbols. Add 128 # SHF_ALLOC because .BTF will be part 242 # SHF_ALLOC because .BTF will be part of the vmlinux image. --strip-all 129 # deletes all symbols including __star 243 # deletes all symbols including __start_BTF and __stop_BTF, which will 130 # be redefined in the linker script. A 244 # be redefined in the linker script. Add 2>/dev/null to suppress GNU 131 # objcopy warnings: "empty loadable se 245 # objcopy warnings: "empty loadable segment detected at ..." 132 ${OBJCOPY} --only-section=.BTF --set-s 246 ${OBJCOPY} --only-section=.BTF --set-section-flags .BTF=alloc,readonly \ 133 --strip-all ${1} "${btf_data}" !! 247 --strip-all ${1} ${2} 2>/dev/null 134 # Change e_type to ET_REL so that it c 248 # Change e_type to ET_REL so that it can be used to link final vmlinux. 135 # GNU ld 2.35+ and lld do not allow an !! 249 # Unlike GNU ld, lld does not allow an ET_EXEC input. 136 if is_enabled CONFIG_CPU_BIG_ENDIAN; t !! 250 printf '\1' | dd of=${2} conv=notrunc bs=1 seek=16 status=none 137 et_rel='\0\1' << 138 else << 139 et_rel='\1\0' << 140 fi << 141 printf "${et_rel}" | dd of="${btf_data << 142 << 143 btf_vmlinux_bin_o=${btf_data} << 144 } 251 } 145 252 146 # Create ${2}.o file with all symbols from the !! 253 # Create ${2} .S file with all symbols from the ${1} object file 147 kallsyms() 254 kallsyms() 148 { 255 { 149 local kallsymopt; 256 local kallsymopt; 150 257 151 if is_enabled CONFIG_KALLSYMS_ALL; the 258 if is_enabled CONFIG_KALLSYMS_ALL; then 152 kallsymopt="${kallsymopt} --al 259 kallsymopt="${kallsymopt} --all-symbols" 153 fi 260 fi 154 261 155 if is_enabled CONFIG_KALLSYMS_ABSOLUTE 262 if is_enabled CONFIG_KALLSYMS_ABSOLUTE_PERCPU; then 156 kallsymopt="${kallsymopt} --ab 263 kallsymopt="${kallsymopt} --absolute-percpu" 157 fi 264 fi 158 265 159 info KSYMS "${2}.S" !! 266 if is_enabled CONFIG_KALLSYMS_BASE_RELATIVE; then 160 scripts/kallsyms ${kallsymopt} "${1}" !! 267 kallsymopt="${kallsymopt} --base-relative" 161 !! 268 fi 162 info AS "${2}.o" << 163 ${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE << 164 ${KBUILD_AFLAGS} ${KBUILD_AFLAGS << 165 269 166 kallsymso=${2}.o !! 270 info KSYMS ${2} >> 271 ${NM} -n ${1} | scripts/kallsyms ${kallsymopt} > ${2} 167 } 272 } 168 273 169 # Perform kallsyms for the given temporary vml !! 274 # Perform one step in kallsyms generation, including temporary linking of 170 sysmap_and_kallsyms() !! 275 # vmlinux. >> 276 kallsyms_step() 171 { 277 { 172 mksysmap "${1}" "${1}.syms" !! 278 kallsymso_prev=${kallsymso} 173 kallsyms "${1}.syms" "${1}.kallsyms" !! 279 kallsyms_vmlinux=.tmp_vmlinux.kallsyms${1} >> 280 kallsymso=${kallsyms_vmlinux}.o >> 281 kallsyms_S=${kallsyms_vmlinux}.S >> 282 >> 283 vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o} >> 284 kallsyms ${kallsyms_vmlinux} ${kallsyms_S} 174 285 175 kallsyms_sysmap=${1}.syms !! 286 info AS ${kallsyms_S} >> 287 ${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \ >> 288 ${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \ >> 289 -c -o ${kallsymso} ${kallsyms_S} 176 } 290 } 177 291 178 # Create map file with all symbols from ${1} 292 # Create map file with all symbols from ${1} 179 # See mksymap for additional details 293 # See mksymap for additional details 180 mksysmap() 294 mksysmap() 181 { 295 { 182 info NM ${2} !! 296 ${CONFIG_SHELL} "${srctree}/scripts/mksysmap" ${1} ${2} 183 ${NM} -n "${1}" | sed -f "${srctree}/s << 184 } 297 } 185 298 186 sorttable() 299 sorttable() 187 { 300 { 188 ${objtree}/scripts/sorttable ${1} 301 ${objtree}/scripts/sorttable ${1} 189 } 302 } 190 303 >> 304 # Delete output files in case of error 191 cleanup() 305 cleanup() 192 { 306 { 193 rm -f .btf.* 307 rm -f .btf.* >> 308 rm -f .tmp_System.map >> 309 rm -f .tmp_initcalls.lds >> 310 rm -f .tmp_symversions.lds >> 311 rm -f .tmp_vmlinux* 194 rm -f System.map 312 rm -f System.map 195 rm -f vmlinux 313 rm -f vmlinux 196 rm -f vmlinux.map 314 rm -f vmlinux.map >> 315 rm -f vmlinux.o >> 316 rm -f .vmlinux.d 197 } 317 } 198 318 199 # Use "make V=1" to debug this script 319 # Use "make V=1" to debug this script 200 case "${KBUILD_VERBOSE}" in 320 case "${KBUILD_VERBOSE}" in 201 *1*) 321 *1*) 202 set -x 322 set -x 203 ;; 323 ;; 204 esac 324 esac 205 325 206 if [ "$1" = "clean" ]; then 326 if [ "$1" = "clean" ]; then 207 cleanup 327 cleanup 208 exit 0 328 exit 0 209 fi 329 fi 210 330 211 ${MAKE} -f "${srctree}/scripts/Makefile.build" !! 331 # Update version 212 !! 332 info GEN .version 213 btf_vmlinux_bin_o= !! 333 if [ -r .version ]; then 214 kallsymso= !! 334 VERSION=$(expr 0$(cat .version) + 1) 215 strip_debug= !! 335 echo $VERSION > .version 216 !! 336 else 217 if is_enabled CONFIG_KALLSYMS; then !! 337 rm -f .version 218 truncate -s0 .tmp_vmlinux.kallsyms0.sy !! 338 echo 1 > .version 219 kallsyms .tmp_vmlinux.kallsyms0.syms . !! 339 fi; 220 fi !! 340 221 !! 341 # final build of init/ 222 if is_enabled CONFIG_KALLSYMS || is_enabled CO !! 342 ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init need-builtin=1 223 !! 343 224 # The kallsyms linking does not need d !! 344 #link vmlinux.o 225 if ! is_enabled CONFIG_DEBUG_INFO_BTF; !! 345 modpost_link vmlinux.o 226 strip_debug=1 !! 346 objtool_link vmlinux.o 227 fi !! 347 228 !! 348 # modpost vmlinux.o to check for section mismatches 229 vmlinux_link .tmp_vmlinux1 !! 349 ${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1 230 fi !! 350 >> 351 info MODINFO modules.builtin.modinfo >> 352 ${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo >> 353 info GEN modules.builtin >> 354 # The second line aids cases where multiple modules share the same object. >> 355 tr '\0' '\n' < modules.builtin.modinfo | sed -n 's/^[[:alnum:]:_]*\.file=//p' | >> 356 tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$/.ko/' > modules.builtin 231 357 >> 358 btf_vmlinux_bin_o="" 232 if is_enabled CONFIG_DEBUG_INFO_BTF; then 359 if is_enabled CONFIG_DEBUG_INFO_BTF; then 233 if ! gen_btf .tmp_vmlinux1; then !! 360 btf_vmlinux_bin_o=.btf.vmlinux.bin.o >> 361 if ! gen_btf .tmp_vmlinux.btf $btf_vmlinux_bin_o ; then 234 echo >&2 "Failed to generate B 362 echo >&2 "Failed to generate BTF for vmlinux" 235 echo >&2 "Try to disable CONFI 363 echo >&2 "Try to disable CONFIG_DEBUG_INFO_BTF" 236 exit 1 364 exit 1 237 fi 365 fi 238 fi 366 fi 239 367 >> 368 kallsymso="" >> 369 kallsymso_prev="" >> 370 kallsyms_vmlinux="" 240 if is_enabled CONFIG_KALLSYMS; then 371 if is_enabled CONFIG_KALLSYMS; then 241 372 242 # kallsyms support 373 # kallsyms support 243 # Generate section listing all symbols 374 # Generate section listing all symbols and add it into vmlinux 244 # It's a four step process: !! 375 # It's a three step process: 245 # 0) Generate a dummy __kallsyms with << 246 # 1) Link .tmp_vmlinux.kallsyms1 so i 376 # 1) Link .tmp_vmlinux.kallsyms1 so it has all symbols and sections, 247 # with a dummy __kallsyms. !! 377 # but __kallsyms is empty. 248 # Running kallsyms on that gives u 378 # Running kallsyms on that gives us .tmp_kallsyms1.o with 249 # the right size 379 # the right size 250 # 2) Link .tmp_vmlinux.kallsyms2 so i 380 # 2) Link .tmp_vmlinux.kallsyms2 so it now has a __kallsyms section of 251 # the right size, but due to the a 381 # the right size, but due to the added section, some 252 # addresses have shifted. 382 # addresses have shifted. 253 # From here, we generate a correct 383 # From here, we generate a correct .tmp_vmlinux.kallsyms2.o 254 # 3) That link may have expanded the 384 # 3) That link may have expanded the kernel image enough that 255 # more linker branch stubs / tramp 385 # more linker branch stubs / trampolines had to be added, which 256 # introduces new names, which furt 386 # introduces new names, which further expands kallsyms. Do another 257 # pass if that is the case. In the 387 # pass if that is the case. In theory it's possible this results 258 # in even more stubs, but unlikely 388 # in even more stubs, but unlikely. 259 # KALLSYMS_EXTRA_PASS=1 may also u 389 # KALLSYMS_EXTRA_PASS=1 may also used to debug or work around 260 # other bugs. 390 # other bugs. 261 # 4) The correct ${kallsymso} is link 391 # 4) The correct ${kallsymso} is linked into the final vmlinux. 262 # 392 # 263 # a) Verify that the System.map from 393 # a) Verify that the System.map from vmlinux matches the map from 264 # ${kallsymso}. 394 # ${kallsymso}. 265 395 266 # The kallsyms linking does not need d !! 396 kallsyms_step 1 267 strip_debug=1 !! 397 kallsyms_step 2 268 << 269 sysmap_and_kallsyms .tmp_vmlinux1 << 270 size1=$(${CONFIG_SHELL} "${srctree}/sc << 271 398 272 vmlinux_link .tmp_vmlinux2 !! 399 # step 3 273 sysmap_and_kallsyms .tmp_vmlinux2 !! 400 size1=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" ${kallsymso_prev}) 274 size2=$(${CONFIG_SHELL} "${srctree}/sc 401 size2=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" ${kallsymso}) 275 402 276 if [ $size1 -ne $size2 ] || [ -n "${KA 403 if [ $size1 -ne $size2 ] || [ -n "${KALLSYMS_EXTRA_PASS}" ]; then 277 vmlinux_link .tmp_vmlinux3 !! 404 kallsyms_step 3 278 sysmap_and_kallsyms .tmp_vmlin << 279 fi 405 fi 280 fi 406 fi 281 407 282 strip_debug= !! 408 vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o} 283 << 284 vmlinux_link vmlinux << 285 409 286 # fill in BTF IDs 410 # fill in BTF IDs 287 if is_enabled CONFIG_DEBUG_INFO_BTF && is_enab 411 if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then 288 info BTFIDS vmlinux 412 info BTFIDS vmlinux 289 ${RESOLVE_BTFIDS} vmlinux 413 ${RESOLVE_BTFIDS} vmlinux 290 fi 414 fi 291 415 >> 416 info SYSMAP System.map 292 mksysmap vmlinux System.map 417 mksysmap vmlinux System.map 293 418 294 if is_enabled CONFIG_BUILDTIME_TABLE_SORT; the 419 if is_enabled CONFIG_BUILDTIME_TABLE_SORT; then 295 info SORTTAB vmlinux 420 info SORTTAB vmlinux 296 if ! sorttable vmlinux; then 421 if ! sorttable vmlinux; then 297 echo >&2 Failed to sort kernel 422 echo >&2 Failed to sort kernel tables 298 exit 1 423 exit 1 299 fi 424 fi 300 fi 425 fi 301 426 302 # step a (see comment above) 427 # step a (see comment above) 303 if is_enabled CONFIG_KALLSYMS; then 428 if is_enabled CONFIG_KALLSYMS; then 304 if ! cmp -s System.map "${kallsyms_sys !! 429 mksysmap ${kallsyms_vmlinux} .tmp_System.map >> 430 >> 431 if ! cmp -s System.map .tmp_System.map; then 305 echo >&2 Inconsistent kallsyms 432 echo >&2 Inconsistent kallsyms data 306 echo >&2 'Try "make KALLSYMS_E !! 433 echo >&2 Try "make KALLSYMS_EXTRA_PASS=1" as a workaround 307 exit 1 434 exit 1 308 fi 435 fi 309 fi 436 fi 310 437 311 # For fixdep 438 # For fixdep 312 echo "vmlinux: $0" > .vmlinux.d 439 echo "vmlinux: $0" > .vmlinux.d
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.