1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-23 17:34:00 +03:00

Merge pull request #23000 from mrc0mmand/coverage__exit

macro: call __gcov_dump() before _exit() w/ coverage enabled
This commit is contained in:
Frantisek Sumsal 2022-04-07 13:08:55 +00:00 committed by GitHub
commit 673d1f4ab9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 2 deletions

View File

@ -47,6 +47,9 @@ fuzzer_build = want_ossfuzz or want_libfuzzer
# More items are added later after they have been detected. # More items are added later after they have been detected.
summary({'build mode' : get_option('mode')}) summary({'build mode' : get_option('mode')})
# GCOV doesn't define any macro when compiled with, so let's define it ourselves
conf.set10('BUILT_WITH_COVERAGE', get_option('b_coverage'))
##################################################################### #####################################################################
# Try to install the git pre-commit hook # Try to install the git pre-commit hook

View File

@ -29,6 +29,19 @@
#define _alignptr_ __attribute__((__aligned__(sizeof(void*)))) #define _alignptr_ __attribute__((__aligned__(sizeof(void*))))
#define _warn_unused_result_ __attribute__((__warn_unused_result__)) #define _warn_unused_result_ __attribute__((__warn_unused_result__))
#if defined(BUILT_WITH_COVERAGE) && BUILT_WITH_COVERAGE
/* We need to explicitly call __gcov_dump() in places where we use _exit(), since
* _exit() skips at-exit hooks resulting in lost coverage */
# include <unistd.h>
extern void __gcov_dump(void);
_noreturn_ static inline void _coverage__exit(int status) {
__gcov_dump();
_exit(status);
}
# define _exit(x) _coverage__exit(x)
#endif
#if !defined(HAS_FEATURE_MEMORY_SANITIZER) #if !defined(HAS_FEATURE_MEMORY_SANITIZER)
# if defined(__has_feature) # if defined(__has_feature)
# if __has_feature(memory_sanitizer) # if __has_feature(memory_sanitizer)

View File

@ -4,6 +4,10 @@ set -e
TEST_DESCRIPTION="Run unit tests under containers" TEST_DESCRIPTION="Run unit tests under containers"
RUN_IN_UNPRIVILEGED_CONTAINER=yes RUN_IN_UNPRIVILEGED_CONTAINER=yes
# Some tests make collecting coverage impossible (like test-mount-util, which
# remounts the whole / as read-only), so let's ignore the gcov errors in such
# case
IGNORE_MISSING_COVERAGE=yes
# embed some newlines in the kernel command line to stress our test suite # embed some newlines in the kernel command line to stress our test suite
KERNEL_APPEND=" KERNEL_APPEND="

View File

@ -1406,8 +1406,8 @@ check_coverage_reports() {
# usually due to the sandbox being too restrictive (e.g. ProtectSystem=yes, # usually due to the sandbox being too restrictive (e.g. ProtectSystem=yes,
# ProtectHome=yes) or the $BUILD_DIR being inaccessible to non-root users - see # ProtectHome=yes) or the $BUILD_DIR being inaccessible to non-root users - see
# `setfacl` stuff in install_compiled_systemd(). # `setfacl` stuff in install_compiled_systemd().
if ! get_bool "${IGNORE_MISSING_COVERAGE:=}" && \
if "${JOURNALCTL:?}" -q --no-pager -D "${root:?}/var/log/journal" --grep "profiling:.+?gcda:[Cc]annot open"; then "${JOURNALCTL:?}" -q --no-pager -D "${root:?}/var/log/journal" --grep "profiling:.+?gcda:[Cc]annot open"; then
derror "Detected possibly missing coverage, check the journal" derror "Detected possibly missing coverage, check the journal"
return 1 return 1
fi fi