Building gcc with --coverage

David Tengeri dtengeri@inf.u-szeged.hu
Fri Apr 20 14:19:00 GMT 2012


Hello,

I want to measure the test coverage of gcc based on the tests shipped 
with it. To accomplish this, I tried to compile gcc 4.6.2 with the 
--coverage flag. But I got some errors and I don't know how to handle 
them. I googled it, but I didn't find any useful information, maybe 
somebody can help me.

I tried to compile gcc on 3 different systems. On my desktop, which runs 
a 64-bit Arch Linux, and I made a 32-bit Arch Linux and a 32-bit Debian 
6.0 virtual machine on VirtualBox.

The normal builds are OK.

The configure command I've used on both systems:
../gcc_4_6_2/configure --prefix="/home/dtengeri/install/" 
--enable-languages="c,c++" CFLAGS="-g -O0 -fprofile-arcs 
-ftest-coverage" CXXFLAGS="-g -O0 -fprofile-arcs -ftest-coverage" 
LDFLAGS="-fprofile-arcs -ftest-coverage"

[configure-stage1-target-libgomp] Error 77
The config.log says:
/home/dtengeri/build/./gcc/cc1: symbol lookup error: 
/home/dtengeri/build/./gcc/libgcc_s.so.1: undefined symbol: atexit

atexit is defined in glibc. I have version 2.15-10 of glibc on my 
system. I've tried to pass -lc to LDFLAGS, but it didn't help.

Next I added --disable-shared parameter to the configure. In this case 
the build process reached stage 2.
The compile stopped at configuring libiberty, because it can't find gcov 
related functions. So I modified the makefile and add the -fprofile-arcs 
flag to the XGCC_FLAGS_FOR_TARGET variable. After this the compile 
continued, but a segmentation fault occured at stage 2, at one of the 
configure of libgcc.

The second try was on a 32-bit Arch Linux running on VirtualBox. I got 
the same problem here. It missed the fstat() symbol without 
--disable-shared parameter and there was a segmentation fault with the 
--disable-shared parameter.

My third attempt was on the Debian.
I had to make the change of XGCC_FLAGS_FOR_TARGET in the Makefile here too.

First, the compile stopped when trying to configure libiberty at stage 
2.It stopped at the checking for working fork. I left it for hours but 
nothing changed, it still wanted to check for working fork. So I changed 
the configure script in libiberty to bypass this check. The same error 
happened with gcc, so I modified the gcc/configure script too.
The next stop in the build process was the following command:
echo | /home/dtengeri/build/./gcc/xgcc -B/home/dtengeri/build/./gcc/ -E 
-dM - | \
       sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \
          -e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
       sort -u > tmp-macro_list

And this command didn't finish its job. I left it for a day. At the end 
of the day it allocates all of the memory on the virtual machine and 
used its cpu on 100%.

The situation is the same with --disable-shared on and off.

So I'm stucked here and I don't know what to do next.

Does anybody has any expreience in building gcc with --coverage option?

Regards,
David Tengeri



More information about the Gcc-help mailing list