diff --git a/src/array.c b/src/array.c index 3dc1b94f3ecd6..9ed61a4ae144c 100644 --- a/src/array.c +++ b/src/array.c @@ -243,7 +243,7 @@ JL_DLLEXPORT jl_array_t *jl_reshape_array(jl_value_t *atype, jl_array_t *data, // introspect the object to update the a->data field. To avoid doing that and // making scan_object much more complex we simply enforce that both owner and // buffers are always pinned - mmtk_pin_object(owner); + PTR_PIN(owner); a->flags.how = 3; a->data = data->data; a->flags.isshared = 1; @@ -296,7 +296,7 @@ JL_DLLEXPORT jl_array_t *jl_string_to_array(jl_value_t *str) // introspect the object to update the a->data field. To avoid doing that and // making scan_object much more complex we simply enforce that both owner and // buffers are always pinned - mmtk_pin_object(str); + PTR_PIN(str); a->flags.how = 3; a->flags.isshared = 1; size_t l = jl_string_len(str); @@ -695,7 +695,7 @@ static int NOINLINE array_resize_buffer(jl_array_t *a, size_t newlen) // introspect the object to update the a->data field. To avoid doing that and // making scan_object much more complex we simply enforce that both owner and // buffers are always pinned - mmtk_pin_object(s); + PTR_PIN(s); jl_array_data_owner(a) = s; jl_gc_wb(a, s); a->data = jl_string_data(s); diff --git a/src/builtins.c b/src/builtins.c index 2ab4b7b8a18ad..157ad0257a95d 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -314,7 +314,7 @@ static uintptr_t type_object_id_(jl_value_t *v, jl_varidx_t *env) JL_NOTSAFEPOIN } // FIXME: Pinning objects that get hashed // until we implement address space hashing. - mmtk_pin_object(v); + PTR_PIN(v); return inthash((uintptr_t)v); } if (tv == jl_uniontype_type) { @@ -364,7 +364,7 @@ static uintptr_t immut_id_(jl_datatype_t *dt, jl_value_t *v, uintptr_t h) JL_NOT // FIXME: Pinning objects that get hashed // until we implement address space hashing. - mmtk_pin_object(v); + PTR_PIN(v); // operate element-wise if there are unused bits inside, // otherwise just take the whole data block at once // a few select pointers (notably symbol) also have special hash values @@ -424,7 +424,7 @@ static uintptr_t NOINLINE jl_object_id__cold(jl_datatype_t *dt, jl_value_t *v) J if (dt->name->mutabl) { // FIXME: Pinning objects that get hashed // until we implement address space hashing. - mmtk_pin_object(v); + PTR_PIN(v); return inthash((uintptr_t)v); } return immut_id_(dt, v, dt->hash); diff --git a/src/datatype.c b/src/datatype.c index 9f966effbc513..345bab270e912 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -67,7 +67,7 @@ JL_DLLEXPORT jl_typename_t *jl_new_typename_in(jl_sym_t *name, jl_module_t *modu jl_typename_type); // Typenames should be pinned since they are used as metadata, and are // read during scan_object - mmtk_pin_object(tn); + PTR_PIN(tn); tn->name = name; tn->module = module; tn->wrapper = NULL; @@ -101,7 +101,7 @@ jl_datatype_t *jl_new_uninitialized_datatype(void) jl_datatype_t *t = (jl_datatype_t*)jl_gc_alloc(ct->ptls, sizeof(jl_datatype_t), jl_datatype_type); // Types should be pinned since they are used as metadata, and are // read during scan_object - mmtk_pin_object(t); + PTR_PIN(t); t->hash = 0; t->hasfreetypevars = 0; t->isdispatchtuple = 0; diff --git a/src/julia.h b/src/julia.h index 4641eff3d9839..2961e7997bb7c 100644 --- a/src/julia.h +++ b/src/julia.h @@ -13,8 +13,11 @@ extern int mmtk_object_is_managed_by_mmtk(void* addr); extern unsigned char mmtk_pin_object(void* obj); // FIXME: Pinning objects that get hashed in the ptrhash table // until we implement address space hashing. -#define PTRHASH_PIN(key) \ - mmtk_pin_object(key); \ +#ifdef MMTK_GC +#define PTRHASH_PIN(key) mmtk_pin_object(key); +#else +#define PTRHASH_PIN(key) +#endif #ifdef __cplusplus } diff --git a/src/julia_internal.h b/src/julia_internal.h index e3d3fdb24cee7..f2b8c3ad7e526 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -3,6 +3,22 @@ #ifndef JL_INTERNAL_H #define JL_INTERNAL_H +#ifdef __cplusplus +extern "C" { +#endif + +extern int mmtk_object_is_managed_by_mmtk(void* addr); +extern unsigned char mmtk_pin_object(void* obj); +#ifdef MMTK_GC +#define PTR_PIN(key) mmtk_pin_object(key); +#else +#define PTR_PIN(key) +#endif + +#ifdef __cplusplus +} +#endif + #include "options.h" #include "julia_locks.h" #include "julia_threads.h" @@ -532,7 +548,7 @@ STATIC_INLINE jl_gc_tracked_buffer_t *jl_gc_alloc_buf(jl_ptls_t ptls, size_t sz) // introspect the object to update the a->data field. To avoid doing that and // making scan_object much more complex we simply enforce that both owner and // buffers are always pinned - mmtk_pin_object(buf); + PTR_PIN(buf); return buf; }