kbuild: factor out the common objtool arguments
scripts/Makefile.build and scripts/link-vmlinux.sh have similar setups for the objtool arguments. It was difficult to factor out them because all the vmlinux build rules were written in a shell script. It is somewhat tedious to touch the two files every time a new objtool option is supported. To reduce the code duplication, move the objtool for vmlinux.o into scripts/Makefile.vmlinux_o. Then, move the common macros to Makefile.lib so they are shared between Makefile.build and Makefile.vmlinux_o. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
This commit is contained in:
@@ -45,76 +45,6 @@ info()
|
||||
printf " %-7s %s\n" "${1}" "${2}"
|
||||
}
|
||||
|
||||
objtool_link()
|
||||
{
|
||||
local objtoolcmd;
|
||||
local objtoolopt;
|
||||
|
||||
if ! is_enabled CONFIG_OBJTOOL; then
|
||||
return;
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_LTO_CLANG || is_enabled CONFIG_X86_KERNEL_IBT; then
|
||||
|
||||
# For LTO and IBT, objtool doesn't run on individual
|
||||
# translation units. Run everything on vmlinux instead.
|
||||
|
||||
if is_enabled CONFIG_HAVE_JUMP_LABEL_HACK; then
|
||||
objtoolopt="${objtoolopt} --hacks=jump_label"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_HAVE_NOINSTR_HACK; then
|
||||
objtoolopt="${objtoolopt} --hacks=noinstr"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_X86_KERNEL_IBT; then
|
||||
objtoolopt="${objtoolopt} --ibt"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_FTRACE_MCOUNT_USE_OBJTOOL; then
|
||||
objtoolopt="${objtoolopt} --mcount"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_UNWINDER_ORC; then
|
||||
objtoolopt="${objtoolopt} --orc"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_RETPOLINE; then
|
||||
objtoolopt="${objtoolopt} --retpoline"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_SLS; then
|
||||
objtoolopt="${objtoolopt} --sls"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_STACK_VALIDATION; then
|
||||
objtoolopt="${objtoolopt} --stackval"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_HAVE_STATIC_CALL_INLINE; then
|
||||
objtoolopt="${objtoolopt} --static-call"
|
||||
fi
|
||||
|
||||
objtoolopt="${objtoolopt} --uaccess"
|
||||
fi
|
||||
|
||||
if is_enabled CONFIG_NOINSTR_VALIDATION; then
|
||||
objtoolopt="${objtoolopt} --noinstr"
|
||||
fi
|
||||
|
||||
if [ -n "${objtoolopt}" ]; then
|
||||
|
||||
if is_enabled CONFIG_GCOV_KERNEL; then
|
||||
objtoolopt="${objtoolopt} --no-unreachable"
|
||||
fi
|
||||
|
||||
objtoolopt="${objtoolopt} --link"
|
||||
|
||||
info OBJTOOL ${1}
|
||||
tools/objtool/objtool ${objtoolopt} ${1}
|
||||
fi
|
||||
}
|
||||
|
||||
# Link of vmlinux
|
||||
# ${1} - output file
|
||||
# ${2}, ${3}, ... - optional extra .o files
|
||||
@@ -298,7 +228,6 @@ ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init need-builtin=1
|
||||
|
||||
#link vmlinux.o
|
||||
${MAKE} -f "${srctree}/scripts/Makefile.vmlinux_o"
|
||||
objtool_link vmlinux.o
|
||||
|
||||
# Generate the list of in-tree objects in vmlinux
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user