[vmkit-commits] [vmkit] r180444 - Split prepare-code into two directories. Required for linux x86 because 'opt' does not embedded the GCMetaData printer class.
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:11:56 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:10:19 2013
New Revision: 180444
URL: http://llvm.org/viewvc/llvm-project?rev=180444&view=rev
Log:
Split prepare-code into two directories. Required for linux x86 because 'opt' does not embedded the GCMetaData printer class.
(cherry picked from commit a233c83a66dded47700af1a6f11ac255828e0b72)
Added:
vmkit/trunk/lib/static-gc-pass/
vmkit/trunk/lib/static-gc-pass/Makefile
- copied, changed from r180443, vmkit/trunk/lib/prepare-code/Makefile
vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp
- copied, changed from r180443, vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
vmkit/trunk/lib/static-gc-printer/
vmkit/trunk/lib/static-gc-printer/Makefile
- copied, changed from r180443, vmkit/trunk/lib/prepare-code/Makefile
vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp
- copied, changed from r180443, vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
Removed:
vmkit/trunk/lib/prepare-code/Makefile
vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
Modified:
vmkit/trunk/Makefile
vmkit/trunk/Makefile.common.in
vmkit/trunk/Makefile.rules
vmkit/trunk/tools/trainer/Makefile
Modified: vmkit/trunk/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/Makefile (original)
+++ vmkit/trunk/Makefile Thu Apr 25 12:10:19 2013
@@ -9,6 +9,6 @@
LEVEL := .
-DIRS := lib/prepare-code lib tools/vmjc mmtk tools/precompiler tools/trainer tools
+DIRS := lib/static-gc-pass lib/static-gc-printer lib tools/vmjc mmtk tools/precompiler tools/trainer tools
include $(LEVEL)/Makefile.common
Modified: vmkit/trunk/Makefile.common.in
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/Makefile.common.in (original)
+++ vmkit/trunk/Makefile.common.in Thu Apr 25 12:10:19 2013
@@ -77,7 +77,7 @@ Archive=@AR@ cru
Ranlib=@RANLIB@
NM=@NM@
LD=@LD@
-MKDIR=mkdir -p @MKDIR@
+MKDIR=@MKDIR_P@
TOUCH=@TOUCH@
GREP=@GREP@
Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:10:19 2013
@@ -1,177 +1,327 @@
-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
-# Set the LLVM build file location
-LLVMBuildTool := $(LLVM_SRC_ROOT)/utils/llvm-build/llvm-build
+ifeq ($(ASSERT),1)
+ BUILD_NAME:=$(BUILD_NAME)+Asserts
+else
+ COMMON_CFLAGS+=-DNDEBUG
+endif
-###############################################################################
-# VMKIT_RUNTIME: Provide rules to build a .cpp file with LLVM instructions
-# generating code matching the .ll files.
-###############################################################################
+ifeq ($(DEBUG),1)
+ COMMON_CFLAGS+=-g
+endif
-ifdef VMKIT_RUNTIME
+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
-.PRECIOUS: LLVMRuntime.inc
+LLC_FLAGS+=-disable-cfi -disable-fp-elim -relocation-model=pic
+OPT_FLAGS+=-disable-cfi -disable-fp-elim
-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 $@
+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)
-all-local:: LLVMRuntime.inc
+WARN_CFLAGS= -Wall -Wno-long-long -Wno-variadic-macros -Wno-unused-private-field -Wno-unused-variable
+COMMON_CFLAGS+= $(INCLUDES) -ansi -pedantic $(WARN_CFLAGS) -fPIC \
+ -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \
+ -fno-strict-aliasing -fno-omit-frame-pointer -fvisibility-inlines-hidden
-clean-local::
- $(Verb) $(RM) -f LLVMRuntime.inc
+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
-endif
+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
###############################################################################
-# VMJC_ASSEMBLY: Provide rules to build glibj.zip.s.
+# Nice printing
###############################################################################
+ifndef PROF
+PROF=.
+all::
+ $(Echo) "Entering compilation process"
+endif
-ifdef VMJC_ASSEMBLY
+EchoMsg="[$(PROJECT_NAME) $(PROF)]:"
+Echo=@echo $(EchoMsg)
-.PRECIOUS: glibj.zip.s
+ifndef VERBOSE
+ SUB_OPT=--no-print-directory
+ Verb:=@
+endif
-glibj.zip.s : $(LOPT) $(LLC) $(VMJC)
+###############################################################################
+# Recursive target managment
+###############################################################################
+RECURSIVE_TARGETS=all clean distclean
-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
+$(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;
-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
+tidy:
+ $(Echo) Cleaning temporary files
+ $(Verb) find $(PROJ_OBJ_ROOT) -iname "*~" -exec rm -f {} \;
-$(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES)
- $(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
- $(Verb) $(Compile.C) $< -o $(ObjDir)/$*.o
+clean::
+ $(Echo) "Cleaning compilation files"
+ $(Verb) rm -Rf $(BUILD_NAME)
-clean-local::
- $(Verb) $(RM) -f glibj.zip.s glibj.zip.bc glibj-optimized.zip.bc
-endif
+distclean::
+ $(Echo) "Cleaning all compilation files"
+ $(Verb) rm -Rf Release* Debug* Unoptimized*
+
+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
+
+%/.dir:
+ $(Verb) $(MKDIR) $(dir $@) && $(TOUCH) $@
###############################################################################
-# RUN_ANT: Provide rules to build MMTk into a .o file and inlining facilities.
+# Build system managment
###############################################################################
+#SELF=$(PROJ_SRC_ROOT)/Makefile.rules $(PROJ_OBJ_ROOT)/Makefile.common Makefile
-ifdef RUN_ANT
+$(LEVEL)/Makefile.common: $(PROJ_OBJ_ROOT)/Makefile.common
-MMTkLib = $(LibDir)/libFinalMMTk.a
-
-ifeq ($(shell [ ! -e $(MMTkLib) ] && echo "1"), 1)
- COMPILE_MMTK = 1
-endif
+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
-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
+$(foreach cur,$(CONFIG_FILES),$(eval $(call define_config_rule,$(cur),file)))
+$(foreach cur,$(CONFIG_HEADERS),$(eval $(call define_config_rule,$(cur),header)))
-clean-local::
- $(Verb) $(RM) -rf classes $(JARNAME).jar $(JARNAME).bc $(JARNAME)-optimized.bc $(ObjDir)
-endif
+$(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
###############################################################################
-# MODULE_WITH_GC: Provide rules for building .cpp files into an archive with
-# GC symbol information.
+# 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)
-ifdef MODULE_WITH_GC
+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
-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 $@
+###############################################################################
+# Main targets
+###############################################################################
+ifdef TOOL
+MODULE=$(TOOL)
-$(AModule): $(ObjectsWithGC) $(LibDir)/.dir
- $(Echo) Building $(BuildMode) Archive Library $(notdir $@)
- -$(Verb) $(RM) -f $@
- $(Verb) $(Archive) $@ $(ObjectsWithGC)
- $(Verb) $(Ranlib) $@
+all:: $(BIN_DIR)/$(TOOL)$(EXEEXT)
+endif
-all-local:: $(AModule)
+ifdef LIBRARY
+MODULE=$(LIBRARY)
-clean-local::
- -$(Verb) $(RM) -f $(AModule) $(ObjectsBCWithGC) $(ObjectsSWithGC) $(ObjectsWithGC)
+all:: $(LIB_DIR)/$(LIBRARY)$(SHLIBEXT)
+endif
+ifdef MODULE_WITH_GC
+MODULE=$(MODULE_WITH_GC)
+NEED_GC=1
endif
###############################################################################
-# BUILD_FRAMETABLE: Generate files for easy access of frametables at runtime.
+# 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 $@
-ifdef BUILD_FRAMETABLE
+endif
-FrametablesExterns.inc: $(ProjLibsPaths)
- $(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > $@
+###############################################################################
+# Module
+###############################################################################
+ifdef MODULE
-FrametablesSymbols.inc: $(ProjLibsPaths)
- $(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > $@
+MODULE_A=$(LIB_DIR)/lib$(MODULE).a
-all-local:: FrametablesExterns.inc FrametablesSymbols.inc
+all:: $(MODULE_A)
-clean-local::
- -$(Verb) $(RM) -f FrametablesExterns.inc FrametablesSymbols.inc
-
+ifdef EXTRACT_FUNCTIONS
+all:: $(LIB_DIR)/$(MODULE)-inliner.o
+MODULE_A_DEP=$(LIB_DIR)/$(MODULE)-inliner.o
+NEED_BC=1
endif
-###############################################################################
-# COMPILE_OPENJDK_ZIP: Build the specified java sources and zip them up
-###############################################################################
-ifeq ($(COMPILE_OPENJDK_ZIP), 1)
+define all-suffixes
+ $(wildcard *$1) $(filter %$1, $(GEN))
+endef
+
+CLANG_FILES=$(patsubst %.c,$(BUILD_DIR)/%,$(call all-suffixes,.c)) \
+ $(patsubst %.cc,$(BUILD_DIR)/%,$(call all-suffixes,.cc)) \
+ $(patsubst %.cpp,$(BUILD_DIR)/%,$(call all-suffixes,.cpp))
+
+BC_FILES=$(addsuffix .bc,$(CLANG_FILES)) $(addprefix $(BUILD_DIR)/,$(filter %.bc, $(GEN)))
+
+ifdef NEED_BC
+# if we need bytecode, we link a module with all the bc in the build_dir directory, optimize this module
+# assemble this module and finally create the archive
+all:: $(LIB_DIR)/$(MODULE).bc
+
+$(LIB_DIR)/$(MODULE).bc $(LIB_DIR)/$(MODULE)-inliner.bc: $(LIB_DIR)/%.bc: $(BUILD_DIR)/%$(GC_ID).bc $(LIB_DIR)/.dir
+ $(Verb) $(CP) $< $@
+
+$(BUILD_DIR)/$(MODULE).bc: $(BC_FILES) $(patsubst %, $(LIB_DIR)/%.bc,$(MODULE_USE))
+ $(Echo) "Linking module '$(notdir $@)'"
+ $(Verb) $(LLVMLINK) $^ -o $@
+
+MODULE_A_DEP+=$(BUILD_DIR)/$(MODULE)$(GC_ID).o
+else
+# for most of the module, we avoid a full module creation, mainly because I have bugs in llc
+# in this case, we build a set of .o files and archive them together
+# each .o is optimized and assembled
+MODULE_A_DEP=$(patsubst %.bc,%$(GC_ID).o,$(BC_FILES)) $(patsubst %, $(LIB_DIR)/lib%.a,$(MODULE_USE))
+endif
-# Some variables
-VMKIT_OPENJDK_ZIP=$(PROJ_OBJ_DIR)/vmkit-openjdk.zip
-CLASSES_DIR=$(PROJ_OBJ_DIR)/classes
+$(MODULE_A): $(MODULE_A_DEP) $(LIB_DIR)/.dir
+ $(Echo) "Building archive '$(notdir $@)'"
+ -$(Verb) $(RM) -f $@
+ $(Verb) $(Archive) $@ $(MODULE_A_DEP)
+ $(Verb) $(Ranlib) $@
-all-local:: $(VMKIT_OPENJDK_ZIP)
-clean-local::
- -$(Verb) $(RM) -f $(CLASSES_DIR) $(VMKIT_OPENJDK_ZIP)
+endif
+###############################################################################
+# 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 $@
-$(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) .
+endif
+###############################################################################
+# 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
Removed: vmkit/trunk/lib/prepare-code/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/Makefile?rev=180443&view=auto
==============================================================================
--- vmkit/trunk/lib/prepare-code/Makefile (original)
+++ vmkit/trunk/lib/prepare-code/Makefile (removed)
@@ -1,16 +0,0 @@
-##===- lib/vmkit/StaticGCPass/Makefile -----------------------*- Makefile -*-===##
-#
-# The VMKit project
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===----------------------------------------------------------------------===##
-
-LEVEL = ../..
-
-LIBRARY=prepare-code
-LOADABLE_MODULE = 1
-
-include $(LEVEL)/Makefile.common
-
Removed: vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/StaticGCPass.cpp?rev=180443&view=auto
==============================================================================
--- vmkit/trunk/lib/prepare-code/StaticGCPass.cpp (original)
+++ vmkit/trunk/lib/prepare-code/StaticGCPass.cpp (removed)
@@ -1,77 +0,0 @@
-//===---- StaticGCPass.cpp - Put GC information in functions compiled --------//
-//===----------------------- with llvm-gcc --------------------------------===//
-//
-// The VMKit project
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-
-#include "llvm/Intrinsics.h"
-#include "llvm/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <cstdio>
-
-using namespace llvm;
-
-namespace {
-
- class StaticGCPass : public ModulePass {
- public:
- static char ID;
-
- StaticGCPass() : ModulePass(ID) {}
-
- virtual bool runOnModule(Module& M);
-
- /// getAnalysisUsage - We do not modify anything.
- virtual void getAnalysisUsage(AnalysisUsage &AU) const {
- AU.setPreservesAll();
- }
-
- };
-
- char StaticGCPass::ID = 0;
- RegisterPass<StaticGCPass> X("StaticGCPass",
- "Add GC information in files compiled with llvm-gcc");
-
-bool StaticGCPass::runOnModule(Module& M) {
-
- Function* F = M.getFunction("__llvm_gcroot");
- Function *gcrootFun = Intrinsic::getDeclaration(&M, Intrinsic::gcroot);
-
- if (F) {
- F->replaceAllUsesWith(gcrootFun);
- F->eraseFromParent();
- }
-
- bool error = false;
- for (Value::use_iterator I = gcrootFun->use_begin(),
- E = gcrootFun->use_end(); I != E; ++I) {
- if (Instruction* II = dyn_cast<Instruction>(*I)) {
- Function* F = II->getParent()->getParent();
- if (!F->hasGC()) {
- F->setGC("vmkit");
- }
- }
- }
-
- for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
- if (I->hasGC() && I->hasInternalLinkage()) {
- error = true;
- fprintf(stderr, "Method %s has static linkage but uses gc_root. "
- "Functions using gc_root should not have static linkage.\n",
- I->getName().data());
- }
- }
-
- if (error) abort();
-
- return true;
-}
-
-}
Removed: vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp?rev=180443&view=auto
==============================================================================
--- vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp (original)
+++ vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp (removed)
@@ -1,382 +0,0 @@
-//===----- VmkitAOTGC.cpp - Support for Ahead of Time Compiler GC -------===//
-//
-// The Vmkit project
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Type.h"
-#include "llvm/CodeGen/GCs.h"
-#include "llvm/CodeGen/GCStrategy.h"
-#include "llvm/CodeGen/AsmPrinter.h"
-#include "llvm/CodeGen/GCMetadataPrinter.h"
-#include "llvm/CodeGen/MachineFunction.h"
-#include "llvm/CodeGen/MachineInstrBuilder.h"
-#include "llvm/Module.h"
-#include "llvm/MC/MCAsmInfo.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCSymbol.h"
-#include "llvm/MC/MCStreamer.h"
-#include "llvm/Target/Mangler.h"
-#include "llvm/DataLayout.h"
-#include "llvm/Target/TargetInstrInfo.h"
-#include "llvm/Target/TargetLoweringObjectFile.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/Compiler.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/FormattedStream.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cctype>
-#include <cstdio>
-
-using namespace llvm;
-
-namespace {
- class VmkitAOTGC : public GCStrategy {
- public:
- VmkitAOTGC();
- virtual bool findCustomSafePoints(GCFunctionInfo& FI, MachineFunction& MF);
- };
-}
-
-static GCRegistry::Add<VmkitAOTGC>
-X("vmkit", "Vmkit GC for AOT-generated functions");
-
-VmkitAOTGC::VmkitAOTGC() {
- CustomSafePoints = true;
- UsesMetadata = true;
-}
-
-
-static MCSymbol *InsertLabel(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator MI,
- DebugLoc DL) {
- const TargetInstrInfo* TII = MBB.getParent()->getTarget().getInstrInfo();
- MCSymbol *Label = MBB.getParent()->getContext().CreateTempSymbol();
- BuildMI(MBB, MI, DL, TII->get(TargetOpcode::GC_LABEL)).addSym(Label);
- return Label;
-}
-
-
-bool VmkitAOTGC::findCustomSafePoints(GCFunctionInfo& FI, MachineFunction &MF) {
- for (MachineFunction::iterator BBI = MF.begin(),
- BBE = MF.end(); BBI != BBE; ++BBI) {
- for (MachineBasicBlock::iterator MI = BBI->begin(),
- ME = BBI->end(); MI != ME; ++MI) {
- if (MI->getDesc().isCall()) {
- MachineBasicBlock::iterator RAI = MI; ++RAI;
- MCSymbol* Label = InsertLabel(*MI->getParent(), RAI, MI->getDebugLoc());
- FI.addSafePoint(GC::PostCall, Label, MI->getDebugLoc());
- } else if (MI->getDebugLoc().getCol() == 1) {
- MCSymbol* Label = InsertLabel(*MI->getParent(), MI, MI->getDebugLoc());
- FI.addSafePoint(GC::Loop, Label, MI->getDebugLoc());
- }
- }
- }
- return false;
-}
-
-
-namespace {
-
- class VmkitAOTGCMetadataPrinter : public GCMetadataPrinter {
- public:
- void beginAssembly(AsmPrinter &AP);
- void finishAssembly(AsmPrinter &AP);
- };
-
-}
-
-static GCMetadataPrinterRegistry::Add<VmkitAOTGCMetadataPrinter>
-Y("vmkit", "Vmkit GC for AOT-generated functions");
-
-void VmkitAOTGCMetadataPrinter::beginAssembly(AsmPrinter &AP) {
-}
-
-static bool isAcceptableChar(char C) {
- if ((C < 'a' || C > 'z') &&
- (C < 'A' || C > 'Z') &&
- (C < '0' || C > '9') &&
- C != '_' && C != '$' && C != '@') {
- return false;
- }
- return true;
-}
-
-static char HexDigit(int V) {
- return V < 10 ? V+'0' : V+'A'-10;
-}
-
-static void MangleLetter(SmallVectorImpl<char> &OutName, unsigned char C) {
- OutName.push_back('_');
- OutName.push_back(HexDigit(C >> 4));
- OutName.push_back(HexDigit(C & 15));
- OutName.push_back('_');
-}
-
-
-static void EmitVmkitGlobal(const Module &M, AsmPrinter &AP, const char *Id) {
- const std::string &MId = M.getModuleIdentifier();
-
- std::string SymName;
- SymName += "vmkit";
- size_t Letter = SymName.size();
- SymName += MId;
- SymName += "__";
- SymName += Id;
-
- // Capitalize the first letter of the module name.
- SymName[Letter] = toupper(SymName[Letter]);
-
- SmallString<128> TmpStr;
- AP.Mang->getNameWithPrefix(TmpStr, SymName);
-
- SmallString<128> FinalStr;
- for (unsigned i = 0, e = TmpStr.size(); i != e; ++i) {
- if (!isAcceptableChar(TmpStr[i])) {
- MangleLetter(FinalStr, TmpStr[i]);
- } else {
- FinalStr.push_back(TmpStr[i]);
- }
- }
-
- MCSymbol *Sym = AP.OutContext.GetOrCreateSymbol(FinalStr);
-
- AP.OutStreamer.EmitSymbolAttribute(Sym, MCSA_Global);
- AP.OutStreamer.EmitLabel(Sym);
-}
-
-static bool methodNameMatches(StringRef compiledName,
- ConstantDataArray* name,
- ConstantDataArray* type) {
- uint32_t size = compiledName.size();
- std::string str;
-
- for (uint32_t i = 0; i < name->getNumElements(); ++i) {
- ConstantInt* charInt = cast<ConstantInt>(name->getElementAsConstant(i));
- int16_t cur = charInt->getZExtValue();
- if (cur == '/') {
- str += '_';
- } else if (cur == '_') {
- str += "_1";
- } else if (cur == '<') {
- str += "_0003C";
- } else if (cur == '>') {
- str += "_0003E";
- } else {
- str += (char)cur;
- }
- }
-
- for (uint32_t i = 0; i < type->getNumElements(); ++i) {
- ConstantInt* charInt = cast<ConstantInt>(type->getElementAsConstant(i));
- int16_t cur = charInt->getZExtValue();
- if (cur == '(') {
- str += "__";
- } else if (cur == '/') {
- str += '_';
- } else if (cur == '_') {
- str += "_1";
- } else if (cur == '$') {
- str += "_00024";
- } else if (cur == ';') {
- str += "_2";
- } else if (cur == '[') {
- str += "_3";
- } else if (cur == ')') {
- break;
- } else {
- str += (char)cur;
- }
- }
-
- if (str.length() > size) return false;
- if (str.compare(compiledName) == 0) return true;
-
- str += 'S';
-
- if (str.compare(compiledName) == 0) return true;
-
- return false;
-}
-
-Constant* FindMetadata(const Function& F) {
- LLVMContext& context = F.getParent()->getContext();
- for (Value::const_use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
- if (const Constant* C = dyn_cast<Constant>(*I)) {
- if (PointerType* PTy = dyn_cast<PointerType>(C->getType())) {
- if (isa<IntegerType>(PTy->getContainedType(0))) {
- // We have found the bitcast constant that casts the method in a i8*
- for (Value::const_use_iterator CI = C->use_begin(), CE = C->use_end(); CI != CE; ++CI) {
- if (StructType* STy = dyn_cast<StructType>((*CI)->getType())) {
- if (STy->getName().equals("JavaMethod")) {
- const Constant* Method = dyn_cast<Constant>(*CI);
- const Constant* Array = dyn_cast<Constant>(*((*CI)->use_begin()));
- Constant* VirtualMethods = dyn_cast<Constant>(const_cast<User*>((*(Array->use_begin()))));
- uint32_t index = 0;
- for (; index < Array->getNumOperands(); index++) {
- if (Array->getOperand(index) == Method) break;
- }
- assert(index != Array->getNumOperands());
- Constant* GEPs[2] = { ConstantInt::get(Type::getInt32Ty(context), 0),
- ConstantInt::get(Type::getInt32Ty(context), index) };
- return ConstantExpr::getGetElementPtr(VirtualMethods, GEPs, 2);
- }
- }
- }
- }
- }
- }
- }
-
- StringRef name = F.getName();
- if (name.startswith("JnJVM")) {
- // Metadata for customized methods.
- std::string methods = name.substr(0, name.find("__"));
- std::string methodName = name.substr(methods.rfind('_') + 1);
- methodName = methodName.substr(0, methodName.rfind("__"));
- methods = methods.substr(6, methods.rfind('_') - 5);
- methods = methods + "VirtualMethods";
- Constant* VirtualMethods = cast<Constant>(F.getParent()->getNamedValue(methods));
- assert(VirtualMethods);
- Constant* MethodsArray = cast<Constant>(VirtualMethods->getOperand(0));
- for (uint32_t index = 0; index < MethodsArray->getNumOperands(); index++) {
- Constant* method = cast<Constant>(MethodsArray->getOperand(index));
-
- Constant* namePtr = cast<ConstantExpr>(method->getOperand(5));
- namePtr = cast<Constant>(namePtr->getOperand(0));
- namePtr = cast<Constant>(namePtr->getOperand(0));
- ConstantDataArray* name = cast<ConstantDataArray>(namePtr->getOperand(1));
-
- Constant* typePtr = cast<ConstantExpr>(method->getOperand(6));
- typePtr = cast<Constant>(typePtr->getOperand(0));
- typePtr = cast<Constant>(typePtr->getOperand(0));
- ConstantDataArray* type = cast<ConstantDataArray>(typePtr->getOperand(1));
-
- if (methodNameMatches(methodName, name, type)) {
- Constant* GEPs[2] = { ConstantInt::get(Type::getInt32Ty(context), 0),
- ConstantInt::get(Type::getInt32Ty(context), index) };
- return ConstantExpr::getGetElementPtr(VirtualMethods, GEPs, 2);
- }
- }
- assert(0 && "Should have found a JavaMethod");
- }
- return NULL;
-}
-
-/// emitAssembly - Print the frametable. The ocaml frametable format is thus:
-///
-/// extern "C" struct align(sizeof(word_t)) {
-/// uint32_t NumDescriptors;
-/// struct align(sizeof(word_t)) {
-/// void *ReturnAddress;
-/// void *Metadata;
-/// uint16_t BytecodeIndex;
-/// uint16_t FrameSize;
-/// uint16_t NumLiveOffsets;
-/// uint16_t LiveOffsets[NumLiveOffsets];
-/// } Descriptors[NumDescriptors];
-/// } vmkit${module}__frametable;
-///
-/// Note that this precludes programs from stack frames larger than 64K
-/// (FrameSize and LiveOffsets would overflow). FrameTablePrinter will abort if
-/// either condition is detected in a function which uses the GC.
-///
-void VmkitAOTGCMetadataPrinter::finishAssembly(AsmPrinter &AP) {
- unsigned IntPtrSize = AP.TM.getDataLayout()->getPointerSize(0);
-
- AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
-
- AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
- EmitVmkitGlobal(getModule(), AP, "frametable");
- int NumMethodFrames = 0;
- for (iterator I = begin(), IE = end(); I != IE; ++I) {
- NumMethodFrames++;
- }
- AP.EmitInt32(NumMethodFrames);
- AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-
- for (iterator I = begin(), IE = end(); I != IE; ++I) {
- GCFunctionInfo &FI = **I;
-
- Constant* Metadata = FindMetadata(FI.getFunction());
-
- int NumDescriptors = 0;
- for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
- NumDescriptors++;
- }
- if (NumDescriptors >= 1<<16) {
- // Very rude!
- report_fatal_error(" Too much descriptor for J3 AOT GC");
- }
- AP.EmitInt32(NumDescriptors);
- AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-
- uint64_t FrameSize = FI.getFrameSize();
- if (FrameSize >= 1<<16) {
- // Very rude!
- report_fatal_error("Function '" + FI.getFunction().getName() +
- "' is too large for the Vmkit AOT GC! "
- "Frame size " + Twine(FrameSize) + ">= 65536.\n"
- "(" + Twine(uintptr_t(&FI)) + ")");
- }
-
- AP.OutStreamer.AddComment("live roots for " +
- Twine(FI.getFunction().getName()));
- AP.OutStreamer.AddBlankLine();
-
- for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
- size_t LiveCount = FI.live_size(J);
- if (LiveCount >= 1<<16) {
- // Very rude!
- report_fatal_error("Function '" + FI.getFunction().getName() +
- "' is too large for the Vmkit AOT GC! "
- "Live root count "+Twine(LiveCount)+" >= 65536.");
- }
-
- DebugLoc DL = J->Loc;
- uint32_t sourceIndex = DL.getLine();
-
- // Metadata
- if (Metadata != NULL) {
- AP.EmitGlobalConstant(Metadata);
- } else {
- AP.EmitInt32(0);
- if (IntPtrSize == 8) {
- AP.EmitInt32(0);
- }
- }
-
- // Return address
- const MCExpr* address = MCSymbolRefExpr::Create(J->Label, AP.OutStreamer.getContext());
- if (DL.getCol() == 1) {
- const MCExpr* one = MCConstantExpr::Create(1, AP.OutStreamer.getContext());
- address = MCBinaryExpr::CreateAdd(address, one, AP.OutStreamer.getContext());
- }
-
- AP.OutStreamer.EmitValue(address, IntPtrSize, 0);
- AP.EmitInt16(sourceIndex);
- AP.EmitInt16(FrameSize);
- AP.EmitInt16(LiveCount);
-
- for (GCFunctionInfo::live_iterator K = FI.live_begin(J),
- KE = FI.live_end(J); K != KE; ++K) {
- if (K->StackOffset >= 1<<16) {
- // Very rude!
- report_fatal_error(
- "GC root stack offset is outside of fixed stack frame and out "
- "of range for ocaml GC!");
- }
- AP.EmitInt16(K->StackOffset);
- }
-
- AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
- }
- }
-}
Copied: vmkit/trunk/lib/static-gc-pass/Makefile (from r180443, vmkit/trunk/lib/prepare-code/Makefile)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-pass/Makefile?p2=vmkit/trunk/lib/static-gc-pass/Makefile&p1=vmkit/trunk/lib/prepare-code/Makefile&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
--- vmkit/trunk/lib/prepare-code/Makefile (original)
+++ vmkit/trunk/lib/static-gc-pass/Makefile Thu Apr 25 12:10:19 2013
@@ -9,7 +9,7 @@
LEVEL = ../..
-LIBRARY=prepare-code
+LIBRARY=static-gc-pass
LOADABLE_MODULE = 1
include $(LEVEL)/Makefile.common
Copied: vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp (from r180443, vmkit/trunk/lib/prepare-code/StaticGCPass.cpp)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp?p2=vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp&p1=vmkit/trunk/lib/prepare-code/StaticGCPass.cpp&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
(empty)
Copied: vmkit/trunk/lib/static-gc-printer/Makefile (from r180443, vmkit/trunk/lib/prepare-code/Makefile)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-printer/Makefile?p2=vmkit/trunk/lib/static-gc-printer/Makefile&p1=vmkit/trunk/lib/prepare-code/Makefile&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
--- vmkit/trunk/lib/prepare-code/Makefile (original)
+++ vmkit/trunk/lib/static-gc-printer/Makefile Thu Apr 25 12:10:19 2013
@@ -9,7 +9,7 @@
LEVEL = ../..
-LIBRARY=prepare-code
+LIBRARY=static-gc-printer
LOADABLE_MODULE = 1
include $(LEVEL)/Makefile.common
Copied: vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp (from r180443, vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp?p2=vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp&p1=vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
(empty)
Modified: vmkit/trunk/tools/trainer/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/trainer/Makefile?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/tools/trainer/Makefile (original)
+++ vmkit/trunk/tools/trainer/Makefile Thu Apr 25 12:10:19 2013
@@ -21,7 +21,7 @@ ifndef VERBOSE
PRECOMPILER_OPT := > /dev/null
endif
-$(BUILD_DIR)/Precompiled.bc: $(BUILD_DIR)/HelloWorld.class $(LIB_DIR)/prepare-code$(SHLIBEXT) $(PRECOMPILER)
+$(BUILD_DIR)/Precompiled.bc: $(BUILD_DIR)/HelloWorld.class $(PRECOMPILER)
$(Echo) "Pre-compiling bootstrap code"
$(Verb) $(PRECOMPILER) -cp $(dir $<) $(basename $(notdir $<)) $(PRECOMPILER_OPT) && mv generated.bc $@
More information about the vmkit-commits
mailing list