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

Re: [Xen-devel] Xen EFI build system and gcov



>>> On 29.08.16 at 20:41, <wei.liu2@xxxxxxxxxx> wrote:
> Hi Jan
> 
> Today I had some free cycles so I spent some time looking at gcov
> support in the hypervisor and tried to write a patch to fix the
> currently broken gcov build. But my patch alone is not enough to fix
> that.
> 
> There seems to be a problem with the EFI Makefile. With my patch
> applied, efi/boot.init.o still gets all gcov options _and_
> -DINIT_SECTIONS_ONLY. See output and patch for more context.
> 
> If I force efi to be disabled by putting in a hack into efi/Makefile,
> Xen builds fine. It suggests for all other files my patch works.
> 
> I am confused why efi/boot.init.o gets both set of options and I'm not
> sure what is the best approach to fix it.

That's a result of

stub.o: $(extra-y)

since ...

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -115,7 +115,9 @@ subdir-all := $(subdir-y) $(subdir-n)
>  
>  $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS += 
> -DINIT_SECTIONS_ONLY
>  
> -$(obj-$(coverage)): CFLAGS += -fprofile-arcs -ftest-coverage -DTEST_COVERAGE
> +ifeq ($(coverage),y)
> +$(filter-out %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS += 
> -fprofile-arcs -ftest-coverage -DTEST_COVERAGE
> +endif

... such constructs apply to the target as well as all of its prereqs.
Since the stub.o. dependency can't be eliminated easily (or else all
the objects listed in extra-y won't get built anymore), perhaps you
simply need to exclude stub.o from being compiler with coverage
options as well. Since it might well be that other exceptions become
necessary going forward, how about you introduce a nogcov-y
variable (subject to name improvement of course) and include that
in the $(filter-out ) above? This

--- unstable.orig/xen/Rules.mk
+++ unstable/xen/Rules.mk
@@ -115,7 +115,9 @@ subdir-all := $(subdir-y) $(subdir-n)
 
 $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS += 
-DINIT_SECTIONS_ONLY
 
-$(obj-$(coverage)): CFLAGS += -fprofile-arcs -ftest-coverage -DTEST_COVERAGE
+ifeq ($(coverage),y)
+$(filter-out %.init.o $(nogcov-y),$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS += 
-fprofile-arcs -ftest-coverage -DTEST_COVERAGE
+endif
 
 ifeq ($(lto),y)
 # Would like to handle all object files as bitcode, but objects made from
--- unstable.orig/xen/arch/x86/efi/Makefile
+++ unstable/xen/arch/x86/efi/Makefile
@@ -15,3 +15,4 @@ extra-$(efi) += boot.init.o relocs-dummy
        $(OBJCOPY) -I ihex -O binary $< $@
 
 stub.o: $(extra-y)
+nogcov-$(efi) := stub.o


works for me (albeit there's then a significant number of duplicate
symbol names getting warned about, which may be a separate thing
in need of taking care of).

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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