diff options
author | Frantisek Hrbata <fhrbata@redhat.com> | 2013-11-12 18:11:27 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-12 22:09:34 -0500 |
commit | 17c568d60af5a810208baf116dc174a2005c6c3e (patch) | |
tree | 7188788fcde835b4ec01f4faaff61f869124b951 /kernel/gcov | |
parent | 5f41ea0386a53414d688cfcaa321a78310e5f7c1 (diff) |
gcov: compile specific gcov implementation based on gcc version
Compile the correct gcov implementation file for the specific gcc version.
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
Cc: Jan Stancek <jstancek@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Acked-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Andy Gospodarek <agospoda@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/gcov')
-rw-r--r-- | kernel/gcov/Kconfig | 30 | ||||
-rw-r--r-- | kernel/gcov/Makefile | 32 |
2 files changed, 61 insertions, 1 deletions
diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig index d4da55d1fb65..d04ce8ac4399 100644 --- a/kernel/gcov/Kconfig +++ b/kernel/gcov/Kconfig | |||
@@ -46,4 +46,34 @@ config GCOV_PROFILE_ALL | |||
46 | larger and run slower. Also be sure to exclude files from profiling | 46 | larger and run slower. Also be sure to exclude files from profiling |
47 | which are not linked to the kernel image to prevent linker errors. | 47 | which are not linked to the kernel image to prevent linker errors. |
48 | 48 | ||
49 | choice | ||
50 | prompt "Specify GCOV format" | ||
51 | depends on GCOV_KERNEL | ||
52 | default GCOV_FORMAT_AUTODETECT | ||
53 | ---help--- | ||
54 | The gcov format is usually determined by the GCC version, but there are | ||
55 | exceptions where format changes are integrated in lower-version GCCs. | ||
56 | In such a case use this option to adjust the format used in the kernel | ||
57 | accordingly. | ||
58 | |||
59 | If unsure, choose "Autodetect". | ||
60 | |||
61 | config GCOV_FORMAT_AUTODETECT | ||
62 | bool "Autodetect" | ||
63 | ---help--- | ||
64 | Select this option to use the format that corresponds to your GCC | ||
65 | version. | ||
66 | |||
67 | config GCOV_FORMAT_3_4 | ||
68 | bool "GCC 3.4 format" | ||
69 | ---help--- | ||
70 | Select this option to use the format defined by GCC 3.4. | ||
71 | |||
72 | config GCOV_FORMAT_4_7 | ||
73 | bool "GCC 4.7 format" | ||
74 | ---help--- | ||
75 | Select this option to use the format defined by GCC 4.7. | ||
76 | |||
77 | endchoice | ||
78 | |||
49 | endmenu | 79 | endmenu |
diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile index e97ca59e2520..52aa7e8de927 100644 --- a/kernel/gcov/Makefile +++ b/kernel/gcov/Makefile | |||
@@ -1,3 +1,33 @@ | |||
1 | ccflags-y := -DSRCTREE='"$(srctree)"' -DOBJTREE='"$(objtree)"' | 1 | ccflags-y := -DSRCTREE='"$(srctree)"' -DOBJTREE='"$(objtree)"' |
2 | 2 | ||
3 | obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o gcc_3_4.o | 3 | # if-lt |
4 | # Usage VAR := $(call if-lt, $(a), $(b)) | ||
5 | # Returns 1 if (a < b) | ||
6 | if-lt = $(shell [ $(1) -lt $(2) ] && echo 1) | ||
7 | |||
8 | ifeq ($(CONFIG_GCOV_FORMAT_3_4),y) | ||
9 | cc-ver := 0304 | ||
10 | else ifeq ($(CONFIG_GCOV_FORMAT_4_7),y) | ||
11 | cc-ver := 0407 | ||
12 | else | ||
13 | # Use cc-version if available, otherwise set 0 | ||
14 | # | ||
15 | # scripts/Kbuild.include, which contains cc-version function, is not included | ||
16 | # during make clean "make -f scripts/Makefile.clean obj=kernel/gcov" | ||
17 | # Meaning cc-ver is empty causing if-lt test to fail with | ||
18 | # "/bin/sh: line 0: [: -lt: unary operator expected" error mesage. | ||
19 | # This has no affect on the clean phase, but the error message could be | ||
20 | # confusing/annoying. So this dummy workaround sets cc-ver to zero if cc-version | ||
21 | # is not available. We can probably move if-lt to Kbuild.include, so it's also | ||
22 | # not defined during clean or to include Kbuild.include in | ||
23 | # scripts/Makefile.clean. But the following workaround seems least invasive. | ||
24 | cc-ver := $(if $(call cc-version),$(call cc-version),0) | ||
25 | endif | ||
26 | |||
27 | obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o | ||
28 | |||
29 | ifeq ($(call if-lt, $(cc-ver), 0407),1) | ||
30 | obj-$(CONFIG_GCOV_KERNEL) += gcc_3_4.o | ||
31 | else | ||
32 | obj-$(CONFIG_GCOV_KERNEL) += gcc_4_7.o | ||
33 | endif | ||