[vmkit-commits] [vmkit] r180442 - Fixing Immix break.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:11:42 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:10:05 2013
New Revision: 180442

URL: http://llvm.org/viewvc/llvm-project?rev=180442&view=rev
Log:
Fixing Immix break.
Inline vmkitgcmalloc and VTgcmalloc.
(cherry picked from commit 78510636284da2c0f91419929c23a500861b0531)

Added:
    vmkit/trunk/mmtk/inline/InlineMethods.cpp
Modified:
    vmkit/trunk/Makefile.rules
    vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
    vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp
    vmkit/trunk/lib/j3/VMCore/JavaObject.h
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp
    vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
    vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
    vmkit/trunk/mmtk/magic/LowerJavaRT.cpp
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:10:05 2013
@@ -1,326 +1,177 @@
+VMJC      := $(ToolDir)/vmjc$(EXEEXT)
 
-.PHONY: all tidy clean distclean confclean
-.SECONDARY:
-.SUFFIXES:
-#.SUFFIXES: .c .cpp .cxx .cc .h .hpp .o .a .bc .ll .jar $(SHLIBEXT) $(EXEEXT)
-
-all::
-
-###############################################################################
-#   Main options
-###############################################################################
-ifeq ($(OPTIMIZED),1)
-  BUILD_NAME:=Release
-  ifeq ($(DEBUG),1)
-    BUILD_NAME:=$(BUILD_NAME)+Debug
-  endif
-else
-	$(warning "Non-optimized mode compile but the executable is broken")
-  ifeq ($(DEBUG),1)
-    BUILD_NAME:=Debug
-  else
-    BUILD_NAME:=Unoptimized
-  endif
-endif
-
-ifeq ($(ASSERT),1)
-  BUILD_NAME:=$(BUILD_NAME)+Asserts
-else
-  COMMON_CFLAGS+=-DNDEBUG
-endif
 
-ifeq ($(DEBUG),1)
-  COMMON_CFLAGS+=-g
-endif
+# Set the LLVM build file location 
+LLVMBuildTool   := $(LLVM_SRC_ROOT)/utils/llvm-build/llvm-build
 
-ifeq ($(OPTIMIZED),1)
-  LLC_FLAGS+= -O=3
-  OPT_FLAGS+= -disable-opt
-  COMMON_CFLAGS+= -O3
-else
-  LLC_FLAGS+= -O=0 
-  OPT_FLAGS+= -inline # unable to find which function I have to mark as always_inline... We have to investigate...
-  COMMON_CFLAGS+= -O0
-endif
+###############################################################################
+# VMKIT_RUNTIME: Provide rules to build a .cpp file with LLVM instructions
+#                generating code matching the .ll files.
+###############################################################################
 
-LLC_FLAGS+=-disable-cfi -disable-fp-elim -relocation-model=pic 
-OPT_FLAGS+=-disable-cfi -disable-fp-elim 
+ifdef VMKIT_RUNTIME
 
-INCLUDES+=-I$(PROJ_SRC_CWD) -I$(PROJ_SRC_ROOT)/include -I$(PROJ_SRC_ROOT)/lib/vmkit/MMTk -I$(BUILD_DIR) \
-					-I$(shell $(LLVM_CONFIG) --includedir)
+.PRECIOUS: LLVMRuntime.inc
 
