]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify use of __lsan_ignore_object
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 3 Aug 2020 22:21:59 +0000 (15:21 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 4 Aug 2020 02:08:58 +0000 (19:08 -0700)
* configure.ac: Use AC_CHECK_FUNCS_ONCE for __lsan_ignore_object.
* src/buffer.c, src/data.c, src/emacs-module.c, src/regex-emacs.c:
* src/search.c: Use __lsan_ignore_object unconditionally, and don’t
include sanitizer/lsan_interface.h.
* src/lisp.h (__lsan_ignore_object): Provide a dummy in the
typical case where leak sanitization is not available.

configure.ac
src/buffer.c
src/data.c
src/emacs-module.c
src/lisp.h
src/regex-emacs.c
src/search.c

index 93463e344ab1bf20b5d36ff9572ccf2d270a13bf..4ee4517e11c31b38529b9807f68d01f006638b8e 100644 (file)
@@ -4512,11 +4512,13 @@ AC_CHECK_HEADERS(valgrind/valgrind.h)
 
 AC_CHECK_MEMBERS([struct unipair.unicode], [], [], [[#include <linux/kd.h>]])
 
-AC_CHECK_FUNCS_ONCE([sbrk])
+AC_CHECK_FUNCS_ONCE([__lsan_ignore_object sbrk])
 
 AC_FUNC_FORK
 
-AC_CHECK_FUNCS(snprintf __lsan_ignore_object)
+dnl AC_CHECK_FUNCS_ONCE wouldn’t be right for snprintf, which needs
+dnl the current CFLAGS etc.
+AC_CHECK_FUNCS(snprintf)
 
 dnl Check for glib.  This differs from other library checks in that
 dnl Emacs need not link to glib unless some other library is already
index e441499aeb03248311c4df5dda9743ed436d69d8..241f2d43a93d448725788729d8914252468a8953 100644 (file)
@@ -28,10 +28,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 #include <stdlib.h>
 #include <unistd.h>
 
-#ifdef HAVE_SANITIZER_LSAN_INTERFACE_H
-#include <sanitizer/lsan_interface.h>
-#endif
-
 #include <verify.h>
 
 #include "lisp.h"
@@ -5087,9 +5083,7 @@ enlarge_buffer_text (struct buffer *b, ptrdiff_t delta)
 #else
   p = xrealloc (b->text->beg, new_nbytes);
 #endif
-#ifdef HAVE___LSAN_IGNORE_OBJECT
   __lsan_ignore_object (p);
-#endif
 
   if (p == NULL)
     {
index 5fff52d24c251fe7c8f8a63db9e9430f175a7af1..59d148166fecb6d973634ea48ff0b6e0f18db559 100644 (file)
@@ -23,10 +23,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 #include <math.h>
 #include <stdio.h>
 
-#ifdef HAVE_SANITIZER_LSAN_INTERFACE_H
-#include <sanitizer/lsan_interface.h>
-#endif
-
 #include <byteswap.h>
 #include <count-one-bits.h>
 #include <count-trailing-zeros.h>
@@ -1788,9 +1784,7 @@ make_blv (struct Lisp_Symbol *sym, bool forwarded,
   set_blv_defcell (blv, tem);
   set_blv_valcell (blv, tem);
   set_blv_found (blv, false);
-#ifdef HAVE___LSAN_IGNORE_OBJECT
   __lsan_ignore_object (blv);
-#endif
   return blv;
 }
 
index f57101946b3630f5bba8ee17ed33f2ca999d926c..a0bab118019372d0eba426d67278d337175151b8 100644 (file)
@@ -84,10 +84,6 @@ To add a new module function, proceed as follows:
 #include <stdlib.h>
 #include <time.h>
 
-#ifdef HAVE_SANITIZER_LSAN_INTERFACE_H
-#include <sanitizer/lsan_interface.h>
-#endif
-
 #include "lisp.h"
 #include "bignum.h"
 #include "dynlib.h"
@@ -1103,9 +1099,7 @@ DEFUN ("module-load", Fmodule_load, Smodule_load, 1, 1, 0,
   if (module_assertions)
     {
       rt = xmalloc (sizeof *rt);
-#ifdef HAVE___LSAN_IGNORE_OBJECT
       __lsan_ignore_object (rt);
-#endif
     }
   else
     rt = &rt_pub;
@@ -1426,9 +1420,7 @@ initialize_environment (emacs_env *env, struct emacs_env_private *priv)
   if (module_assertions)
     {
       env = xmalloc (sizeof *env);
-#ifdef HAVE___LSAN_IGNORE_OBJECT
       __lsan_ignore_object (env);
-#endif
     }
 
   priv->pending_non_local_exit = emacs_funcall_exit_return;
index fdf69ab73683d24a59d42374b3b56dceed5930d7..22ddf3e5faf799c478bc4464b18453b76aa17a22 100644 (file)
@@ -4789,6 +4789,17 @@ lispstpcpy (char *dest, Lisp_Object string)
   return dest + len;
 }
 
+#if (defined HAVE___LSAN_IGNORE_OBJECT \
+     && defined HAVE_SANITIZER_LSAN_INTERFACE_H)
+# include <sanitizer/lsan_interface.h>
+#else
+/* Treat *P as a non-leak.  */
+INLINE void
+__lsan_ignore_object (void const *p)
+{
+}
+#endif
+
 extern void xputenv (const char *);
 
 extern char *egetenv_internal (const char *, ptrdiff_t);
index 1ecbc74b96ce3b3da9b68c8580996f8f89f00917..c44cce9f787f81ec52e286877a0eab6ecc5ade30 100644 (file)
 
 #include <stdlib.h>
 
-#ifdef HAVE_SANITIZER_LSAN_INTERFACE_H
-#include <sanitizer/lsan_interface.h>
-#endif
-
 #include "character.h"
 #include "buffer.h"
 #include "syntax.h"
@@ -1761,9 +1757,7 @@ regex_compile (re_char *pattern, ptrdiff_t size,
   /* Initialize the compile stack.  */
   compile_stack.stack = xmalloc (INIT_COMPILE_STACK_SIZE
                                 * sizeof *compile_stack.stack);
-#ifdef HAVE___LSAN_IGNORE_OBJECT
   __lsan_ignore_object (compile_stack.stack);
-#endif
   compile_stack.size = INIT_COMPILE_STACK_SIZE;
   compile_stack.avail = 0;
 
index 7b74ff91480082263fc1041d4e941555133040d5..38c64caf7c05609766e73a70bfec9ceaa7040bd1 100644 (file)
@@ -21,10 +21,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
-#ifdef HAVE_SANITIZER_LSAN_INTERFACE_H
-#include <sanitizer/lsan_interface.h>
-#endif
-
 #include "lisp.h"
 #include "character.h"
 #include "buffer.h"
@@ -619,9 +615,7 @@ newline_cache_on_off (struct buffer *buf)
          if (base_buf->newline_cache == 0)
             {
               base_buf->newline_cache = new_region_cache ();
-#ifdef HAVE___LSAN_IGNORE_OBJECT
               __lsan_ignore_object (base_buf->newline_cache);
-#endif
             }
        }
       return base_buf->newline_cache;