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:
commit
673d1f4ab9
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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="
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user