]> granicus.if.org Git - gc/commitdiff
2011-05-05 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Thu, 5 May 2011 05:24:48 +0000 (05:24 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:06:58 +0000 (21:06 +0400)
* dbg_mlc.c (GC_has_other_debug_info): Fix punctuation in the
comment.
* dbg_mlc.c (GC_FREED_MEM_MARKER): New macro.
* dbg_mlc.c (GC_debug_free): Use GC_FREED_MEM_MARKER.
* dbg_mlc.c (GC_smashed): Refine documentation.
* mark.c (GC_push_selected): Change dirty_fn return type to
GC_bool.
* os_dep.c (GC_page_was_ever_dirty): Make GC_INNER.
* reclaim.c (GC_reclaim_small_nonempty_block): Remove "kind"
local  variable.
* reclaim.c (GC_reclaim_block): Pass true constant to
GC_reclaim_small_nonempty_block (instead of report_if_found).
* doc/README.autoconf: Update; fix a typo.
* include/private/gcconfig.h (GC_WORD_C): New macro.

ChangeLog
dbg_mlc.c
doc/README.autoconf
include/private/gcconfig.h
mark.c
os_dep.c
reclaim.c

index e067b2ce721d8ea9a0c737a22b7d446c7cf6accf..d6278469003bd1b967fa29d79db1d70ad7026b24 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2011-05-05  Ivan Maidanski  <ivmai@mail.ru>
+
+       * dbg_mlc.c (GC_has_other_debug_info): Fix punctuation in the
+       comment.
+       * dbg_mlc.c (GC_FREED_MEM_MARKER): New macro.
+       * dbg_mlc.c (GC_debug_free): Use GC_FREED_MEM_MARKER.
+       * dbg_mlc.c (GC_smashed): Refine documentation.
+       * mark.c (GC_push_selected): Change dirty_fn return type to
+       GC_bool.
+       * os_dep.c (GC_page_was_ever_dirty): Make GC_INNER.
+       * reclaim.c (GC_reclaim_small_nonempty_block): Remove "kind"
+       local  variable.
+       * reclaim.c (GC_reclaim_block): Pass true constant to
+       GC_reclaim_small_nonempty_block (instead of report_if_found).
+       * doc/README.autoconf: Update; fix a typo.
+       * include/private/gcconfig.h (GC_WORD_C): New macro.
+
 2011-05-03  Ivan Maidanski  <ivmai@mail.ru>
 
        * dbg_mlc.c (GC_store_debug_info_inner): Cast "linenum".
index 72b5f1777e128d4f9771f40cd4d320928a9ba45a..b2671c1c25b661998b41cff7418b91501f5dc07f 100644 (file)
--- a/dbg_mlc.c
+++ b/dbg_mlc.c
@@ -25,7 +25,7 @@
 GC_INNER void GC_default_print_heap_obj_proc(ptr_t p);
 
 #ifndef SHORT_DBG_HDRS
-  /* Check whether object with base pointer p has debugging info  */
+  /* Check whether object with base pointer p has debugging info. */
   /* p is assumed to point to a legitimate object in our part     */
   /* of the heap.                                                 */
   /* This excludes the check as to whether the back pointer is    */
@@ -745,6 +745,14 @@ GC_API void * GC_CALL GC_debug_malloc_uncollectable(size_t lb,
   }
 #endif /* ATOMIC_UNCOLLECTABLE */
 
+#ifndef GC_FREED_MEM_MARKER
+# if CPP_WORDSZ == 32
+#   define GC_FREED_MEM_MARKER 0xdeadbeef
+# else
+#   define GC_FREED_MEM_MARKER GC_WORD_C(0xEFBEADDEdeadbeef)
+# endif
+#endif
+
 GC_API void GC_CALL GC_debug_free(void * p)
 {
     ptr_t base;
@@ -787,7 +795,8 @@ GC_API void GC_CALL GC_debug_free(void * p)
         size_t i;
         size_t obj_sz = BYTES_TO_WORDS(hhdr -> hb_sz - sizeof(oh));
 
-        for (i = 0; i < obj_sz; ++i) ((word *)p)[i] = 0xdeadbeef;
+        for (i = 0; i < obj_sz; ++i)
+          ((word *)p)[i] = GC_FREED_MEM_MARKER;
         GC_ASSERT((word *)p + i == (word *)(base + hhdr -> hb_sz));
       }
     } /* !GC_find_leak */
@@ -870,10 +879,10 @@ GC_API void * GC_CALL GC_debug_realloc(void * p, size_t lb, GC_EXTRA_PARAMS)
 
 #ifndef SHORT_DBG_HDRS
 
-/* List of smashed objects.  We defer printing these, since we can't    */
-/* always print them nicely with the allocation lock held.              */
-/* We put them here instead of in GC_arrays, since it may be useful to  */
-/* be able to look at them with the debugger.                           */
+/* List of smashed (clobbered) locations.  We defer printing these,     */
+/* since we can't always print them nicely with the allocation lock     */
+/* held.  We put them here instead of in GC_arrays, since it may be     */
+/* useful to be able to look at them with the debugger.                 */
 #ifndef MAX_SMASHED
 # define MAX_SMASHED 20
 #endif
