--- a/hotspot/make/solaris/makefiles/dtrace.make Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/make/solaris/makefiles/dtrace.make Fri Aug 09 13:19:00 2013 -0700
@@ -283,9 +283,9 @@
$(QUIETLY) $(DTRACE_PROG) $(DTRACE_OPTS) -C -I. -G -xlazyload -o $@ -s $(DTRACE).d \
$(DTraced_Files) ||\
STATUS=$$?;\
- if [ x"$$STATUS" = x"1" -a \
- x`uname -r` = x"5.10" -a \
- x`uname -p` = x"sparc" ]; then\
+ if [ x"$$STATUS" = x"1" ]; then \
+ if [ x`uname -r` = x"5.10" -a \
+ x`uname -p` = x"sparc" ]; then\
echo "*****************************************************************";\
echo "* If you are building server compiler, and the error message is ";\
echo "* \"incorrect ELF machine type...\", you have run into solaris bug ";\
@@ -294,6 +294,20 @@
echo "* environment variable HOTSPOT_DISABLE_DTRACE_PROBES to disable ";\
echo "* dtrace probes for this build.";\
echo "*****************************************************************";\
+ elif [ x`uname -r` = x"5.10" ]; then\
+ echo "*****************************************************************";\
+ echo "* If you are seeing 'syntax error near \"umpiconninfo_t\"' on Solaris";\
+ echo "* 10, try doing 'cd /usr/lib/dtrace && gzip mpi.d' as root, ";\
+ echo "* or set the environment variable HOTSPOT_DISABLE_DTRACE_PROBES";\
+ echo "* to disable dtrace probes for this build.";\
+ echo "*****************************************************************";\
+ else \
+ echo "*****************************************************************";\
+ echo "* If you cannot fix dtrace build issues, try to ";\
+ echo "* set the environment variable HOTSPOT_DISABLE_DTRACE_PROBES";\
+ echo "* to disable dtrace probes for this build.";\
+ echo "*****************************************************************";\
+ fi; \
fi;\
exit $$STATUS
# Since some DTraced_Files are in LIBJVM.o and they are touched by this
--- a/hotspot/make/windows/create.bat Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/make/windows/create.bat Fri Aug 09 13:19:00 2013 -0700
@@ -1,6 +1,6 @@
@echo off
REM
-REM Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+REM Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
REM DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
REM
REM This code is free software; you can redistribute it and/or modify it
@@ -148,7 +148,7 @@
REM This is now safe to do.
:copyfiles
-for /D %%i in (compiler1, compiler2, tiered, core) do (
+for /D %%i in (compiler1, compiler2, tiered ) do (
if NOT EXIST %HotSpotBuildSpace%\%%i\generated mkdir %HotSpotBuildSpace%\%%i\generated
copy %HotSpotWorkSpace%\make\windows\projectfiles\%%i\* %HotSpotBuildSpace%\%%i\generated > NUL
)
@@ -156,7 +156,7 @@
REM force regneration of ProjectFile
if exist %ProjectFile% del %ProjectFile%
-for /D %%i in (compiler1, compiler2, tiered, core) do (
+for /D %%i in (compiler1, compiler2, tiered ) do (
echo -- %%i --
echo # Generated file! > %HotSpotBuildSpace%\%%i\local.make
echo # Changing a variable below and then deleting %ProjectFile% will cause >> %HotSpotBuildSpace%\%%i\local.make
--- a/hotspot/make/windows/create_obj_files.sh Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/make/windows/create_obj_files.sh Fri Aug 09 13:19:00 2013 -0700
@@ -73,19 +73,17 @@
BASE_PATHS="${BASE_PATHS} ${GENERATED}/jvmtifiles ${GENERATED}/tracefiles"
-if [ -d "${ALTSRC}/share/vm/jfr" ]; then
- BASE_PATHS="${BASE_PATHS} ${ALTSRC}/share/vm/jfr"
+if [ -d "${ALTSRC}/share/vm/jfr/buffers" ]; then
BASE_PATHS="${BASE_PATHS} ${ALTSRC}/share/vm/jfr/buffers"
fi
BASE_PATHS="${BASE_PATHS} ${COMMONSRC}/share/vm/prims/wbtestmethods"
-CORE_PATHS="${BASE_PATHS}"
# shared is already in BASE_PATHS. Should add vm/memory but that one is also in BASE_PATHS.
if [ -d "${ALTSRC}/share/vm/gc_implementation" ]; then
- CORE_PATHS="${CORE_PATHS} `$FIND ${ALTSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
+ BASE_PATHS="${BASE_PATHS} `$FIND ${ALTSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
fi
-CORE_PATHS="${CORE_PATHS} `$FIND ${COMMONSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
+BASE_PATHS="${BASE_PATHS} `$FIND ${COMMONSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
if [ -d "${ALTSRC}/share/vm/c1" ]; then
COMPILER1_PATHS="${ALTSRC}/share/vm/c1"
@@ -104,12 +102,11 @@
# Include dirs per type.
case "${TYPE}" in
- "core") Src_Dirs="${CORE_PATHS}" ;;
- "compiler1") Src_Dirs="${CORE_PATHS} ${COMPILER1_PATHS}" ;;
- "compiler2") Src_Dirs="${CORE_PATHS} ${COMPILER2_PATHS}" ;;
- "tiered") Src_Dirs="${CORE_PATHS} ${COMPILER1_PATHS} ${COMPILER2_PATHS}" ;;
- "zero") Src_Dirs="${CORE_PATHS}" ;;
- "shark") Src_Dirs="${CORE_PATHS}" ;;
+ "compiler1") Src_Dirs="${BASE_PATHS} ${COMPILER1_PATHS}" ;;
+ "compiler2") Src_Dirs="${BASE_PATHS} ${COMPILER2_PATHS}" ;;
+ "tiered") Src_Dirs="${BASE_PATHS} ${COMPILER1_PATHS} ${COMPILER2_PATHS}" ;;
+ "zero") Src_Dirs="${BASE_PATHS}" ;;
+ "shark") Src_Dirs="${BASE_PATHS}" ;;
esac
COMPILER2_SPECIFIC_FILES="opto libadt bcEscapeAnalyzer.cpp c2_* runtime_*"
@@ -122,7 +119,6 @@
# Exclude per type.
case "${TYPE}" in
- "core") Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${COMPILER1_SPECIFIC_FILES} ${COMPILER2_SPECIFIC_FILES} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES} ciTypeFlow.cpp" ;;
"compiler1") Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${COMPILER2_SPECIFIC_FILES} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES} ciTypeFlow.cpp" ;;
"compiler2") Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${COMPILER1_SPECIFIC_FILES} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES}" ;;
"tiered") Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES}" ;;
@@ -149,9 +145,17 @@
Src_Files="${Src_Files}`findsrc ${e}` "
done
-Obj_Files=
+Obj_Files=" "
for e in ${Src_Files}; do
- Obj_Files="${Obj_Files}${e%\.[!.]*}.obj "
+ o="${e%\.[!.]*}.obj"
+ set +e
+ chk=`expr "${Obj_Files}" : ".* $o"`
+ set -e
+ if [ "$chk" != 0 ]; then
+ echo "# INFO: skipping duplicate $o"
+ continue
+ fi
+ Obj_Files="${Obj_Files}$o "
done
echo Obj_Files=${Obj_Files}
--- a/hotspot/make/windows/makefiles/projectcreator.make Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/make/windows/makefiles/projectcreator.make Fri Aug 09 13:19:00 2013 -0700
@@ -44,10 +44,11 @@
# This is only used internally
ProjectCreatorIncludesPRIVATE=\
- -relativeInclude src\closed\share\vm \
- -relativeInclude src\closed\os\windows\vm \
- -relativeInclude src\closed\os_cpu\windows_$(Platform_arch)\vm \
- -relativeInclude src\closed\cpu\$(Platform_arch)\vm \
+ -relativeAltSrcInclude src\closed \
+ -altRelativeInclude share\vm \
+ -altRelativeInclude os\windows\vm \
+ -altRelativeInclude os_cpu\windows_$(Platform_arch)\vm \
+ -altRelativeInclude cpu\$(Platform_arch)\vm \
-relativeInclude src\share\vm \
-relativeInclude src\share\vm\precompiled \
-relativeInclude src\share\vm\prims\wbtestmethods \
@@ -91,7 +92,7 @@
-disablePch getThread_windows_$(Platform_arch).cpp \
-disablePch_compiler2 opcodes.cpp
-# Common options for the IDE builds for core, c1, and c2
+# Common options for the IDE builds for c1, and c2
ProjectCreatorIDEOptions=\
$(ProjectCreatorIDEOptions) \
-sourceBase $(HOTSPOTWORKSPACE) \
@@ -158,18 +159,10 @@
-ignoreFile_TARGET $(Platform_arch_model).ad
##################################################
-# Without compiler(core) specific options
-##################################################
-ProjectCreatorIDEOptions=$(ProjectCreatorIDEOptions) \
-$(ProjectCreatorIDEOptionsIgnoreCompiler1:TARGET=core) \
-$(ProjectCreatorIDEOptionsIgnoreCompiler2:TARGET=core)
-
-##################################################
# Client(C1) compiler specific options
##################################################
ProjectCreatorIDEOptions=$(ProjectCreatorIDEOptions) \
-define_compiler1 COMPILER1 \
- -ignorePath_compiler1 core \
$(ProjectCreatorIDEOptionsIgnoreCompiler2:TARGET=compiler1)
##################################################
@@ -178,7 +171,6 @@
#NOTE! This list must be kept in sync with GENERATED_NAMES in adlc.make.
ProjectCreatorIDEOptions=$(ProjectCreatorIDEOptions) \
-define_compiler2 COMPILER2 \
- -ignorePath_compiler2 core \
-additionalFile_compiler2 $(Platform_arch_model).ad \
-additionalFile_compiler2 ad_$(Platform_arch_model).cpp \
-additionalFile_compiler2 ad_$(Platform_arch_model).hpp \
--- a/hotspot/make/windows/makefiles/trace.make Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/make/windows/makefiles/trace.make Fri Aug 09 13:19:00 2013 -0700
@@ -90,25 +90,25 @@
!if "$(OPENJDK)" == "true"
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
- @echo Generating $@
+ @echo Generating OpenJDK $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
!else
$(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
- @echo Generating $@
+ @echo Generating AltSrc $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
$(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
- @echo Generating $@
+ @echo Generating AltSrc $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceProducer.xsl -OUT $(TraceOutDir)/traceProducer.cpp
$(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
- @echo Generating $@
+ @echo Generating AltSrc $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceRequestables.xsl -OUT $(TraceOutDir)/traceRequestables.hpp
$(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
- @echo Generating $@
+ @echo Generating AltSrc $@
@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventControl.xsl -OUT $(TraceOutDir)/traceEventControl.hpp
!endif
--- a/hotspot/make/windows/makefiles/vm.make Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/make/windows/makefiles/vm.make Fri Aug 09 13:19:00 2013 -0700
@@ -36,10 +36,6 @@
CXX_FLAGS=$(CXX_FLAGS) /D "ASSERT"
!endif
-!if "$(Variant)" == "core"
-# No need to define anything, CORE is defined as !COMPILER1 && !COMPILER2
-!endif
-
!if "$(Variant)" == "compiler1"
CXX_FLAGS=$(CXX_FLAGS) /D "COMPILER1"
!endif
--- a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -1887,6 +1887,27 @@
if (ProfileInterpreter) {
__ set_method_data_pointer_for_bcp();
}
+
+#if INCLUDE_JVMTI
+ if (EnableInvokeDynamic) {
+ Label L_done;
+
+ __ ldub(Address(Lbcp, 0), G1_scratch); // Load current bytecode
+ __ cmp_and_br_short(G1_scratch, Bytecodes::_invokestatic, Assembler::notEqual, Assembler::pn, L_done);
+
+ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
+ // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
+
+ __ call_VM(G1_scratch, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), I0, Lmethod, Lbcp);
+
+ __ br_null(G1_scratch, false, Assembler::pn, L_done);
+ __ delayed()->nop();
+
+ __ st_ptr(G1_scratch, Lesp, wordSize);
+ __ bind(L_done);
+ }
+#endif // INCLUDE_JVMTI
+
// Resume bytecode interpretation at the current bcp
__ dispatch_next(vtos);
// end of JVMTI PopFrame support
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -1920,6 +1920,29 @@
__ get_thread(thread);
__ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive);
+#if INCLUDE_JVMTI
+ if (EnableInvokeDynamic) {
+ Label L_done;
+ const Register local0 = rdi;
+
+ __ cmpb(Address(rsi, 0), Bytecodes::_invokestatic);
+ __ jcc(Assembler::notEqual, L_done);
+
+ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
+ // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
+
+ __ get_method(rdx);
+ __ movptr(rax, Address(local0, 0));
+ __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, rsi);
+
+ __ testptr(rax, rax);
+ __ jcc(Assembler::zero, L_done);
+
+ __ movptr(Address(rbx, 0), rax);
+ __ bind(L_done);
+ }
+#endif // INCLUDE_JVMTI
+
__ dispatch_next(vtos);
// end of PopFrame support
--- a/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -1929,6 +1929,29 @@
__ movl(Address(r15_thread, JavaThread::popframe_condition_offset()),
JavaThread::popframe_inactive);
+#if INCLUDE_JVMTI
+ if (EnableInvokeDynamic) {
+ Label L_done;
+ const Register local0 = r14;
+
+ __ cmpb(Address(r13, 0), Bytecodes::_invokestatic);
+ __ jcc(Assembler::notEqual, L_done);
+
+ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
+ // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
+
+ __ get_method(rdx);
+ __ movptr(rax, Address(local0, 0));
+ __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, r13);
+
+ __ testptr(rax, rax);
+ __ jcc(Assembler::zero, L_done);
+
+ __ movptr(Address(rbx, 0), rax);
+ __ bind(L_done);
+ }
+#endif // INCLUDE_JVMTI
+
__ dispatch_next(vtos);
// end of PopFrame support
--- a/hotspot/src/cpu/zero/vm/entryFrame_zero.hpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/cpu/zero/vm/entryFrame_zero.hpp Fri Aug 09 13:19:00 2013 -0700
@@ -58,8 +58,8 @@
JavaCallWrapper* call_wrapper,
TRAPS);
public:
- JavaCallWrapper *call_wrapper() const {
- return (JavaCallWrapper *) value_of_word(call_wrapper_off);
+ JavaCallWrapper **call_wrapper() const {
+ return (JavaCallWrapper **) addr_of_word(call_wrapper_off);
}
public:
--- a/hotspot/src/cpu/zero/vm/frame_zero.inline.hpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/cpu/zero/vm/frame_zero.inline.hpp Fri Aug 09 13:19:00 2013 -0700
@@ -141,7 +141,7 @@
return fp();
}
-inline JavaCallWrapper* frame::entry_frame_call_wrapper() const {
+inline JavaCallWrapper** frame::entry_frame_call_wrapper_addr() const {
return zero_entryframe()->call_wrapper();
}
--- a/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/cpu/zero/vm/stubGenerator_zero.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -176,6 +176,19 @@
StubRoutines::_oop_arraycopy;
}
+ static int SafeFetch32(int *adr, int errValue) {
+ int value = errValue;
+ value = *adr;
+ return value;
+ }
+
+ static intptr_t SafeFetchN(intptr_t *adr, intptr_t errValue) {
+ intptr_t value = errValue;
+ value = *adr;
+ return value;
+ }
+
+
void generate_initial() {
// Generates all stubs and initializes the entry points
@@ -225,6 +238,15 @@
// arraycopy stubs used by compilers
generate_arraycopy_stubs();
+
+ // Safefetch stubs.
+ StubRoutines::_safefetch32_entry = CAST_FROM_FN_PTR(address, StubGenerator::SafeFetch32);
+ StubRoutines::_safefetch32_fault_pc = NULL;
+ StubRoutines::_safefetch32_continuation_pc = NULL;
+
+ StubRoutines::_safefetchN_entry = CAST_FROM_FN_PTR(address, StubGenerator::SafeFetchN);
+ StubRoutines::_safefetchN_fault_pc = NULL;
+ StubRoutines::_safefetchN_continuation_pc = NULL;
}
public:
--- a/hotspot/src/os/bsd/vm/attachListener_bsd.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/os/bsd/vm/attachListener_bsd.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -445,14 +445,14 @@
void AttachListener::vm_start() {
char fn[UNIX_PATH_MAX];
- struct stat64 st;
+ struct stat st;
int ret;
int n = snprintf(fn, UNIX_PATH_MAX, "%s/.java_pid%d",
os::get_temp_directory(), os::current_process_id());
assert(n < (int)UNIX_PATH_MAX, "java_pid file name buffer overflow");
- RESTARTABLE(::stat64(fn, &st), ret);
+ RESTARTABLE(::stat(fn, &st), ret);
if (ret == 0) {
ret = ::unlink(fn);
if (ret == -1) {
--- a/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -410,16 +410,6 @@
int SpinPause() {
}
- int SafeFetch32(int *adr, int errValue) {
- int value = errValue;
- value = *adr;
- return value;
- }
- intptr_t SafeFetchN(intptr_t *adr, intptr_t errValue) {
- intptr_t value = errValue;
- value = *adr;
- return value;
- }
void _Copy_conjoint_jshorts_atomic(jshort* from, jshort* to, size_t count) {
if (from > to) {
--- a/hotspot/src/share/tools/ProjectCreator/BuildConfig.java Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/BuildConfig.java Fri Aug 09 13:19:00 2013 -0700
@@ -142,6 +142,69 @@
return rv;
}
+ // Returns true if the specified path refers to a relative alternate
+ // source file. RelativeAltSrcInclude is usually "src\closed".
+ public static boolean matchesRelativeAltSrcInclude(String path) {
+ String relativeAltSrcInclude =
+ getFieldString(null, "RelativeAltSrcInclude");
+ Vector<String> v = getFieldVector(null, "AltRelativeInclude");
+ for (String pathPart : v) {
+ if (path.contains(relativeAltSrcInclude + Util.sep + pathPart)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Returns the relative alternate source file for the specified path.
+ // Null is returned if the specified path does not have a matching
+ // alternate source file.
+ public static String getMatchingRelativeAltSrcFile(String path) {
+ Vector<String> v = getFieldVector(null, "RelativeAltSrcFileList");
+ if (v == null) {
+ return null;
+ }
+ for (String pathPart : v) {
+ if (path.endsWith(pathPart)) {
+ String relativeAltSrcInclude =
+ getFieldString(null, "RelativeAltSrcInclude");
+ return relativeAltSrcInclude + Util.sep + pathPart;
+ }
+ }
+ return null;
+ }
+
+ // Returns true if the specified path has a matching alternate
+ // source file.
+ public static boolean matchesRelativeAltSrcFile(String path) {
+ return getMatchingRelativeAltSrcFile(path) != null;
+ }
+
+ // Track the specified alternate source file. The source file is
+ // tracked without the leading .*<sep><RelativeAltSrcFileList><sep>
+ // part to make matching regular source files easier.
+ public static void trackRelativeAltSrcFile(String path) {
+ String pattern = getFieldString(null, "RelativeAltSrcInclude") +
+ Util.sep;
+ int altSrcInd = path.indexOf(pattern);
+ if (altSrcInd == -1) {
+ // not an AltSrc path
+ return;
+ }
+
+ altSrcInd += pattern.length();
+ if (altSrcInd >= path.length()) {
+ // not a valid AltSrc path
+ return;
+ }
+
+ String altSrcFile = path.substring(altSrcInd);
+ Vector v = getFieldVector(null, "RelativeAltSrcFileList");
+ if (v == null || !v.contains(altSrcFile)) {
+ addFieldVector(null, "RelativeAltSrcFileList", altSrcFile);
+ }
+ }
+
void addTo(Hashtable ht, String key, String value) {
ht.put(expandFormat(key), expandFormat(value));
}
@@ -272,8 +335,19 @@
private Vector getSourceIncludes() {
Vector<String> rv = new Vector<String>();
+ String sourceBase = getFieldString(null, "SourceBase");
+
+ // add relative alternate source include values:
+ String relativeAltSrcInclude =
+ getFieldString(null, "RelativeAltSrcInclude");
+ Vector<String> asri = new Vector<String>();
+ collectRelevantVectors(asri, "AltRelativeInclude");
+ for (String f : asri) {
+ rv.add(sourceBase + Util.sep + relativeAltSrcInclude +
+ Util.sep + f);
+ }
+
Vector<String> ri = new Vector<String>();
- String sourceBase = getFieldString(null, "SourceBase");
collectRelevantVectors(ri, "RelativeInclude");
for (String f : ri) {
rv.add(sourceBase + Util.sep + f);
@@ -541,35 +615,6 @@
}
}
-class CoreDebugConfig extends GenericDebugNonKernelConfig {
- String getOptFlag() {
- return getCI().getNoOptFlag();
- }
-
- CoreDebugConfig() {
- initNames("core", "debug", "jvm.dll");
- init(getIncludes(), getDefines());
- }
-}
-
-class CoreFastDebugConfig extends GenericDebugNonKernelConfig {
- String getOptFlag() {
- return getCI().getOptFlag();
- }
-
- CoreFastDebugConfig() {
- initNames("core", "fastdebug", "jvm.dll");
- init(getIncludes(), getDefines());
- }
-}
-
-class CoreProductConfig extends ProductConfig {
- CoreProductConfig() {
- initNames("core", "product", "jvm.dll");
- init(getIncludes(), getDefines());
- }
-}
-
abstract class CompilerInterface {
abstract Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir);
--- a/hotspot/src/share/tools/ProjectCreator/FileTreeCreatorVC10.java Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/FileTreeCreatorVC10.java Fri Aug 09 13:19:00 2013 -0700
@@ -1,3 +1,27 @@
+/*
+ * Copyright (c) 2012, 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.
+ *
+ */
+
import static java.nio.file.FileVisitResult.CONTINUE;
import java.io.IOException;
@@ -21,6 +45,8 @@
boolean usePch = false;
boolean disablePch = false;
boolean useIgnore = false;
+ boolean isAltSrc = false; // only needed as a debugging crumb
+ boolean isReplacedByAltSrc = false;
String fileName = file.getFileName().toString();
// TODO hideFile
@@ -30,6 +56,26 @@
usePch = true;
}
+ String fileLoc = vcProjLocation.relativize(file).toString();
+
+ // isAltSrc and isReplacedByAltSrc applies to all configs for a file
+ if (BuildConfig.matchesRelativeAltSrcInclude(
+ file.toAbsolutePath().toString())) {
+ // current file is an alternate source file so track it
+ isAltSrc = true;
+ BuildConfig.trackRelativeAltSrcFile(
+ file.toAbsolutePath().toString());
+ } else if (BuildConfig.matchesRelativeAltSrcFile(
+ file.toAbsolutePath().toString())) {
+ // current file is a regular file that matches an alternate
+ // source file so yack about replacing the regular file
+ isReplacedByAltSrc = true;
+ System.out.println("INFO: alternate source file '" +
+ BuildConfig.getMatchingRelativeAltSrcFile(
+ file.toAbsolutePath().toString()) +
+ "' replaces '" + fileLoc + "'");
+ }
+
for (BuildConfig cfg : allConfigs) {
if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
useIgnore = true;
@@ -58,9 +104,8 @@
}
String tagName = wg.getFileTagFromSuffix(fileName);
- String fileLoc = vcProjLocation.relativize(file).toString();
- if (!useIgnore && !disablePch && !usePch) {
+ if (!useIgnore && !disablePch && !usePch && !isReplacedByAltSrc) {
wg.tag(tagName, new String[] { "Include", fileLoc});
} else {
wg.startTag(
@@ -78,6 +123,11 @@
if (disablePch) {
wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
}
+ if (isReplacedByAltSrc) {
+ wg.tagData("ExcludedFromBuild", "true", "Condition",
+ "'$(Configuration)|$(Platform)'=='" +
+ cfg.get("Name") + "'");
+ }
}
wg.endTag();
}
@@ -137,6 +187,4 @@
public void writeFileTree() throws IOException {
Files.walkFileTree(this.startDir, this);
}
-
-
- }
\ No newline at end of file
+}
--- a/hotspot/src/share/tools/ProjectCreator/ProjectCreator.java Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/ProjectCreator.java Fri Aug 09 13:19:00 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -39,10 +39,15 @@
+ "jvm.dll; no trailing slash>");
System.err.println(" If any of the above are specified, "
+ "they must all be.");
+ System.err.println(" Note: if '-altRelativeInclude' option below is "
+ + "used, then the '-relativeAltSrcInclude' option must be used "
+ + "to specify the alternate source dir, e.g., 'src\\closed'");
System.err.println(" Additional, optional arguments, which can be "
+ "specified multiple times:");
System.err.println(" -absoluteInclude <string containing absolute "
+ "path to include directory>");
+ System.err.println(" -altRelativeInclude <string containing "
+ + "alternate include directory relative to -envVar>");
System.err.println(" -relativeInclude <string containing include "
+ "directory relative to -envVar>");
System.err.println(" -define <preprocessor flag to be #defined "
--- a/hotspot/src/share/tools/ProjectCreator/WinGammaPlatform.java Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatform.java Fri Aug 09 13:19:00 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -140,10 +140,17 @@
"already exist>");
System.err.println(" If any of the above are specified, "+
"they must all be.");
+ System.err.println(" Note: if '-altRelativeInclude' option below " +
+ "is used, then the '-relativeAltSrcInclude' " +
+ "option must be used to specify the alternate " +
+ "source dir, e.g., 'src\\closed'");
System.err.println(" Additional, optional arguments, which can be " +
"specified multiple times:");
System.err.println(" -absoluteInclude <string containing absolute " +
"path to include directory>");
+ System.err.println(" -altRelativeInclude <string containing " +
+ "alternate include directory relative to " +
+ "-sourceBase>");
System.err.println(" -relativeInclude <string containing include " +
"directory relative to -sourceBase>");
System.err.println(" -define <preprocessor flag to be #defined " +
@@ -343,6 +350,12 @@
HsArgHandler.VECTOR
),
+ new HsArgRule("-altRelativeInclude",
+ "AltRelativeInclude",
+ null,
+ HsArgHandler.VECTOR
+ ),
+
new HsArgRule("-relativeInclude",
"RelativeInclude",
null,
@@ -355,6 +368,12 @@
HsArgHandler.VECTOR
),
+ new HsArgRule("-relativeAltSrcInclude",
+ "RelativeAltSrcInclude",
+ null,
+ HsArgHandler.STRING
+ ),
+
new HsArgRule("-relativeSrcInclude",
"RelativeSrcInclude",
null,
@@ -560,10 +579,6 @@
allConfigs.add(new TieredFastDebugConfig());
allConfigs.add(new TieredProductConfig());
- allConfigs.add(new CoreDebugConfig());
- allConfigs.add(new CoreFastDebugConfig());
- allConfigs.add(new CoreProductConfig());
-
return allConfigs;
}
--- a/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java Fri Aug 09 13:19:00 2013 -0700
@@ -1,3 +1,27 @@
+/*
+ * Copyright (c) 2011, 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.
+ *
+ */
+
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -24,7 +48,7 @@
public void writeProjectFile(String projectFileName, String projectName,
Vector<BuildConfig> allConfigs) throws IOException {
System.out.println();
- System.out.print(" Writing .vcxproj file: " + projectFileName);
+ System.out.println(" Writing .vcxproj file: " + projectFileName);
String projDir = Util.normalize(new File(projectFileName).getParent());
@@ -114,7 +138,7 @@
endTag();
printWriter.close();
- System.out.println(" Done.");
+ System.out.println(" Done writing .vcxproj file.");
writeFilterFile(projectFileName, projectName, allConfigs, projDir);
writeUserFile(projectFileName, allConfigs);
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -2557,6 +2557,26 @@
*offset = value;
}
+// Support for java_lang_invoke_DirectMethodHandle
+
+int java_lang_invoke_DirectMethodHandle::_member_offset;
+
+oop java_lang_invoke_DirectMethodHandle::member(oop dmh) {
+ oop member_name = NULL;
+ bool is_dmh = dmh->is_oop() && java_lang_invoke_DirectMethodHandle::is_instance(dmh);
+ assert(is_dmh, "a DirectMethodHandle oop is expected");
+ if (is_dmh) {
+ member_name = dmh->obj_field(member_offset_in_bytes());
+ }
+ return member_name;
+}
+
+void java_lang_invoke_DirectMethodHandle::compute_offsets() {
+ Klass* klass_oop = SystemDictionary::DirectMethodHandle_klass();
+ if (klass_oop != NULL && EnableInvokeDynamic) {
+ compute_offset(_member_offset, klass_oop, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
+ }
+}
// Support for java_lang_invoke_MethodHandle
@@ -3205,6 +3225,7 @@
java_lang_ThreadGroup::compute_offsets();
if (EnableInvokeDynamic) {
java_lang_invoke_MethodHandle::compute_offsets();
+ java_lang_invoke_DirectMethodHandle::compute_offsets();
java_lang_invoke_MemberName::compute_offsets();
java_lang_invoke_LambdaForm::compute_offsets();
java_lang_invoke_MethodType::compute_offsets();
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Fri Aug 09 13:19:00 2013 -0700
@@ -976,6 +976,32 @@
static int form_offset_in_bytes() { return _form_offset; }
};
+// Interface to java.lang.invoke.DirectMethodHandle objects
+
+class java_lang_invoke_DirectMethodHandle: AllStatic {
+ friend class JavaClasses;
+
+ private:
+ static int _member_offset; // the MemberName of this DMH
+
+ static void compute_offsets();
+
+ public:
+ // Accessors
+ static oop member(oop mh);
+
+ // Testers
+ static bool is_subclass(Klass* klass) {
+ return klass->is_subclass_of(SystemDictionary::DirectMethodHandle_klass());
+ }
+ static bool is_instance(oop obj) {
+ return obj != NULL && is_subclass(obj->klass());
+ }
+
+ // Accessors for code generation:
+ static int member_offset_in_bytes() { return _member_offset; }
+};
+
// Interface to java.lang.invoke.LambdaForm objects
// (These are a private interface for managing adapter code generation.)
--- a/hotspot/src/share/vm/classfile/systemDictionary.hpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp Fri Aug 09 13:19:00 2013 -0700
@@ -151,6 +151,7 @@
do_klass(reflect_CallerSensitive_klass, sun_reflect_CallerSensitive, Opt ) \
\
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
+ do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle, Opt ) \
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292 ) \
do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \
do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Fri Aug 09 13:19:00 2013 -0700
@@ -255,6 +255,7 @@
/* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \
template(java_lang_invoke_ConstantCallSite, "java/lang/invoke/ConstantCallSite") \
+ template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \
template(java_lang_invoke_MutableCallSite, "java/lang/invoke/MutableCallSite") \
template(java_lang_invoke_VolatileCallSite, "java/lang/invoke/VolatileCallSite") \
template(java_lang_invoke_MethodHandle, "java/lang/invoke/MethodHandle") \
@@ -352,6 +353,7 @@
template(thread_id_name, "tid") \
template(newInstance0_name, "newInstance0") \
template(limit_name, "limit") \
+ template(member_name, "member") \
template(forName_name, "forName") \
template(forName0_name, "forName0") \
template(isJavaIdentifierStart_name, "isJavaIdentifierStart") \
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Fri Aug 09 13:19:00 2013 -0700
@@ -1209,3 +1209,26 @@
size_of_arguments * Interpreter::stackElementSize);
IRT_END
#endif
+
+#if INCLUDE_JVMTI
+// This is a support of the JVMTI PopFrame interface.
+// Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
+// and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
+// The dmh argument is a reference to a DirectMethoHandle that has a member name field.
+IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh,
+ Method* method, address bcp))
+ Bytecodes::Code code = Bytecodes::code_at(method, bcp);
+ if (code != Bytecodes::_invokestatic) {
+ return;
+ }
+ ConstantPool* cpool = method->constants();
+ int cp_index = Bytes::get_native_u2(bcp + 1) + ConstantPool::CPCACHE_INDEX_TAG;
+ Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
+ Symbol* mname = cpool->name_ref_at(cp_index);
+
+ if (MethodHandles::has_member_arg(cname, mname)) {
+ oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh);
+ thread->set_vm_result(member_name);
+ }
+IRT_END
+#endif // INCLUDE_JVMTI
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp Fri Aug 09 13:19:00 2013 -0700
@@ -95,6 +95,9 @@
static void create_exception(JavaThread* thread, char* name, char* message);
static void create_klass_exception(JavaThread* thread, char* name, oopDesc* obj);
static address exception_handler_for_exception(JavaThread* thread, oopDesc* exception);
+#if INCLUDE_JVMTI
+ static void member_name_arg_or_null(JavaThread* thread, address dmh, Method* m, address bcp);
+#endif
static void throw_pending_exception(JavaThread* thread);
// Statics & fields
--- a/hotspot/test/runtime/7107135/Test7107135.sh Fri Aug 09 01:39:11 2013 -0700
+++ b/hotspot/test/runtime/7107135/Test7107135.sh Fri Aug 09 13:19:00 2013 -0700
@@ -53,9 +53,6 @@
fi
;;
*)
- NULL=NUL
- PS=";"
- FS="\\"
echo "Test passed; only valid for Linux"
exit 0;
;;
@@ -87,14 +84,16 @@
echo
echo Test changing of stack protection:
-echo ${TESTJAVA}${FS}bin${FS}java -cp ${THIS_DIR} Test test-rw
+echo ${TESTJAVA}${FS}bin${FS}java -cp ${THIS_DIR} Test test-rwx
${TESTJAVA}${FS}bin${FS}java -cp ${THIS_DIR} Test test-rwx
+JAVA_RETVAL=$?
-if [ "$?" == "0" ]
+if [ "$JAVA_RETVAL" == "0" ]
then
echo
echo ${TESTJAVA}${FS}bin${FS}java -cp ${THIS_DIR} TestMT test-rwx
${TESTJAVA}${FS}bin${FS}java -cp ${THIS_DIR} TestMT test-rwx
+ JAVA_RETVAL=$?
fi
-exit $?
+exit $JAVA_RETVAL