[vmkit-commits] [vmkit] r180473 - Updated from trunk changes.

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


Author: peter.senna
Date: Thu Apr 25 12:14:18 2013
New Revision: 180473

URL: http://llvm.org/viewvc/llvm-project?rev=180473&view=rev
Log:
Updated from trunk changes.
(cherry picked from commit 4567aa3280933e6f4584969b4eed6964d8191f75)

Modified:
    vmkit/trunk/Makefile.rules
    vmkit/trunk/include/vmkit/InlineCommon.h
    vmkit/trunk/lib/j3/ClassLib/Classpath.h.in
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc
    vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
    vmkit/trunk/lib/j3/VMCore/JavaArray.h
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
    vmkit/trunk/lib/j3/VMCore/JavaClass.h
    vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp
    vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
    vmkit/trunk/lib/j3/VMCore/Jni.cpp
    vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
    vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
    vmkit/trunk/mmtk/inline/InlineMethods.cpp
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
    vmkit/trunk/tools/precompiler/Precompiler.cpp

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:14:18 2013
@@ -1,339 +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
-
-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
+# Set the LLVM build file location 
+LLVMBuildTool   := $(LLVM_SRC_ROOT)/utils/llvm-build/llvm-build
 
-LLC_FLAGS+=-disable-cfi -disable-fp-elim -relocation-model=pic 
-OPT_FLAGS+=-disable-cfi -disable-fp-elim 
-
-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)
+###############################################################################
+# VMKIT_RUNTIME: Provide rules to build a .cpp file with LLVM instructions
+#                generating code matching the .ll files.
+###############################################################################
 
-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 
+ifdef VMKIT_RUNTIME
 
-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
+.PRECIOUS: 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
+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 $@
 
-###############################################################################
-#   Nice printing
-###############################################################################
-ifndef PROF
-PROF=.
-all::
-	$(Echo) "Entering compilation process"
-endif
+all-local:: LLVMRuntime.inc
 
-EchoMsg="[$(PROJECT_NAME) $(PROF)]:"
-Echo=@echo $(EchoMsg)
+clean-local::
+	$(Verb) $(RM) -f LLVMRuntime.inc
 
-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
 
-STATIC_GC_PASS_LIB=$(LIB_DIR)/static-gc-pass$(SHLIBEXT)
-STATIC_GC_PRINTER_LIB=$(LIB_DIR)/static-gc-printer$(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=$(STATIC_GC_PRINTER_LIB)
-GC_ID=-gc
-
-%$(GC_ID).bc: %.bc
-	$(Echo) "Preparing GC '$(notdir $<)'"
-	$(Verb) $(LOPT) -load=$(STATIC_GC_PASS_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,/' > $@
+
+all-local:: FrametablesExterns.inc FrametablesSymbols.inc
 
-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))
+clean-local::
+	-$(Verb) $(RM) -f FrametablesExterns.inc FrametablesSymbols.inc
+	
 endif
 
 ###############################################################################
-#   OpenJDK definitions
+# COMPILE_OPENJDK_ZIP: Build the specified java sources and zip them up
 ###############################################################################
-ifeq ($(MODULE), Classpath)
-ifeq ($(CLASSPATH_IMPL), openjdk)
-	VMKIT_OPENJDK_ZIP=$(BUILD_DIR)/vmkit-openjdk.zip
-	CLASSES_DIR=$(PROJ_SRC_CWD)/classes
-	MODULE_A_DEP+=$(VMKIT_OPENJDK_ZIP)
-	OPENJDK_JAVA_SOURCES=$(PROJ_SRC_CWD)/java/lang/VMString.java
-endif
-endif
+ifeq ($(COMPILE_OPENJDK_ZIP), 1)
 
-$(MODULE_A): $(MODULE_A_DEP) $(LIB_DIR)/.dir
-	$(Echo) "Building archive '$(notdir $@)'"
-	-$(Verb) $(RM) -f $@
-	$(Verb) $(Archive) $@ $(MODULE_A_DEP)
-	$(Verb) $(Ranlib) $@
+# Some variables
+VMKIT_OPENJDK_ZIP=$(PROJ_OBJ_DIR)/vmkit-openjdk.zip
+CLASSES_DIR=$(PROJ_OBJ_DIR)/classes
 
-endif
+all-local:: $(VMKIT_OPENJDK_ZIP)
+clean-local::
+	-$(Verb) $(RM) -f $(CLASSES_DIR) $(VMKIT_OPENJDK_ZIP)
 
