Eliminate duplicate log messages in GC_mark_from
authorIvan Maidanski <ivmai@mail.ru>
Fri, 28 Oct 2016 08:45:48 +0000 (11:45 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 28 Oct 2016 08:45:48 +0000 (11:45 +0300)
This change also eliminates 'bad copy-paste' code defect in GC_mark_from.

* mark.c [ENABLE_TRACE] (GC_mark_from): Combine 2 logged messages
about "large section" and "splitting" into a single one;
replace "Tracing from" logged message with "small object" message
(which is not logged for large objects).

mark.c

diff --git a/mark.c b/mark.c
index 8b999aa..67481b9 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -640,14 +640,6 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack,
                 || (word)(current_p + descr)
                             <= (word)GC_least_plausible_heap_addr
                 || (word)current_p >= (word)GC_greatest_plausible_heap_addr);
-#         ifdef ENABLE_TRACE
-            if ((word)GC_trace_addr >= (word)current_p
-                && (word)GC_trace_addr < (word)(current_p + descr)) {
-              GC_log_printf("GC #%u: large section; start %p, len %lu\n",
-                        (unsigned)GC_gc_no, (void *)current_p,
-                        (unsigned long)descr);
-            }
-#         endif /* ENABLE_TRACE */
 #         ifdef PARALLEL_MARK
 #           define SHARE_BYTES 2048
             if (descr > SHARE_BYTES && GC_parallel
@@ -661,11 +653,13 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack,
 #             ifdef ENABLE_TRACE
                 if ((word)GC_trace_addr >= (word)current_p
                     && (word)GC_trace_addr < (word)(current_p + descr)) {
-                  GC_log_printf("GC #%u: splitting (parallel) %p at %p\n",
-                        (unsigned)GC_gc_no, (void *)current_p,
-                        (void *)(current_p + new_size));
+                  GC_log_printf("GC #%u: large section; start %p, len %lu,"
+                                " splitting (parallel) at %p\n",
+                                (unsigned)GC_gc_no, (void *)current_p,
+                                (unsigned long)descr,
+                                (void *)(current_p + new_size));
                 }
-#             endif /* ENABLE_TRACE */
+#             endif
               current_p += new_size;
               descr -= new_size;
               goto retry;
@@ -678,11 +672,12 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack,
 #         ifdef ENABLE_TRACE
             if ((word)GC_trace_addr >= (word)current_p
                 && (word)GC_trace_addr < (word)(current_p + descr)) {
-              GC_log_printf("GC #%u: splitting %p at %p\n",
+              GC_log_printf("GC #%u: large section; start %p, len %lu,"
+                            " splitting at %p\n",
                             (unsigned)GC_gc_no, (void *)current_p,
-                            (void *)limit);
+                            (unsigned long)descr, (void *)limit);
             }
-#         endif /* ENABLE_TRACE */
+#         endif
           /* Make sure that pointers overlapping the two ranges are     */
           /* considered.                                                */
           limit += sizeof(word) - ALIGNMENT;
@@ -796,16 +791,16 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack,
         if (descr < sizeof(word))
           continue;
 #     endif
-      limit = current_p + (word)descr;
-    }
-#   ifdef ENABLE_TRACE
+#     ifdef ENABLE_TRACE
         if ((word)GC_trace_addr >= (word)current_p
-            && (word)GC_trace_addr < (word)limit) {
-          GC_log_printf("GC #%u: Tracing from %p, length is %lu\n",
+            && (word)GC_trace_addr < (word)(current_p + descr)) {
+          GC_log_printf("GC #%u: small object; start %p, len %lu\n",
                         (unsigned)GC_gc_no, (void *)current_p,
                         (unsigned long)descr);
         }
-#   endif /* ENABLE_TRACE */
+#     endif
+      limit = current_p + (word)descr;
+    }
     /* The simple case in which we're scanning a range. */
     GC_ASSERT(!((word)current_p & (ALIGNMENT-1)));
     credit -= limit - current_p;