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
kbuild test robot
build botHi 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
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_32and !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
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_32and !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
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_32and !CONFIG_DYNAMIC_FTRACE))
&&CONFIG_FUNCTION_GRAPH_TRACER&&CONFIG_CC_OPTIMIZE_FOR_SIZEThis will also break everyone's randconfig builds. The better way would be to check this in the
Makefileand 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
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_32and !CONFIG_DYNAMIC_FTRACE))
&&CONFIG_FUNCTION_GRAPH_TRACER&&CONFIG_CC_OPTIMIZE_FOR_SIZEThis will also break everyone's randconfig builds. The better way would be to check this in the
Makefileand disable one of the optionsI don't know how to disable a config option from the
Makefilelike 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
-Andi
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_32and !CONFIG_DYNAMIC_FTRACE))
&&CONFIG_FUNCTION_GRAPH_TRACER&&CONFIG_CC_OPTIMIZE_FOR_SIZEThis will also break everyone's randconfig builds. The better way would be to check this in the
Makefileand disable one of the options
Quoted 7 lines
Quoted 1 line
I don't know how to disable a config option from the
Makefilelike that.You just don't do something in the
Makefile, e.g. don't set the -OsFor an example see the LTO
Makefilehere
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
@@ -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
@@ -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
tip-bot for Josh Poimboeuf
merge bot[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
@@ -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
@@ -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 )