[MDEV-25914] gcda data files are not created when invoking the test for GCOV builds Created: 2021-06-14  Updated: 2021-06-15  Resolved: 2021-06-15

Status: Closed
Project: MariaDB Server
Component/s: Scripts & Clients
Affects Version/s: 10.6
Fix Version/s: 10.6.2

Type: Bug Priority: Major
Reporter: Anel Husakovic Assignee: Anel Husakovic
Resolution: Not a Bug Votes: 0
Labels: dgcov

Attachments: File compile_commands_10.6_with_ssl_bundled.json    
Issue Links:
Relates
relates to MDEV-25915 dgcov --generate error Closed
relates to MDEV-20787 Script dgcov.pl does not work Closed

 Description   

1. When compiled `ENABLE_GCOV` note files are created .gcno.
Those files are used to create data files .gcda.
2. gcda files are obtained when the binary is executed.
In case of mtr (tested for 10.2) ./mtr 1st will create .gcda files across the server repo.
3. gcda files are scanned with dgcov.pl script to generate analysis (look the var/last_changes file.
All above works with 10.2!

With 10.6 gcda files are not created in step 2. <-Problem !

Looking link seems that gcda files are created after the process finishes.
I have debuged in 10.2 mtr 1st to see the creation of gcda files and I can confirm that on line 1096:

    if ($line eq 'TESTCASE'){
  ->    my $test= My::Test::read_test($server);

following is created (somewhere until that line):

anel@anel:~/mariadb/10.2-worktree-in-source$ find .|grep gcda
./libmariadb/mariadb_config/CMakeFiles/mariadb_config.dir/mariadb_config.c.gcda

while in 10.6 on the same place no gcda is generated.
Can it have something to do with changes (if any) of handling sigterm as stated in above link too?
wlad some hints please ?

Hmm running manually specific binary mariadb_config
10.2 - created gcda file:

anel@anel:~/mariadb/10.2-worktree-in-source/libmariadb/mariadb_config$ ./mariadb_config --tlsinfo
GnuTLS 3.5.18
anel@anel:~/mariadb/10.2-worktree-in-source/libmariadb/mariadb_config$ cd ..
anel@anel:~/mariadb/10.2-worktree-in-source/libmariadb$ cd ..
anel@anel:~/mariadb/10.2-worktree-in-source$ find .|grep gcda
./libmariadb/mariadb_config/CMakeFiles/mariadb_config.dir/mariadb_config.c.gcda

10.6 - not created gcda file:

anel@anel:~/mariadb/10.6/libmariadb/mariadb_config$ ./mariadb_config --tlsinfo
GnuTLS 3.5.18
anel@anel:~/mariadb/10.6/libmariadb/mariadb_config$ cd ..
anel@anel:~/mariadb/10.6/libmariadb$ cd ..
anel@anel:~/mariadb/10.6$ find .|grep gcda
anel@anel:~/mariadb/10.6$ 

Means problem is somewhere in the server ?



 Comments   
Comment by Anel Husakovic [ 2021-06-14 ]

The last patch 3b8d4180d5f7 introduced doesn't have any influence. By reverting it still gcda files are not created.

Comment by Anel Husakovic [ 2021-06-15 ]

Tested on 10.2-10.6 only in 10.6 this problem exists.

Comment by Anel Husakovic [ 2021-06-15 ]

Seems like with this command gcda files are not created:

$ cmake . -DCMAKE_BUILD_TYPE=Debug -DCONC_WITH_{UNITTEST,SSL}=OFF -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,PERFSCHEMA,SPIDER,SPHINX}=NO -DWITH_SAFEMALLOC=OFF -DWITH_SSL=bundled -DENABLE_GCOV=ON -G Ninja

while with this command they are:

$ cmake . -DCMAKE_BUILD_TYPE=Debug -DWITH_EMBEDDED_SERVER=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,PERFSCHEMA,SPIDER,SPHINX}=NO  -DENABLE_GCOV=ON -G Ninja

and we can validate:

anel@anel:~/mariadb/10.6-fresh/libmariadb/mariadb_config$ ./mariadb_config --tlsinfo
OpenSSL 1.1.1
anel@anel:~/mariadb/10.6-fresh/libmariadb/mariadb_config$ find .|grep gcda
./CMakeFiles/mariadb_config.dir/mariadb_config.c.gcda

