Re: [PATCH 08/13] kbuild: merge vmlinux_link() between ARCH=um and other architectures

From: Kees Cook
Date: Wed Aug 18 2021 - 22:43:33 EST


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@xxxxxxxxxxxx>

-Kees

>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> ---
>
> 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
>

--
Kees Cook