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.
|
||||
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
|
||||
|
@ -29,6 +29,19 @@
|
||||
#define _alignptr_ __attribute__((__aligned__(sizeof(void*))))
|
||||
#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)
|
||||
# if __has_feature(memory_sanitizer)
|
||||
|
@ -4,6 +4,10 @@ set -e
|
||||
|
||||
TEST_DESCRIPTION="Run unit tests under containers"
|
||||
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
|
||||
KERNEL_APPEND="
|
||||
|
@ -1406,8 +1406,8 @@ check_coverage_reports() {
|
||||
# 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
|
||||
# `setfacl` stuff in install_compiled_systemd().
|
||||
|
||||
if "${JOURNALCTL:?}" -q --no-pager -D "${root:?}/var/log/journal" --grep "profiling:.+?gcda:[Cc]annot open"; then
|
||||
if ! get_bool "${IGNORE_MISSING_COVERAGE:=}" && \
|
||||
"${JOURNALCTL:?}" -q --no-pager -D "${root:?}/var/log/journal" --grep "profiling:.+?gcda:[Cc]annot open"; then
|
||||
derror "Detected possibly missing coverage, check the journal"
|
||||
return 1
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user