Skip to content

Commit bb3c317

Browse files
committed
Refactor MMTk-specific changes
. Change build mechanism to better match other Julia optional libraries. . Reduce `#ifdef MMTK`s. . Add `gc-common.c` to hold GC code that is common to Julia's GC and MMTk. . Add `mmtk-gc.c` for MMTk-specific code. . Add `gc-interface.h` to document the GC interface.
1 parent 54ca78a commit bb3c317

18 files changed

+1649
-1045
lines changed

Make.inc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ HAVE_SSP := 0
8686
WITH_GC_VERIFY := 0
8787
WITH_GC_DEBUG_ENV := 0
8888

89+
# MMTk GC
90+
WITH_MMTK ?= 0
91+
8992
# Enable DTrace support
9093
WITH_DTRACE := 0
9194

@@ -709,6 +712,24 @@ JCXXFLAGS += -DGC_DEBUG_ENV
709712
JCFLAGS += -DGC_DEBUG_ENV
710713
endif
711714

715+
ifeq ($(WITH_MMTK), 1)
716+
ifeq (${MMTK_JULIA_DIR},)
717+
$(error MMTK_JULIA_DIR must be set to use MMTk)
718+
endif
719+
JCXXFLAGS += -DMMTK_GC
720+
JCFLAGS += -DMMTK_GC
721+
# TODO: make this "debug" as needed
722+
MMTK_BUILD_TYPE = release
723+
MMTK_DIR = ${MMTK_JULIA_DIR}/mmtk
724+
MMTK_API_INC = $(MMTK_DIR)/api
725+
MMTK_JULIA_INC = ${MMTK_JULIA_DIR}/julia
726+
MMTK_LIB := -L$(MMTK_DIR)/target/$(MMTK_BUILD_TYPE) -lmmtk_julia
727+
LDFLAGS += -Wl,-rpath=$(MMTK_DIR)/target/$(MMTK_BUILD_TYPE)/
728+
else
729+
MMTK_JULIA_INC :=
730+
MMTK_LIB :=
731+
endif
732+
712733
ifeq ($(WITH_DTRACE), 1)
713734
JCXXFLAGS += -DUSE_DTRACE
714735
JCFLAGS += -DUSE_DTRACE

contrib/refresh_checksums.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ CLANG_TRIPLETS=$(filter %-darwin %-freebsd,$(TRIPLETS))
2424
NON_CLANG_TRIPLETS=$(filter-out %-darwin %-freebsd,$(TRIPLETS))
2525

2626
# These are the projects currently using BinaryBuilder; both GCC-expanded and non-GCC-expanded:
27-
BB_PROJECTS=mbedtls libssh2 nghttp2 mpfr curl libgit2 pcre libuv unwind llvmunwind dsfmt objconv p7zip zlib libsuitesparse openlibm blastrampoline
27+
BB_PROJECTS=mbedtls libssh2 nghttp2 mpfr curl libgit2 pcre libuv unwind llvmunwind dsfmt objconv p7zip zlib libsuitesparse openlibm blastrampoline libmmtk_julia
2828
BB_GCC_EXPANDED_PROJECTS=openblas csl
2929
BB_CXX_EXPANDED_PROJECTS=gmp llvm clang llvm-tools lld
3030
# These are non-BB source-only deps

src/Makefile

Lines changed: 22 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,6 @@ BUILDDIR := .
44
include $(JULIAHOME)/Make.inc
55
include $(JULIAHOME)/deps/llvm-ver.make
66

