Skip to contentSkip to conversation

arch/x86//kernel/ftrace.c:35:3: error: #error The following combination is not supported: ((compiler missing -mfentry) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

PATCH New kbuild test robot 4 participants 7 messages Apr 16, 2017 – Apr 19, 2017

Subsystems (2)
lore
Share & tools
lore

kbuild test robot

author build bot
#0 lore raw

Hi Josh,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d5ff0814fda50f0306e102f39640cf5bb76af08e
commit: 3f135e57a4f76d24ae8d8a490314331f0ced40c5 x86/build: Mostly disable '-maccumulate-outgoing-args'
date:   2 weeks ago
config: x86_64-randconfig-s1-04160822 (attached as .config)
compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
reproduce:
        git checkout 3f135e57a4f76d24ae8d8a490314331f0ced40c5
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

>> arch/x86//kernel/ftrace.c:35:3: error: #error The following combination is not supported: ((compiler missing -mfentry) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

vim +35 arch/x86//kernel/ftrace.c

    29	#include <asm/ftrace.h>
    30	#include <asm/nops.h>
    31	
    32	#if defined(CONFIG_FUNCTION_GRAPH_TRACER) && \
    33		!defined(CC_USING_FENTRY) && \
    34		!defined(CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE)
  > 35	# error The following combination is not supported: ((compiler missing -mfentry) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE
    36	#endif
    37	
    38	#ifdef CONFIG_DYNAMIC_FTRACE

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

#1 lore raw
Quoted 15 lines · kbuild test robot

Hi Josh,

FYI, the error/warning still remains.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d5ff0814fda50f0306e102f39640cf5bb76af08e
commit: 3f135e57a4f76d24ae8d8a490314331f0ced40c5 x86/build: Mostly disable '-maccumulate-outgoing-args'
date:   2 weeks ago
config: x86_64-randconfig-s1-04160822 (attached as .config)
compiler: gcc-4.4 (Debian 4.4.7-8) 4.4.7
reproduce:
        git checkout 3f135e57a4f76d24ae8d8a490314331f0ced40c5
        # save the attached .config to linux build tree
        make ARCH=x86_64 
Quoted 3 lines

All errors (new ones prefixed by >>):

Quoted 1 line
Quoted 1 line

arch/x86//kernel/ftrace.c:35:3: error: #error The following combination is not supported: ((compiler missing -mfentry) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

Hi Fengguang,

The error is working as designed. gcc < 4.6.0 doesn't have -mfentry, so it fails the above check on x86. Can you add a skip rule? It should skip building the following case:

  x86 && ((gcc < 4.6.0) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE
Signature · 1 line
Josh
#2 lore raw
Quoted 7 lines · Josh Poimboeuf

The error is working as designed. gcc < 4.6.0 doesn't have -mfentry, so it fails the above check on x86. Can you add a skip rule? It should skip building the following case:

x86 && ((gcc < 4.6.0) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE))
&& CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

This will also break everyone's randconfig builds. The better way would be to check this in the Makefile and disable one of the options

-Andi

#3 lore raw
Quoted 11 lines · Andi Kleen
Quoted 7 lines · Josh Poimboeuf

The error is working as designed. gcc < 4.6.0 doesn't have -mfentry, so it fails the above check on x86. Can you add a skip rule? It should skip building the following case:

x86 && ((gcc < 4.6.0) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE))
&& CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

This will also break everyone's randconfig builds. The better way would be to check this in the Makefile and disable one of the options

I don't know how to disable a config option from the Makefile like that. Any ideas?

BTW, I think it will only break randconfigs for old versions of gcc, before 4.6.0. The error message isn't quite right. I just noticed the FUNCTION_GRAPH_TRACER config has:

  depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE

which means that X86_32 and CC_OPTIMIZE_FOR_SIZE can never be set with FUNCTION_GRAPH_TRACER. So the error message could be simplified to:

  #error The following combination is not supported: (compiler missing -mfentry) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE
Signature · 1 line
Josh
#4 lore raw
Quoted 7 lines · Josh Poimboeuf
Quoted 6 lines · Andi Kleen
Quoted 5 lines · Josh Poimboeuf

The error is working as designed. gcc < 4.6.0 doesn't have -mfentry, so it fails the above check on x86. Can you add a skip rule? It should skip building the following case:

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

x86 && ((gcc < 4.6.0) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE))
&& CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

This will also break everyone's randconfig builds. The better way would be to check this in the Makefile and disable one of the options

I don't know how to disable a config option from the Makefile like that.

You just don't do something in the Makefile, e.g. don't set the -Os

For an example see the LTO Makefile here

https://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-misc.git/tree/scripts/Makefile.lto?h=lto-411-1

-Andi

#5 lore raw

PATCH 1/1 x86/build: convert function graph '-Os' error to warning

Quoted 14 lines · Andi Kleen
Quoted 13 lines · Josh Poimboeuf
Quoted 11 lines · Andi Kleen
Quoted 7 lines · Josh Poimboeuf

The error is working as designed. gcc < 4.6.0 doesn't have -mfentry, so it fails the above check on x86. Can you add a skip rule? It should skip building the following case:

x86 && ((gcc < 4.6.0) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE))
&& CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE

