Re: Odd build breakage in 4.9-rc7

From: Nicolas Pitre
Date: Thu Dec 01 2016 - 12:42:43 EST


On Thu, 1 Dec 2016, Paul Bolle wrote:

> On Thu, 2016-12-01 at 10:01 +0100, Paul Bolle wrote:
> > Perhaps this is all documented somewhere. But even then it would be nice if
> > the build would fail right at the start. Ie, the build probably should fail if
> > one does "make bzImage" while having a .config with
> > Â Â CONFIG_TRIM_UNUSED_KSYMS=y
> > Â Â CONFIG_MODULES=y
> > Â Â # CONFIG_MODVERSIONS is not set
> >
> > Because it seems in that case the subsequent "make modules" will then end in
> > this flood of ERRORs.Â
>
> Or, alternatively, we could use something like the following hack to keep a
> two step build (ie, "make bzImage" and "make modules") do the right thing even
> if CONFING_MODVERSIONS is not set.
>
> The hack was cobbled together with a fair amount of cargo-cult coding so
> perhaps a hunk or two aren't really needed. We'll see.

OK I understand what the problem is. However most of those hunks below
are definitely wrong. ;-)

I'm trying to determine the best way to fix it. Stay tuned.


> Paul Bolle
>
> diff --git a/Makefile b/Makefile
> index 694111b43cf8..5820f803ca64 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -321,7 +321,7 @@ KBUILD_BUILTIN := 1
> # make sure the checksums are up to date before we record them.
>
> ifeq ($(MAKECMDGOALS),modules)
> - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
> + KBUILD_BUILTIN := $(if $(or $(CONFIG_MODVERSIONS),$(CONFIG_TRIM_UNUSED_KSYMS)),1)
> endif
>
> # If we have "make <whatever> modules", compile modules
> diff --git a/scripts/Makefile b/scripts/Makefile
> index 1d80897a9644..f23e5c4f2496 100644
> --- a/scripts/Makefile
> +++ b/scripts/Makefile
> @@ -40,7 +40,9 @@ build_docproc: $(obj)/docproc
> build_check-lc_ctype: $(obj)/check-lc_ctype
> @:
>
> -subdir-$(CONFIG_MODVERSIONS) += genksyms
> +ifeq ($(or $(CONFIG_MODVERSIONS),$(CONFIG_TRIM_UNUSED_KSYMS)),y)
> +subdir-y += genksyms
> +endif
> subdir-y += mod
> subdir-$(CONFIG_SECURITY_SELINUX) += selinux
> subdir-$(CONFIG_DTC) += dtc
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 7675d11ee65e..50ce2cf86b7c 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -182,7 +182,7 @@ $(obj)/%.symtypes : $(src)/%.c FORCE
>
> quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
>
> -ifndef CONFIG_MODVERSIONS
> +ifneq ($(if $(CONFIG_MODVERSIONS),1,$(if $(CONFIG_TRIM_UNUSED_KSYMS),1)),1)
> cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
>
> else
> @@ -358,7 +358,7 @@ $(obj)/%.s: $(src)/%.S FORCE
>
> quiet_cmd_as_o_S = AS $(quiet_modtag) $@
>
> -ifndef CONFIG_MODVERSIONS
> +ifneq ($(if $(CONFIG_MODVERSIONS),1,$(if $(CONFIG_TRIM_UNUSED_KSYMS),1)),1)
> cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
>
> else
> diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
> index 8dc1918b6783..7525da1cc2f7 100755
> --- a/scripts/adjust_autoksyms.sh
> +++ b/scripts/adjust_autoksyms.sh
> @@ -68,7 +68,7 @@ while read sym; do
> done >> "$new_ksyms_file"
>
> # Special case for modversions (see modpost.c)
> -if [ -n "$CONFIG_MODVERSIONS" ]; then
> +if [ -n "$CONFIG_MODVERSIONS" -o -n "$CONFIG_TRIM_UNUSED_KSYMS" ]; then
> echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file"
> fi
>
>