-WARN_CFLAGS=  -Wall -Wno-long-long -Wno-variadic-macros -Wno-unused-private-field -Wno-unused-variable
-COMMON_CFLAGS+= $(INCLUDES) -ansi -pedantic $(WARN_CFLAGS) -fPIC \
-								-D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \
-								-fno-strict-aliasing -fno-omit-frame-pointer -fvisibility-inlines-hidden 
+LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME)
+	$(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)"
+	$(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=contents -o $@
 
-CFLAGS+=$(COMMON_CFLAGS) 
-CXXFLAGS+=$(COMMON_CFLAGS) -Woverloaded-virtual -Wcast-qual -fno-rtti -fno-exceptions
-LDFLAGS+=$(shell $(LLVM_CONFIG) --ldflags) $(LDOPT)
-LIBS+=$(shell $(LLVM_CONFIG) --libs) -lz
+all-local:: LLVMRuntime.inc
 
-DEPEND_OPTIONS=-MMD -MP -MF "$(BUILD_DIR)/$$*.d.tmp" -MT "$(BUILD_DIR)/$$*.bc" -MT "$(BUILD_DIR)/$$*.d"
-DOM=then mv -f "$(BUILD_DIR)/$$*.d.tmp" "$(BUILD_DIR)/$$*.d"; else rm -f "$(BUILD_DIR)/$$*.d.tmp"; exit 1; fi
+clean-local::
+	$(Verb) $(RM) -f LLVMRuntime.inc
 
-###############################################################################
-#   Nice printing
-###############################################################################
-ifndef PROF
-PROF=.
-all::
-	$(Echo) "Entering compilation process"
-endif
-
-EchoMsg="[$(PROJECT_NAME) $(PROF)]:"
-Echo=@echo $(EchoMsg)
-
-ifndef VERBOSE
-	SUB_OPT=--no-print-directory
-  Verb:=@
 endif
 
 ###############################################################################
-#   Recursive target managment
+# VMJC_ASSEMBLY: Provide rules to build glibj.zip.s.
 ###############################################################################
-RECURSIVE_TARGETS=all clean distclean
 
-$(RECURSIVE_TARGETS)::
-	$(Verb) for f in $(DIRS); do \
-		$(MAKE) $(SUB_OPT) -C $$f $@ PROF=$(PROF)/$$f; \
-		if [ $$? != 0 ]; then echo "$(EchoMsg) abort with error in $(PROF)/$$f"; exit 1; fi \
-	done; exit 0;
+ifdef VMJC_ASSEMBLY
+
+.PRECIOUS: glibj.zip.s
 
-tidy:
-	$(Echo) Cleaning temporary files
-	$(Verb) find $(PROJ_OBJ_ROOT) -iname "*~" -exec rm -f {} \;
+glibj.zip.s : $(LOPT) $(LLC) $(VMJC)
 
-clean::
-	$(Echo) "Cleaning compilation files"
-	$(Verb) rm -Rf $(BUILD_NAME)
+glibj.zip.bc :
+	$(Echo) "Compiling glibj.zip to llvm"
+	$(Verb) if test -d $(GLIBJ); then \
+	  $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ)/glibj.zip -o glibj.zip.bc; \
+	else \
+	  $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ) -o glibj.zip.bc; \
+	fi
+	
+glibj-optimized.zip.bc : glibj.zip.bc
+	$(Echo) "Optimizing glibj.zip"
+	$(Verb) $(LOPT) $(OPT_VMJC_FLAGS) -f glibj.zip.bc -o glibj-optimized.zip.bc
 
-distclean::
-	$(Echo) "Cleaning all compilation files"
-	$(Verb) rm -Rf Release* Debug* Unoptimized*
+glibj.zip.s : glibj-optimized.zip.bc
+	$(Echo) "Compiling glibj.zip.bc to native"
+	$(Verb) $(LLC) $(LLC_GLIBJ_FLAGS) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s
 
