From b415168a9862023462b7193e83da948cb8d11893 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 11 May 2020 22:13:28 +0200 Subject: patch 8.2.0739: incomplete profiling when exiting because of a dealy signal Problem: Incomplete profiling when exiting because of a dealy signal. Solution: Call __gcov_flush() if available. --- .travis.yml | 4 ++-- src/Makefile | 4 +++- src/os_unix.c | 10 ++++++++++ src/version.c | 2 ++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2c5f5ff30..7c1ecbca5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,13 +11,13 @@ _anchors: - &normal BUILD=yes TEST=test FEATURES=normal CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no - &linux-huge - BUILD=yes TEST="scripttests test_libvterm" CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + BUILD=yes TEST="scripttests test_libvterm" CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" - &osx-huge # macOS build BUILD=yes TEST=test FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp" - &unittests - BUILD=no TEST=unittests CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes + BUILD=no TEST=unittests CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes - &asan # ASAN build SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" diff --git a/src/Makefile b/src/Makefile index 6c7ef85a9..7c2934aea 100644 --- a/src/Makefile +++ b/src/Makefile @@ -686,8 +686,10 @@ LINT_OPTIONS = -beprxzF # 7. Open the objects/index.html file in a web browser to view the coverage # information. # -# PROFILE_CFLAGS=-g -O0 -fprofile-arcs -ftest-coverage # LDFLAGS=--coverage +# PROFILE_CFLAGS=-g -O0 -fprofile-arcs -ftest-coverage -DWE_ARE_PROFILING -DUSE_GCOV_FLUSH +# Alternate flags +# PROFILE_CFLAGS=-g -O0 --coverage -DWE_ARE_PROFILING -DUSE_GCOV_FLUSH # Uncomment one of the next two lines to compile Vim with the diff --git a/src/os_unix.c b/src/os_unix.c index b5ae9f868..aea3d5a9e 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3312,6 +3312,10 @@ exit_scroll(void) } } +#ifdef USE_GCOV_FLUSH +extern void __gcov_flush(); +#endif + void mch_exit(int r) { @@ -3358,6 +3362,12 @@ mch_exit(int r) } out_flush(); ml_close_all(TRUE); // remove all memfiles + +#ifdef USE_GCOV_FLUSH + // Flush coverage info before possibly being killed by a deadly signal. + __gcov_flush(); +#endif + may_core_dump(); #ifdef FEAT_GUI if (gui.in_use) diff --git a/src/version.c b/src/version.c index 317b34431..799e84671 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 739, /**/ 738, /**/ -- cgit v1.2.1