Seems that problem is when with {-DWITH_SSL=bundled} in 10.6 only. It is built without gcda generated (not sure why GnuTLS 3.5.18 ?)
Leaving to wlad or sanja.

Here is some workaround:
https://github.com/MariaDB/server/commit/2604ccfb53812074229228df07e56994d6fe2a79

Comment by Vladislav Vaintroub [ 2021-06-15 ]

@Anel, I do not even compile on Linux every day. I never used gcov.
If you link to blame the connector-C, assign to Georg. But before that,
check if you're building Debug vs RelWithDebInfo, I bet would be is as simple as that.

If you want to ask how to Debug compile flags, you can add some of the
MESSAGE("CMAKE_C_FLAGS=${CMAKE_C_FLAGS}")
MESSAGE("CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}")
MESSAGE("CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")

Ultimately, there is a https://cmake.org/cmake/help/latest/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html option, so that you can come up with evidence that something is different if you use GnuTLS, and if there is a real evidence, then maybe we can use some more advanced techniques, like tracing cmake to find out the bad guy.

Comment by Anel Husakovic [ 2021-06-15 ]

Started working

Comment by Anel Husakovic [ 2021-06-15 ]

10.6 flags:

$ cmake . -LAH|grep -E "FLAGS|BUILD_TYPE|GCOV|WITH_SSL"
 
CMAKE_ASM_FLAGS:STRING=
CMAKE_ASM_FLAGS_DEBUG:STRING=-g
CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_BUILD_TYPE:STRING=Debug
CMAKE_CXX_FLAGS:STRING=
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_FLAGS:STRING=
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_EXE_LINKER_FLAGS:STRING=
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_MODULE_LINKER_FLAGS:STRING=
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_SHARED_LINKER_FLAGS:STRING=
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_STATIC_LINKER_FLAGS:STRING=
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
ENABLE_GCOV:BOOL=ON
WITH_MYSQLD_LDFLAGS:STRING=
WITH_SSL:STRING=bundled
WSREP_LIB_STRICT_BUILD_FLAGS:BOOL=OFF

10.2 flags

 
CMAKE_BUILD_TYPE:STRING=Debug
CMAKE_CXX_FLAGS:STRING=
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_FLAGS:STRING=
CMAKE_C_FLAGS_DEBUG:STRING=-g
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_EXE_LINKER_FLAGS:STRING=
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_MODULE_LINKER_FLAGS:STRING=
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_SHARED_LINKER_FLAGS:STRING=
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_STATIC_LINKER_FLAGS:STRING=
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
ENABLE_GCOV:BOOL=ON
WITH_MYSQLD_LDFLAGS:STRING=
WITH_SSL:STRING=bundled

diff between 10.6 and 10.2

diff --git a/../bundled_ssl.txt b/../bundled-10.2.txt
index 61b13c66332..af6b3d35be6 100644
--- a/../bundled_ssl.txt
+++ b/../bundled-10.2.txt
@@ -1,8 +1,3 @@
-CMAKE_ASM_FLAGS:STRING=
-CMAKE_ASM_FLAGS_DEBUG:STRING=-g
-CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
-CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
-CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
 CMAKE_BUILD_TYPE:STRING=Debug
 CMAKE_CXX_FLAGS:STRING=
 CMAKE_CXX_FLAGS_DEBUG:STRING=-g
@@ -37,4 +32,3 @@ CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
 ENABLE_GCOV:BOOL=ON
 WITH_MYSQLD_LDFLAGS:STRING=
 WITH_SSL:STRING=bundled
-WSREP_LIB_STRICT_BUILD_FLAGS:BOOL=OFF

compile_commands.json obtained from CMAKE_EXPORT_COMPILE_COMMANDS for 10.6 in the attachment
compile_commands_10.6_with_ssl_bundled.json

All gcda files are created in 10.6 - seems this is not a bug.
Learned about compiled_commands.json - seems people are using it (found in gitignore ) patch 2b67b7cb08bf.

Generated at Thu Feb 08 09:41:21 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.