Message ID | 20210819005744.644908-9-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | kbuild: refactoring after Clang LTO | expand |
On Thu, Aug 19, 2021 at 09:57:39AM +0900, Masahiro Yamada wrote: > For ARCH=um, ${CC} is used as the linker driver. Hence, the linker > options are prefixed with -Wl, . > > Merge the similar code. > > I replaced the -T option with the long option --script= so that it > works well with/without ${wl}. And same for this one. So much better! Reviewed-by: Kees Cook <keescook@chromium.org> -Kees > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > scripts/link-vmlinux.sh | 56 +++++++++++++++++------------------------ > 1 file changed, 23 insertions(+), 33 deletions(-) > > diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh > index 7b9c62e4d54a..d74cee5c4326 100755 > --- a/scripts/link-vmlinux.sh > +++ b/scripts/link-vmlinux.sh > @@ -149,13 +149,12 @@ objtool_link() > # ${2}, ${3}, ... - optional extra .o files > vmlinux_link() > { > - local lds="${objtree}/${KBUILD_LDS}" > local output=${1} > - local objects > - local strip_debug > - local map_option > local objs > local libs > + local ld > + local ldflags > + local ldlibs > > info LD ${output} > > @@ -171,42 +170,33 @@ vmlinux_link() > libs="${KBUILD_VMLINUX_LIBS}" > fi > > + if [ "${SRCARCH}" = "um" ]; then > + wl=-Wl, > + ld="${CC}" > + ldflags="${CFLAGS_vmlinux}" > + ldlibs="-lutil -lrt -lpthread" > + else > + wl= > + ld="${LD}" > + ldflags="${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}" > + ldlibs= > + fi > + > + ldflags="${ldflags} ${wl}--script=${objtree}/${KBUILD_LDS}" > + > # The kallsyms linking does not need debug symbols included. > if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then > - strip_debug=-Wl,--strip-debug > + ldflags="${ldflags} ${wl}--strip-debug" > fi > > if [ -n "${CONFIG_VMLINUX_MAP}" ]; then > - map_option="-Map=${output}.map" > + ldflags="${ldflags} ${wl}-Map=${output}.map" > fi > > - if [ "${SRCARCH}" != "um" ]; then > - objects="--whole-archive ${objs} --no-whole-archive \ > - --start-group ${libs} --end-group \ > - $@" > - > - ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \ > - ${strip_debug#-Wl,} \ > - -o ${output} \ > - ${map_option} \ > - -T ${lds} ${objects} > - else > - objects="-Wl,--whole-archive \ > - ${KBUILD_VMLINUX_OBJS} \ > - -Wl,--no-whole-archive \ > - -Wl,--start-group \ > - ${KBUILD_VMLINUX_LIBS} \ > - -Wl,--end-group \ > - ${@}" > - > - ${CC} ${CFLAGS_vmlinux} \ > - ${strip_debug} \ > - -o ${output} \ > - ${map_option:+-Wl,${map_option}} \ > - -Wl,-T,${lds} \ > - ${objects} \ > - -lutil -lrt -lpthread > - fi > + ${ld} ${ldflags} -o ${output} \ > + ${wl}--whole-archive ${objs} ${wl}--no-whole-archive \ > + ${wl}--start-group ${libs} ${wl}--end-group \ > + $@ ${ldlibs} > } > > # generate .BTF typeinfo from DWARF debuginfo > -- > 2.30.2 >
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index 7b9c62e4d54a..d74cee5c4326 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -149,13 +149,12 @@ objtool_link() # ${2}, ${3}, ... - optional extra .o files vmlinux_link() { - local lds="${objtree}/${KBUILD_LDS}" local output=${1} - local objects - local strip_debug - local map_option local objs local libs + local ld + local ldflags + local ldlibs info LD ${output} @@ -171,42 +170,33 @@ vmlinux_link() libs="${KBUILD_VMLINUX_LIBS}" fi + if [ "${SRCARCH}" = "um" ]; then + wl=-Wl, + ld="${CC}" + ldflags="${CFLAGS_vmlinux}" + ldlibs="-lutil -lrt -lpthread" + else + wl= + ld="${LD}" + ldflags="${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}" + ldlibs= + fi + + ldflags="${ldflags} ${wl}--script=${objtree}/${KBUILD_LDS}" + # The kallsyms linking does not need debug symbols included. if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then - strip_debug=-Wl,--strip-debug + ldflags="${ldflags} ${wl}--strip-debug" fi if [ -n "${CONFIG_VMLINUX_MAP}" ]; then - map_option="-Map=${output}.map" + ldflags="${ldflags} ${wl}-Map=${output}.map" fi - if [ "${SRCARCH}" != "um" ]; then - objects="--whole-archive ${objs} --no-whole-archive \ - --start-group ${libs} --end-group \ - $@" - - ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \ - ${strip_debug#-Wl,} \ - -o ${output} \ - ${map_option} \ - -T ${lds} ${objects} - else - objects="-Wl,--whole-archive \ - ${KBUILD_VMLINUX_OBJS} \ - -Wl,--no-whole-archive \ - -Wl,--start-group \ - ${KBUILD_VMLINUX_LIBS} \ - -Wl,--end-group \ - ${@}" - - ${CC} ${CFLAGS_vmlinux} \ - ${strip_debug} \ - -o ${output} \ - ${map_option:+-Wl,${map_option}} \ - -Wl,-T,${lds} \ - ${objects} \ - -lutil -lrt -lpthread - fi + ${ld} ${ldflags} -o ${output} \ + ${wl}--whole-archive ${objs} ${wl}--no-whole-archive \ + ${wl}--start-group ${libs} ${wl}--end-group \ + $@ ${ldlibs} } # generate .BTF typeinfo from DWARF debuginfo
For ARCH=um, ${CC} is used as the linker driver. Hence, the linker options are prefixed with -Wl, . Merge the similar code. I replaced the -T option with the long option --script= so that it works well with/without ${wl}. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- scripts/link-vmlinux.sh | 56 +++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 33 deletions(-)