GCC6.3.0: флаг "--coverage" не работает (файлы gdca не созданы) - PullRequest
0 голосов
/ 14 ноября 2018

Имеет фрагмент кода на C и тот же на C ++, который генерирует файлы gdca, исполняющие exe-файл, скомпилированный с GCC 4.1.2.Тот же фрагмент кода, скомпилированный с GCC6.3.0 после выполнения, не генерирует файлы gdca, не C.exe, не c ++. Exe

Я обнаружил, что реализация библиотеки gcov отличается, в GCC4.1.2и GCC6.3.0, версия библиотеки gcov в GCC6.3.0 кажется пустой:

_gcov_merge_add.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_merge_add>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret
_gcov_merge_single.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_merge_single>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret
_gcov_merge_delta.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_merge_delta>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret
_gcov_merge_ior.o:     file format elf32-i386
_gcov_merge_time_profile.o:     file format elf32-i386
_gcov_merge_icall_topn.o:     file format elf32-i386
_gcov_interval_profiler.o:     file format elf32-i386
_gcov_pow2_profiler.o:     file format elf32-i386
_gcov_one_value_profiler.o:     file format elf32-i386
_gcov_indirect_call_profiler.o:     file format elf32-i386
_gcov_average_profiler.o:     file format elf32-i386
_gcov_ior_profiler.o:     file format elf32-i386

_gcov_indirect_call_profiler_v2.o:     file format elf32-i386

_gcov_time_profiler.o:     file format elf32-i386
_gcov_indirect_call_topn_profiler.o:     file format elf32-i386
_gcov_dump.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_dump>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret
_gcov_flush.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_flush>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret
_gcov_fork.o:     file format elf32-i386
_gcov_execl.o:     file format elf32-i386
_gcov_execlp.o:     file format elf32-i386
_gcov_execle.o:     file format elf32-i386
_gcov_execv.o:     file format elf32-i386
_gcov_execvp.o:     file format elf32-i386
_gcov_execve.o:     file format elf32-i386
_gcov_reset.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_reset>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret
_gcov.o:     file format elf32-i386

Disassembly of section .text:
00000000 <__gcov_init>:
   0: 55                    push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 5d                    pop    %ebp
   4: c3                    ret

The gcov within the GCC 6.3.0 was build with following flags:

/usr/gnu/gcc/V6.3.0/gcc-6.3.0_build/./gcc/xgcc
-B/usr/gnu/gcc/V6.3.0/gcc-6.3.0_build/./gcc/
-B/opt/V6.3.0/i686-elf/bin/ -B/opt/V6.3.0/i686-elf/lib/ -isystem
/opt/V6.3.0/i686-elf/include -isystem /opt/V6.3.0/i686-elf/sys-include
-fpic -O2 -mpreferred-stack-boundary=3 -O2  -fpic -O2
-mpreferred-stack-boundary=3 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -W
-Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes
-Wmissing-prototypes -Wold-style-definition  -isystem ./include
-fpic -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector
-Dinhibit_libc  -fpic -I. -I. -I../.././gcc
-I../../../gcc-6.3.0/libgcc -I../../../gcc-6.3.0/libgcc/.
-I../../../gcc-6.3.0/libgcc/../gcc
-I../../../gcc-6.3.0/libgcc/../include    -o _gcov_flush.o -MT
_gcov_flush.o -MD -MP -MF _gcov_flush.dep -DL_gcov_flush -c
../../../gcc-6.3.0/libgcc/libgcov-interface.c

Есть идеи, что может быть не так с библиотекой gcov?Или что-то еще отсутствует в GCC6.3.0?У кого-нибудь еще есть проблемы с gcov под GCC 6.3.0?

1 Ответ

0 голосов
/ 27 ноября 2018

Когда target! = Host и ваш флаг libc установлены в true, вы не сможете реализовать библиотеку gcov, объектный дамп gcov.a не показывает реализации. В таком случае установите для флага ингибировать-libc для libgcc значение false, перекомпилируйте, и вы реализовали gcov.

...