-###############################################################################
-#   Inliner
-###############################################################################
-$(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 $@
 
-endif
+$(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/include/vmkit/InlineCommon.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/InlineCommon.h?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/InlineCommon.h (original)
+++ vmkit/trunk/include/vmkit/InlineCommon.h Thu Apr 25 12:14:18 2013
@@ -10,7 +10,7 @@
 #include <llvm/Type.h>
 
 namespace vmkit {
-	extern void makeLLVMFunctions_FinalMMTk(llvm::Module*);
+	extern "C" void makeLLVMFunctions_FinalMMTk(llvm::Module*);
 }
 
 #endif

Modified: vmkit/trunk/lib/j3/ClassLib/Classpath.h.in
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Classpath.h.in?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/Classpath.h.in (original)
+++ vmkit/trunk/lib/j3/ClassLib/Classpath.h.in Thu Apr 25 12:14:18 2013
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 // Historically has been included here, keep it for now
-#include "j3/jni.h"
+#include "jni.h"
 #include "vmkit/System.h"
 
 #ifndef USE_OPENJDK

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMClass.inc Thu Apr 25 12:14:18 2013
@@ -535,50 +535,6 @@ JavaObject* Cl) {
   return res;
 }
 
-/**
-   * Returns the class which immediately encloses the specified class.If
-   * the class is a top-level class, this method returns null
-   *
-   * @param klass the class whose enclosing class should be returned.
-   * @return the immediate enclosing class, or nul if this is
-   *  a top-level class.
-   * @since 1.5
-   * static native Class getEnclosingClass(Class klass);
-   */
-  
-
-JNIEXPORT JavaObject* JNICALL Java_java_lang_VMClass_getEnclosingClass(
-#ifdef NATIVE_JNI
-JNIEnv *env,
-jclass clazz,
-#endif
-JavaObjectClass* klass) {
-  JavaObject* res;
-  llvm_gcroot(klass, 0);
-  llvm_gcroot(res, 0);
-
-  UserCommonClass* cl = JavaObjectClass::getClass(klass);
-  const UTF8* name=cl->name;
-
-  char enclosingClassName[name->size];
-
-  int i;
-  for(i=name->size-1;i>0;i--)
-	  if((char)name->elements[i]=='$'){
-		  for (int j=0;j<i;j++)
-			  enclosingClassName[j]=(char)name->elements[j];
-		  enclosingClassName[i]=0;
-		  break;
-	  }
-
-  if(i){
-	  UserCommonClass* tmp=cl->classLoader->loadClassFromAsciiz(enclosingClassName, 0, 1);
-  	  res=tmp->getClassDelegatee((Jnjvm*)vmkit::Thread::get()->MyVM);
-	}
-
-  return res;
-}
-
 // Returns the class which immediately encloses the specified class.
 // If the class is a top-level class, this method returns null.
 JNIEXPORT JavaObject* JNICALL Java_java_lang_VMClass_getEnclosingClass(

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMField.inc Thu Apr 25 12:14:18 2013
@@ -108,6 +108,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
 JNIEnv *env, 
 #endif
 JavaObjectVMField* VMField) { 
+  ArrayObject* arrayRes = 0;
   JavaObject* res = 0;
   JavaObject* annon = 0;
   JavaObject* newHashMap = 0;
@@ -117,6 +118,7 @@ JavaObjectVMField* VMField) {
   llvm_gcroot(newHashMap, 0);
   llvm_gcroot(VMField, 0);
   llvm_gcroot(annotationClass, 0);
+  llvm_gcroot(arrayRes, 0);
 
   BEGIN_NATIVE_EXCEPTION(0)
 
@@ -136,9 +138,9 @@ JavaObjectVMField* VMField) {
     Reader reader(annotationsAtt, compilingClass->bytes);
     AnnotationReader AR(reader, compilingClass);
     uint16 numAnnotations = reader.readU2();
-    
+
     UserClassArray* array = upcalls->constructorArrayAnnotation;
-    res = array->doNew(numAnnotations, vm);
+    arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
 		dprintf("JavaField : %s with %d fields \n", UTF8Buffer(field->name).cString(), numAnnotations);
     for (uint16 i = 0; i < numAnnotations; ++i) {
 			uint16 typeIndex = reader.readU2();
@@ -163,7 +165,7 @@ JavaObjectVMField* VMField) {
 			newHashMap = AR.createAnnotationMapValues(annotationClass);
 			
 			annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
-			ArrayObject::setElement((ArrayObject *)res, annon, i);
+			ArrayObject::setElement(arrayRes, annon, i);
 		} // end for
   }
   else {

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMMethod.inc Thu Apr 25 12:14:18 2013
@@ -136,6 +136,7 @@ JNIEXPORT JavaObject* JNICALL Java_java_
 JNIEnv *env, 
 #endif
 JavaObjectVMMethod* VMMethod) { 
+  ArrayObject* arrayRes = 0;
   JavaObject* res = 0;
   JavaObject* annon = 0;
   JavaObject* newHashMap = 0;
@@ -145,6 +146,7 @@ JavaObjectVMMethod* VMMethod) {
   llvm_gcroot(newHashMap, 0);
   llvm_gcroot(VMMethod, 0);
   llvm_gcroot(annotationClass, 0);
+  llvm_gcroot(arrayRes, 0);
 
   BEGIN_NATIVE_EXCEPTION(0)
 
@@ -164,9 +166,9 @@ JavaObjectVMMethod* VMMethod) {
     Reader reader(annotationsAtt, compilingClass->bytes);
     AnnotationReader AR(reader, compilingClass);
     uint16 numAnnotations = reader.readU2();
-    
+
     UserClassArray* array = upcalls->constructorArrayAnnotation;
-    res = array->doNew(numAnnotations, vm);
+    arrayRes = (ArrayObject *)(res = array->doNew(numAnnotations, vm));
     for (uint16 i = 0; i < numAnnotations; ++i) {
 			uint16 typeIndex = reader.readU2();
 			const UTF8* annoType = compilingClass->ctpInfo->UTF8At(typeIndex);
@@ -189,7 +191,7 @@ JavaObjectVMMethod* VMMethod) {
 			newHashMap = AR.createAnnotationMapValues(annotationClass);
 			
 			annon = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
-			ArrayObject::setElement((ArrayObject *)res, annon, i);
+			ArrayObject::setElement(arrayRes, annon, i);
 		} // end for
   }
   else {

Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 12:14:18 2013
@@ -98,283 +98,13 @@ static inline uint32 WCALC(uint32 n, boo
   }
 }
 
-#include <queue>
-
-static uint8 sum [] = {
-		2,
-		3,
-		2,
-		3,
-		3,
-		2,
-		2,
-		2,
-		2,
-		2
-};
-
-static uint8 sum2 [] = {
-		3,
-		3,
-		3,
-		3,
-		3,
-		3,
-		3,
-		5,
-		5,
-		3,
-		2,
-		3,
-		1,
-		1,
-		3,
-		3,
-		1,
-		1
-};
-
-void JavaJIT::findUnreachableCode(Reader& reader, uint32 codeLen) {
-	std::queue<uint32> queue;
-	queue.push(0);
-	opcodeInfos[0].isReachable = true;
-
-	for (int i = 0; i < codeLen; ++i) {
-		if (opcodeInfos[i].isReachable)
-			queue.push(i);
-	}
-
-	uint32 start = reader.cursor;
-	while (queue.size()) {
-		// pick one index from the queue
-		uint32 i_opcode = queue.front();
-		queue.pop();
-		// read the opcode at this position
-		reader.cursor = start + i_opcode;
-		uint8 bytecode = reader.readU1();
-		// if the opcode is a section which has a handle other than the endBlockHandler then we must add the initial instruction of that handler to the queue
-		if (opcodeInfos[i_opcode].handlerPC) {
-			uint16 pc = opcodeInfos[i_opcode].handlerPC;
-			if (pc < codeLen && !opcodeInfos[pc].isReachable) {
-				opcodeInfos[pc].isReachable = true;
-				queue.push(pc);
-			}
-		}
-		//
-		// if the opcode does not involve a branch then mark the next instruction as reachable (DONE)
-		// if the opcode is an unconditional branch then mark the target as reachable (DONE)
-		// if the opcode is a conditional branch then mark the target and the next instruction as reachable (DONE)
-		// if it is a ret instruction then I don't know what to do.
-		// if it is a jsr instruction then mark the target as reachable (DONE)
-		// if it is tableswitch instruction then mark all cases as reachable (DONE)
-		// if it is lookupswitch instruction then mark all cases as reachable (DONE)
-		// wide instruction (DONE)
-		if (bytecode < IFEQ) {
-			uint32 next_index = 1;
-			if (bytecode >= BIPUSH && bytecode <= ALOAD)
-				next_index = sum[bytecode - BIPUSH];
-			else if (bytecode >= ISTORE && bytecode <= ASTORE)
-				next_index = 2;
-			else if (bytecode == IINC)
-				next_index = 3;
-			next_index += i_opcode;
-			if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-				opcodeInfos[next_index].isReachable = true;
-				queue.push(next_index);
-			}
-		}
-		else if (bytecode >= IFEQ && bytecode <= IF_ACMPNE) {
-			uint32 next_index = 3 + i_opcode;
-			if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-				opcodeInfos[next_index].isReachable = true;
-				queue.push(next_index);
-			}
-			uint16 b1 = reader.readU1();
-			uint8 b2 = reader.readU1();
-			sint16 step = (b1 << 8) | b2;
-			next_index = i_opcode + step;
-			if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-				opcodeInfos[next_index].isReachable = true;
-				queue.push(next_index);
-			}
-		}
-		else if (bytecode >= GETSTATIC && bytecode <= MONITOREXIT && bytecode != ATHROW) {
-			uint32 next_index = sum2[bytecode - GETSTATIC] + i_opcode;
-			if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-				opcodeInfos[next_index].isReachable = true;
-				queue.push(next_index);
-			}
-		}
-		else {
-			uint32 x;
-			sint32 defaultIndex,lowIndex, highIndex;
-			uint32 next_index = codeLen;
-			sint16 step;
-			sint32 step32;
-			uint16 b1;
-			uint8 b2,b3,b4;
-			switch (bytecode) {
-				case GOTO:
-					b1 = reader.readU1();
-					b2 = reader.readU1();
-					step = (b1 << 8) | b2;
-					next_index = i_opcode + step;
-					break;
-				case GOTO_W:
-					next_index = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
-					next_index = step32 + i_opcode;
-					break;
-				case MULTIANEWARRAY:
-					next_index = i_opcode + 4;
-					break;
-				case IFNULL:
-				case IFNONNULL:
-				case JSR:
-					next_index = i_opcode + 3;
-					if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-						opcodeInfos[next_index].isReachable = true;
-						queue.push(next_index);
-					}
-					b1 = reader.readU1();
-					b2 = reader.readU1();
-					step = (b1 << 8) | b2;
-					next_index = i_opcode + step;
-					break;
-				case JSR_W:
-					next_index = i_opcode + 5;
-					if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-						opcodeInfos[next_index].isReachable = true;
-						queue.push(next_index);
-					}
-					next_index = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
-					next_index = step32 + i_opcode;
-					break;
-				case WIDE:
-					if (i_opcode + 1 < codeLen && !opcodeInfos[i_opcode + 1].isReachable) {
-						opcodeInfos[i_opcode + 1].isReachable = true;
-						queue.push(i_opcode + 1);
-					}
-					b2 = reader.readU1();
-					next_index = i_opcode + ((b2 == IINC)?6:4);
-					break;
-				case TABLESWITCH:
-					//break;
-					x = i_opcode & 0x03; // remainder of division by 4
-					reader.cursor = start + 4 - x + i_opcode;
-					// default
-					defaultIndex = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (defaultIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
-					defaultIndex = step32 + i_opcode;
-					if (defaultIndex < codeLen && !opcodeInfos[defaultIndex].isReachable) {
-						opcodeInfos[defaultIndex].isReachable = true;
-						queue.push(defaultIndex);
-					}
-					// low
-					lowIndex = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (lowIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
-					lowIndex = step32 + i_opcode;
-					// high
-					highIndex = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (highIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
-					highIndex = step32 + i_opcode;
-					// all options
-					for (int i = 0 ; i < highIndex - lowIndex + 1 ; i++) {
-						next_index = reader.readU1();
-						b2 = reader.readU1();
-						b3 = reader.readU1();
-						b4 = reader.readU1();
-						step32 =  (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
-						next_index = step32 + i_opcode;
-						if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-							opcodeInfos[next_index].isReachable = true;
-							queue.push(next_index);
-						}
-					}
-					next_index = codeLen;
-					break;
-				case LOOKUPSWITCH:
-					//break;
-					x = i_opcode & 0x03; // remainder of division by 4
-					reader.cursor = start + 4 - x + i_opcode;
-					// default
-					defaultIndex = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (defaultIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
-					defaultIndex = step32 + i_opcode;
-					if (defaultIndex < codeLen && !opcodeInfos[defaultIndex].isReachable) {
-						opcodeInfos[defaultIndex].isReachable = true;
-						queue.push(defaultIndex);
-					}
-					// npairs
-					lowIndex = reader.readU1();
-					b2 = reader.readU1();
-					b3 = reader.readU1();
-					b4 = reader.readU1();
-					step32 =  (lowIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
-					lowIndex = step32 + i_opcode;
-					// all options
-					for (int i = 0 ; i < lowIndex ; i++) {
-						reader.cursor += 4; // skipping match
-						// offset
-						next_index = reader.readU1();
-						b2 = reader.readU1();
-						b3 = reader.readU1();
-						b4 = reader.readU1();
-						step32 =  (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
-						next_index = step32 + i_opcode;
-						if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-							opcodeInfos[next_index].isReachable = true;
-							queue.push(next_index);
-						}
-					}
-					next_index = codeLen;
-					break;
-				default:
-					break;
-			}
-			if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
-				opcodeInfos[next_index].isReachable = true;
-				queue.push(next_index);
-			}
-		}
-	} // end while
-}
-
 void JavaJIT::compileOpcodes(Reader& reader, uint32 codeLength) {
   bool wide = false;
   uint32 jsrIndex = 0;
   uint32 start = reader.cursor;
-
-  if (!opcodeInfos[0].isReachable) {
-	  findUnreachableCode(reader, codeLength);
-	  reader.cursor = start;
-  }
-
   vmkit::ThreadAllocator allocator;
   for(uint32 i = 0; i < codeLength; ++i) {
-	if (!opcodeInfos[i].isReachable && !opcodeInfos[i].handler) {
-		continue;
-	}
-	reader.cursor = start + i;
+    reader.cursor = start + i;
     uint8 bytecode = reader.readU1();
     
     PRINT_DEBUG(JNJVM_COMPILE, 1, DARK_BLUE, "\t[at %5d] %-5d ", i,
@@ -397,9 +127,9 @@ void JavaJIT::compileOpcodes(Reader& rea
         	  //PHINode* node = PHINode::Create(obj->getType(), 0, "jaja", opinfo->newBlock);
         	  //node->addIncoming(obj, currentBlock);
         	  // if we were in a handler and now we are in a new handler we simulate a throw
-			  llvm::Value* arg = pop();
-			  throwException(arg);
-			  b = true;
+        	  llvm::Value* arg = pop();
+        	  throwException(arg);
+        	  b = true;
         	  // Original Code
         	  //assert(node && "Handler marlformed");
           }

Modified: vmkit/trunk/lib/j3/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaArray.h?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaArray.h Thu Apr 25 12:14:18 2013
@@ -46,29 +46,29 @@ public:
   T elements[1];
 
 public:
-  static int32_t getSize(const TJavaArray* self) {
+  static int32_t getSize(const TJavaArray* self) __attribute__((always_inline)) {
     llvm_gcroot(self, 0);
     return self->size;
   }
   
-  static T getElement(const TJavaArray* self, uint32_t i) {
+  static T getElement(const TJavaArray* self, uint32_t i) __attribute__((always_inline)) {
     llvm_gcroot(self, 0);
     assert((ssize_t)i < self->size);
     return self->elements[i];
   }
 
-  static void setElement(TJavaArray* self, T value, uint32_t i) {
+  static void setElement(TJavaArray* self, T value, uint32_t i) __attribute__((always_inline)) {
     llvm_gcroot(self, 0);
     assert((ssize_t)i < self->size);
     self->elements[i] = value;
   }
 
-  static const T* getElements(const TJavaArray* self) {
+  static const T* getElements(const TJavaArray* self) __attribute__((always_inline)) {
     llvm_gcroot(self, 0);
     return self->elements;
   }
 
-  static T* getElements(TJavaArray* self) {
+  static T* getElements(TJavaArray* self) __attribute__((always_inline)) {
     llvm_gcroot(self, 0);
     return self->elements;
   }
@@ -117,7 +117,7 @@ public:
   static const unsigned int T_INT;
   static const unsigned int T_LONG;
 
-  static void setSize(JavaObject* array, int size) {
+  static void setSize(JavaObject* array, int size) __attribute__((always_inline)) {
     ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);
@@ -125,7 +125,7 @@ public:
     obj->size = size;
   }
 
-  static sint32 getSize(const JavaObject* array) {
+  static sint32 getSize(const JavaObject* array) __attribute__((always_inline)) {
     const ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);
@@ -133,7 +133,7 @@ public:
     return obj->size;
   }
 
-  static const unsigned char* getElements(const JavaObject* array) {
+  static const unsigned char* getElements(const JavaObject* array) __attribute__((always_inline)) {
     const ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);
@@ -141,7 +141,7 @@ public:
     return obj->elements;
   }
 
-  static unsigned char* getElements(JavaObject* array) {
+  static unsigned char* getElements(JavaObject* array) __attribute__((always_inline)) {
     ArrayUInt8* obj = 0;
     llvm_gcroot(obj, 0);
     llvm_gcroot(array, 0);

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 12:14:18 2013
@@ -1755,30 +1755,42 @@ void AnnotationReader::readElementValue(
   }
 }
 
-JavaObject* AnnotationReader::createElementValue() {
-  uint8 tag = reader.readU1();
+JavaObject* AnnotationReader::createElementValue(bool nextParameterIsTypeOfMethod, JavaObject* type, const UTF8* lastKey) {
   JavaObject* res = 0;
   JavaObject* tmp = 0;
-  ArrayObject* arrayObj = 0;
+  JavaString* str = 0;
+  JavaObject* field = 0;
+  JavaObject* clazzLoaded = 0;
+  JavaObject* classOfCurrentAnnotationProperty = 0;
+  JavaObject* newHashMap = 0;
+  JavaObject* annotationClass = 0;
   llvm_gcroot(res, 0);
   llvm_gcroot(tmp, 0);
-  llvm_gcroot(arrayObj, 0);
+  llvm_gcroot(str, 0);
+  llvm_gcroot(clazzLoaded, 0);
+  llvm_gcroot(field, 0);
+  llvm_gcroot(type, 0);
+  llvm_gcroot(classOfCurrentAnnotationProperty, 0);
+  llvm_gcroot(newHashMap, 0);
+  llvm_gcroot(annotationClass, 0);
+
+  uint8 tag = reader.readU1();
 	
-	Jnjvm* vm = JavaThread::get()->getJVM();
-  Classpath* upcalls = JavaThread::get()->getJVM()->upcalls;
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  Classpath* upcalls = vm->upcalls;
   ddprintf("value:");
 
   if (tag == 'B') {
-    uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
+    sint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
     ddprintf("B=%d", val);
-    res = upcalls->boolClass->doNew(vm);
-    upcalls->boolValue->setInstanceInt8Field(res, val);
+    res = upcalls->byteClass->doNew(vm);
+    upcalls->byteValue->setInstanceInt8Field(res, val);
 
   } else if (tag == 'C') {
     uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
     ddprintf("C=%c", val);
-    res = upcalls->intClass->doNew(vm);
-    upcalls->intValue->setInstanceInt32Field(res, val);
+    res = upcalls->charClass->doNew(vm);
+    upcalls->charValue->setInstanceInt16Field(res, val);
 
   } else if (tag == 'D') {
     double val = cl->ctpInfo->DoubleAt(reader.readU2());
@@ -1805,7 +1817,7 @@ JavaObject* AnnotationReader::createElem
     upcalls->shortValue->setInstanceInt16Field(res, val);
     
   } else if (tag == 'I') {
-    uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
+    sint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
     ddprintf("I=%d", val);
     res = upcalls->intClass->doNew(vm);
     upcalls->intValue->setInstanceInt32Field(res, val);
@@ -1819,37 +1831,83 @@ JavaObject* AnnotationReader::createElem
   } else if (tag == 's') {
     const UTF8* s = cl->ctpInfo->UTF8At(reader.readU2());
     ddprintf("s=%s", PrintBuffer(s).cString());
-    res = JavaString::internalToJava(s, JavaThread::get()->getJVM());
+    res = JavaString::internalToJava(s, vm);
 
   } else if (tag == 'e') {
-    // Element_value Enumeration not implemented
     const UTF8* n = cl->ctpInfo->UTF8At(reader.readU2());
-    ddprintf("%s", PrintBuffer(n).cString());
     const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2());
-    ddprintf("%s", PrintBuffer(m).cString());
-    fprintf(stderr, "Annotation not supported for %c type\n", tag);
-    abort();
-
+    JnjvmClassLoader* JCL = this->cl->classLoader;
+    n = n->extract(JCL->hashUTF8, 1,n->size-1);
+    UserCommonClass* cl = JCL->loadClassFromUserUTF8(n,true,false, NULL);
+    if (cl != NULL && !cl->isPrimitive()) {
+    	if (cl->asClass())
+    		cl->asClass()->initialiseClass(vm);
+    	clazzLoaded = cl->getClassDelegatee(vm);
+    	str = JavaString::internalToJava(m, vm);
+    	assert(clazzLoaded && "Class not found");
+    	assert(str && "Null string");
+    	field = upcalls->getFieldInClass->invokeJavaObjectVirtual(vm, upcalls->newClass, clazzLoaded, &str);
+    	assert(field && "Field not found");
+    	JavaObject* obj = 0;
+    	res = upcalls->getInField->invokeJavaObjectVirtual(vm, upcalls->newField, field, &obj);
+    } else {
+    	str = JavaString::internalToJava(n, vm);
+    	vm->classNotFoundException(str);
+    }
   } else if (tag == 'c') {
     ddprintf("class=");
     const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2());
-    ddprintf("%s", PrintBuffer(m).cString());
+
+    JnjvmClassLoader* JCL = this->cl->classLoader;
+
+    m = m->extract(JCL->hashUTF8, 1,m->size-1);
+
+    UserCommonClass* cl = JCL->loadClassFromUserUTF8(m,true,false, NULL);
+
+	if (cl != NULL && !cl->isPrimitive()) {
+		if (cl->asClass())
+		  cl->asClass()->initialiseClass(vm);
+		res = cl->getClassDelegatee(vm);
+	} else {
+	  str = JavaString::internalToJava(m, vm);
+	  vm->classNotFoundException(str);
+	}
 
   } else if (tag == '[') {
     uint16 numValues = reader.readU2();
-    UserClassArray* array = upcalls->annotationArrayClass;
-    res = array->doNew(numValues, vm);
-
-    ddprintf("Tableau de %d elements\n", numValues);
-    for (uint32 i = 0; i < numValues; ++i) {
-      tmp = createElementValue();
-      arrayObj = (ArrayObject *)res;
-      ArrayObject::setElement(arrayObj, tmp, i);
+    classOfCurrentAnnotationProperty = type;
+    if (!nextParameterIsTypeOfMethod) {
+		UserCommonClass* uss =  UserCommonClass::resolvedImplClass(vm, type, false);
+		//printf("Class name : %s\n", UTF8Buffer(uss->name).cString());
+		UserClass* clazzOfAnnotation = uss->asClass();
+		uint16 i = 0;
+		while ( i < clazzOfAnnotation->nbVirtualMethods && !(lastKey->equals(clazzOfAnnotation->virtualMethods[i].name))) i++;
+		assert((i < clazzOfAnnotation->nbVirtualMethods) && "Incorrect property for annotation");
+		classOfCurrentAnnotationProperty = clazzOfAnnotation->virtualMethods[i].getReturnType(this->cl->classLoader);
     }
-    ddprintf("Fin du Tableau");
+	UserClassArray* clazzOfProperty = UserCommonClass::resolvedImplClass(vm, classOfCurrentAnnotationProperty, false)->asArrayClass();
+	//printf("Class name is : %s\n", UTF8Buffer(clazzOfProperty->name).cString());
+	res = clazzOfProperty->doNew(numValues, vm);
+	assert(res && "Error creating array of that type");
+    fillArray(res, numValues, clazzOfProperty);
+
+  } else if (tag == '@') {
+	  uint16 typeIndex = reader.readU2();
+	  annotationClass = type;
+	  if (!nextParameterIsTypeOfMethod) {
+	  		UserCommonClass* uss =  UserCommonClass::resolvedImplClass(vm, type, false);
+	  		//printf("Class name : %s\n", UTF8Buffer(uss->name).cString());
+	  		UserClass* clazzOfAnnotation = uss->asClass();
+	  		uint16 i = 0;
+	  		while ( i < clazzOfAnnotation->nbVirtualMethods && !(lastKey->equals(clazzOfAnnotation->virtualMethods[i].name))) i++;
+	  		assert((i < clazzOfAnnotation->nbVirtualMethods) && "Incorrect property for annotation");
+	  		annotationClass = clazzOfAnnotation->virtualMethods[i].getReturnType(this->cl->classLoader);
+	 }
+
+	  newHashMap = createAnnotationMapValues(annotationClass);
+	  res = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
   } else {
-    // Element_value Annotation not implemented
-    fprintf(stderr, "Annotation not supported for %c type\n", tag);
+    fprintf(stderr, "Wrong classfile format\n");
     abort();
   }
   ddprintf("\n");
@@ -1857,18 +1915,177 @@ JavaObject* AnnotationReader::createElem
   return res;
 }
 
-JavaObject* AnnotationReader::createAnnotationMapValues() {
+void AnnotationReader::fillArray(JavaObject* res, int numValues, UserClassArray* classArray) {
+	llvm_gcroot(res, 0);
+	JavaString* str = 0;
+	JavaObject* clazzObject = 0;
+	JavaObject* field = 0;
+	JavaObject* clazzLoaded = 0;
+	JavaObject* myEnum = 0;
+	JavaObject* annotationClass = 0;
+	JavaObject* newHashMap = 0;
+
+	// for cast
+	ArraySInt8* aSInt8 = 0;
+	ArrayUInt8* aUInt8 = 0;
+	ArraySInt16* aSInt16 = 0;
+	ArraySInt32* aSInt32 = 0;
+	ArrayLong* aSLong = 0;
+	ArrayDouble* aDouble = 0;
+	ArrayFloat* aFloat = 0;
+	ArrayObject* aObject = 0;
+
+	llvm_gcroot(str, 0);
+	llvm_gcroot(clazzObject, 0);
+	llvm_gcroot(clazzLoaded, 0);
+	llvm_gcroot(field, 0);
+	llvm_gcroot(myEnum, 0);
+	llvm_gcroot(annotationClass, 0);
+	llvm_gcroot(newHashMap, 0);
+	llvm_gcroot(aSInt8, 0);
+	llvm_gcroot(aUInt8, 0);
+	llvm_gcroot(aSInt16, 0);
+	llvm_gcroot(aSInt32, 0);
+	llvm_gcroot(aSLong, 0);
+	llvm_gcroot(aDouble, 0);
+	llvm_gcroot(aFloat, 0);
+	llvm_gcroot(aObject, 0);
+
+	sint32 valS;
+	uint32 valU;
+	sint64 val64S;
+	double valD;
+	float valF;
+	const UTF8* s = 0, *n = 0, * m = 0;
+	JnjvmClassLoader* JCL;
+	UserCommonClass* clLoaded;
+	UserCommonClass* aaa;
+
+	Jnjvm* vm = JavaThread::get()->getJVM();
+	Classpath* upcalls = vm->upcalls;
+	for (int i = 0 ; i < numValues ; i++) {
+		uint8 tag = reader.readU1();
+		switch (tag) {
+			case 'B':
+				valS = cl->ctpInfo->IntegerAt(reader.readU2());
+				aSInt8 = (ArraySInt8*)res;
+				ArraySInt8::setElement(aSInt8, valS, i);
+				break;
+			case 'C':
+				valS = cl->ctpInfo->IntegerAt(reader.readU2());
+				aSInt16 = (ArraySInt16*)res;
+				ArraySInt16::setElement(aSInt16, valS, i);
+				break;
+			case 'D':
+				valD = cl->ctpInfo->DoubleAt(reader.readU2());
+				aDouble = (ArrayDouble*)res;
+				ArrayDouble::setElement(aDouble, valD, i);
+				break;
+			case 'F':
+				valF = cl->ctpInfo->FloatAt(reader.readU2());
+				aFloat = (ArrayFloat*)res;
+				ArrayFloat::setElement(aFloat, valF, i);
+				break;
+			case 'J':
+				val64S = cl->ctpInfo->LongAt(reader.readU2());
+				aSLong = (ArrayLong*)res;
+				ArrayLong::setElement(aSLong, val64S, i);
+				break;
+			case 'S':
+				valS = cl->ctpInfo->IntegerAt(reader.readU2());
+				aSInt16 = (ArraySInt16*)res;
+				ArraySInt16::setElement(aSInt16, valS, i);
+				break;
+			case 'I':
+				valS = cl->ctpInfo->IntegerAt(reader.readU2());
+				aSInt32 = (ArraySInt32*)res;
+				ArraySInt32::setElement(aSInt32, valS,i);
+				break;
+			case 'Z':
+				valU = cl->ctpInfo->IntegerAt(reader.readU2());
+				aUInt8 = (ArrayUInt8*)res;
+				ArrayUInt8::setElement(aUInt8, valU, i);
+				break;
+			case 's':
+				s = cl->ctpInfo->UTF8At(reader.readU2());
+				str = JavaString::internalToJava(s, JavaThread::get()->getJVM());
+				aObject = (ArrayObject *)res;
+				ArrayObject::setElement(aObject, str, i);
+				break;
+			case 'e':
+				n = cl->ctpInfo->UTF8At(reader.readU2());
+				m = cl->ctpInfo->UTF8At(reader.readU2());
+				JCL = this->cl->classLoader;
+				n = n->extract(JCL->hashUTF8, 1,n->size-1);
+				clLoaded = JCL->loadClassFromUserUTF8(n,true,false, NULL);
+				if (clLoaded != NULL && !clLoaded->isPrimitive()) {
+					if (clLoaded->asClass())
+						clLoaded->asClass()->initialiseClass(vm);
+					clazzLoaded = clLoaded->getClassDelegatee(vm);
+					str = JavaString::internalToJava(m, vm);
+					assert(clazzLoaded && "Class not found");
+					assert(str && "Null string");
+					field = upcalls->getFieldInClass->invokeJavaObjectVirtual(vm, upcalls->newClass, clazzLoaded, &str);
+					assert(field && "Field not found");
+					JavaObject* obj = 0;
+					myEnum = upcalls->getInField->invokeJavaObjectVirtual(vm, upcalls->newField, field, &obj);
+					aObject = (ArrayObject *)res;
+					ArrayObject::setElement(aObject, str, i);
+				} else {
+					str = JavaString::internalToJava(n, vm);
+					vm->classNotFoundException(str);
+				}
+				break;
+			case 'c':
+				s = cl->ctpInfo->UTF8At(reader.readU2());
+				JCL = this->cl->classLoader;
+				s = s->extract(JCL->hashUTF8, 1,s->size-1);
+				clLoaded = JCL->loadClassFromUserUTF8(s,true,false, NULL);
+				if (clLoaded != NULL && !clLoaded->isPrimitive()) {
+					if (clLoaded->asClass())
+						clLoaded->asClass()->initialiseClass(vm);
+					clazzObject = clLoaded->getClassDelegatee(vm);
+				} else {
+				  str = JavaString::internalToJava(s, vm);
+				  vm->classNotFoundException(str);
+				}
+				aObject = (ArrayObject *)res;
+				ArrayObject::setElement(aObject, clazzObject, i);
+				break;
+			case '@':
+				reader.readU2();
+				aaa = classArray->_baseClass;
+				annotationClass = aaa->getDelegatee();
+				newHashMap = createAnnotationMapValues(annotationClass);
+				clazzObject = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
+				aObject = (ArrayObject *)res;
+				ArrayObject::setElement(aObject, clazzObject, i);
+				break;
+			default:
+				fprintf(stderr, "Wrong class file\n");
+				abort();
+				break;
+			}
+	}
+}
+
+JavaObject* AnnotationReader::createAnnotationMapValues(JavaObject* type) {
   std::pair<JavaObject*, JavaObject*> pair;
   JavaObject* tmp = 0;
   JavaString* str = 0;
   JavaObject* newHashMap = 0;
+  llvm_gcroot(type, 0);
   llvm_gcroot(tmp, 0);
   llvm_gcroot(str, 0);
   llvm_gcroot(newHashMap, 0);
 
+
+  const UTF8* key = 0;
+
   Jnjvm * vm = JavaThread::get()->getJVM();
   Classpath* upcalls = vm->upcalls;
   UserClass* HashMap = upcalls->newHashMap;
+
   newHashMap = HashMap->doNew(vm);
   upcalls->initHashMap->invokeIntSpecial(vm, HashMap, newHashMap);
 
@@ -1876,14 +2093,18 @@ JavaObject* AnnotationReader::createAnno
   dprintf("numPairs:%d\n", numPairs);
   for (uint16 j = 0; j < numPairs; ++j) {
     uint16 nameIndex = reader.readU2();
-    const UTF8* key = cl->ctpInfo->UTF8At(nameIndex);
+    key = cl->ctpInfo->UTF8At(nameIndex);
     dprintf("keyAn:%s|", PrintBuffer(key).cString());
 
-    tmp = createElementValue();
-    str = JavaString::internalToJava(key, JavaThread::get()->getJVM());
+    tmp = createElementValue(false, type, key);
+    str = JavaString::internalToJava(key, vm);
     upcalls->putHashMap->invokeJavaObjectVirtual(vm, HashMap, newHashMap, &str, &tmp);
   }
 
+  // annotationType
+  str = vm->asciizToStr("annotationType");
+  upcalls->putHashMap->invokeJavaObjectVirtual(vm, HashMap, newHashMap, &str, &type);
+
   return newHashMap;
 }
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.h?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.h Thu Apr 25 12:14:18 2013
@@ -84,7 +84,7 @@ public:
   // createElementValue - create the Java type associated with the value
   // of the current annotation key.
   //
-  JavaObject* createElementValue(bool nextParameterIsTypeOfMethod,JavaObject* type, const UTF8* lastKey);
+  JavaObject* createElementValue(bool nextParameterIsTypeOfMethod, JavaObject* type, const UTF8* lastKey);
 
   void fillArray(JavaObject* res, int numValues, UserClassArray* classArray);
 };
@@ -464,7 +464,7 @@ public:
 
   /// nbVirtualMethods - The number of virtual methods.
   ///
-  uint32 nbVirtualMethods;
+  uint16 nbVirtualMethods;
   
   /// staticMethods - List of all the static methods defined by this class.
   ///

Modified: vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaMetaJIT.cpp Thu Apr 25 12:14:18 2013
@@ -9,7 +9,7 @@
 
 #include <cstdarg>
 #include <cstring>
-#include "j3/jni.h"
+#include "jni.h"
 
 #include "debug.h"
 

Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 12:14:18 2013
@@ -20,7 +20,7 @@
 #include "Jnjvm.h"
 #include "VMStaticInstance.h"
 
-#include "j3/jni.h"
+#include "jni.h"
 #include "debug.h"
 
 using namespace j3;

Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 12:14:18 2013
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "j3/jni.h"
+#include "jni.h"
 
 #include "vmkit/System.h"
 

Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 12:14:18 2013
@@ -1408,9 +1408,10 @@ void Jnjvm::addFinalizationCandidate(gc*
 }
 
 void Jnjvm::setType(gc* header, void* type) {
-	JavaObject* src = (JavaObject*)header;
+	JavaObject* src = 0;
 	llvm_gcroot(src, 0);
 	llvm_gcroot(header, 0);
+	src = (JavaObject*)header;
 	src->setVirtualTable((JavaVirtualTable*)type);
 }
 

Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 12:14:18 2013
@@ -257,7 +257,7 @@ void BaseIntrinsics::init(llvm::Module*
 
   LLVMContext& Context = module->getContext();
 
-	makeLLVMFunctions_FinalMMTk(module);
+  makeLLVMFunctions_FinalMMTk(module);
   llvm_runtime::makeLLVMModuleContents(module);
 
   // Type declaration

Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 12:14:18 2013
@@ -93,11 +93,13 @@ extern "C" void* VTgcmallocUnresolved(ui
 
 // Do not insert MagicArray ref to InternalSet of references.
 extern "C" void* AllocateMagicArray(int32_t sz, void* length) {
+	gc* res = 0;
+	llvm_gcroot(res, 0);
 	gcHeader* head = 0;
 	sz += gcHeader::hiddenHeaderSize();
 	head = (gcHeader*)malloc(sz);
 	memset((void*)head, 0, sz);
-	void* res = head->toReference();
+	res = head->toReference();
 	vmkit::Thread::get()->MyVM->setType(res, length);
 	return res;
 }

Modified: vmkit/trunk/mmtk/inline/InlineMethods.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/inline/InlineMethods.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/mmtk/inline/InlineMethods.cpp (original)
+++ vmkit/trunk/mmtk/inline/InlineMethods.cpp Thu Apr 25 12:14:18 2013
@@ -48,3 +48,12 @@ extern "C" void MMTk_InlineMethods(llvm:
   mmtk::mmtk_array_write::makeLLVMFunction(module);
   mmtk::mmtk_non_heap_write::makeLLVMFunction(module);
 }
+
+namespace vmkit {
+
+extern "C" void makeLLVMFunctions_FinalMMTk(llvm::Module* mod)
+{
+  MMTk_InlineMethods(mod);
+}
+
+}

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 12:14:18 2013
@@ -295,6 +295,7 @@ 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);
   size += gcHeader::hiddenHeaderSize();
   size = llvm::RoundUpToAlignment(size, sizeof(void*));
   head = (gcHeader*)MutatorThread::get()->Allocator.Allocate(size);

Modified: vmkit/trunk/tools/precompiler/Precompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/Precompiler.cpp?rev=180473&r1=180472&r2=180473&view=diff
==============================================================================
--- vmkit/trunk/tools/precompiler/Precompiler.cpp (original)
+++ vmkit/trunk/tools/precompiler/Precompiler.cpp Thu Apr 25 12:14:18 2013
@@ -33,6 +33,12 @@
 using namespace j3;
 using namespace vmkit;
 
+#include "FrametablesExterns.inc"
+
+CompiledFrames* frametables[] = {
+  #include "FrametablesSymbols.inc"
+  NULL
+};
 
 static void mainCompilerLoaderStart(JavaThread* th) {
   Jnjvm* vm = th->getJVM();
@@ -74,7 +80,7 @@ int main(int argc, char **argv, char **e
     JavaJITCompiler* JIT = JavaJITCompiler::CreateCompiler("JIT");
     JnjvmBootstrapLoader* loader = new(Allocator, "Bootstrap loader")
       JnjvmBootstrapLoader(Allocator, JIT, true);
-    Jnjvm* vm = new(Allocator, "VM") Jnjvm(Allocator, initialFrametables, loader);
+    Jnjvm* vm = new(Allocator, "VM") Jnjvm(Allocator, frametables, loader);
  
     // Run the application. 
     vm->runApplication(argc, argv);





More information about the vmkit-commits mailing list