]> git.eshelyaron.com Git - emacs.git/commitdiff
Tell valgrind about conservative GC regions and suppress spurious
authorDaniel Colascione <dancol@dancol.org>
Mon, 23 Sep 2013 02:34:52 +0000 (18:34 -0800)
committerDaniel Colascione <dancol@dancol.org>
Mon, 23 Sep 2013 02:34:52 +0000 (18:34 -0800)
warings.

* alloc.c (USE_VALGRIND): New macro; on by default
when ENABLE_CHECKING.
(mark_maybe_object,mark_maybe_pointer)
[USE_VALGRIND]: Mark conservatively-scanned regions valid for
valgrind purposes.
(valgrind_p) [USE_VALGRIND]: New variable.
(init_alloc) [USE_VALGRIND]: Initialize valgrind_p.

ChangeLog
configure.ac
src/ChangeLog
src/alloc.c

index ad6163cd7f03d94bec12adf9541832086c482828..67f3f926b9c66b2ec3b5d5afdd2cc2ec6c34050b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-09-23  Daniel Colascione  <dancol@dancol.org>
+
+       * configure.ac: Check for valgrind headers.
+
 2013-09-20  Xue Fuqiao  <xfq.free@gmail.com>
 
        * INSTALL: New homepage of libtiff.
index 8ff33e779a84028a90deb4f304e104b3ce48329a..c63627d18d484608231ef8b7e4e5b0143d503908 100644 (file)
@@ -3696,6 +3696,8 @@ AC_SUBST(KRB5LIB)
 AC_SUBST(DESLIB)
 AC_SUBST(KRB4LIB)
 
+AC_CHECK_HEADERS(valgrind/valgrind.h)
+
 AC_CHECK_FUNCS_ONCE(tzset)
 AC_MSG_CHECKING(whether localtime caches TZ)
 AC_CACHE_VAL(emacs_cv_localtime_cache,
index a466047718fef9eca52f251e4c9bd47dfff2b17f..9905f61e8daf9c56e85a784770cbd0524510ef6a 100644 (file)
@@ -1,3 +1,13 @@
+2013-09-23  Daniel Colascione  <dancol@dancol.org>
+
+       * alloc.c (USE_VALGRIND): New macro; on by default
+       when ENABLE_CHECKING.
+       (mark_maybe_object,mark_maybe_pointer)
+       [USE_VALGRIND]: Mark conservatively-scanned regions valid for
+       valgrind purposes.
+       (valgrind_p) [USE_VALGRIND]: New variable.
+       (init_alloc) [USE_VALGRIND]: Initialize valgrind_p.
+
 2013-09-22  Jan Djärv  <jan.h.d@swipnet.se>
 
        * process.c (wait_reading_process_output): Change int pnamelen to
index 847b3c88bbec821d143f3afdfd0641758a70d767..564faa18aa87fa14bbea1a65e13e52a6b62971cd 100644 (file)
@@ -45,6 +45,18 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <verify.h>
 
+#if (defined ENABLE_CHECKING &&               \
+     defined HAVE_VALGRIND_VALGRIND_H &&      \
+     !defined USE_VALGRIND)
+# define USE_VALGRIND 1
+#endif
+
+#if USE_VALGRIND
+#include <valgrind/valgrind.h>
+#include <valgrind/memcheck.h>
+static int valgrind_p;
+#endif
+
 /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects.
    Doable only if GC_MARK_STACK.  */
 #if ! GC_MARK_STACK
@@ -4327,6 +4339,11 @@ mark_maybe_object (Lisp_Object obj)
   void *po;
   struct mem_node *m;
 
+#if USE_VALGRIND
+  if (valgrind_p)
+    VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj));
+#endif
+
   if (INTEGERP (obj))
     return;
 
@@ -4395,6 +4412,11 @@ mark_maybe_pointer (void *p)
 {
   struct mem_node *m;
 
+#if USE_VALGRIND
+  if (valgrind_p)
+    VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p));
+#endif
+
   /* Quickly rule out some values which can't point to Lisp data.
      USE_LSB_TAG needs Lisp data to be aligned on multiples of GCALIGNMENT.
      Otherwise, assume that Lisp data is aligned on even addresses.  */
@@ -6643,6 +6665,10 @@ init_alloc (void)
 #endif
   Vgc_elapsed = make_float (0.0);
   gcs_done = 0;
+
+#if USE_VALGRIND
+  valgrind_p = RUNNING_ON_VALGRIND;
+#endif
 }
 
 void