-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding support for building using BB version of mmtk-julia
- Loading branch information
Showing
8 changed files
with
253 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
mmtk_julia-b69acf5af7a7dd97c1cc6fd99f7c2d51b477f214.tar.gz/md5/1911cf084d26c48e2ed58af3d268b4b6 | ||
mmtk_julia-b69acf5af7a7dd97c1cc6fd99f7c2d51b477f214.tar.gz/sha512/75beab54398989c46b62e714b242cf6705d88d220f40c21e494e0f29161437f5fbe9ba05b543d2353a1ad76f4239ac4025b476be0be864649f310f14935289fe | ||
mmtk_julia.v0.30.2+0.x86_64-linux-gnu.tar.gz/md5/0b8d667927b7ae181245dd1aba467dcb | ||
mmtk_julia.v0.30.2+0.x86_64-linux-gnu.tar.gz/sha512/df45a7b148efcbf8fe24b51899bdc78f052cd96bcf43ff8e96f4ca02851589f4d634f879e2ae23e98917ba235a533a13cf0cb092bfa4fc2a48e260ae1efc007d |
1 change: 0 additions & 1 deletion
1
deps/checksums/mmtk_julia-b69acf5af7a7dd97c1cc6fd99f7c2d51b477f214.tar.gz/md5
This file was deleted.
Oops, something went wrong.
1 change: 0 additions & 1 deletion
1
deps/checksums/mmtk_julia-b69acf5af7a7dd97c1cc6fd99f7c2d51b477f214.tar.gz/sha512
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#ifndef MMTK_H | ||
#define MMTK_H | ||
|
||
#include <stdbool.h> | ||
#include <stddef.h> | ||
#include <stdint.h> | ||
|
||
#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 | ||
|
||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#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 | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters