|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [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.
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 |