[m-dev.] Mercury, Emscripten, and WebAssembly

Julien Fischer jfischer at opturion.com
Sun Mar 15 16:30:14 AEDT 2020


On Sun, 15 Mar 2020, Julien Fischer wrote:

> On Sat, 14 Mar 2020, Patrick Henning wrote:
>
>>  Hello again, I’ve made some progress with this but am still
>>  struggling. I was able to successfully carry out the “make" step with
>>  grade hlc.gc without errors occurring, but have not been able to run
>>  ‘make install’ successfully. For now I am attempting to make do with
>>  the results of the “make” step. 
>>  Currently I am stuck on a linking error: when attempting to do the
>>  final step of linking a simple mercury program object file with `emcc
>>  -o hello.js hello_init.o hello.o
>>  /mercury-srcdist-20.01.1/library/libmer_std.a
>>  /mercury-srcdist-20.01.1/runtime/libmer_rt.a
>>  /mercury-srcdist-20.01.1/boehm_gc/libgc.a`, I get two errors about
>>  symbols “MR_box_int64” and “MR_box_uint64” being undefined. 
>>
>>  These two symbols are defined in mercury.h, so I would expect them to
>>  be present in libmer_rt.a, but examining it with llvm-nm seems to
>>  indicate that they are not defined there or in fact in any of the
>>  other library files. Can anyone help point me in the direction of what
>>  I am missing? Does libmer_rt need to be built in a specific way to
>>  ensure that  “MR_box_int64” and “MR_box_uint64” are included? 
>
> No, I think there is some code missing from the runtime.  The attached
> (untested) patch to runtime/mercury.c should address it.

Here's an updated patch that doesn't contain cut-and-paste errors.

Julien.
-------------- next part --------------
diff --git a/runtime/mercury.c b/runtime/mercury.c
index cefd3d8..9aaf920 100644
--- a/runtime/mercury.c
+++ b/runtime/mercury.c
@@ -93,6 +93,40 @@ MR_OUTLINE_DEFN(
 
 #endif // MR_BOXED_FLOAT && !MR_GNUC
 
+#if defined(MR_BOXED_INT64S) && !defined(MR_GNUC)
+
+MR_OUTLINE_DEFN(
+    MR_Box
+    MR_box_int64(int64_t i)
+,
+    {
+        int64_t *ptr;
+
+        MR_make_hp_int64_aligned();
+        ptr = MR_new_object_atomic(int64_t, sizeof(int64_t),
+            MR_ALLOC_SITE_INT64, NULL);
+        *ptr = i;
+        return (MR_Box) ptr;
+    }
+)
+
+MR_OUTLINE_DEFN(
+    MR_Box
+    MR_box_uint64(uint64_t i)
+,
+    {
+        uint64_t *ptr;
+
+        MR_make_hp_uint64_aligned();
+        ptr = MR_new_object_atomic(uint64_t, sizeof(uint64_t),
+            MR_ALLOC_SITE_UINT64, NULL);
+        *ptr = i;
+        return (MR_Box) ptr;
+    }
+)
+
+#endif // MR_BOXED_INT64S && !MR_GNUC
+
 #endif // ! MR_HIGHLEVEL_CODE
 
 ////////////////////////////////////////////////////////////////////////////


More information about the developers mailing list