Odd build breakage in 4.9-rc7

Message ID alpine.LFD.2.20.1612021456160.13571@knanqh.ubzr
State New
Headers show

Commit Message

Nicolas Pitre Dec. 2, 2016, 8:11 p.m.
On Thu, 1 Dec 2016, Paul Bolle wrote:

> On Thu, 2016-12-01 at 12:42 -0500, Nicolas Pitre wrote:

> > OK I understand what the problem is.  However most of those hunks below 

> > are definitely wrong. ;-)

> 

> Probably. By now I've narrowed it down to just these two hunks:


And they're both wrong. ;-) There is no relation between MODVERSIONS and 
TRIM_UNUSED_KSYMS.

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

> 

> Will do. I'm curious to see what a proper fix might look like.


Here it is:

----- >8
Subject: kbuild: fix building bzImage with CONFIG_TRIM_UNUSED_KSYMS enabled

When building a specific target such as bzImage, modules aren't normally
built. However if CONFIG_TRIM_UNUSED_KSYMS is enabled, no built modules
means none of the exported symbols are used and therefore they will all
be trimmed away from the final kernel. A subsequent "make modules" will
fail because modpost cannot find the needed symbols for those modules in
the kernel binary.

Let's make sure modules are also built whenever CONFIG_TRIM_UNUSED_KSYMS
is enabled and that the kernel binary is properly rebuilt accordingly.

Signed-off-by: Nicolas Pitre <nico@linaro.org>

Comments

Jarod Wilson Dec. 2, 2016, 10:41 p.m. | #1
On 2016-12-02 3:11 PM, Nicolas Pitre wrote:
> On Thu, 1 Dec 2016, Paul Bolle wrote:

>

>> On Thu, 2016-12-01 at 12:42 -0500, Nicolas Pitre wrote:

>>> OK I understand what the problem is.  However most of those hunks below

>>> are definitely wrong. ;-)

>>

>> Probably. By now I've narrowed it down to just these two hunks:

>

> And they're both wrong. ;-) There is no relation between MODVERSIONS and

> TRIM_UNUSED_KSYMS.

>

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

>>

>> Will do. I'm curious to see what a proper fix might look like.

>

> Here it is:

>

> ----- >8

> Subject: kbuild: fix building bzImage with CONFIG_TRIM_UNUSED_KSYMS enabled

>

> When building a specific target such as bzImage, modules aren't normally

> built. However if CONFIG_TRIM_UNUSED_KSYMS is enabled, no built modules

> means none of the exported symbols are used and therefore they will all

> be trimmed away from the final kernel. A subsequent "make modules" will

> fail because modpost cannot find the needed symbols for those modules in

> the kernel binary.

>

> Let's make sure modules are also built whenever CONFIG_TRIM_UNUSED_KSYMS

> is enabled and that the kernel binary is properly rebuilt accordingly.


For my previously failing case, things behave again with this patch. 
Thanks much!

Tested-by: Jarod Wilson <jarod@redhat.com>


-- 
Jarod Wilson
jarod@redhat.com

Patch hide | download patch | download mbox

diff --git a/Makefile b/Makefile
index 9f9c3b577c..b816089e5d 100644
--- a/Makefile
+++ b/Makefile
@@ -607,6 +607,13 @@  else
 include/config/auto.conf: ;
 endif # $(dot-config)
 
+# For the kernel to actually contain only the needed exported symbols,
+# we have to build modules as well to determine what those symbols are.
+# (this can be evaluated only once include/config/auto.conf has been included)
+ifdef CONFIG_TRIM_UNUSED_KSYMS
+  KBUILD_MODULES := 1
+endif
+
 # The all: target is the default when no target is given on the
 # command line.
 # This allow a user to issue only 'make' to build a kernel including modules
@@ -944,7 +951,7 @@  ifdef CONFIG_GDB_SCRIPTS
 endif
 ifdef CONFIG_TRIM_UNUSED_KSYMS
 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
-	  "$(MAKE) KBUILD_MODULES=1 -f $(srctree)/Makefile vmlinux_prereq"
+	  "$(MAKE) -f $(srctree)/Makefile vmlinux"
 endif
 
 # standalone target for easier testing