kbuild: error for CONFIG_ORC_UNWINDER is too much
diff mbox series

Message ID 20181217161728.6875-1-cai@lca.pw
State New
Headers show
Series
  • kbuild: error for CONFIG_ORC_UNWINDER is too much
Related show

Commit Message

Qian Cai Dec. 17, 2018, 4:17 p.m. UTC
Since ifdef will be evaluated immediately in the first phrase of the
Makefile read-in, there is no guarantee that the value for
CONFIG_ORC_UNWINDER will be up-to-date until in the second phrase that
this recipe is ran.

include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig

Hence, change error to warning as this is essentially a best guess. The
original bug can be reproduced this way,

* make sure none of libelf-dev, libelf-devel or elfutils-libelf-devel
installed.

 # make distclean

* generate a default .config where CONFIG_UNWINDER_ORC is enabled by
default.
 # make menuconfig (exit -> save)

 # grep CONFIG_UNWINDER_ORC .config
CONFIG_UNWINDER_ORC=y

 # make menuconfig (deselect CONFIG_UNWINDER_ORC)

 # grep CONFIG_UNWINDER_ORC .config
 # CONFIG_UNWINDER_ORC is not set

 # make
Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install
libelf-dev, libelf-devel or elfutils-libelf-devel

 # grep CONFIG_UNWINDER_ORC include/config/auto.conf
CONFIG_UNWINDER_ORC=y

Fixes: 3dd40cb320f (objtool: Upgrade libelf-devel warning to error for
CONFIG_ORC_UNWINDER)
Signed-off-by: Qian Cai <cai@lca.pw>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Josh Poimboeuf Dec. 17, 2018, 5:03 p.m. UTC | #1
On Mon, Dec 17, 2018 at 11:17:28AM -0500, Qian Cai wrote:
> Since ifdef will be evaluated immediately in the first phrase of the
> Makefile read-in, there is no guarantee that the value for
> CONFIG_ORC_UNWINDER will be up-to-date until in the second phrase that
> this recipe is ran.
> 
> include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
> 	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
> 
> Hence, change error to warning as this is essentially a best guess. The
> original bug can be reproduced this way,

But this still doesn't fix the root of the problem, that the check
relies on a stale auto.conf.
Qian Cai Dec. 17, 2018, 5:13 p.m. UTC | #2
On Mon, 2018-12-17 at 11:03 -0600, Josh Poimboeuf wrote:
> On Mon, Dec 17, 2018 at 11:17:28AM -0500, Qian Cai wrote:
> > Since ifdef will be evaluated immediately in the first phrase of the
> > Makefile read-in, there is no guarantee that the value for
> > CONFIG_ORC_UNWINDER will be up-to-date until in the second phrase that
> > this recipe is ran.
> > 
> > include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
> > 	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
> > 
> > Hence, change error to warning as this is essentially a best guess. The
> > original bug can be reproduced this way,
> 
> But this still doesn't fix the root of the problem, that the check
> relies on a stale auto.conf.
> 

Yes, but it at least let people to be able to continue compiling kernel without
prematurely being terminated incorrectly. The good thing is that that check will
be triggered again to print out the right message once auto.conf has been synced
up.

# make
Makefile:966: "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please
install libelf-dev, libelf-devel or elfutils-libelf-devel"
  HOSTCC  scripts/kconfig/conf.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --syncconfig Kconfig