7-
ifeq ($(USE_MMTK), 1)
8-
CFLAGS = -DMMTKHEAP
9-
CPPFLAGS = -DMMTKHEAP
10-
MMTK_BUILD_TYPE = ${MMTK_BUILD}
11-
MMTK_DIR = ${MMTK_JULIA_DIR}
12-
MMTK_API_DIR_INCLUDE = $(MMTK_DIR)/api
13-
MMTK_JULIA_DIR_INCLUDE = $(MMTK_DIR)/../julia
14-
MMTK_LIB := -L$(MMTK_DIR)/target/$(MMTK_BUILD_TYPE)/ -lmmtk_julia
15-
LDFLAGS += -Wl,-rpath=$(MMTK_DIR)/target/$(MMTK_BUILD_TYPE)/
16-
endif
17-
187
JCFLAGS += $(CFLAGS)
198
JCXXFLAGS += $(CXXFLAGS)
209
JCPPFLAGS += $(CPPFLAGS)
@@ -30,10 +19,6 @@ FLAGS := \
3019
-I$(LIBUV_INC) -I$(build_includedir) \
3120
-I$(JULIAHOME)/deps/valgrind
3221

33-
ifeq ($(USE_MMTK), 1)
34-
FLAGS += -I$(MMTK_API_DIR_INCLUDE) -I$(MMTK_JULIA_DIR_INCLUDE)
35-
endif
36-
3722
FLAGS += -Wall -Wno-strict-aliasing -fno-omit-frame-pointer -fvisibility=hidden -fno-common \
3823
-Wno-comment -Wpointer-arith -Wundef
3924
ifeq ($(USEGCC),1) # GCC bug #25509 (void)__attribute__((warn_unused_result))
@@ -45,6 +30,10 @@ ifeq ($(USECLANG),1)
4530
FLAGS += -Wno-return-type-c-linkage
4631
endif
4732

33+
ifeq ($(WITH_MMTK), 1)
34+
FLAGS += -I$(MMTK_API_INC) -I$(MMTK_JULIA_INC)
35+
endif
36+
4837
FLAGS += -DJL_BUILD_ARCH='"$(ARCH)"'
4938
ifeq ($(OS),WINNT)
5039
FLAGS += -DJL_BUILD_UNAME='"NT"'
@@ -60,9 +49,10 @@ SRCS := \
6049
jltypes gf typemap smallintset ast builtins module interpreter symbol \
6150
dlload sys init task array staticdata toplevel jl_uv datatype \
6251
simplevector runtime_intrinsics precompile jloptions \
63-
threading partr stackwalk gc gc-debug gc-pages gc-stacks gc-alloc-profiler method \
64-
jlapi signal-handling safepoint timing subtype rtutils gc-heap-snapshot \
65-
crc32c APInt-C processor ircode opaque_closure codegen-stubs coverage runtime_ccall
52+
threading partr stackwalk gc-common gc gc-debug gc-pages gc-stacks gc-alloc-profiler \
53+
mmtk-gc method jlapi signal-handling safepoint timing subtype rtutils \
54+
gc-heap-snapshot crc32c APInt-C processor ircode opaque_closure codegen-stubs \
55+
coverage runtime_ccall
6656

6757
RT_LLVMLINK :=
6858
CG_LLVMLINK :=
@@ -173,13 +163,8 @@ LIBJULIA_PATH_REL := libjulia
173163
endif
174164

175165
COMMON_LIBPATHS := -L$(build_libdir) -L$(build_shlibdir)
176-
RT_LIBS := $(WHOLE_ARCHIVE) $(LIBUV) $(WHOLE_ARCHIVE) $(LIBUTF8PROC) $(NO_WHOLE_ARCHIVE) $(LIBUNWIND) $(RT_LLVMLINK) $(OSLIBS)
177-
CG_LIBS := $(LIBUNWIND) $(CG_LLVMLINK) $(OSLIBS)
178-
179-
ifeq ($(USE_MMTK), 1)
180-
CG_LIBS += $(MMTK_LIB)
181-
RT_LIBS += $(MMTK_LIB)
182-
endif
166+
RT_LIBS := $(WHOLE_ARCHIVE) $(LIBUV) $(WHOLE_ARCHIVE) $(LIBUTF8PROC) $(NO_WHOLE_ARCHIVE) $(LIBUNWIND) $(RT_LLVMLINK) $(OSLIBS) $(MMTK_LIB)
167+
CG_LIBS := $(LIBUNWIND) $(CG_LLVMLINK) $(OSLIBS) $(MMTK_LIB)
183168

184169
RT_DEBUG_LIBS := $(COMMON_LIBPATHS) $(WHOLE_ARCHIVE) $(BUILDDIR)/flisp/libflisp-debug.a $(WHOLE_ARCHIVE) $(BUILDDIR)/support/libsupport-debug.a -ljulia-debug $(RT_LIBS)
185170
CG_DEBUG_LIBS := $(COMMON_LIBPATHS) $(CG_LIBS) -ljulia-debug -ljulia-internal-debug
@@ -189,10 +174,13 @@ CG_RELEASE_LIBS := $(COMMON_LIBPATHS) $(CG_LIBS) -ljulia -ljulia-internal
189174
OBJS := $(SRCS:%=$(BUILDDIR)/%.o)
190175
DOBJS := $(SRCS:%=$(BUILDDIR)/%.dbg.obj)
191176

192-
ifeq ($(USE_MMTK), 1)
177+
ifeq ($(WITH_MMTK), 1)
193178
MMTK_SRCS := mmtk_julia
194-
MMTK_OBJS := $(MMTK_SRCS:%=$(MMTK_JULIA_DIR_INCLUDE)/%.o)
195-
MMTK_DOBJS := $(MMTK_SRCS:%=$(MMTK_JULIA_DIR_INCLUDE)/%.o)
179+
MMTK_OBJS := $(MMTK_SRCS:%=$(MMTK_JULIA_INC)/%.o)
180+
MMTK_DOBJS := $(MMTK_SRCS:%=$(MMTK_JULIA_INC)/%.dbg.obj)
181+
else
182+
MMTK_OBJS :=
183+
MMTK_DOBJS :=
196184
endif
197185

198186
CODEGEN_OBJS := $(CODEGEN_SRCS:%=$(BUILDDIR)/%.o)
@@ -262,10 +250,10 @@ $(BUILDDIR)/%.o : $(SRCDIR)/%.d
262250
$(BUILDDIR)/%.dbg.obj : $(SRCDIR)/%.d
263251
@$(call PRINT_DTRACE, $(DTRACE) -G -s $< -o $@)
264252

265-
ifeq ($(USE_MMTK), 1)
266-
$(MMTK_JULIA_DIR_INCLUDE)/%.o: $(MMTK_JULIA_DIR_INCLUDE)/%.c $(HEADERS) | $(MMTK_JULIA_DIR_INCLUDE)
253+
ifeq ($(WITH_MMTK), 1)
254+
$(MMTK_JULIA_INC)/%.o: $(MMTK_JULIA_INC)/%.c $(HEADERS) | $(MMTK_JULIA_INC)
267255
@$(call PRINT_CC, $(CC) $(JCPPFLAGS) $(JCFLAGS) $(SHIPFLAGS) $(DISABLE_ASSERTIONS) -c $< -o $@)
268-
$(MMTK_JULIA_DIR_INCLUDE)/%.dbg.obj: $(MMTK_JULIA_DIR_INCLUDE)/%.c $(HEADERS) | $(MMTK_JULIA_DIR_INCLUDE)
256+
$(MMTK_JULIA_INC)/%.dbg.obj: $(MMTK_JULIA_INC)/%.c $(HEADERS) | $(MMTK_JULIA_INC)
269257
@$(call PRINT_CC, $(CC) $(JCPPFLAGS) $(JCFLAGS) $(DEBUGFLAGS) -c $< -o $@)
270258
endif
271259

@@ -333,6 +321,8 @@ $(BUILDDIR)/disasm.o $(BUILDDIR)/disasm.dbg.obj: $(SRCDIR)/debuginfo.h $(SRCDIR)
333321
$(BUILDDIR)/gc-debug.o $(BUILDDIR)/gc-debug.dbg.obj: $(SRCDIR)/gc.h
334322
$(BUILDDIR)/gc-pages.o $(BUILDDIR)/gc-pages.dbg.obj: $(SRCDIR)/gc.h
335323
$(BUILDDIR)/gc.o $(BUILDDIR)/gc.dbg.obj: $(SRCDIR)/gc.h $(SRCDIR)/gc-heap-snapshot.h $(SRCDIR)/gc-alloc-profiler.h
324+
$(BUILDDIR)/mmtk-gc.o $(BUILDDIR)/mmtk-gc.dbg.obj: $(SRCDIR)/gc.h $(SRCDIR)/gc-heap-snapshot.h $(SRCDIR)/gc-alloc-profiler.h
325+
$(BUILDDIR)/gc-common.o $(BUILDDIR)/gc-common.dbg.obj: $(SRCDIR)/gc.h $(SRCDIR)/gc-heap-snapshot.h $(SRCDIR)/gc-alloc-profiler.h
336326
$(BUILDDIR)/gc-heap-snapshot.o $(BUILDDIR)/gc-heap-snapshot.dbg.obj: $(SRCDIR)/gc.h $(SRCDIR)/gc-heap-snapshot.h
337327
$(BUILDDIR)/gc-alloc-profiler.o $(BUILDDIR)/gc-alloc-profiler.dbg.obj: $(SRCDIR)/gc.h $(SRCDIR)/gc-alloc-profiler.h
338328
$(BUILDDIR)/init.o $(BUILDDIR)/init.dbg.obj: $(SRCDIR)/builtin_proto.h
@@ -398,7 +388,6 @@ $(BUILDDIR)/julia_version.h: $(JULIAHOME)/VERSION
398388

399389
CXXLD = $(CXX) -shared
400390

401-
ifeq ($(USE_MMTK), 1)
402391
$(build_shlibdir)/libjulia-internal.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(OBJS) $(MMTK_OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(LIBUV)
403392
@$(call PRINT_LINK, $(CXXLD) $(call IMPLIB_FLAGS,$@) $(JCXXFLAGS) $(CXXLDFLAGS) $(SHIPFLAGS) $(OBJS) $(MMTK_OBJS) $(RPATH_LIB) -o $@ \
404393
$(JLDFLAGS) $(JLIBLDFLAGS) $(RT_RELEASE_LIBS) $(call SONAME_FLAGS,libjulia-internal.$(JL_MAJOR_SHLIB_EXT)))
@@ -410,19 +399,6 @@ $(build_shlibdir)/libjulia-internal-debug.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)
410399
$(JLDFLAGS) $(JLIBLDFLAGS) $(RT_DEBUG_LIBS) $(call SONAME_FLAGS,libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT)))
411400
@$(INSTALL_NAME_CMD)libjulia-internal-debug.$(SHLIB_EXT) $@
412401
$(DSYMUTIL) $@
413-
else
414-
$(build_shlibdir)/libjulia-internal.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(LIBUV)
415-
@$(call PRINT_LINK, $(CXXLD) $(call IMPLIB_FLAGS,$@) $(JCXXFLAGS) $(JL_CXXFLAGS) $(CXXLDFLAGS) $(SHIPFLAGS) $(OBJS) $(RPATH_LIB) -o $@ \
416-
$(JLDFLAGS) $(JLIBLDFLAGS) $(RT_RELEASE_LIBS) $(call SONAME_FLAGS,libjulia-internal.$(JL_MAJOR_SHLIB_EXT)))
417-
@$(INSTALL_NAME_CMD)libjulia-internal.$(SHLIB_EXT) $@
418-
$(DSYMUTIL) $@
419-
420-
$(build_shlibdir)/libjulia-internal-debug.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(DOBJS) $(BUILDDIR)/flisp/libflisp-debug.a $(BUILDDIR)/support/libsupport-debug.a $(LIBUV)
421-
@$(call PRINT_LINK, $(CXXLD) $(call IMPLIB_FLAGS,$@) $(JCXXFLAGS) $(JL_CXXFLAGS) $(CXXLDFLAGS) $(DEBUGFLAGS) $(DOBJS) $(RPATH_LIB) -o $@ \
422-
$(JLDFLAGS) $(JLIBLDFLAGS) $(RT_DEBUG_LIBS) $(call SONAME_FLAGS,libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT)))
423-
@$(INSTALL_NAME_CMD)libjulia-internal-debug.$(SHLIB_EXT) $@
424-
$(DSYMUTIL) $@
425-
endif
426402

