[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