|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] failed to get gcov result for libelf_* files
>Hi all:
> I'm backporting gcov-related patches(68ca0bc4ba -> 922153cd37) to xen
>4.1.2, but encountered with several problems, one problem is as follows:
> 1) although all the files are gathered into gcov_info_list correctly by
>__gcov_init(), but when we call write_gcov(), 3 gcov_info seem had been broken.
> xen/common/libelf/libelf-tools.c
> xen/common/libelf/libelf-loader.c
> xen/common/libelf/libelf-dominfo.c
>
> info->filename of theis are NULL, thus when we call write_gcov() ->
>write_string() -> strlen(), segment fault and kernel panic occurs.
>
> 2) even if we fixed the above problem by:
> If ( !info->filename )
> continue;
> inside write_gcov(), I found that the info next to the problem one is
>null, thus, files after the problem one all get skipped. ( we only get 200
>gcda files
>although we have 262 source files in total)
>
> 3) I 'fixed' this by modify __gcov_init():
> void __gcov_init(struct gcov_info *info)
> {
> /* add new profiling data structure to list */
> + n_info_list ++;
> + if (n_info_list >= 61 && n_info_list <=63) {
> + printk("skip:%d\n", n_info_list);
> + return;
> + }
> info->next = info_list;
> info_list = info;
> }
> Then the files after these 3 files are not affected. We got 259 gcda
> files
>then.
>
I found that OBJCOPY is related to the problem! If I remove the OBJCOPY process
in the Makefile of libelf, the problem got 'fixed':
diff --git a/open-source/xen/xen-4.1.2/xen/common/libelf/Makefile
b/open-source/xen/xen-4.1.2/xen/common/libelf/Makefile
index 854e738..f522ae0 100755
--- a/open-source/xen/xen-4.1.2/xen/common/libelf/Makefile
+++ b/open-source/xen/xen-4.1.2/xen/common/libelf/Makefile
@@ -1,9 +1,9 @@
obj-y := libelf.o
-SECTIONS := text data rodata $(foreach n,1 2 4 8,rodata.str1.$(n)) $(foreach
r,rel rel.ro,data.$(r) data.$(r).local)
+#SECTIONS := text data rodata $(foreach n,1 2 4 8,rodata.str1.$(n)) $(foreach
r,rel rel.ro,data.$(r) data.$(r).local)
-libelf.o: libelf-temp.o Makefile
- $(OBJCOPY) $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
$< $@
+#libelf.o: libelf-temp.o Makefile
+# $(OBJCOPY) $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
$< $@
-libelf-temp.o: libelf-tools.o libelf-loader.o libelf-dominfo.o
#libelf-relocate.o
+libelf.o: libelf-tools.o libelf-loader.o libelf-dominfo.o #libelf-relocate.o
$(LD) $(LDFLAGS) -r -o $@ $^
It's still not the final solution. What's objcopy here used for? What bad
result will happen if I remove it here? Thanks.
> But, my solution obviously is the not the right solution, what's special
> about
>the 3 files? Why are their gcov_info get modified(filename changed to NULL)
>between __gcov_init() and write_gcov()? What's your suggestion to debug the
>problem?
>
> Thanks in advance.
>
> Oscar.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |