diff --git a/Make.inc b/Make.inc index 7af7c59fdf7c8..97a8a3f47a62a 100644 --- a/Make.inc +++ b/Make.inc @@ -81,7 +81,7 @@ WITH_GC_VERIFY := 0 WITH_GC_DEBUG_ENV := 0 # Use stock if MMTK_PLAN hasn't been defined -MMTK_PLAN ?= None +MMTK_PLAN ?= Immix # Enable DTrace support WITH_DTRACE := 0 @@ -1426,13 +1426,6 @@ $(error "Attempting to build OpenBLAS or SuiteSparse without a functioning fortr endif endif -ifneq (${MMTK_PLAN},None) -# We still need some .h files from mmtk when -# building Julia using the BinaryBuilder -ifeq ($(USE_BINARYBUILDER_MMTK_JULIA),1) -MMTK_API_INC=$(JULIAHOME)/deps/mmtk/ -endif -endif # OS specific stuff diff --git a/deps/mmtk/mmtk.h b/deps/mmtk/mmtk.h deleted file mode 100644 index c88204a769c41..0000000000000 --- a/deps/mmtk/mmtk.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef MMTK_H -#define MMTK_H - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void* MMTk_Mutator; -typedef void* MMTk_TraceLocal; -typedef void (*ProcessSlotFn)(void* closure, void* slot); -typedef void (*ProcessOffsetSlotFn)(void* closure, void* slot, int offset); - -typedef struct { - void** ptr; - size_t cap; -} RootsWorkBuffer; - -typedef struct { - RootsWorkBuffer (*report_slots_func)(void** buf, size_t size, size_t cap, void* data, bool renew); - RootsWorkBuffer (*report_nodes_func)(void** buf, size_t size, size_t cap, void* data, bool renew); - RootsWorkBuffer (*report_tpinned_nodes_func)(void** buf, size_t size, size_t cap, void* data, bool renew); - void* data; -} RootsWorkClosure; - -/** - * Allocation - */ -extern MMTk_Mutator mmtk_bind_mutator(void *tls, int tid); -extern void mmtk_post_bind_mutator(MMTk_Mutator mutator, MMTk_Mutator original_mutator); -extern void mmtk_destroy_mutator(MMTk_Mutator mutator); - -extern void* mmtk_alloc(MMTk_Mutator mutator, size_t size, - size_t align, size_t offset, int allocator); - -extern void* mmtk_alloc_large(MMTk_Mutator mutator, size_t size, - size_t align, size_t offset, int allocator); - -extern void mmtk_post_alloc(MMTk_Mutator mutator, void* refer, - size_t bytes, int allocator); - -extern bool mmtk_is_live_object(void* ref); -extern bool mmtk_is_mapped_object(void* ref); -extern bool mmtk_is_mapped_address(void* addr); -extern int mmtk_object_is_managed_by_mmtk(void* addr); -extern void mmtk_runtime_panic(void); -extern void mmtk_unreachable(void); -extern unsigned char mmtk_pin_object(void* obj); -extern bool mmtk_is_pinned(void* obj); -extern const char* get_mmtk_version(void); - -extern void mmtk_set_vm_space(void* addr, size_t size); -extern void mmtk_immortal_region_post_alloc(void* addr, size_t size); - -// Write barriers -extern void mmtk_memory_region_copy(MMTk_Mutator mutator, void* src_obj, void* src_addr, void* dst_obj, void* dst_addr, size_t size); -extern void mmtk_object_reference_write_post(MMTk_Mutator mutator, const void* src, const void* target); -extern void mmtk_object_reference_write_slow(MMTk_Mutator mutator, const void* src, const void* target); -extern const void* MMTK_SIDE_LOG_BIT_BASE_ADDRESS; - -extern _Atomic(uintptr_t) JULIA_MALLOC_BYTES; - -/** - * Misc - */ -extern void mmtk_gc_init(uintptr_t min_heap_size, uintptr_t max_heap_size, uintptr_t n_gcthreads, uintptr_t header_size, uintptr_t tag); -extern bool mmtk_will_never_move(void* object); -extern bool mmtk_process(char* name, char* value); -extern void mmtk_scan_region(void); -extern void mmtk_handle_user_collection_request(void *tls, uint8_t collection); -extern void mmtk_initialize_collection(void* tls); -extern void mmtk_start_control_collector(void *tls); -extern void mmtk_start_worker(void *tls, void* worker, void* mmtk); -extern void mmtk_process_julia_obj(void* addr); -extern void mmtk_register_finalizer(void* obj, void* function, bool is_ptr); -extern void mmtk_run_finalizers_for_obj(void* obj); -extern void mmtk_run_finalizers(bool at_exit); -extern void mmtk_gc_poll(void *tls); -extern void mmtk_julia_copy_stack_check(int copy_stack); -extern void* mmtk_get_possibly_forwarded(void* object); -extern void mmtk_block_thread_for_gc(void); -extern void* mmtk_new_mutator_iterator(void); -extern void* mmtk_get_next_mutator_tls(void*); -extern void* mmtk_close_mutator_iterator(void*); - - -/** - * VM Accounting - */ -extern size_t mmtk_free_bytes(void); -extern size_t mmtk_total_bytes(void); -extern size_t mmtk_used_bytes(void); -extern void* mmtk_starting_heap_address(void); -extern void* mmtk_last_heap_address(void); - -/** - * Reference Processing - */ -extern void mmtk_add_weak_candidate(void* ref); -extern void mmtk_add_soft_candidate(void* ref); -extern void mmtk_add_phantom_candidate(void* ref); - -extern void mmtk_harness_begin(void *tls); -extern void mmtk_harness_end(void); - -#ifdef __cplusplus -} -#endif - -#endif // MMTK_H diff --git a/deps/mmtk/mmtkMutator.h b/deps/mmtk/mmtkMutator.h deleted file mode 100644 index 2f513406353f2..0000000000000 --- a/deps/mmtk/mmtkMutator.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef MMTK_JULIA_MMTK_MUTATOR_H -#define MMTK_JULIA_MMTK_MUTATOR_H - -// mmtk_julia_types.h refers to the types in this file. -// So if this file is updated, make sure you regenerate Rust types for mmtk_julia_types.h. - -enum Allocator { - AllocatorDefault = 0, - AllocatorImmortal = 1, - AllocatorLos = 2, - AllocatorCode = 3, - AllocatorReadOnly = 4, -}; - -typedef struct { - void* data; - void* vtable; -} RustDynPtr; - -// These constants should match the constants defind in mmtk::util::alloc::allocators -#define MAX_BUMP_ALLOCATORS 6 -#define MAX_LARGE_OBJECT_ALLOCATORS 2 -#define MAX_MALLOC_ALLOCATORS 1 -#define MAX_IMMIX_ALLOCATORS 1 -#define MAX_FREE_LIST_ALLOCATORS 2 -#define MAX_MARK_COMPACT_ALLOCATORS 1 - -// The following types should have the same layout as the types with the same name in MMTk core (Rust) - -typedef struct { - void* tls; - void* cursor; - void* limit; - RustDynPtr space; - void* context; -} BumpAllocator; - -typedef struct { - void* tls; - void* space; - void* context; -} LargeObjectAllocator; - -typedef struct { - void* tls; - void* cursor; - void* limit; - void* immix_space; - void* context; - uint8_t hot; - uint8_t copy; - void* large_cursor; - void* large_limit; - uint8_t request_for_large; - uint8_t _align[7]; - uint8_t line_opt_tag; - uintptr_t line_opt; -} ImmixAllocator; - -typedef struct { - void* Address; -} FLBlock; - -typedef struct { - FLBlock first; - FLBlock last; - size_t size; - char lock; -} FLBlockList; - -typedef struct { - void* tls; - void* space; - void* context; - FLBlockList* available_blocks; - FLBlockList* available_blocks_stress; - FLBlockList* unswept_blocks; - FLBlockList* consumed_blocks; -} FreeListAllocator; - -typedef struct { - void* tls; - void* space; - void* context; -} MMTkMallocAllocator; // Prefix with MMTk to avoid name clash - -typedef struct { - BumpAllocator bump_allocator; -} MarkCompactAllocator; - -typedef struct { - BumpAllocator bump_pointer[MAX_BUMP_ALLOCATORS]; - LargeObjectAllocator large_object[MAX_LARGE_OBJECT_ALLOCATORS]; - MMTkMallocAllocator malloc[MAX_MALLOC_ALLOCATORS]; - ImmixAllocator immix[MAX_IMMIX_ALLOCATORS]; - FreeListAllocator free_list[MAX_FREE_LIST_ALLOCATORS]; - MarkCompactAllocator markcompact[MAX_MARK_COMPACT_ALLOCATORS]; -} Allocators; - -typedef struct { - void* allocator_mapping; - void* space_mapping; - RustDynPtr prepare_func; - RustDynPtr release_func; -} MutatorConfig; - -typedef struct { - Allocators allocators; - RustDynPtr barrier; - void* mutator_tls; - RustDynPtr plan; - MutatorConfig config; -} MMTkMutatorContext; -#endif // MMTK_MUTATOR_HPP