# HG changeset patch # User Thomas Wuerthinger # Date 1363031731 -3600 # Node ID 169ec449974af55c81dd3a9df2c3c860cf756154 # Parent b89a97928e72a0fbd9a09c05694e465279fec452# Parent aadd8f02449a4f791ff673ab03a393aa023db33d Merge. diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Mar 11 20:55:31 2013 +0100 @@ -279,6 +279,11 @@ } @Override + public void emitOverflowCheckBranch(LabelRef destination, LIRFrameState info, boolean negated) { + append(new BranchOp(negated ? ConditionFlag.NoOverflow : ConditionFlag.Overflow, destination, info)); + } + + @Override public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info) { emitIntegerTest(left, right); append(new BranchOp(negated ? Condition.NE : Condition.EQ, label, info)); @@ -775,13 +780,6 @@ } @Override - public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason) { - LIRFrameState info = state(); - LabelRef stubEntry = createDeoptStub(action, reason, info); - append(new JumpOp(stubEntry, info)); - } - - @Override public void emitMembar(int barriers) { int necessaryBarriers = target.arch.requiredBarriers(barriers); if (target.isMP && necessaryBarriers != 0) { diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Mon Mar 11 20:55:31 2013 +0100 @@ -200,6 +200,11 @@ } @Override + public void emitOverflowCheckBranch(LabelRef label, LIRFrameState info, boolean negated) { + throw new InternalError("NYI"); + } + + @Override public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info) { throw new InternalError("NYI"); } @@ -350,7 +355,7 @@ @Override public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason) { - throw new InternalError("NYI"); + append(new ReturnOp(Value.ILLEGAL)); } @Override diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Mon Mar 11 20:55:31 2013 +0100 @@ -76,6 +76,12 @@ } @Override + public void emitOverflowCheckBranch(LabelRef label, LIRFrameState info, boolean negated) { + // SPARC: Auto-generated method stub + + } + + @Override public void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info) { // SPARC: Auto-generated method stub diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Mon Mar 11 20:55:31 2013 +0100 @@ -193,6 +193,8 @@ plan.runPhases(PhasePosition.LOW_LEVEL, graph); + new GuardLoweringPhase().apply(graph); + // Add safepoints to loops new SafepointInsertionPhase().apply(graph); diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Mon Mar 11 20:55:31 2013 +0100 @@ -641,6 +641,17 @@ } } + public void emitOverflowCheckBranch(LabelRef noOverflowBlock, LabelRef overflowBlock, LIRFrameState info) { + if (overflowBlock != null) { + emitOverflowCheckBranch(overflowBlock, info, false); + if (noOverflowBlock != null) { + emitJump(noOverflowBlock, null); + } + } else { + emitOverflowCheckBranch(noOverflowBlock, info, true); + } + } + public void emitIntegerTestBranch(IntegerTestNode test, LabelRef trueSuccessorBlock, LabelRef falseSuccessorBlock, LIRFrameState info) { if (falseSuccessorBlock != null) { emitIntegerTestBranch(operand(test.x()), operand(test.y()), true, falseSuccessorBlock, info); @@ -687,6 +698,8 @@ public abstract void emitCompareBranch(Value left, Value right, Condition cond, boolean unorderedIsTrue, LabelRef label, LIRFrameState info); + public abstract void emitOverflowCheckBranch(LabelRef label, LIRFrameState info, boolean negated); + public abstract void emitIntegerTestBranch(Value left, Value right, boolean negated, LabelRef label, LIRFrameState info); public abstract Variable emitConditionalMove(Value leftVal, Value right, Condition cond, boolean unorderedIsTrue, Value trueValue, Value falseValue); diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizeOp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizeOp.java Mon Mar 11 20:55:31 2013 +0100 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.amd64; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.code.RuntimeCallTarget.Descriptor; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.asm.amd64.*; +import com.oracle.graal.lir.*; +import com.oracle.graal.lir.LIRInstruction.Opcode; +import com.oracle.graal.lir.amd64.*; +import com.oracle.graal.lir.asm.*; + +@Opcode("DEOPT") +final class AMD64DeoptimizeOp extends AMD64LIRInstruction { + + public static final Descriptor DEOPTIMIZE = new Descriptor("deoptimize", true, void.class); + + private DeoptimizationAction action; + private DeoptimizationReason reason; + @State private LIRFrameState info; + + AMD64DeoptimizeOp(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info) { + this.action = action; + this.reason = reason; + this.info = info; + } + + @Override + public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { + Register scratch = tasm.frameMap.registerConfig.getScratchRegister(); + masm.movl(scratch, tasm.runtime.encodeDeoptActionAndReason(action, reason)); + AMD64Call.directCall(tasm, masm, tasm.runtime.lookupRuntimeCall(DEOPTIMIZE), info); + } +} diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Mon Mar 11 20:55:31 2013 +0100 @@ -182,6 +182,11 @@ emitMove(exceptionParameter, exception); append(new AMD64HotSpotUnwindOp(exceptionParameter)); } + + @Override + public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason) { + append(new AMD64DeoptimizeOp(action, reason, state())); + } } /** diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Mon Mar 11 20:55:31 2013 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.amd64.AMD64.*; -import static com.oracle.graal.compiler.amd64.AMD64DeoptimizationStub.*; import static com.oracle.graal.compiler.amd64.AMD64LIRGenerator.*; +import static com.oracle.graal.hotspot.amd64.AMD64DeoptimizeOp.*; import static com.oracle.graal.hotspot.nodes.IdentityHashCodeStubCall.*; import static com.oracle.graal.hotspot.nodes.MonitorEnterStubCall.*; import static com.oracle.graal.hotspot.nodes.MonitorExitStubCall.*; diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Mon Mar 11 20:55:31 2013 +0100 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.phases.common; + +import java.util.*; + +import com.oracle.graal.graph.*; +import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.cfg.*; +import com.oracle.graal.phases.*; +import com.oracle.graal.phases.schedule.*; + +public class GuardLoweringPhase extends Phase { + + @Override + protected void run(StructuredGraph graph) { + SchedulePhase schedule = new SchedulePhase(); + schedule.apply(graph); + + for (Block block : schedule.getCFG().getBlocks()) { + processBlock(block, schedule, graph); + } + } + + private static void processBlock(Block block, SchedulePhase schedule, StructuredGraph graph) { + List nodes = schedule.nodesFor(block); + FixedWithNextNode lastFixed = block.getBeginNode(); + BeginNode lastFastPath = null; + for (Node node : nodes) { + if (lastFastPath != null && node instanceof FixedNode) { + lastFastPath.setNext((FixedNode) node); + lastFastPath = null; + } + if (node instanceof FixedWithNextNode) { + lastFixed = (FixedWithNextNode) node; + } else if (node instanceof GuardNode) { + GuardNode guard = (GuardNode) node; + BeginNode fastPath = graph.add(new BeginNode()); + BeginNode trueSuccessor; + BeginNode falseSuccessor; + DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason())); + if (guard.negated()) { + trueSuccessor = BeginNode.begin(deopt); + falseSuccessor = fastPath; + } else { + trueSuccessor = fastPath; + falseSuccessor = BeginNode.begin(deopt); + } + IfNode ifNode = graph.add(new IfNode(guard.condition(), trueSuccessor, falseSuccessor, trueSuccessor == fastPath ? 1 : 0)); + guard.replaceAndDelete(fastPath); + lastFixed.setNext(ifNode); + lastFixed = fastPath; + lastFastPath = fastPath; + } + } + } +} diff -r b89a97928e72 -r 169ec449974a graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Mon Mar 11 20:55:05 2013 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Mon Mar 11 20:55:31 2013 +0100 @@ -45,7 +45,7 @@ /** * This closure iterates over all nodes of a scheduled graph (it expects a - * {@link SchedulingStrategy#EARLIEST} schedule) and keeps a list of "actuve" reads. Whenever it + * {@link SchedulingStrategy#EARLIEST} schedule) and keeps a list of "active" reads. Whenever it * encounters a read, it adds it to the active reads. Whenever it encounters a memory * checkpoint, it adds all reads that need to be committed before this checkpoint to the * "phantom" usages and inputs, so that the read is scheduled before the checkpoint afterwards. @@ -135,10 +135,6 @@ private final Map> phantomUsages = new IdentityHashMap<>(); private final Map> phantomInputs = new IdentityHashMap<>(); - public SchedulePhase() { - super("Schedule"); - } - @Override protected void run(StructuredGraph graph) { SchedulingStrategy strategy = GraalOptions.OptScheduleOutOfLoops ? SchedulingStrategy.LATEST_OUT_OF_LOOPS : SchedulingStrategy.LATEST; diff -r b89a97928e72 -r 169ec449974a make/Makefile --- a/make/Makefile Mon Mar 11 20:55:05 2013 +0100 +++ b/make/Makefile Mon Mar 11 20:55:31 2013 +0100 @@ -84,6 +84,9 @@ ALT_OUT= endif +# Directory for shared code (e.g. graal.jar) +SHARED_DIR=$(OUTPUTDIR)/shared + # Typical C1/C2 targets made available with this Makefile C1_VM_TARGETS=product1 fastdebug1 optimized1 jvmg1 C2_VM_TARGETS=product fastdebug optimized jvmg @@ -187,7 +190,7 @@ $(MAKE) VM_TARGET=$@ generic_buildgraal $(ALT_OUT) # Build compiler1 (client) rule, different for platforms -generic_build1: +generic_build1: buildshared $(MKDIR) -p $(OUTPUTDIR) ifeq ($(OSNAME),windows) ifeq ($(ARCH_DATA_MODEL), 32) @@ -208,7 +211,7 @@ endif # Build compiler2 (server) rule, different for platforms -generic_build2: +generic_build2: buildshared $(MKDIR) -p $(OUTPUTDIR) ifeq ($(OSNAME),windows) $(CD) $(OUTPUTDIR); \ @@ -257,12 +260,16 @@ @$(ECHO) "Error: trying to build a minimal target but JVM_VARIANT_MINIMAL1 is not true." endif -generic_buildgraal: +generic_buildgraal: buildshared $(MKDIR) -p $(OUTPUTDIR) $(CD) $(OUTPUTDIR); \ $(MAKE) -f $(ABS_OS_MAKEFILE) \ $(MAKE_ARGS) $(VM_TARGET) +# Builds code that can be shared among different build flavors +buildshared: + $(REMOTE) $(ANT) -f $(GAMMADIR)/make/build-graal.xml -Dgamma.dir=$(GAMMADIR) -Dshared.dir=$(SHARED_DIR) + # Export file rule generic_export: $(EXPORT_LIST) export_product: @@ -386,6 +393,7 @@ # Shared Library ifneq ($(OSNAME),windows) ifeq ($(JVM_VARIANT_SERVER), true) + # C2 $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX) $(install-file) $(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX) @@ -404,7 +412,27 @@ $(install-file) $(EXPORT_SERVER_DIR)/64/%.diz: $(C2_DIR)/%.diz $(install-file) - endif + + # Graal + $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(GRAAL_DIR)/%.$(LIBRARY_SUFFIX) + $(install-file) + $(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(GRAAL_DIR)/%.$(LIBRARY_SUFFIX) + $(install-file) + $(EXPORT_SERVER_DIR)/64/%.$(LIBRARY_SUFFIX): $(GRAAL_DIR)/%.$(LIBRARY_SUFFIX) + $(install-file) + $(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(GRAAL_DIR)/%.debuginfo + $(install-file) + $(EXPORT_SERVER_DIR)/%.debuginfo: $(GRAAL_DIR)/%.debuginfo + $(install-file) + $(EXPORT_SERVER_DIR)/64/%.debuginfo: $(GRAAL_DIR)/%.debuginfo + $(install-file) + $(EXPORT_JRE_LIB_ARCH_DIR)/%.diz: $(GRAAL_DIR)/%.diz + $(install-file) + $(EXPORT_SERVER_DIR)/%.diz: $(GRAAL_DIR)/%.diz + $(install-file) + $(EXPORT_SERVER_DIR)/64/%.diz: $(GRAAL_DIR)/%.diz + $(install-file) + endif ifeq ($(JVM_VARIANT_CLIENT), true) $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX) $(install-file) @@ -479,6 +507,10 @@ $(EXPORT_LIB_DIR)/%.jar: $(GEN_DIR)/%.jar $(install-file) +# Shared jar files +$(EXPORT_JRE_LIB_DIR)/%.jar: $(SHARED_DIR)/%.jar + $(install-file) + # Include files (jvmti.h, jvmticmlr.h, jni.h, $(JDK_INCLUDE_SUBDIR)/jni_md.h, jmm.h, jfr.h) $(EXPORT_INCLUDE_DIR)/%: $(GEN_DIR)/jvmtifiles/% $(install-file) @@ -521,6 +553,7 @@ # clobber clean: clean_build clean_export clean_jdk clean_build: + $(RM) -r $(SHARED_DIR) $(RM) -r $(C1_DIR) $(RM) -r $(C2_DIR) $(RM) -r $(ZERO_DIR) diff -r b89a97928e72 -r 169ec449974a make/bsd/makefiles/buildtree.make --- a/make/bsd/makefiles/buildtree.make Mon Mar 11 20:55:05 2013 +0100 +++ b/make/bsd/makefiles/buildtree.make Mon Mar 11 20:55:31 2013 +0100 @@ -354,7 +354,7 @@ $(BUILDTREE_COMMENT); \ [ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \ { \ - echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \ + echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:$(OUTPUTDIR)/shared/graal.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \ } | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \ echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \ echo "export JAVA_HOME CLASSPATH HOTSPOT_BUILD_USER"; \ diff -r b89a97928e72 -r 169ec449974a make/build-graal.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/make/build-graal.xml Mon Mar 11 20:55:31 2013 +0100 @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r b89a97928e72 -r 169ec449974a make/defs.make --- a/make/defs.make Mon Mar 11 20:55:05 2013 +0100 +++ b/make/defs.make Mon Mar 11 20:55:31 2013 +0100 @@ -236,6 +236,33 @@ JDK_IMAGE_DIR=$(ALT_JDK_IMAGE_DIR) endif +# Utilities ant +ifeq ($(PLATFORM), windows) + ifeq ($(ANT_HOME),) + ANT_HOME := $(call DirExists,$(JDK_DEVTOOLS_DIR)/share/ant/latest,,) + endif +endif + +# There are few problems with ant we need to workaround: +# 1) ant is using temporary directory java.io.tmpdir +# However, this directory is not unique enough and two separate ant processes +# can easily end up using the exact same temp directory. This may lead to weird build failures +# To workaround this we will define tmp dir explicitly +# 2) ant attempts to detect JDK location based on java.exe location +# This is fragile as developer may have JRE first on the PATH. +# To workaround this we will specify JAVA_HOME explicitly +# 3) Sometimes we need to run ant with the boot jdk, sometimes with the import +# jdk, sometimes with the jdk we are building (see deploy repo). + +ANT_TMPDIR = $(OUTPUTDIR)/tmp +ANT_WORKAROUNDS = ANT_OPTS=-Djava.io.tmpdir='$(ANT_TMPDIR)' + +ifeq ($(ANT_HOME),) + ANT = $(ANT_WORKAROUNDS) JAVA_HOME='$(BOOTDIR)' ant +else + ANT = $(ANT_WORKAROUNDS) JAVA_HOME='$(BOOTDIR)' $(ANT_HOME)/bin/ant +endif + # The platform dependent defs.make defines platform specific variable such # as ARCH, EXPORT_LIST etc. We must place the include here after BOOTDIR is defined. include $(GAMMADIR)/make/$(OSNAME)/makefiles/defs.make @@ -336,6 +363,7 @@ EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jni.h EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jmm.h +EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/graal.jar # By default, run Queens test after building TEST_IN_BUILD ?= true diff -r b89a97928e72 -r 169ec449974a make/linux/makefiles/buildtree.make --- a/make/linux/makefiles/buildtree.make Mon Mar 11 20:55:05 2013 +0100 +++ b/make/linux/makefiles/buildtree.make Mon Mar 11 20:55:31 2013 +0100 @@ -347,7 +347,7 @@ $(BUILDTREE_COMMENT); \ [ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \ { \ - echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \ + echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:$(OUTPUTDIR)/shared/graal.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \ } | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \ echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \ echo "export JAVA_HOME CLASSPATH HOTSPOT_BUILD_USER"; \ diff -r b89a97928e72 -r 169ec449974a make/solaris/makefiles/buildtree.make --- a/make/solaris/makefiles/buildtree.make Mon Mar 11 20:55:05 2013 +0100 +++ b/make/solaris/makefiles/buildtree.make Mon Mar 11 20:55:31 2013 +0100 @@ -336,7 +336,7 @@ $(BUILDTREE_COMMENT); \ [ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \ { \ - echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \ + echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:$(OUTPUTDIR)/shared/graal.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \ } | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \ echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \ echo "export JAVA_HOME LD_LIBRARY_PATH CLASSPATH HOTSPOT_BUILD_USER"; \ diff -r b89a97928e72 -r 169ec449974a mx/commands.py --- a/mx/commands.py Mon Mar 11 20:55:05 2013 +0100 +++ b/mx/commands.py Mon Mar 11 20:55:31 2013 +0100 @@ -784,11 +784,22 @@ if mx.eclipseformat(['-e', eclipse_exe]) != 0: t.abort('Formatter modified files - run "mx eclipseformat", check in changes and repush') tasks.append(t.stop()) + + t = Task('Canonicalization Check') + mx.log(time.strftime('%d %b %Y %H:%M:%S - Ensuring mx/projects files are canonicalized...')) + if mx.canonicalizeprojects([]) != 0: + t.abort('Rerun "mx canonicalizeprojects" and check-in the modified mx/projects files.') + tasks.append(t.stop()) t = Task('BuildJava') build(['--no-native', '--jdt-warning-as-error']) tasks.append(t.stop()) + t = Task('Checkstyle') + if mx.checkstyle([]) != 0: + t.abort('Checkstyle warnings were found') + tasks.append(t.stop()) + if exists('jacoco.exec'): os.unlink('jacoco.exec') @@ -796,10 +807,9 @@ _jacoco = 'append' else: _jacoco = 'off' - t = Task('BuildHotSpotGraal: fastdebug,product') - buildvms(['--vms', 'graal', '--builds', 'fastdebug,product']) + buildvms(['--vms', 'graal,server', '--builds', 'fastdebug,product']) tasks.append(t.stop()) _vmbuild = 'fastdebug' @@ -808,9 +818,12 @@ tasks.append(t.stop()) _vmbuild = 'product' - t = Task('UnitTests:product') + originalVm = _vm + _vm = 'server' # hosted mode + t = Task('UnitTests:hosted-product') unittest([]) tasks.append(t.stop()) + _vm = originalVm for vmbuild in ['fastdebug', 'product']: for test in sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild): @@ -824,17 +837,6 @@ _jacoco = 'off' - t = Task('Checkstyle') - if mx.checkstyle([]) != 0: - t.abort('Checkstyle warnings were found') - tasks.append(t.stop()) - - t = Task('Canonicalization Check') - mx.log(time.strftime('%d %b %Y %H:%M:%S - Ensuring mx/projects files are canonicalized...')) - if mx.canonicalizeprojects([]) != 0: - t.abort('Rerun "mx canonicalizeprojects" and check-in the modified mx/projects files.') - tasks.append(t.stop()) - t = Task('CleanAndBuildGraalVisualizer') mx.run(['ant', '-f', join(_graal_home, 'visualizer', 'build.xml'), '-q', 'clean', 'build']) tasks.append(t.stop()) diff -r b89a97928e72 -r 169ec449974a mx/sanitycheck.py --- a/mx/sanitycheck.py Mon Mar 11 20:55:05 2013 +0100 +++ b/mx/sanitycheck.py Mon Mar 11 20:55:31 2013 +0100 @@ -270,9 +270,12 @@ if len(valueMaps) == 0: return False - assert len(valueMaps) == 1, 'Test matchers should not return more than one record' - - record = valueMaps[0] + record = {} + for valueMap in valueMaps: + for key, value in valueMap.items(): + if record.has_key(key) and record[key] != value: + mx.abort('Inconsistant values returned by test machers : ' + str(valueMaps)) + record[key] = value jvmErrorFile = record.get('jvmError') if jvmErrorFile: diff -r b89a97928e72 -r 169ec449974a src/share/vm/runtime/arguments.cpp --- a/src/share/vm/runtime/arguments.cpp Mon Mar 11 20:55:05 2013 +0100 +++ b/src/share/vm/runtime/arguments.cpp Mon Mar 11 20:55:31 2013 +0100 @@ -2222,20 +2222,6 @@ FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal); } -#ifdef GRAAL - { - // Append graal.jar to bootclasspath if enabled - const char* jar_file = "graal.jar"; - const size_t path_len = strlen(get_meta_index_dir()) + 1 + strlen(jar_file); - char* path = NEW_C_HEAP_ARRAY(char, path_len, mtInternal); - strcpy(path, get_meta_index_dir()); - strcat(path, jar_file); - scp.add_suffix(path); - scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, path, mtInternal); - } -#endif - // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) result = parse_java_options_environment_variable(&scp, &scp_assembly_required); if (result != JNI_OK) { diff -r b89a97928e72 -r 169ec449974a src/share/vm/runtime/os.cpp --- a/src/share/vm/runtime/os.cpp Mon Mar 11 20:55:05 2013 +0100 +++ b/src/share/vm/runtime/os.cpp Mon Mar 11 20:55:31 2013 +0100 @@ -1149,6 +1149,9 @@ #ifdef __APPLE__ "%/lib/JObjC.jar:" #endif +#ifdef GRAAL + "%/lib/graal.jar:" +#endif "%/classes"; char* sysclasspath = format_boot_path(classpath_format, home, home_len, fileSep, pathSep); if (sysclasspath == NULL) return false;