Makefile:968: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev,
libelf-devel or elfutils-libelf-devel"
Josh Poimboeuf Dec. 17, 2018, 5:49 p.m. UTC | #3
On Mon, Dec 17, 2018 at 12:13:59PM -0500, Qian Cai wrote:
> On Mon, 2018-12-17 at 11:03 -0600, Josh Poimboeuf wrote:
> > On Mon, Dec 17, 2018 at 11:17:28AM -0500, Qian Cai wrote:
> > > Since ifdef will be evaluated immediately in the first phrase of the
> > > Makefile read-in, there is no guarantee that the value for
> > > CONFIG_ORC_UNWINDER will be up-to-date until in the second phrase that
> > > this recipe is ran.
> > > 
> > > include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
> > > 	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
> > > 
> > > Hence, change error to warning as this is essentially a best guess. The
> > > original bug can be reproduced this way,
> > 
> > But this still doesn't fix the root of the problem, that the check
> > relies on a stale auto.conf.
> > 
> 
> Yes, but it at least let people to be able to continue compiling kernel without
> prematurely being terminated incorrectly. The good thing is that that check will
> be triggered again to print out the right message once auto.conf has been synced
> up.
> 
> # make
> Makefile:966: "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please
> install libelf-dev, libelf-devel or elfutils-libelf-devel"
>   HOSTCC  scripts/kconfig/conf.o
>   HOSTLD  scripts/kconfig/conf
> scripts/kconfig/conf  --syncconfig Kconfig
> Makefile:968: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev,
> libelf-devel or elfutils-libelf-devel"

Instead of giving false (or silent) warnings, why not just fix the real
problem?

Also the error exists for a reason: if the user misses the warning then
the ORC unwinder is broken and oops stack dumps are much less useful.
Qian Cai Dec. 17, 2018, 6:11 p.m. UTC | #4
On Mon, 2018-12-17 at 11:49 -0600, Josh Poimboeuf wrote:
> On Mon, Dec 17, 2018 at 12:13:59PM -0500, Qian Cai wrote:
> > On Mon, 2018-12-17 at 11:03 -0600, Josh Poimboeuf wrote:
> > > On Mon, Dec 17, 2018 at 11:17:28AM -0500, Qian Cai wrote:
> > > > Since ifdef will be evaluated immediately in the first phrase of the
> > > > Makefile read-in, there is no guarantee that the value for
> > > > CONFIG_ORC_UNWINDER will be up-to-date until in the second phrase that
> > > > this recipe is ran.
> > > > 
> > > > include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
> > > > 	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
> > > > 
> > > > Hence, change error to warning as this is essentially a best guess. The
> > > > original bug can be reproduced this way,
> > > 
> > > But this still doesn't fix the root of the problem, that the check
> > > relies on a stale auto.conf.
> > > 
> > 
> > Yes, but it at least let people to be able to continue compiling kernel
> > without
> > prematurely being terminated incorrectly. The good thing is that that check
> > will
> > be triggered again to print out the right message once auto.conf has been
> > synced
> > up.
> > 
> > # make
> > Makefile:966: "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y,
> > please
> > install libelf-dev, libelf-devel or elfutils-libelf-devel"
> >   HOSTCC  scripts/kconfig/conf.o
> >   HOSTLD  scripts/kconfig/conf
> > scripts/kconfig/conf  --syncconfig Kconfig
> > Makefile:968: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-
> > dev,
> > libelf-devel or elfutils-libelf-devel"
> 
> Instead of giving false (or silent) warnings, why not just fix the real
> problem?

The purpose of this patch here is to fix or revert the regression introduced by
3dd40cb320f (objtool: Upgrade libelf-devel warning to error for
CONFIG_ORC_UNWINDER).

> 
> Also the error exists for a reason: if the user misses the warning then
> the ORC unwinder is broken and oops stack dumps are much less useful.
> 

This is a separate issue. I am all ears if anyone has a better ideal to fix both
issues at the same time.

Patch
diff mbox series

diff --git a/Makefile b/Makefile
index 56d5270f22f8..eeb4ec49d393 100644
--- a/Makefile
+++ b/Makefile
@@ -963,7 +963,7 @@  ifdef CONFIG_STACK_VALIDATION
     objtool_target := tools/objtool FORCE
   else
     ifdef CONFIG_UNWINDER_ORC
-      $(error "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
+      $(warning "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
     else
       $(warning "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
     endif