index f8640becf202fce0359ca462e07a79d478e74346..94833f650f6f3e65be3fb648974948d5dd45d00a 100644 (file)
@@ -1,4 +1,4 @@
-As of GC6.0alpha8, we attempt to support GNU-style builds based on automake,
+Starting from GC v6.0, we support GNU-style builds based on automake,
 autoconf and libtool.  This is based almost entirely on Tom Tromey's work
 with gcj.
 
@@ -36,7 +36,7 @@ as well as the sources needed to regenerate the derived files.  (If I missed
 some, please let me know.)
 
 Note that the distribution comes with a "Makefile" which will be overwritten
-by "configure" with one that is not at all equiavelent to the original.  The
+by "configure" with one that is not at all equivalent to the original.  The
 distribution contains a copy of the original "Makefile" in "Makefile.direct".
 
 Important options to configure:
@@ -48,7 +48,7 @@ Important options to configure:
   --enable-threads=TYPE   choose threading package
   --enable-parallel-mark  parallelize marking and free list construction
   --enable-gc-debug (--enable-full-debug before about 7.0)
-                          include full support for pointer backtracing etc.
+                          include full support for pointer back-tracing etc.
 
 
 Unless --prefix is set (or --exec-prefix or one of the more obscure options),
index f541d7a756d536666cbd45f059616e6f50129af3..301b200ec6b428deda0bc5bb4784dcc7d67b6f54 100644 (file)
     /* strtoul() fits since sizeof(long) >= sizeof(word).       */
 #   define STRTOULL strtoul
 # endif
-#endif
+#endif /* !STRTOULL */
+
+#ifndef GC_WORD_C
+# if defined(_WIN64) && !defined(__GNUC__)
+#   define GC_WORD_C(val) val##ui64
+# elif defined(_LLP64) || defined(__LLP64__) || defined(_WIN64)
+#   define GC_WORD_C(val) val##ULL
+# else
+#   define GC_WORD_C(val) ((word)val##UL)
+# endif
+#endif /* !GC_WORD_C */
 
 #if defined(SPARC)
 # define ASM_CLEAR_CODE /* Stack clearing is crucial, and we    */
diff --git a/mark.c b/mark.c
index 8a3610dcb0dce1c721432e33480c5f1347507c4f..5fd37aefd75cb035dcb7b958ecc291c4110d0c6c 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -1292,7 +1292,7 @@ GC_INNER void GC_push_all(ptr_t bottom, ptr_t top)
    * in the event of a stack overflow.)
    */
   STATIC void GC_push_selected(ptr_t bottom, ptr_t top,
-                               int (*dirty_fn)(struct hblk *),
+                               GC_bool (*dirty_fn)(struct hblk *),
                                void (*push_fn)(ptr_t, ptr_t))
   {
     struct hblk * h;
index 39ca438423f5535210cfee17c9be25c646706071..1192ebd56a4d78e57db1c15c2b4edfba04069d45 100644 (file)
--- a/os_dep.c
+++ b/os_dep.c
@@ -2894,7 +2894,7 @@ STATIC void GC_default_push_other_roots(void)
 # ifdef CHECKSUMS
     /* Could any valid GC heap pointer ever have been written to this page? */
     /*ARGSUSED*/
-    GC_bool GC_page_was_ever_dirty(struct hblk *h)
+    GC_INNER GC_bool GC_page_was_ever_dirty(struct hblk *h)
     {
       /* FIXME - implement me.  */
       return(TRUE);
index 6a204f714aaf963dcf3fa940df664223cbe53b7d..f9bfd851614c288538a74c9eac3c5cbd37651ee5 100644 (file)
--- a/reclaim.c
+++ b/reclaim.c
@@ -254,8 +254,7 @@ STATIC void GC_reclaim_small_nonempty_block(struct hblk *hbp,
 {
     hdr *hhdr = HDR(hbp);
     size_t sz = hhdr -> hb_sz;
-    int kind = hhdr -> hb_obj_kind;
-    struct obj_kind * ok = &GC_obj_kinds[kind];
+    struct obj_kind * ok = &GC_obj_kinds[hhdr -> hb_obj_kind];
     void **flh = &(ok -> ok_freelist[BYTES_TO_GRANULES(sz)]);
 
     hhdr -> hb_last_reclaimed = (unsigned short) GC_gc_no;
@@ -263,8 +262,7 @@ STATIC void GC_reclaim_small_nonempty_block(struct hblk *hbp,
     if (report_if_found) {
         GC_reclaim_check(hbp, hhdr, sz);
     } else {
-        *flh = GC_reclaim_generic(hbp, hhdr, sz,
-                                  ok -> ok_init,
+        *flh = GC_reclaim_generic(hbp, hhdr, sz, ok -> ok_init,
                                   *flh, &GC_bytes_found);
     }
 }
@@ -322,7 +320,7 @@ STATIC void GC_reclaim_block(struct hblk *hbp, word report_if_found)
           GC_atomic_in_use += sz * hhdr -> hb_n_marks;
         }
         if (report_if_found) {
-          GC_reclaim_small_nonempty_block(hbp, (GC_bool)report_if_found);
+          GC_reclaim_small_nonempty_block(hbp, TRUE /* report_if_found */);
         } else if (empty) {
           GC_bytes_found += HBLKSIZE;
           GC_freehblk(hbp);