-confclean: clean
-	$(Echo) Cleaning configuration
-	$(Verb) rm -Rf $(PROJ_OBJ_ROOT)/Makefile.common
-	$(Verb) rm -Rf $(PROJ_OBJ_ROOT)/config.status $(PROJ_OBJ_ROOT)/config.log
-	$(Verb) rm -Rf $(PROJ_OBJ_ROOT)/autoconf/autom4te.cache $(PROJ_OBJ_ROOT)/autoconf/configure.bak
+$(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES)
+	$(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
+	$(Verb) $(Compile.C) $< -o $(ObjDir)/$*.o
 
-%/.dir:
-	$(Verb) $(MKDIR) $(dir $@) && $(TOUCH) $@
+clean-local::
+	$(Verb) $(RM) -f glibj.zip.s glibj.zip.bc glibj-optimized.zip.bc
+endif
 
 ###############################################################################
-#   Build system managment
+# RUN_ANT: Provide rules to build MMTk into a .o file and inlining facilities.
 ###############################################################################
-#SELF=$(PROJ_SRC_ROOT)/Makefile.rules $(PROJ_OBJ_ROOT)/Makefile.common Makefile
 
-$(LEVEL)/Makefile.common: $(PROJ_OBJ_ROOT)/Makefile.common
+ifdef RUN_ANT
 
-define define_config_rule
-$$(PROJ_OBJ_ROOT)/$1: $$(PROJ_SRC_ROOT)/$1.in $$(PROJ_SRC_ROOT)/configure
-	$(Echo) "Regenerating project files $$1"
-	$(Verb) cd $(PROJ_OBJ_ROOT) && ./config.status -q --$2=$1
-	$(Verb) touch $$@
-endef
+MMTkLib = $(LibDir)/libFinalMMTk.a
 
-$(foreach cur,$(CONFIG_FILES),$(eval $(call define_config_rule,$(cur),file)))
-$(foreach cur,$(CONFIG_HEADERS),$(eval $(call define_config_rule,$(cur),header)))
-
-$(PROJ_OBJ_ROOT)/configure: $(PROJ_SRC_ROOT)/autoconf/configure.ac $(PROJ_SRC_ROOT)/autoconf/AutoRegen.sh 
-	$(Echo) "Rebootstraping project"
-	$(Verb) cd $(PROJ_SRC_ROOT)/autoconf && ./AutoRegen.sh
-	$(Verb) cd $(PROJ_OBJ_ROOT) && ./config.status --recheck
+ifeq ($(shell [ ! -e $(MMTkLib) ] && echo "1"), 1)
+  COMPILE_MMTK = 1
+endif
 
-###############################################################################
-#   Build directories and generated binaries
-###############################################################################
-BIN_DIR=$(PROJ_OBJ_ROOT)/$(BUILD_NAME)/bin
-LIB_DIR=$(PROJ_OBJ_ROOT)/$(BUILD_NAME)/lib
-BUILD_DIR=$(PROJ_OBJ_CWD)/$(BUILD_NAME)
+ifeq ($(COMPILE_MMTK), 1)
+  all::
+	$(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml
+	$(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@)
+	$(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc
+	$(Verb) $(VMJC) $(VMJC_MMTK_FLAGS) -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled
+	$(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) $(OPT_MMTK_FLAGS) -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc
+	$(Verb) $(LLVMLINK) -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
+	$(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc
+	$(Verb) $(MKDIR) $(ObjDir)
+	$(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s
+	$(Verb) $(GREP) -v '\.loc[^0-9]\+[0-9]\+ 0' $(ObjDir)/FinalMMTk.s > $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc
+	$(Verb) $(MV) -f $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc $(ObjDir)/FinalMMTk.s
+	$(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o
+	$(Verb) $(Archive) $(LibDir)/libFinalMMTk.a $(ObjDir)/FinalMMTk.o
+	$(Verb) $(Ranlib) $(LibDir)/libFinalMMTk.a
+	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=VTgcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkVTMallocInline.inc
+	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=vmkitgcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkVMKitMallocInline.inc
+	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc
+	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc
+	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc
+endif
 
-PREPARE_CODE_LIB=$(LIB_DIR)/prepare-code$(SHLIBEXT)
-VMJC=$(BIN_DIR)/vmjc$(EXEEXT)
-PRECOMPILER=$(BIN_DIR)/precompiler
+clean-local::
+	$(Verb) $(RM) -rf classes $(JARNAME).jar $(JARNAME).bc $(JARNAME)-optimized.bc $(ObjDir)
+endif
 
 ###############################################################################
-#   Main targets
+# MODULE_WITH_GC: Provide rules for building .cpp files into an archive with
+#                 GC symbol information.
 ###############################################################################
-ifdef TOOL
-MODULE=$(TOOL)
 
-all:: $(BIN_DIR)/$(TOOL)$(EXEEXT)
-endif
+ifdef MODULE_WITH_GC
 
-ifdef LIBRARY
-MODULE=$(LIBRARY)
+ObjectsBCWithGC   := $(BaseNameSources:%=$(ObjDir)/%_gc.bc)
+ObjectsSWithGC    := $(BaseNameSources:%=$(ObjDir)/%_gc.s)
+ObjectsWithGC     := $(BaseNameSources:%=$(ObjDir)/%_gc.o)
+AModule           := $(LibDir)/lib$(MODULE_WITH_GC).a
+
+$(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.ll $(LOPT)
+	$(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
+	$(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) $(OPT_BC_WITH_GC_FLAGS) -StaticGCPass -o $@
+
+$(ObjectsSWithGC): $(ObjDir)/%_gc.s: $(ObjDir)/%_gc.bc $(LLC)
+	$(Echo) "Compiling $*.bc to $*.s for $(BuildMode) build"
+	$(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@
+
+$(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.s $(ObjDir)/.dir
+	$(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
+	$(Verb) $(Compile.C) $< -o $@
 
-all:: $(LIB_DIR)/$(LIBRARY)$(SHLIBEXT)
-endif
+$(AModule): $(ObjectsWithGC) $(LibDir)/.dir
+	$(Echo) Building $(BuildMode) Archive Library $(notdir $@)
+	-$(Verb) $(RM) -f $@
+	$(Verb) $(Archive) $@ $(ObjectsWithGC)
+	$(Verb) $(Ranlib) $@
 
-ifdef MODULE_WITH_GC
-MODULE=$(MODULE_WITH_GC)
-NEED_GC=1
-endif
+all-local:: $(AModule)
 
-###############################################################################
-#   GC passes
-###############################################################################
-ifdef NEED_GC
-LLC_GC_FLAGS+=-load=$(PREPARE_CODE_LIB)
-GC_ID=-gc
-
-%$(GC_ID).bc: %.bc
-	$(Echo) "Preparing GC '$(notdir $<)'"
-	$(Verb) $(LOPT) -load=$(PREPARE_CODE_LIB) -StaticGCPass $(OPT_FLAGS) $< -o $@
+clean-local::
+	-$(Verb) $(RM) -f $(AModule) $(ObjectsBCWithGC) $(ObjectsSWithGC) $(ObjectsWithGC)
 
 endif
 
 ###############################################################################
-#   Module
+# BUILD_FRAMETABLE: Generate files for easy access of frametables at runtime.
 ###############################################################################
-ifdef MODULE
 
-MODULE_A=$(LIB_DIR)/lib$(MODULE).a
+ifdef BUILD_FRAMETABLE
 
-all:: $(MODULE_A)
+FrametablesExterns.inc: $(ProjLibsPaths)
+	$(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > $@
 
-ifdef EXTRACT_FUNCTIONS
-all:: $(LIB_DIR)/$(MODULE)-inliner.o
-MODULE_A_DEP=$(LIB_DIR)/$(MODULE)-inliner.o
-NEED_BC=1
-endif
+FrametablesSymbols.inc: $(ProjLibsPaths)
+	$(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > $@
 
-define all-suffixes
-	$(wildcard *$1) $(filter %$1, $(GEN))
-endef
-
-CLANG_FILES=$(patsubst %.c,$(BUILD_DIR)/%,$(call all-suffixes,.c)) \
-            $(patsubst %.cc,$(BUILD_DIR)/%,$(call all-suffixes,.cc)) \
-            $(patsubst %.cpp,$(BUILD_DIR)/%,$(call all-suffixes,.cpp))
-
-BC_FILES=$(addsuffix .bc,$(CLANG_FILES)) $(addprefix $(BUILD_DIR)/,$(filter %.bc, $(GEN)))
-
-ifdef NEED_BC
-# if we need bytecode, we link a module with all the bc in the build_dir directory, optimize this module
-# assemble this module and finally create the archive
-all:: $(LIB_DIR)/$(MODULE).bc
-
-$(LIB_DIR)/$(MODULE).bc $(LIB_DIR)/$(MODULE)-inliner.bc: $(LIB_DIR)/%.bc: $(BUILD_DIR)/%$(GC_ID).bc $(LIB_DIR)/.dir
-	$(Verb) $(CP) $< $@
-
-$(BUILD_DIR)/$(MODULE).bc: $(BC_FILES) $(patsubst %, $(LIB_DIR)/%.bc,$(MODULE_USE))
-	$(Echo) "Linking module '$(notdir $@)'"
-	$(Verb) $(LLVMLINK) $^ -o $@
-
-MODULE_A_DEP+=$(BUILD_DIR)/$(MODULE)$(GC_ID).o
-else
-# for most of the module, we avoid a full module creation, mainly because I have bugs in llc
-# in this case, we build a set of .o files and archive them together
-# each .o is optimized and assembled
-MODULE_A_DEP=$(patsubst %.bc,%$(GC_ID).o,$(BC_FILES)) $(patsubst %, $(LIB_DIR)/lib%.a,$(MODULE_USE))
-endif
-
-$(MODULE_A): $(MODULE_A_DEP) $(LIB_DIR)/.dir
-	$(Echo) "Building archive '$(notdir $@)'"
-	-$(Verb) $(RM) -f $@
-	$(Verb) $(Archive) $@ $(MODULE_A_DEP)
-	$(Verb) $(Ranlib) $@
+all-local:: FrametablesExterns.inc FrametablesSymbols.inc
 
+clean-local::
+	-$(Verb) $(RM) -f FrametablesExterns.inc FrametablesSymbols.inc
+	
 endif
 
 ###############################################################################
-#   Inliner
+# COMPILE_OPENJDK_ZIP: Build the specified java sources and zip them up
 ###############################################################################
-$(BUILD_DIR)/$(MODULE)-inliner.cc: $(BUILD_DIR)/$(MODULE)$(GC_ID).bc $(SELF)
-  # cppgen doesn't like debug info
-	$(Echo) "Generating inliner $(notdir $@)"
-	$(Verb) doit() { \
-						echo '#include "vmkit/InlineCommon.h"'; \
-			    	echo 'using namespace llvm;'; \
-						echo 'namespace vmkit {'; \
-						for F in $(EXTRACT_FUNCTIONS); do \
-							$(LOPT) -strip-debug $< -o - | $(LLC) $(LLC_FLAGS) -march=cpp -cppgen=function -cppfor=$$F -o - \
-									| sed -e "s/makeLLVMFunction/makeLLVMFunction_$(MODULE)_$$F/"; [ $$? -ne 0 ] && exit 1; \
-						done; \
-						echo "void makeLLVMFunctions_$(MODULE)(Module *mod) {"; \
-						for F in $(EXTRACT_FUNCTIONS); do \
-							echo "  vmkit::makeLLVMFunction_$(MODULE)_$$F(mod);"; \
-						done; \
-						echo "}"; \
-						echo "}"; \
-						exit 0; \
-				 }; doit > $@
-
-###############################################################################
-#   Linking
-###############################################################################
-DEP_LIBS=$(patsubst %,$(LIB_DIR)/lib%.a,$(LINK_USE))
-
-$(BIN_DIR)/$(TOOL)$(EXEEXT): $(MODULE_A) $(DEP_LIBS) $(BUILD_DIR)/frametables.o $(SELF) $(BIN_DIR)/.dir
-	$(Echo) "Linking executable '$(notdir $@)'"
-	$(Verb) $(CLANGXX) -o $@  $(LDFLAGS) $(MODULE_A) $(BUILD_DIR)/frametables.o $(DEP_LIBS) $(DEP_LIBS) $(LIBS)
-
-$(LIB_DIR)/$(LIBRARY)$(SHLIBEXT): $(MODULE_A) $(DEP_LIBS) $(SELF) $(LIB_DIR)/.dir
-	$(Echo) "Linking shared library '$(notdir $@)'"
-	$(Verb) $(CLANGXX) -O0 -o $@ $(SHOPT) -shared -Wl,--whole-archive $(MODULE_A) -Wl,--no-whole-archive $(DEP_LIBS)
-
-###############################################################################
-#   Frametables
-###############################################################################
-$(BUILD_DIR)/frametables.cc: $(MODULE_A) $(DEP_LIBS) $(SELF) $(BUILD_DIR)/.dir 
-	$(Echo) "Generating frametables of $(notdir $(TOOL))" #$(notdir $(DEP_LIBS))"
-	$(Verb) doit() { \
-						F="$(MODULE_A) $(DEP_LIBS)"; \
-	          echo '#include "vmkit/MethodInfo.h"'; \
-						echo 'using namespace vmkit;'; \
-						$(NM) $$F | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/'; \
-						echo 'CompiledFrames* vmkit::initialFrametables[] = {'; \
-						$(NM) $$F | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/'; \
-						echo "0"; \
-						echo "};"; \
-					}; doit > $@
-
-###############################################################################
-# vmkit runtime generated files
-###############################################################################
-ifdef VMKIT_RUNTIME_OUT
-all:: $(BUILD_DIR)/$(VMKIT_RUNTIME_OUT)
-
-BUILT_INC+=$(BUILD_DIR)/$(VMKIT_RUNTIME_OUT)
-
-$(BUILD_DIR)/$(VMKIT_RUNTIME_OUT): $(VMKIT_RUNTIME_IN) $(SELF) $(BUILD_DIR)/.dir
-	$(Echo) "Generating '$(notdir $@)'"
-	$(Verb) cat $(VMKIT_RUNTIME_IN) | $(LLVMAS) -o - | $(LLC) $(LLC_FLAGS) -march=cpp -cppgen=contents -o $@
+ifeq ($(COMPILE_OPENJDK_ZIP), 1)
 
-endif
+# Some variables
+VMKIT_OPENJDK_ZIP=$(PROJ_OBJ_DIR)/vmkit-openjdk.zip
+CLASSES_DIR=$(PROJ_OBJ_DIR)/classes
+
+all-local:: $(VMKIT_OPENJDK_ZIP)
+clean-local::
+	-$(Verb) $(RM) -f $(CLASSES_DIR) $(VMKIT_OPENJDK_ZIP)
+
+
+$(VMKIT_OPENJDK_ZIP): $(addprefix $(PROJ_SRC_DIR)/,$(OPENJDK_JAVA_SOURCES))
+	$(Echo) "Building OpenJDK java sources into zip"
+	-$(Verb) $(RM) -rf $@ $(CLASSES_DIR)
+	$(Verb) $(MKDIR) $(CLASSES_DIR)
+	$(Verb) $(JAVAC) $^ -d $(CLASSES_DIR)
+	cd $(CLASSES_DIR) && $(ZIP) -qr $(VMKIT_OPENJDK_ZIP) .
 
-###############################################################################
-# object rules
-###############################################################################
-%.o: %.bc
-	$(Echo) "Assembling '$(notdir $<)'"
-	$(Verb) $(LLC) $(LLC_FLAGS) $(LLC_GC_FLAGS) -filetype=obj $< -o $@
-
-define define_compile_rule
-$(BUILD_DIR)/%.bc: %$1 $(BUILT_INC) $(SELF) $(BUILD_DIR)/.dir
-	$(Echo) "Compiling '$$(notdir $$<)'"
-	$(Verb) if $2 $3 $(DEPEND_OPTIONS) -emit-llvm -c "$$<" -o $$@; $(DOM)
-
-$(BUILD_DIR)/%.bc: $(BUILD_DIR)/%$1 $(BUILT_INC) $(SELF) $(BUILD_DIR)/.dir
-	$(Echo) "Compiling '$$(notdir $$<)'"
-	$(Verb) if $2 $3 $(DEPEND_OPTIONS) -emit-llvm -c "$$<" -o $$@; $(DOM)
-endef
-
-$(eval $(call define_compile_rule,.cpp,$(CLANGXX),$(CXXFLAGS)))
-$(eval $(call define_compile_rule,.cc,$(CLANGXX),$(CXXFLAGS)))
-$(eval $(call define_compile_rule,.c,$(CLANG),$(CFLAGS)))
-
-ifneq ($(MAKECMDGOALS),tidy)
-ifneq ($(MAKECMDGOALS),clean)
-ifneq ($(MAKECMDGOALS),distclean)
--include $(addsuffix .d,$(CLANG_FILES))
-endif
-endif
 endif

Modified: vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/J3Intrinsics.cpp Thu Apr 25 12:10:05 2013
@@ -34,6 +34,11 @@ namespace j3 {
 void J3Intrinsics::init(llvm::Module* module) {
   BaseIntrinsics::init(module);
 
+  // Overloading allocation function to use VTgcmalloc
+  AllocateUnresolvedFunction = module->getFunction("VTgcmallocUnresolved");
+  assert(AllocateUnresolvedFunction && "No allocateUnresolved function");
+  AllocateFunction = module->getFunction("VTgcmalloc");
+
   j3::llvm_runtime::makeLLVMModuleContents(module);
   
   LLVMContext& Context = module->getContext();

Modified: vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJITCompiler.cpp Thu Apr 25 12:10:05 2013
@@ -179,6 +179,8 @@ JavaJITCompiler::JavaJITCompiler(const s
   executionEngine->updateGlobalMapping(
       JavaIntrinsics.AllocateFunction, (void*)(word_t)VTgcmalloc);
   executionEngine->updateGlobalMapping(
+      JavaIntrinsics.AllocateFunction, (void*)(word_t)vmkitgcmalloc);
+  executionEngine->updateGlobalMapping(
       JavaIntrinsics.ArrayWriteBarrierFunction, (void*)(word_t)arrayWriteBarrier);
   executionEngine->updateGlobalMapping(
       JavaIntrinsics.FieldWriteBarrierFunction, (void*)(word_t)fieldWriteBarrier);

Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.h?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.h Thu Apr 25 12:10:05 2013
@@ -246,8 +246,11 @@ public:
   /// operator new - Optimized operator new for VT based objects
   ///
   void* operator new(size_t sz, VirtualTable *VT) {
-	    return VTgcmallocUnresolved(sz, VT);
-	  }
+  	gc* obj = NULL;
+  	llvm_gcroot(obj, 0);
+  	obj = (gc*) VTgcmallocUnresolved(sz, VT);
+  	return obj;
+  }
 
   /// getVirtualTable - Returns the java virtual table of this object.
   ///

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 12:10:05 2013
@@ -1079,7 +1079,7 @@ void Jnjvm::loadBootstrap() {
   referenceThread->start(
       (void (*)(vmkit::Thread*))JavaReferenceThread::enqueueStart);
   
-  // Initialise the bootstrap class loader if it's not
+  // Initialize the bootstrap class loader if it's not
   // done already.
   if (bootstrapLoader->upcalls->newString == NULL) {
     bootstrapLoader->upcalls->initialiseClasspath(bootstrapLoader);
@@ -1154,6 +1154,7 @@ void Jnjvm::loadBootstrap() {
 
   upcalls->setContextClassLoader->invokeIntSpecial(this, upcalls->newThread,
                                                    obj, &javaLoader);
+
   // load and initialise math since it is responsible for dlopen'ing 
   // libjavalang.so and we are optimizing some math operations
   UserCommonClass* math = loader->loadName(loader->mathName, true, true, NULL);

Modified: vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp (original)
+++ vmkit/trunk/lib/vmkit/Compiler/InlineMalloc.cpp Thu Apr 25 12:10:05 2013
@@ -41,6 +41,7 @@ namespace vmkit {
 
 bool InlineMalloc::runOnFunction(Function& F) {
   Function* VTMalloc = F.getParent()->getFunction("VTgcmalloc");
+  Function* vmkitMalloc = F.getParent()->getFunction("vmkitgcmalloc");
   Function* FieldWriteBarrier = F.getParent()->getFunction("fieldWriteBarrier");
   Function* ArrayWriteBarrier = F.getParent()->getFunction("arrayWriteBarrier");
   Function* NonHeapWriteBarrier = F.getParent()->getFunction("nonHeapWriteBarrier");
@@ -57,7 +58,8 @@ bool InlineMalloc::runOnFunction(Functio
       }
       CallSite Call(I);
       Function* Temp = Call.getCalledFunction();
-      if (Temp == VTMalloc) {
+      if (Temp == VTMalloc ||
+      		Temp == vmkitMalloc) {
         if (dyn_cast<Constant>(Call.getArgument(0))) {
           InlineFunctionInfo IFI(NULL, DL);
           Changed |= InlineFunction(Call, IFI);

Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 12:10:05 2013
@@ -62,7 +62,7 @@ extern "C" void* vmkitgcmallocUnresolved
  * Optimized gcmalloc for VT based object layout.                             *
  *****************************************************************************/
 
-extern "C" void* VTgcmalloc(uint32_t sz, VirtualTable* VT) {
+extern "C" void* VTgcmalloc(uint32_t sz, void* VT) {
   gc* res = 0;
   llvm_gcroot(res, 0);
   gcHeader* head = 0;
@@ -76,15 +76,15 @@ extern "C" void* VTgcmalloc(uint32_t sz,
   __InternalSet__.insert(res);
   lock.release();
 
-  VirtualTable::setVirtualTable(res, VT);
+  VirtualTable::setVirtualTable(res, (VirtualTable*)VT);
   return res;
 }
 
-extern "C" void* VTgcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
+extern "C" void* VTgcmallocUnresolved(uint32_t sz, void* VT) {
 	gc* res = NULL;
 	llvm_gcroot(res, 0);
 	res = (gc*)VTgcmalloc(sz, VT);
-	if (VT->hasDestructor())
+	if (((VirtualTable*)VT)->hasDestructor())
 		vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
 	return res;
 }

Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h Thu Apr 25 12:10:05 2013
@@ -85,8 +85,8 @@ public:
 }
 
 class VirtualTable;
-extern "C" void* VTgcmallocUnresolved(uint32_t sz, VirtualTable* VT);
-extern "C" void* VTgcmalloc(uint32_t sz, VirtualTable* VT);
+extern "C" void* VTgcmallocUnresolved(uint32_t sz, void* VT);
+extern "C" void* VTgcmalloc(uint32_t sz, void* VT);
 extern "C" void EmptyDestructor();
 
 /*
@@ -147,14 +147,12 @@ class VirtualTable {
   /// getVirtualTable - Returns the virtual table of this reference.
   ///
   static const VirtualTable* getVirtualTable(gc* ref) {
-    llvm_gcroot(ref, 0);
     return ((VirtualTable**)(ref))[0];
   }
 
   /// setVirtualTable - Sets the virtual table of this reference.
   ///
   static void setVirtualTable(gc* ref, VirtualTable* VT) {
-    llvm_gcroot(ref, 0);
     ((VirtualTable**)(ref))[0] = VT;
   }
 

Added: vmkit/trunk/mmtk/inline/InlineMethods.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/inline/InlineMethods.cpp?rev=180442&view=auto
==============================================================================
--- vmkit/trunk/mmtk/inline/InlineMethods.cpp (added)
+++ vmkit/trunk/mmtk/inline/InlineMethods.cpp Thu Apr 25 12:10:05 2013
@@ -0,0 +1,50 @@
+//===-------- InlineMethods.cpp - Initialize the inline methods -----------===//
+//
+//                      The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <llvm/CallingConv.h>
+#include <llvm/Constants.h>
+#include <llvm/DerivedTypes.h>
+#include <llvm/Instructions.h>
+#include <llvm/LLVMContext.h>
+#include <llvm/Module.h>
+#include <llvm/Type.h>
+
+using namespace llvm;
+
+namespace mmtk {
+
+namespace mmtk_vt_malloc {
+  #include "MMTkVTMallocInline.inc"
+}
+
+namespace mmtk_vmkit_malloc {
+  #include "MMTkVMKitMallocInline.inc"
+}
+
+namespace mmtk_array_write {
+  #include "MMTkArrayWriteInline.inc"
+}
+
+namespace mmtk_field_write {
+  #include "MMTkFieldWriteInline.inc"
+}
+
+namespace mmtk_non_heap_write {
+  #include "MMTkNonHeapWriteInline.inc"
+}
+
+}
+
+extern "C" void MMTk_InlineMethods(llvm::Module* module) {
+  mmtk::mmtk_vt_malloc::makeLLVMFunction(module);
+  mmtk::mmtk_vmkit_malloc::makeLLVMFunction(module);
+  mmtk::mmtk_field_write::makeLLVMFunction(module);
+  mmtk::mmtk_array_write::makeLLVMFunction(module);
+  mmtk::mmtk_non_heap_write::makeLLVMFunction(module);
+}

Modified: vmkit/trunk/mmtk/magic/LowerJavaRT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerJavaRT.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/mmtk/magic/LowerJavaRT.cpp (original)
+++ vmkit/trunk/mmtk/magic/LowerJavaRT.cpp Thu Apr 25 12:10:05 2013
@@ -122,7 +122,7 @@ bool LowerJavaRT::runOnModule(Module& M)
   F->eraseFromParent();
  
   // Replace VTgcmalloc with the allocator of MMTk objects in VMKit
-  F = M.getFunction("vmkitgcmalloc");
+  F = M.getFunction("VTgcmalloc");
   Function* Ma = M.getFunction("AllocateMagicArray");
 
   Function* NewFunction = 
@@ -135,6 +135,13 @@ bool LowerJavaRT::runOnModule(Module& M)
   Ma->replaceAllUsesWith(NewFunction);
   Ma->eraseFromParent();
 
+//  // Replace vmkitgcmalloc with the allocator of MMTk objects in VMKit
+//  F = M.getFunction("vmkitgcmalloc");
+//
+//  F->replaceAllUsesWith(NewFunction);
+//  F->eraseFromParent();
+
+
   // Finally, remove GC info from the methods. They must not have any
   // gcroot.
   for (Module::iterator I = M.begin(), E = M.end(); I != E; I++) {

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180442&r1=180441&r2=180442&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 12:10:05 2013
@@ -119,7 +119,7 @@ extern "C" void* vmkitgcmallocUnresolved
  * Optimized gcmalloc for VT based object layout.                             *
  *****************************************************************************/
 
-extern "C" void* VTgcmalloc(uint32_t sz, VirtualTable* VT) {
+extern "C" void* VTgcmalloc(uint32_t sz, void* VT) {
 	gc* res = 0;
 	llvm_gcroot(res, 0);
 	sz += gcHeader::hiddenHeaderSize();
@@ -128,11 +128,11 @@ extern "C" void* VTgcmalloc(uint32_t sz,
 	return res;
 }
 
-extern "C" void* VTgcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
+extern "C" void* VTgcmallocUnresolved(uint32_t sz, void* VT) {
   gc* res = 0;
   llvm_gcroot(res, 0);
   res = (gc*)VTgcmalloc(sz, VT);
-  if (VT->hasDestructor()) addFinalizationCandidate(res);
+  if (((VirtualTable*)VT)->hasDestructor()) addFinalizationCandidate(res);
   return res;
 }
 
@@ -294,8 +294,12 @@ void Collector::initialise(int argc, cha
 
 extern "C" void* MMTkMutatorAllocate(uint32_t size, void* type) {
   gc* val = NULL;
+  gcHeader* head = NULL;
   llvm_gcroot(val, 0);
-  val = (gc*)MutatorThread::get()->Allocator.Allocate(size);
+  size += gcHeader::hiddenHeaderSize();
+  size = llvm::RoundUpToAlignment(size, sizeof(void*));
+  head = (gcHeader*)MutatorThread::get()->Allocator.Allocate(size);
+  val = head->toReference();
   vmkit::Thread::get()->MyVM->setType(val, type);
   return val;
 }





More information about the vmkit-commits mailing list