This will also break everyone's randconfig builds. The better way would be to check this in the Makefile and disable one of the options

Quoted 7 lines
Quoted 1 line

I don't know how to disable a config option from the Makefile like that.

You just don't do something in the Makefile, e.g. don't set the -Os

For an example see the LTO Makefile here

https://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-misc.git/tree/scripts/Makefile.lto?h=lto-411-1

This seems to work:

----

From: Josh Poimboeuf <[email protected]>
Subject: [PATCH] x86/build: convert function graph '-Os' error to warning

For pre-4.6.0 versions of GCC, which don't have '-mfentry', the '-maccumulate-outgoing-args' option is required for function graph tracing in order to avoid GCC bug 42109. However, GCC ignores '-maccumulate-outgoing-args' when '-Os' is also set.

Currently we force a build error to prevent that scenario, but that breaks randconfigs. So change the error to a warning which also disables CONFIG_CC_OPTIMIZE_FOR_SIZE.

---
 arch/x86/Makefile        | 8 ++++++++
 arch/x86/kernel/ftrace.c | 6 ------
 2 files changed, 8 insertions(+), 6 deletions(-)
arch/x86/Makefile +8 -0
index 73604e1..4430dd4 100644
@@ -154,6 +154,14 @@ ifdef CONFIG_FUNCTION_GRAPH_TRACER
   else
     ifeq ($(call cc-option-yn, -mfentry), n)
 	ACCUMULATE_OUTGOING_ARGS := 1
+
+	# GCC ignores '-maccumulate-outgoing-args' when used with '-Os'.
+	# If '-Os' is enabled, disable it and print a warning.
+        ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
+          undefine CONFIG_CC_OPTIMIZE_FOR_SIZE
+	  $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE.  Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
+        endif
+
     endif
   endif
 endif
arch/x86/kernel/ftrace.c +0 -6
index 0e5ceac..5b71535 100644
@@ -29,12 +29,6 @@
 #include <asm/ftrace.h>
 #include <asm/nops.h>
 
-#if defined(CONFIG_FUNCTION_GRAPH_TRACER) && \
-	!defined(CC_USING_FENTRY) && \
-	!defined(CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE)
-# error The following combination is not supported: ((compiler missing -mfentry) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE
-#endif
-
 #ifdef CONFIG_DYNAMIC_FTRACE
 
 int ftrace_arch_code_modify_prepare(void)
Signature · 1 line
2.7.4
#6 lore raw

[tip:x86/urgent] x86/build: convert function graph '-Os' error to warning

x86/build: convert function graph '-Os' error to warning
Commit-ID:  a5859c6d7b6114fc0e52be40f7b0f5451c4aba93
Gitweb:     http://git.kernel.org/tip/a5859c6d7b6114fc0e52be40f7b0f5451c4aba93
Author:     Josh Poimboeuf <[email protected]>
AuthorDate: Tue, 18 Apr 2017 16:44:29 -0500
Committer:  Ingo Molnar <[email protected]>
CommitDate: Wed, 19 Apr 2017 09:57:23 +0200

x86/build: convert function graph '-Os' error to warning

For pre-4.6.0 versions of GCC, which don't have '-mfentry', the '-maccumulate-outgoing-args' option is required for function graph tracing in order to avoid GCC bug 42109.

However, GCC ignores '-maccumulate-outgoing-args' when '-Os' is also set.

Currently we force a build error to prevent that scenario, but that breaks randconfigs. So change the error to a warning which also disables CONFIG_CC_OPTIMIZE_FOR_SIZE.

---
 arch/x86/Makefile        | 8 ++++++++
 arch/x86/kernel/ftrace.c | 6 ------
 2 files changed, 8 insertions(+), 6 deletions(-)
arch/x86/Makefile +8 -0
index a94a4d1..49d160b 100644
@@ -154,6 +154,14 @@ ifdef CONFIG_FUNCTION_GRAPH_TRACER
   else
     ifeq ($(call cc-option-yn, -mfentry), n)
 	ACCUMULATE_OUTGOING_ARGS := 1
+
+	# GCC ignores '-maccumulate-outgoing-args' when used with '-Os'.
+	# If '-Os' is enabled, disable it and print a warning.
+        ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
+          undefine CONFIG_CC_OPTIMIZE_FOR_SIZE
+	  $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE.  Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
+        endif
+
     endif
   endif
 endif
arch/x86/kernel/ftrace.c +0 -6
index 0e5ceac..5b71535 100644
@@ -29,12 +29,6 @@
 #include <asm/ftrace.h>
 #include <asm/nops.h>
 
-#if defined(CONFIG_FUNCTION_GRAPH_TRACER) && \
-	!defined(CC_USING_FENTRY) && \
-	!defined(CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE)
-# error The following combination is not supported: ((compiler missing -mfentry) || (CONFIG_X86_32 and !CONFIG_DYNAMIC_FTRACE)) && CONFIG_FUNCTION_GRAPH_TRACER && CONFIG_CC_OPTIMIZE_FOR_SIZE
-#endif
-
 #ifdef CONFIG_DYNAMIC_FTRACE
 
 int ftrace_arch_code_modify_prepare(void)