Linux kernel 为什么我的(内核)GCov没有';你不能在linux 3.9上工作吗?

Linux kernel 为什么我的(内核)GCov没有';你不能在linux 3.9上工作吗?,linux-kernel,kernel,gcov,Linux Kernel,Kernel,Gcov,我已经按照“Documentation/gcov.txt”所说的那样做了 关于mime的基本知识: $ uname -a Linux turf.ivor 3.9.5 #1 SMP Fri Jun 14 00:51:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/redhat-release Fedora release 18 (Spherical Cow) $ zcat /proc/config.gz | egrep "GCOV_|

我已经按照“Documentation/gcov.txt”所说的那样做了

关于mime的基本知识:

$ uname -a
Linux turf.ivor 3.9.5 #1 SMP Fri Jun 14 00:51:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
Fedora release 18 (Spherical Cow)

$ zcat /proc/config.gz | egrep "GCOV_|DEBUG_FS"

CONFIG_GCOV_KERNEL=y
CONFIG_GCOV_PROFILE_ALL=y
CONFIG_DEBUG_FS=y

$ mount | grep debugfs
debugfs on /sys/kernel/debug type debugfs (rw,relatime)

# ls -la /sys/kernel/debug/gcov/ 
total 0
drwxr-xr-x  2 root root 0 Jun 14  2013 .
drwx------ 17 root root 0 Jun 14  2013 ..
-rw-------  1 root root 0 Jun 14  2013 reset
我只找到了一个重置文件(一个空文件)

正如“文件”所说:

我该怎么办

gcov是否仍然支持最新的linux版本

任何建议,谢谢


`

问题很可能是gcc。一些较新版本不再生成.ctors seections,而是使用.init_数组。您可以通过对启用gcov的内核对象之一执行objdump-dr-j.ctors来确认这一点。如果它没有返回这样的节,请尝试.init\u数组

我现在正在努力解决这个问题,试图理解在init/main.c的do_ctors调用中用.init_数组替换.ctors的奥秘。这并不像在vmlinux.lds.h中交换节名那么简单


抱歉,这还不是答案。

内核中未启用对ARM的GCOV支持。 请参考下面的URL,将2个补丁应用到您的内核,您将能够在目标上看到gcov文件


对于3.7或3.8以上的新内核版本,您必须是sudo用户才能获取gcda文件

sudo su

现在转到目录
/sys/kernel/debug/gcov/


您将看到构建的linux代码路径。

我遇到了同样的问题,我认为gcc就是curplit。当我的gcc版本低于4.7时,一切似乎都进展顺利。否则问题就跟你一样出来了

为什么?

greebo52的答案就是答案

如何解决

您可以在4.7下使用gcc,也可以编译自己的GCC4.7。在配置GCC4.7时,添加以下内容——禁用initfini数组。 像这样:


./configure--禁用initfini数组…(其他选项)

在vmlinux.lds.h文件中执行以下更改,以在vmlinux文件的.ctors部分添加.init_数组,它将起作用:-

谢谢

 90 4. Files
 91 ========
 92                                                                                
 93 The gcov kernel support creates the following files in debugfs:
 94 
 95         /sys/kernel/debug/gcov
 96                 Parent directory for all gcov-related files.
 97 
 98         /sys/kernel/debug/gcov/reset
 99                 Global reset file: resets all coverage data to zero when
100                 written to.
101 
102         /sys/kernel/debug/gcov/path/to/compile/dir/file.gcda
103                 The actual gcov data file as understood by the gcov
104                 tool. Resets file coverage data to zero when written to.
105 
106         /sys/kernel/debug/gcov/path/to/compile/dir/file.gcno
107                 Symbolic link to a static data file required by the gcov
108                 tool. This file is generated by gcc when compiling with
109                 option -ftest-coverage.