[m-rev.] for review: update to Boehm GC v8.0.6

Peter Wang novalazy at gmail.com
Mon Nov 29 17:32:56 AEDT 2021


I'd like to update Boehm GC at this time, and libatomic_ops with it.
I've pushed changes to our repos:

    updated branch: release-7_6-mercury
    new tag: release-7_6-mercury-20211129

    new branch: release-8_0-mercury
    new tag: release-8_0-mercury-20211129

The following diff updates the Mercury repository. I haven't applied it.

The bdwgc v8.0.x branch can make use gcc/clang atomic intrinsics instead
of libatomic_ops. Unfortunately, we would still need to keep
libatomic_ops around for MSVC.

We should be able to enable munmap support by default once the upgrade
is done.



commit 8bbe042d5
Author: Peter Wang <novalazy at gmail.com>
Date:   Mon Nov 29 17:28:34 2021 +1100

    Update to Boehm GC v8.2.0 and libatomic_ops v7.6.12

        Update boehm_gc submodule to release-8.0-mercury-20201129.

        Use total full-collection time API added in Boehm GC v8.0.0.

        Announce change.

diff --git a/NEWS b/NEWS
index 830e56619..940cbb52a 100644
--- a/NEWS
+++ b/NEWS
@@ -941,6 +941,6 @@ Changes to the Mercury implementation
   Another consequence is that the `--trail-size` and `--trail-size-kwords`
   runtime options no longer have any effect, and are deprecated.

-* We have upgraded the bundled Boehm GC to v7.6.12 and libatomic_ops to v7.6.8.
+* We have upgraded the bundled Boehm GC to v8.0.6 and libatomic_ops to v7.6.12.

 For news about earlier versions, see the HISTORY file.
Submodule boehm_gc 43ac2ea45...45e9ac4f1:
  > Update libatomic_ops submodule to v7.6.12
  > Mmakefile: Pass MAKE_AS_LIB=1 when building gc.lib
  > Ensure that /tools/if_not_there.sh uses LF endings
  > Avoid linking with user32.dll on Windows.
  > Update libatomic_ops submodule to v7.6.2
  > Add libatomoc_ops/ as a git submodule
  > Add GC_mercury_write_size_map()
  > Fix cross-compilation with thread support enabled.
  > Replace tools/if_not_there.c with shell script.
  > Add callbacks that can be used by a profiler
  > Support building in the Mercury source tree.
  > Add more files to .gitignore
  > [8.0.6]
  ... snip bdwgc changes ...

diff --git a/runtime/mercury_report_stats.c b/runtime/mercury_report_stats.c
index 3fc4923b7..9b30399c7 100644
--- a/runtime/mercury_report_stats.c
+++ b/runtime/mercury_report_stats.c
@@ -171,15 +171,19 @@ MR_report_standard_stats(FILE *fp, int *line_number)
     if (result < 0) {
         return errno;
-    if (GC_mercury_calc_gc_time) {
+    {
+        unsigned long total_gc_time;
+        total_gc_time = GC_get_full_gc_total_time();
+        if (total_gc_time != 0) {
             // Convert from unsigned long milliseconds to float seconds.
             result = fprintf(fp, "total GC time: %.2fs, ",
-            (float) GC_total_gc_time / (float) 1000
-        );
+                (float) total_gc_time / (float) 1000);
             if (result < 0) {
                 return errno;
+    }
     result = fprintf(fp, "Heap used since last GC: %.3fk, Total used: %.3fk",
         GC_get_bytes_since_gc() / 1024.0,
         GC_get_heap_size() / 1024.0
diff --git a/runtime/mercury_wrapper.c b/runtime/mercury_wrapper.c
index f641ff5c5..5018d667b 100644
--- a/runtime/mercury_wrapper.c
+++ b/runtime/mercury_wrapper.c
@@ -2001,7 +2001,7 @@ MR_process_options(int argc, char **argv)

             case MR_BOEHM_GC_CALC_TIME:
 #ifdef MR_BOEHM_GC
-                GC_mercury_calc_gc_time = MR_TRUE;
+                GC_start_performance_measurement();

More information about the reviews mailing list