summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-05-11 22:13:28 +0200
committerBram Moolenaar <Bram@vim.org>2020-05-11 22:13:28 +0200
commitb415168a9862023462b7193e83da948cb8d11893 (patch)
tree704bd09ed0b69b7a30b711c5431ff69eaad1a7f5
parent91689ea8ae01acb3daf8ba0ee91acd729af7c84c (diff)
downloadvim-git-b415168a9862023462b7193e83da948cb8d11893.tar.gz
patch 8.2.0739: incomplete profiling when exiting because of a dealy signalv8.2.0739
Problem: Incomplete profiling when exiting because of a dealy signal. Solution: Call __gcov_flush() if available.
-rw-r--r--.travis.yml4
-rw-r--r--src/Makefile4
-rw-r--r--src/os_unix.c10
-rw-r--r--src/version.c2
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
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 739,
+/**/
738,
/**/
737,