diff --git a/src/firejail/appimage.c b/src/firejail/appimage.c index 17e59d2ef77..e019de36f20 100644 --- a/src/firejail/appimage.c +++ b/src/firejail/appimage.c @@ -29,7 +29,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif static char *devloop = NULL; // device file diff --git a/src/firejail/chroot.c b/src/firejail/chroot.c index edc31cdea15..0d4baa61823 100644 --- a/src/firejail/chroot.c +++ b/src/firejail/chroot.c @@ -30,7 +30,7 @@ #endif #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif // exit if error diff --git a/src/firejail/fs.c b/src/firejail/fs.c index e57038ee0a5..803b081c912 100644 --- a/src/firejail/fs.c +++ b/src/firejail/fs.c @@ -34,7 +34,7 @@ #endif #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif #define MAX_BUF 4096 diff --git a/src/firejail/fs_mkdir.c b/src/firejail/fs_mkdir.c index bbc2aa938bb..0195435f99e 100644 --- a/src/firejail/fs_mkdir.c +++ b/src/firejail/fs_mkdir.c @@ -26,7 +26,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif static void check(const char *fname) { diff --git a/src/firejail/ls.c b/src/firejail/ls.c index 6ee55764848..ae7e897410e 100644 --- a/src/firejail/ls.c +++ b/src/firejail/ls.c @@ -32,7 +32,7 @@ //#include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif // uid/gid cache diff --git a/src/firejail/main.c b/src/firejail/main.c index 02366a08c9b..86c6575e2a2 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c @@ -45,7 +45,7 @@ #endif #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif #ifdef __ia64__ diff --git a/src/firejail/profile.c b/src/firejail/profile.c index 807a77bd7cc..8675a171259 100644 --- a/src/firejail/profile.c +++ b/src/firejail/profile.c @@ -24,7 +24,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif extern char *xephyr_screen; diff --git a/src/firejail/rlimit.c b/src/firejail/rlimit.c index dd6fec97259..2666486faa7 100644 --- a/src/firejail/rlimit.c +++ b/src/firejail/rlimit.c @@ -22,7 +22,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif void set_rlimits(void) { diff --git a/src/firejail/sandbox.c b/src/firejail/sandbox.c index e06ba36171a..7bf372a14cd 100644 --- a/src/firejail/sandbox.c +++ b/src/firejail/sandbox.c @@ -50,7 +50,7 @@ #endif #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif static int force_nonewprivs = 0; diff --git a/src/firejail/util.c b/src/firejail/util.c index 47c367aad0b..71dd84e8fbb 100644 --- a/src/firejail/util.c +++ b/src/firejail/util.c @@ -42,7 +42,7 @@ #endif #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif #define MAX_GROUPS 1024 diff --git a/src/firemon/interface.c b/src/firemon/interface.c index b93d4a5a200..372cdee4179 100644 --- a/src/firemon/interface.c +++ b/src/firemon/interface.c @@ -34,7 +34,7 @@ //#include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif // print IP addresses for all interfaces diff --git a/src/firemon/netstats.c b/src/firemon/netstats.c index 23d228e26c0..bc951aa26b0 100644 --- a/src/firemon/netstats.c +++ b/src/firemon/netstats.c @@ -25,7 +25,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif #define MAXBUF 4096 diff --git a/src/firemon/procevent.c b/src/firemon/procevent.c index 4e809681e24..79f487582af 100644 --- a/src/firemon/procevent.c +++ b/src/firemon/procevent.c @@ -31,7 +31,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif #define PIDS_BUFLEN 4096 diff --git a/src/firemon/top.c b/src/firemon/top.c index 9d6f34991ab..d0f911e60f2 100644 --- a/src/firemon/top.c +++ b/src/firemon/top.c @@ -25,7 +25,7 @@ #include #ifdef HAVE_GCOV -#include +#include "../include/gcov_wrapper.h" #endif static unsigned pgs_rss = 0; diff --git a/src/include/gcov_wrapper.h b/src/include/gcov_wrapper.h new file mode 100644 index 00000000000..2f409309da3 --- /dev/null +++ b/src/include/gcov_wrapper.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2021 Firejail Authors + * + * This file is part of firejail project + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef GCOV_WRAPPER_H +#define GCOV_WRAPPER_H + +#include + +/* + * __gcov_flush was removed on gcc 11.1.0 (as it's no longer needed), but it + * appears to be the safe/"correct" way to do things on previous versions (as + * it ensured proper locking, which is now done elsewhere). Thus, keep using + * it in the code and ensure that it exists, in order to support gcc <11.1.0 + * and gcc >=11.1.0, respectively. + */ +#if __GNUC__ > 11 || (__GNUC__ == 11 && __GNUC_MINOR__ >= 1) +static void __gcov_flush(void) { + __gcov_dump(); + __gcov_reset(); +} +#endif + +#endif /* GCOV_WRAPPER_H */