[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [XEN][PATCH] coverage: add extended coverage capabilities


  • To: Grygorii Strashko <grygorii_strashko@xxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Thu, 4 Dec 2025 10:02:26 +0000
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UCweXumEBpQ1J8/fMoYiqHa55RBu7WSdw1mOHcoC2xw=; b=BIKioVY5xbYiEpKn/VU64l1Gh5bXqiO4A+ohodYC83LNLdG9lbB1pCAPjLkkyGLYAvbLdXHPYiXWKcG5s9sSJ4CMtMJfJkeKVV01t6DVICGWpmMlQw9FUrEzWTy0i18HCc+cpd097Seiy0eUAnQPIVZCXGQEVPG6TeY132Y7mECpxiJPHJORSyN/nkLBQS2rsybyGXctwKj3EITLM/uBXp0Zjlf7RQobPriN+zcjXRz+mgXLyA8b1/znJfATwwH+1jfdjYaRsNmHr3npSHACZ6VxEZ3QEZdJ2w8UIoV+5E2HRiQq5FlZUD7ZgF4MIAG30A8g8R7TUry2bXW+8C/SAA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WK5zaLch4mwK5Lvn8pl1sZSFcVcG8Y9oBZwZVFvsop8d5T7hiLV3mb/1rE2A0Js5mbrECOCXKG43sfvbbjYCC48ytE59VNas0W47hq+wRS0RxB2iFrWuwsMq1ZhQZdNO6WX4hhX9G+H4xOJxPsXYRmW/6y9jOvHTVZjQloAjrJdCWEQF+6Xxtz00aZ5wqnXVTOq8dWoZw79B4Rg2QS0VB0CwzRZxpsjEKjcAtj9yK8dUXoumAWbRRwkZUD4ZsGmjMtYbIap0+d6qOqZb/cwRB9xYs7tPGwfnrmgVI7tSccZDZ6uqg5I0eujVUwS+8tLwqRfE5SjTzAy8lB7PtutQ2Q==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: andrew.cooper3@xxxxxxxxxx, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Jason Andryuk <jason.andryuk@xxxxxxx>, Victor Lira <victorm.lira@xxxxxxx>
  • Delivery-date: Thu, 04 Dec 2025 10:02:47 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 03/12/2025 10:24 pm, Grygorii Strashko wrote:
> From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
>
> Added CONFIG_COVERAGE_EXTENDED to enable coverage for .init and lib code.
> When enabled - Xen .init data will not be freed.
>
> Signed-off-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
> ---
>  xen/Kconfig.debug          | 10 ++++++++++
>  xen/Rules.mk               | 13 +++++++++++++
>  xen/arch/arm/setup.c       |  2 ++
>  xen/arch/x86/setup.c       |  4 ++++
>  xen/common/libelf/Makefile |  4 +++-
>  xen/common/libfdt/Makefile |  4 +++-
>  6 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/xen/Kconfig.debug b/xen/Kconfig.debug
> index d900d926c555..3e04e1a3992b 100644
> --- a/xen/Kconfig.debug
> +++ b/xen/Kconfig.debug
> @@ -44,6 +44,16 @@ config COVERAGE
>  
>         If unsure, say N here.
>  
> +config COVERAGE_EXTENDED
> +    bool "Extended Code coverage support"
> +    depends on COVERAGE
> +    default y
> +    help
> +      Enable Extended code coverage support which include .init and libs 
> code.
> +      The .init sections are not freed in this case.
> +
> +      If unsure, say N here.

IMO this is unhelpful.  Noone wants to opt for the model we've got right
now.

Instead, I think we want:

config RELAX_INIT_CHECK
    bool

and have CONFIG_COVERAGE select it.  There's no need for any user
visible option here.


> +
>  config CONDITION_COVERAGE
>       bool "Condition coverage support"
>       depends on COVERAGE && CC_HAS_MCDC
> diff --git a/xen/Rules.mk b/xen/Rules.mk
> index 2b28d1ac3c18..6d66a2332fb0 100644
> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -260,6 +267,7 @@ $(obj)/%.o: $(src)/%.S FORCE
>  
>  
>  quiet_cmd_obj_init_o = INIT_O  $@
> +ifneq ($(CONFIG_COVERAGE_EXTENDED),y)
>  define cmd_obj_init_o
>      $(OBJDUMP) -h $< | while read idx name sz rest; do \
>          case "$$name" in \
> @@ -272,6 +280,11 @@ define cmd_obj_init_o
>      done || exit $$?; \
>      $(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section 
> .$(s)=.init.$(s)) $< $@
>  endef
> +else
> +define cmd_obj_init_o
> +    $(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section 
> .$(s)=.init.$(s)) $< $@
> +endef
> +endif

This wants to be something more like:

@@ -261,6 +268,7 @@ $(obj)/%.o: $(src)/%.S FORCE
 
 quiet_cmd_obj_init_o = INIT_O  $@
 define cmd_obj_init_o
+ifneq ($(CONFIG_RELAX_INIT_CHECK),y)
     $(OBJDUMP) -h $< | while read idx name sz rest; do \
         case "$$name" in \
         .*.local) ;; \
@@ -269,7 +277,8 @@ define cmd_obj_init_o
             echo "Error: size of $<:$$name is 0x$$sz" >&2; \
             exit $$(expr $$idx + 1);; \
         esac; \
-    done || exit $$?; \
+    done || exit $$?
+endif
     $(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section 
.$(s)=.init.$(s)) $< $@
 endef

 
to avoid duplicating the OBJCOPY invocation.

> diff --git a/xen/common/libelf/Makefile b/xen/common/libelf/Makefile
> index 917d12b006f7..337a3a8e1b35 100644
> --- a/xen/common/libelf/Makefile
> +++ b/xen/common/libelf/Makefile
> @@ -1,5 +1,7 @@
>  obj-bin-y := libelf.o
> -nocov-y += libelf.o
> +ifneq ($(CONFIG_COVERAGE_EXTENDED),y)
> +     nocov-y += libelf.o
> +endif
>  libelf-objs := libelf-tools.o libelf-loader.o libelf-dominfo.o
>  
>  SECTIONS := text data $(SPECIAL_DATA_SECTIONS)
> diff --git a/xen/common/libfdt/Makefile b/xen/common/libfdt/Makefile
> index 6ce679f98f47..8c62563ccdbc 100644
> --- a/xen/common/libfdt/Makefile
> +++ b/xen/common/libfdt/Makefile
> @@ -5,7 +5,9 @@ SECTIONS := text data $(SPECIAL_DATA_SECTIONS)
>  # For CONFIG_OVERLAY_DTB, libfdt functionalities will be needed during 
> runtime.
>  ifneq ($(CONFIG_OVERLAY_DTB),y)
>  OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
> -nocov-y += libfdt.o
> +ifneq ($(CONFIG_COVERAGE_EXTENDED),y)
> +     nocov-y += libfdt.o
> +endif

both of these simply want to drop their nocov-ness now that coverage
does work for them.

~Andrew



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.