linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frantisek Hrbata <fhrbata@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: jstancek@redhat.com, keescook@chromium.org,
	peter.oberparleiter@de.ibm.com, rusty@rustcorp.com.au,
	linux-arch@vger.kernel.org, arnd@arndb.de, mgahagan@redhat.com,
	agospoda@redhat.com, akpm@linux-foundation.org
Subject: [PATCH v2 3/4] gcov: compile specific gcov implementation based on gcc version
Date: Wed,  4 Sep 2013 16:42:55 +0200	[thread overview]
Message-ID: <1378305776-3644-4-git-send-email-fhrbata@redhat.com> (raw)
In-Reply-To: <1378305776-3644-1-git-send-email-fhrbata@redhat.com>

Compile the correct gcov implementation file for the specific gcc version.

v2: - added possibility to explicitly select gcc version during configuration,
      this is based on code provided by Peter Oberparleiter.
    - added a note about gcov format selection to gcov.txt

Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
---
 Documentation/gcov.txt |  4 ++++
 kernel/gcov/Kconfig    | 30 ++++++++++++++++++++++++++++++
 kernel/gcov/Makefile   | 32 +++++++++++++++++++++++++++++++-
 3 files changed, 65 insertions(+), 1 deletion(-)

diff --git a/Documentation/gcov.txt b/Documentation/gcov.txt
index e7ca647..7b72778 100644
--- a/Documentation/gcov.txt
+++ b/Documentation/gcov.txt
@@ -50,6 +50,10 @@ Configure the kernel with:
         CONFIG_DEBUG_FS=y
         CONFIG_GCOV_KERNEL=y
 
+select the gcc's gcov format, default is autodetect based on gcc version:
+
+        CONFIG_GCOV_FORMAT_AUTODETECT=y
+
 and to get coverage data for the entire kernel:
 
         CONFIG_GCOV_PROFILE_ALL=y
diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig
index d4da55d..d04ce8a 100644
--- a/kernel/gcov/Kconfig
+++ b/kernel/gcov/Kconfig
@@ -46,4 +46,34 @@ config GCOV_PROFILE_ALL
 	larger and run slower. Also be sure to exclude files from profiling
 	which are not linked to the kernel image to prevent linker errors.
 
+choice
+	prompt "Specify GCOV format"
+	depends on GCOV_KERNEL
+	default GCOV_FORMAT_AUTODETECT
+	---help---
+	The gcov format is usually determined by the GCC version, but there are
+	exceptions where format changes are integrated in lower-version GCCs.
+	In such a case use this option to adjust the format used in the kernel
+	accordingly.
+
+	If unsure, choose "Autodetect".
+
+config GCOV_FORMAT_AUTODETECT
+	bool "Autodetect"
+	---help---
+	Select this option to use the format that corresponds to your GCC
+	version.
+
+config GCOV_FORMAT_3_4
+	bool "GCC 3.4 format"
+	---help---
+	Select this option to use the format defined by GCC 3.4.
+
+config GCOV_FORMAT_4_7
+	bool "GCC 4.7 format"
+	---help---
+	Select this option to use the format defined by GCC 4.7.
+
+endchoice
+
 endmenu
diff --git a/kernel/gcov/Makefile b/kernel/gcov/Makefile
index e97ca59..52aa7e8 100644
--- a/kernel/gcov/Makefile
+++ b/kernel/gcov/Makefile
@@ -1,3 +1,33 @@
 ccflags-y := -DSRCTREE='"$(srctree)"' -DOBJTREE='"$(objtree)"'
 
-obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o gcc_3_4.o
+# if-lt
+# Usage VAR := $(call if-lt, $(a), $(b))
+# Returns 1 if (a < b)
+if-lt = $(shell [ $(1) -lt $(2) ] && echo 1)
+
+ifeq ($(CONFIG_GCOV_FORMAT_3_4),y)
+  cc-ver := 0304
+else ifeq ($(CONFIG_GCOV_FORMAT_4_7),y)
+  cc-ver := 0407
+else
+# Use cc-version if available, otherwise set 0
+#
+# scripts/Kbuild.include, which contains cc-version function, is not included
+# during make clean "make -f scripts/Makefile.clean obj=kernel/gcov"
+# Meaning cc-ver is empty causing if-lt test to fail with
+# "/bin/sh: line 0: [: -lt: unary operator expected" error mesage.
+# This has no affect on the clean phase, but the error message could be
+# confusing/annoying. So this dummy workaround sets cc-ver to zero if cc-version
+# is not available. We can probably move if-lt to Kbuild.include, so it's also
+# not defined during clean or to include Kbuild.include in
+# scripts/Makefile.clean. But the following workaround seems least invasive.
+  cc-ver := $(if $(call cc-version),$(call cc-version),0)
+endif
+
+obj-$(CONFIG_GCOV_KERNEL) := base.o fs.o
+
+ifeq ($(call if-lt, $(cc-ver), 0407),1)
+  obj-$(CONFIG_GCOV_KERNEL) += gcc_3_4.o
+else
+  obj-$(CONFIG_GCOV_KERNEL) += gcc_4_7.o
+endif
-- 
1.8.3.1

  parent reply	other threads:[~2013-09-04 14:42 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-04 14:42 [PATCH v2 0/4] add support for gcov format introduced in gcc 4.7 Frantisek Hrbata
2013-09-04 14:42 ` [PATCH v2 1/4] gcov: move gcov structs definitions to a gcc version specific file Frantisek Hrbata
2013-09-04 14:42   ` Frantisek Hrbata
2013-09-04 14:42 ` [PATCH v2 2/4] gcov: add support for gcc 4.7 gcov format Frantisek Hrbata
2013-09-04 14:42   ` Frantisek Hrbata
2013-09-18 21:22   ` Andrew Morton
2013-09-18 21:27     ` Joe Perches
2013-09-18 21:27       ` Joe Perches
2013-09-18 21:31       ` Andrew Morton
2013-09-19 10:12         ` Frantisek Hrbata
2013-09-19  9:04   ` Peter Oberparleiter
2013-09-19 10:21     ` Frantisek Hrbata
2013-09-19 10:31       ` Peter Oberparleiter
2013-09-04 14:42 ` Frantisek Hrbata [this message]
2013-09-04 14:42   ` [PATCH v2 3/4] gcov: compile specific gcov implementation based on gcc version Frantisek Hrbata
2013-09-04 14:42 ` [PATCH v2 4/4] kernel: add support for init_array constructors Frantisek Hrbata
2013-09-04 14:42   ` Frantisek Hrbata
2013-09-06  2:13   ` Rusty Russell
2013-09-06 17:51     ` Frantisek Hrbata
2013-09-06 18:07       ` Kyle McMartin
2013-09-09  1:14         ` Rusty Russell
2013-09-09  1:14           ` Rusty Russell
2013-09-09 16:28           ` Frantisek Hrbata
2013-09-10  0:15             ` Kyle McMartin
2013-09-10  5:35             ` Rusty Russell
2013-09-10 13:28               ` Frantisek Hrbata
2013-09-10 13:28                 ` Frantisek Hrbata
2013-09-11  1:52                 ` Rusty Russell
2013-09-26 23:11 ` [PATCH v2 0/4] add support for gcov format introduced in gcc 4.7 Christophe Guillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1378305776-3644-4-git-send-email-fhrbata@redhat.com \
    --to=fhrbata@redhat.com \
    --cc=agospoda@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=jstancek@redhat.com \
    --cc=keescook@chromium.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgahagan@redhat.com \
    --cc=peter.oberparleiter@de.ibm.com \
    --cc=rusty@rustcorp.com.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).