$OpenBSD: patch-src_gc_cpp,v 1.1 2014/07/10 10:19:45 robert Exp $
--- src/gc.cpp.orig	Tue Feb 14 04:22:17 2012
+++ src/gc.cpp	Thu Jul 10 11:14:45 2014
@@ -70,8 +70,8 @@ void *debug_base(void *ptr) {
     return base + debug_base_fixup();
 }
 
-int debug_general_register_disappearing_link(void **p_ptr, void *base) {
-    char *real_base=reinterpret_cast<char *>(base) - debug_base_fixup();
+int debug_general_register_disappearing_link(void **p_ptr, const void *base) {
+    char *real_base=const_cast<char *>(reinterpret_cast<const char *>(base)) - debug_base_fixup();
     return GC_general_register_disappearing_link(p_ptr, real_base);
 }
 
@@ -90,7 +90,7 @@ void dummy_register_finalizer(void *, CleanupFunc, voi
     }
 }
 
-int dummy_general_register_disappearing_link(void **, void *) { return false; }
+int dummy_general_register_disappearing_link(void **, const void *) { return false; }
 
 int dummy_unregister_disappearing_link(void **/*link*/) { return false; }
 
@@ -112,7 +112,11 @@ Ops enabled_ops = {
     &GC_malloc_atomic_uncollectable,
     &GC_base,
     &GC_register_finalizer_ignore_self,
+#if (GC_MAJOR_VERSION >= 7 && GC_MINOR_VERSION >= 4)
     &GC_general_register_disappearing_link,
+#else
+    (int (*)(void**, const void*))(&GC_general_register_disappearing_link),
+#endif
     &GC_unregister_disappearing_link,
     &GC_get_heap_size,
     &GC_get_free_bytes,
@@ -202,7 +206,7 @@ void stub_register_finalizer_ignore_self(void *, Clean
     die_because_not_initialized();
 }
 
-int stub_general_register_disappearing_link(void **, void *) {
+int stub_general_register_disappearing_link(void **, const void *) {
     die_because_not_initialized();
     return 0;
 }