427403
ifneq ($(OS), WINNT)
428404
$(build_shlibdir)/libjulia-internal.$(JL_MAJOR_SHLIB_EXT) $(build_shlibdir)/libjulia-internal-debug.$(JL_MAJOR_SHLIB_EXT): $(build_shlibdir)/libjulia-internal%.$(JL_MAJOR_SHLIB_EXT): \
@@ -464,20 +440,11 @@ libjulia-codegen-release: $(build_shlibdir)/libjulia-codegen.$(JL_MAJOR_MINOR_SH
464440
libjulia-codegen-debug: $(build_shlibdir)/libjulia-codegen-debug.$(JL_MAJOR_MINOR_SHLIB_EXT)
465441
libjulia-codegen-debug libjulia-codegen-release: $(PUBLIC_HEADER_TARGETS)
466442

467-
ifeq ($(USE_MMTK), 1)
468443
clean:
469444
-rm -fr $(build_shlibdir)/libjulia-internal* $(build_shlibdir)/libccalltest* $(build_shlibdir)/libllvmcalltest*
470445
-rm -f $(BUILDDIR)/julia_flisp.boot $(BUILDDIR)/julia_flisp.boot.inc
471446
-rm -f $(BUILDDIR)/*.dbg.obj $(BUILDDIR)/*.o $(BUILDDIR)/*.dwo $(BUILDDIR)/*.$(SHLIB_EXT) $(BUILDDIR)/*.a
472-
-rm -f $(BUILDDIR)/julia_version.h
473-
-rm -fr $(MMTK_JULIA_DIR_INCLUDE)/*.o
474-
else
475-
clean:
476-
-rm -fr $(build_shlibdir)/libjulia-internal* $(build_shlibdir)/libjulia-codegen* $(build_shlibdir)/libccalltest* $(build_shlibdir)/libllvmcalltest*
477-
-rm -f $(BUILDDIR)/julia_flisp.boot $(BUILDDIR)/julia_flisp.boot.inc $(BUILDDIR)/jl_internal_funcs.inc
478-
-rm -f $(BUILDDIR)/*.dbg.obj $(BUILDDIR)/*.o $(BUILDDIR)/*.dwo $(BUILDDIR)/*.$(SHLIB_EXT) $(BUILDDIR)/*.a $(BUILDDIR)/*.h.gen
479-
-rm -f $(BUILDDIR)/julia_version.h
480-
endif
447+
-rm -f $(BUILDDIR)/julia_version.h $(MMTK_OBJS) $(MMTK_DOBJS)
481448

482449
clean-flisp:
483450
-$(MAKE) -C $(SRCDIR)/flisp clean BUILDDIR='$(abspath $(BUILDDIR)/flisp)'

src/array.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ JL_DLLEXPORT jl_value_t *jl_alloc_string(size_t len)
497497
jl_ptls_t ptls = ct->ptls;
498498
const size_t allocsz = sz + sizeof(jl_taggedvalue_t);
499499
if (sz <= GC_MAX_SZCLASS) {
500-
#ifndef MMTKHEAP
500+
#ifndef MMTK_GC
501501
int pool_id = jl_gc_szclass_align8(allocsz);
502502
jl_gc_pool_t *p = &ptls->heap.norm_pools[pool_id];
503503
int osize = jl_gc_sizeclasses[pool_id];
@@ -513,7 +513,7 @@ JL_DLLEXPORT jl_value_t *jl_alloc_string(size_t len)
513513
else {
514514
if (allocsz < sz) // overflow in adding offs, size was "negative"
515515
jl_throw(jl_memory_exception);
516-
#ifndef MMTKHEAP
516+
#ifndef MMTK_GC
517517
s = jl_gc_big_alloc_noinline(ptls, allocsz);
518518
#else
519519
s = jl_mmtk_gc_alloc_big(ptls, allocsz);

0 commit comments

Comments
 (0)