diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2eb92482d7b8457d34223bc27b1aed393b25dd83..1c0357e127fb94c639387be1b49f21a71aa87eb2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -227,8 +227,7 @@ ubuntu-xdk-qa-code-coverage:
                ctest -V -S CI/main_qa.cmake
                      -DIMAGE_NAME:string=ubuntu-18.04-llvm-qa
                      -DQA:BOOL=ON
-    - ls -lh build/cov_data
-    - gcovr -x -o build/coverage_report.xml build/cov_data
+    - gcovr -x -o build/coverage_report.xml -r . --gcov-executable="llvm-cov gcov" build
     - saxon-xslt -o build/ctest_report.xml
                  build/Testing/`head -n 1 build/Testing/TAG`/Test.xml
                  CI/ctest2junit.xsl
diff --git a/CI/ubuntu-18.04-llvm-qa.cmake b/CI/ubuntu-18.04-llvm-qa.cmake
index fa8e8e1aba9dce798cd46268320a031c55d29c61..2fe18ba386ac7b6a0020ad08ce80dd9ae4388c6f 100644
--- a/CI/ubuntu-18.04-llvm-qa.cmake
+++ b/CI/ubuntu-18.04-llvm-qa.cmake
@@ -23,20 +23,9 @@
 set(site_option
 "CMAKE_C_COMPILER:STRING=clang
 CMAKE_CXX_COMPILER:STRING=clang++
-CMAKE_C_FLAGS:STRING=--coverage
-CMAKE_CXX_FLAGS:STRING=--coverage
+CMAKE_C_FLAGS:STRING=--coverage -fprofile-exclude-files="^/usr/include/.*$;.*/xdk/include/.*$"
+CMAKE_CXX_FLAGS:STRING=--coverage -fprofile-exclude-files="^/usr/include/.*$;.*/xdk/include/.*$"
 CMAKE_EXE_LINKER_FLAGS:STRING=-fuse-ld=lld
 CMAKE_MODULE_LINKER_FLAGS:STRING=-fuse-ld=lld
 CMAKE_SHARED_LINKER_FLAGS:STRING=-fuse-ld=lld
 ")
-
-# handle gcov setup
-set(COVERAGE_OUTPUT_DIR "${CTEST_BINARY_DIRECTORY}/cov_data")
-file(MAKE_DIRECTORY "${COVERAGE_OUTPUT_DIR}")
-string(REGEX MATCHALL "/[^/]" _slash_matches "${COVERAGE_OUTPUT_DIR}")
-list(LENGTH _slash_matches COVERAGE_PREFIX_STRIP)
-set(ENV{GCOV_PREFIX} "${COVERAGE_OUTPUT_DIR}")
-set(ENV{GCOV_PREFIX_STRIP} "${COVERAGE_PREFIX_STRIP}")
-message("GCOV_PREFIX : $ENV{GCOV_PREFIX}")
-message("GCOV_PREFIX_STRIP : $ENV{GCOV_PREFIX_STRIP}")
-