# HG changeset patch # User ihse # Date 1521066387 -3600 # Node ID b74ed86a116a3215bb08d60607e3387c1ccb2d96 # Parent a7655cb387f9f9f5f3573ce310b3c37e0b155cfd# Parent 176b3da8ce6112ae8c53e21b5543dacbe87a81fa Merge from default diff -r a7655cb387f9 -r b74ed86a116a make/UpdateX11Wrappers.gmk --- a/make/UpdateX11Wrappers.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/UpdateX11Wrappers.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -78,7 +78,7 @@ EXTRA_FILES := $(X11WRAPPERS_OUTPUT)/src/data_generator.c, \ CFLAGS := $(X_CFLAGS) $(DATA_GENERATOR_INCLUDES) $(CFLAGS_JDKEXE), \ LDFLAGS := $(LDFLAGS_JDKEXE), \ - LIBS := $(X_LIBS) -lc, \ + LIBS := $(X_LIBS), \ OBJECT_DIR := $(X11WRAPPERS_OUTPUT)/objs, \ )) diff -r a7655cb387f9 -r b74ed86a116a make/autoconf/libraries.m4 --- a/make/autoconf/libraries.m4 Wed Mar 14 23:15:29 2018 +0100 +++ b/make/autoconf/libraries.m4 Wed Mar 14 23:26:27 2018 +0100 @@ -103,16 +103,15 @@ LIB_SETUP_SOLARIS_STLPORT if test "x$TOOLCHAIN_TYPE" = xsolstudio; then - ALWAYS_LIBS="-lc" + GLOBAL_LIBS="-lc" else - ALWAYS_LIBS="" + GLOBAL_LIBS="" fi BASIC_JDKLIB_LIBS="" if test "x$TOOLCHAIN_TYPE" != xmicrosoft; then BASIC_JDKLIB_LIBS="-ljava -ljvm" fi - BASIC_JDKLIB_LIBS="$BASIC_JDKLIB_LIBS $ALWAYS_LIBS" # Math library if test "x$OPENJDK_TARGET_OS" != xsolaris; then @@ -150,7 +149,6 @@ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib \ wsock32.lib winmm.lib version.lib psapi.lib" fi - BASIC_JVM_LIBS="$BASIC_JVM_LIBS $ALWAYS_LIBS" JDKLIB_LIBS="$BASIC_JDKLIB_LIBS" JDKEXE_LIBS="" @@ -163,6 +161,7 @@ AC_SUBST(JVM_LIBS) AC_SUBST(OPENJDK_BUILD_JDKLIB_LIBS) AC_SUBST(OPENJDK_BUILD_JVM_LIBS) + AC_SUBST(GLOBAL_LIBS) ]) ################################################################################ diff -r a7655cb387f9 -r b74ed86a116a make/autoconf/spec.gmk.in --- a/make/autoconf/spec.gmk.in Wed Mar 14 23:15:29 2018 +0100 +++ b/make/autoconf/spec.gmk.in Wed Mar 14 23:26:27 2018 +0100 @@ -467,6 +467,7 @@ # LDFLAGS used to link the jdk native libraries (C-code) LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@ JDKLIB_LIBS:=@JDKLIB_LIBS@ +GLOBAL_LIBS:=@GLOBAL_LIBS@ # LDFLAGS used to link the jdk native launchers (C-code) LDFLAGS_JDKEXE:=@LDFLAGS_JDKEXE@ diff -r a7655cb387f9 -r b74ed86a116a make/common/NativeCompilation.gmk --- a/make/common/NativeCompilation.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/common/NativeCompilation.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -870,7 +870,7 @@ endif $1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \ - $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_CREATE_DEBUGINFO_CMDS) \ + $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_CREATE_DEBUGINFO_CMDS) \ $$($1_STRIP_CMD) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps) @@ -924,8 +924,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows) $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ - $(LD_OUT_OPTION)$$@ $$($1_LD_OBJ_ARG) $$($1_RES) $$($1_LIBS) \ - $$($1_EXTRA_LIBS)) \ + $(LD_OUT_OPTION)$$@ $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \ + $$($1_LIBS) $$($1_EXTRA_LIBS)) \ | $(GREP) -v "^ Creating library .*\.lib and object .*\.exp" || \ test "$$$$?" = "1" ; \ $$($1_CREATE_DEBUGINFO_CMDS) @@ -934,8 +934,8 @@ $$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \ $$(if $$($1_LINK_OBJS_RELATIVE), $$(CD) $$(OUTPUTDIR) ; ) \ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ - $(LD_OUT_OPTION)$$@ $$($1_LD_OBJ_ARG) $$($1_RES) $$($1_LIBS) \ - $$($1_EXTRA_LIBS)) ; \ + $(LD_OUT_OPTION)$$@ $$($1_LD_OBJ_ARG) $$($1_RES) $$(GLOBAL_LIBS) \ + $$($1_LIBS) $$($1_EXTRA_LIBS)) ; \ $$($1_CREATE_DEBUGINFO_CMDS) $$($1_STRIP_CMD) endif @@ -972,7 +972,7 @@ ifeq ($$($1_TYPE), EXECUTABLE) # A executable binary has been specified, setup the target for it. $1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \ - $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_MT) \ + $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_MT) \ $$($1_CODESIGN) $$($1_CREATE_DEBUGINFO_CMDS) $$($1_MANIFEST_VERSION) \ $$($1_STRIP_CMD) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ @@ -991,7 +991,7 @@ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ $(EXE_OUT_OPTION)$$($1_TARGET) \ $$($1_ALL_OBJS) $$($1_RES) \ - $$($1_LIBS) $$($1_EXTRA_LIBS)) + $$(GLOBAL_LIBS) $$($1_LIBS) $$($1_EXTRA_LIBS)) ifeq ($(OPENJDK_TARGET_OS), windows) ifneq ($$($1_MANIFEST), ) $$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1 diff -r a7655cb387f9 -r b74ed86a116a make/conf/jib-profiles.js --- a/make/conf/jib-profiles.js Wed Mar 14 23:15:29 2018 +0100 +++ b/make/conf/jib-profiles.js Wed Mar 14 23:26:27 2018 +0100 @@ -528,6 +528,32 @@ profiles[debugName] = concatObjects(profiles[name], common.slowdebug_profile_base); }); + // Generate testmake profiles for the main profile of each build host + // platform. This profile only runs the makefile tests. + // Ant is needed to run the idea project generator test. + var testmakeBase = { + dependencies: [ "ant" ], + environment: { + "ANT_HOME": input.get("ant", "install_path") + "/apache-ant-1.7.1" + } + }; + [ "linux-x64", "macosx-x64", "solaris-sparcv9", "solaris-x64", "windows-x64"] + .forEach(function (name) { + var maketestName = name + "-testmake"; + profiles[maketestName] = concatObjects(profiles[name], testmakeBase); + profiles[maketestName].default_make_targets = [ "test-make" ]; + }); + // Generate cmp-baseline profiles for each main profile. This profile does + // a compare build run with no changes to verify that the compare script + // has a clean baseline + common.main_profile_names.forEach(function (name) { + var cmpBaselineName = name + "-cmp-baseline"; + profiles[cmpBaselineName] = clone(profiles[name]); + // Only compare the images target. This should pressumably be expanded + // to include more build targets when possible. + profiles[cmpBaselineName].default_make_targets = [ "images" ]; + profiles[cmpBaselineName].make_args = [ "COMPARE_BUILD=CONF=" ]; + }); // Profiles for building the zero jvm variant. These are used for verification // in JPRT. @@ -913,7 +939,15 @@ environment_name: "JIB_JAR", environment_value: input.get("jib", "install_path") + "/jib-3.0-SNAPSHOT-distribution/lib/jib-3.0-SNAPSHOT.jar" - } + }, + + ant: { + organization: common.organization, + ext: "zip", + revision: "1.7.1+1.0", + configure_args: "", + }, + }; // Need to add a value for the Visual Studio tools variable to make diff -r a7655cb387f9 -r b74ed86a116a make/hotspot/lib/CompileDtracePostJvm.gmk --- a/make/hotspot/lib/CompileDtracePostJvm.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/hotspot/lib/CompileDtracePostJvm.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -175,7 +175,7 @@ SRC := $(TOPDIR)/src/java.base/solaris/native/libjvm_dtrace, \ CFLAGS := -m64 -G -mt -KPIC, \ LDFLAGS := -m64 -mt -xnolib $(SHARED_LIBRARY_FLAGS), \ - LIBS := $(LIBDL) -lc -lthread -ldoor, \ + LIBS := $(LIBDL) -lthread -ldoor, \ MAPFILE := $(TOPDIR)/make/mapfiles/libjvm_dtrace/mapfile-vers, \ OBJECT_DIR := $(LIBJVM_DTRACE_OUTPUTDIR)/objs, \ )) @@ -191,7 +191,6 @@ CFLAGS := -I$(JVM_VARIANT_OUTPUTDIR)/gensrc -I$(DTRACE_SUPPORT_DIR) \ -m64 -G -mt -KPIC, \ LDFLAGS := -m64 -mt -xnolib $(SHARED_LIBRARY_FLAGS), \ - LIBS := -lc, \ MAPFILE := $(TOPDIR)/make/mapfiles/libjvm_db/mapfile-vers, \ OBJECT_DIR := $(LIBJVM_DB_OUTPUTDIR)/objs, \ )) diff -r a7655cb387f9 -r b74ed86a116a make/launcher/Launcher-jdk.pack.gmk --- a/make/launcher/Launcher-jdk.pack.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/launcher/Launcher-jdk.pack.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -89,7 +89,6 @@ $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS := $(UNPACKEXE_LIBS) $(LIBCXX), \ - LIBS_solaris := -lc, \ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/unpackexe, \ MANIFEST := $(TOPDIR)/src/jdk.pack/windows/native/unpack200/unpack200_proto.exe.manifest, \ MANIFEST_VERSION := $(VERSION_NUMBER_FOUR_POSITIONS), \ diff -r a7655cb387f9 -r b74ed86a116a make/launcher/LauncherCommon.gmk --- a/make/launcher/LauncherCommon.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/launcher/LauncherCommon.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -197,8 +197,8 @@ MAPFILE := $$($1_MAPFILE), \ LIBS := $(JDKEXE_LIBS) $$($1_LIBS), \ LIBS_unix := $$($1_LIBS_unix), \ - LIBS_linux := -lpthread -ljli $(LIBDL) -lc, \ - LIBS_solaris := -ljli -lthread $(LIBDL) -lc, \ + LIBS_linux := -lpthread -ljli $(LIBDL), \ + LIBS_solaris := -ljli -lthread $(LIBDL), \ LIBS_windows := $$($1_WINDOWS_JLI_LIB) \ $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib advapi32.lib \ $$($1_LIBS_windows), \ diff -r a7655cb387f9 -r b74ed86a116a make/lib/Awt2dLibraries.gmk --- a/make/lib/Awt2dLibraries.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Awt2dLibraries.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -60,7 +60,6 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS := $(BUILD_LIBMLIB_LDLIBS) \ $(JDKLIB_LIBS), \ - LIBS_solaris := -lc, \ )) $(BUILD_LIBMLIB_IMAGE): $(call FindLib, java.base, java) @@ -111,7 +110,7 @@ MAPFILE := $(BUILD_LIBMLIB_IMAGE_MAPFILE), \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LIBS := -ljava -ljvm -lc $(BUILD_LIBMLIB_LDLIBS), \ + LIBS := -ljava -ljvm $(BUILD_LIBMLIB_LDLIBS), \ )) $(BUILD_LIBMLIB_IMAGE_V): $(call FindLib, java.base, java) @@ -240,7 +239,7 @@ -delayload:comctl32.dll -delayload:shlwapi.dll, \ LIBS_unix := -ljvm -ljava $(LIBM), \ LIBS_linux := $(LIBDL), \ - LIBS_solaris := $(LIBDL) -lc, \ + LIBS_solaris := $(LIBDL), \ LIBS_aix := $(LIBDL),\ LIBS_macosx := -lmlib_image \ -framework Cocoa \ @@ -319,7 +318,7 @@ endif endif - LIBAWT_XAWT_LIBS := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm -lc + LIBAWT_XAWT_LIBS := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm ifeq ($(OPENJDK_TARGET_OS), linux) LIBAWT_XAWT_LIBS += -lpthread @@ -414,7 +413,6 @@ LIBS_unix := -lawt -ljvm -ljava $(LCMS_LIBS), \ LIBS_linux := $(LIBM), \ LIBS_macosx := $(LIBM), \ - LIBS_solaris := -lc, \ LIBS_aix := $(LIBM),\ LIBS_windows := $(WIN_AWT_LIB) $(WIN_JAVA_LIB), \ )) @@ -540,7 +538,7 @@ REORDER := $(LIBAWT_HEADLESS_REORDER), \ LIBS_unix := -lawt -ljvm -ljava, \ LIBS_linux := $(LIBM) $(LIBDL), \ - LIBS_solaris := $(LIBM) $(LIBDL) $(LIBCXX) -lc, \ + LIBS_solaris := $(LIBM) $(LIBDL) $(LIBCXX), \ )) # AIX warning explanation: @@ -580,7 +578,6 @@ DISABLED_WARNINGS_microsoft := 4267 2220 4244, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LIBS_solaris := -lc, \ )) TARGETS += $(BUILD_LIBFREETYPE) @@ -692,8 +689,6 @@ LDFLAGS_macosx := -undefined dynamic_lookup, \ LIBS := $(BUILD_LIBFONTMANAGER_FONTLIB), \ LIBS_unix := -lawt -ljava -ljvm $(LIBM) $(LIBCXX), \ - LIBS_linux := -lc, \ - LIBS_solaris := -lc, \ LIBS_aix := -lawt_headless,\ LIBS_windows := $(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \ $(WIN_AWT_LIB), \ diff -r a7655cb387f9 -r b74ed86a116a make/lib/CoreLibraries.gmk --- a/make/lib/CoreLibraries.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/CoreLibraries.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -118,7 +118,7 @@ MAPFILE := $(TOPDIR)/make/mapfiles/libverify/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LIBS_unix := -ljvm -lc, \ + LIBS_unix := -ljvm, \ LIBS_windows := jvm.lib, \ REORDER := $(BUILD_LIBVERIFY_REORDER), \ )) @@ -169,7 +169,7 @@ -export:getErrorString -delayload:shell32.dll, \ LIBS_unix := -ljvm -lverify, \ LIBS_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \ - LIBS_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc, \ + LIBS_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM), \ LIBS_aix := $(LIBDL) $(BUILD_LIBFDLIBM) $(LIBM),\ LIBS_macosx := -lfdlibm \ -framework CoreFoundation \ @@ -225,7 +225,6 @@ -export:ZIP_ReadEntry -export:ZIP_GetNextEntry \ -export:ZIP_InflateFully -export:ZIP_CRC32 -export:ZIP_FreeEntry, \ LIBS_unix := -ljvm -ljava $(LIBZ_LIBS), \ - LIBS_solaris := -lc, \ LIBS_windows := jvm.lib $(WIN_JAVA_LIB), \ )) @@ -261,7 +260,6 @@ -export:JIMAGE_FindResource -export:JIMAGE_GetResource \ -export:JIMAGE_ResourceIterator -export:JIMAGE_ResourcePath, \ LIBS_unix := -ljvm -ldl $(LIBCXX), \ - LIBS_solaris := -lc, \ LIBS_macosx := -lc++, \ LIBS_windows := jvm.lib, \ )) @@ -369,8 +367,8 @@ -export:JLI_AddArgsFromEnvVar \ -export:JLI_GetAppArgIndex, \ LIBS_unix := $(LIBZ_LIBS), \ - LIBS_linux := $(LIBDL) -lc -lpthread, \ - LIBS_solaris := $(LIBDL) -lc, \ + LIBS_linux := $(LIBDL) -lpthread, \ + LIBS_solaris := $(LIBDL), \ LIBS_aix := $(LIBDL),\ LIBS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \ LIBS_windows := advapi32.lib comctl32.lib user32.lib, \ diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-java.prefs.gmk --- a/make/lib/Lib-java.prefs.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-java.prefs.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -44,7 +44,7 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS_unix := -ljvm, \ LIBS_linux := -ljava, \ - LIBS_solaris := -ljava -lc, \ + LIBS_solaris := -ljava, \ LIBS_aix := -ljava, \ LIBS_macosx := -framework CoreFoundation -framework Foundation, \ LIBS_windows := advapi32.lib jvm.lib $(WIN_JAVA_LIB), \ diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-java.security.jgss.gmk --- a/make/lib/Lib-java.security.jgss.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-java.security.jgss.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -43,7 +43,6 @@ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS := $(LIBDL), \ - LIBS_solaris := -lc, \ )) TARGETS += $(BUILD_LIBJ2GSS) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-java.smartcardio.gmk --- a/make/lib/Lib-java.smartcardio.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-java.smartcardio.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -43,7 +43,6 @@ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS_unix := $(LIBDL), \ - LIBS_solaris := -lc, \ LIBS_windows := winscard.lib, \ )) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.crypto.cryptoki.gmk --- a/make/lib/Lib-jdk.crypto.cryptoki.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.crypto.cryptoki.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -41,7 +41,6 @@ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS_unix := $(LIBDL), \ - LIBS_solaris := -lc, \ )) TARGETS += $(BUILD_LIBJ2PKCS11) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.crypto.ec.gmk --- a/make/lib/Lib-jdk.crypto.ec.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.crypto.ec.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -59,8 +59,6 @@ LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK), \ LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS := $(LIBCXX), \ - LIBS_linux := -lc, \ - LIBS_solaris := -lc, \ )) TARGETS += $(BUILD_LIBSUNEC) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.crypto.ucrypto.gmk --- a/make/lib/Lib-jdk.crypto.ucrypto.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.crypto.ucrypto.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -40,7 +40,6 @@ MAPFILE := $(TOPDIR)/make/mapfiles/libj2ucrypto/mapfile-vers, \ LDFLAGS := $(LDFLAGS_JDKLIB), \ LIBS := $(LIBDL), \ - LIBS_solaris := -lc, \ )) $(BUILD_LIBJ2UCRYPTO): $(BUILD_LIBJAVA) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.hotspot.agent.gmk --- a/make/lib/Lib-jdk.hotspot.agent.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.hotspot.agent.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -59,7 +59,7 @@ SA_CFLAGS := $(CFLAGS_JDKLIB) SA_CXXFLAGS := $(CXXFLAGS_JDKLIB) SA_LDFLAGS := -mt $(LDFLAGS_CXX_JDK) - SA_LIBS := -ldl -ldemangle -lthread -lc -lproc + SA_LIBS := -ldl -ldemangle -lthread -lproc else ifeq ($(OPENJDK_TARGET_OS), macosx) SA_EXCLUDE_FILES := BsdDebuggerLocal.c ps_proc.c salibelf.c StubDebuggerLocal.c diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.jdwp.agent.gmk --- a/make/lib/Lib-jdk.jdwp.agent.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.jdwp.agent.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -47,7 +47,7 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_windows := -export:jdwpTransport_OnLoad, \ LIBS_linux := -lpthread, \ - LIBS_solaris := -lnsl -lsocket -lc, \ + LIBS_solaris := -lnsl -lsocket, \ LIBS_windows := $(JDKLIB_LIBS) ws2_32.lib, \ )) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.net.gmk --- a/make/lib/Lib-jdk.net.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.net.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -37,7 +37,7 @@ MAPFILE := $(TOPDIR)/make/mapfiles/libextnet/mapfile-solaris, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LIBS := -lsocket -lc -ljava, \ + LIBS := -lsocket -ljava, \ )) $(BUILD_LIBEXTNET): $(call FindLib, java.base, java) @@ -56,7 +56,7 @@ MAPFILE := $(TOPDIR)/make/mapfiles/libextnet/mapfile-linux, \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LIBS := -ljvm -ljava -lc, \ + LIBS := -ljvm -ljava, \ )) $(BUILD_LIBEXTNET): $(call FindLib, java.base, java) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.pack.gmk --- a/make/lib/Lib-jdk.pack.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.pack.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -44,7 +44,7 @@ LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_windows := -map:$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/unpack.map -debug, \ - LIBS_unix := -ljvm $(LIBCXX) -ljava -lc, \ + LIBS_unix := -ljvm $(LIBCXX) -ljava, \ LIBS_windows := jvm.lib $(WIN_JAVA_LIB), \ )) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.sctp.gmk --- a/make/lib/Lib-jdk.sctp.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.sctp.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -46,7 +46,7 @@ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS_unix := -lnio -lnet -ljava -ljvm, \ LIBS_linux := -lpthread $(LIBDL), \ - LIBS_solaris := -lsocket -lc, \ + LIBS_solaris := -lsocket, \ )) TARGETS += $(BUILD_LIBSCTP) diff -r a7655cb387f9 -r b74ed86a116a make/lib/Lib-jdk.security.auth.gmk --- a/make/lib/Lib-jdk.security.auth.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/Lib-jdk.security.auth.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -46,7 +46,6 @@ MAPFILE := $(LIBJAAS_MAPFILE), \ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LIBS_solaris := -lc, \ LIBS_windows := netapi32.lib user32.lib mpr.lib advapi32.lib $(JDKLIB_LIBS), \ )) diff -r a7655cb387f9 -r b74ed86a116a make/lib/NetworkingLibraries.gmk --- a/make/lib/NetworkingLibraries.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/NetworkingLibraries.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -41,7 +41,7 @@ LDFLAGS_windows := -delayload:secur32.dll -delayload:iphlpapi.dll, \ LIBS_unix := -ljvm -ljava, \ LIBS_linux := $(LIBDL) -lpthread, \ - LIBS_solaris := -lnsl -lsocket $(LIBDL) -lc, \ + LIBS_solaris := -lnsl -lsocket $(LIBDL), \ LIBS_aix := $(LIBDL),\ LIBS_windows := ws2_32.lib jvm.lib secur32.lib iphlpapi.lib winhttp.lib \ delayimp.lib $(WIN_JAVA_LIB) advapi32.lib, \ diff -r a7655cb387f9 -r b74ed86a116a make/lib/NioLibraries.gmk --- a/make/lib/NioLibraries.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/NioLibraries.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -70,7 +70,7 @@ LIBS_unix := -ljava -lnet, \ LIBS_linux := -lpthread $(LIBDL), \ LIBS_solaris := -ljvm -lsocket -lposix4 $(LIBDL) \ - -lsendfile -lc, \ + -lsendfile, \ LIBS_aix := $(LIBDL), \ LIBS_macosx := \ -framework CoreFoundation -framework CoreServices, \ diff -r a7655cb387f9 -r b74ed86a116a make/lib/SoundLibraries.gmk --- a/make/lib/SoundLibraries.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/lib/SoundLibraries.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -127,7 +127,6 @@ LDFLAGS := $(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LIBS_unix := -ljava -ljvm, \ - LIBS_solaris := -lc, \ LIBS_macosx := -framework CoreAudio -framework CoreFoundation \ -framework CoreServices -framework AudioUnit $(LIBCXX) \ -framework CoreMIDI -framework AudioToolbox, \ diff -r a7655cb387f9 -r b74ed86a116a make/test/JtregNativeHotspot.gmk --- a/make/test/JtregNativeHotspot.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/test/JtregNativeHotspot.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -99,29 +99,6 @@ $(TOPDIR)/test/hotspot/jtreg/runtime/StackGuardPages endif -ifeq ($(TOOLCHAIN_TYPE), solstudio) - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_liboverflow := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libSimpleClassFileLoadHook := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libCanGenerateAllClassHook := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libGetOwnedMonitorInfoTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libGetOwnedMonitorStackDepthInfoTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libGetNamedModuleTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libIsModifiableModuleTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleReadsTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleExportsAndOpensTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libAddModuleUsesAndProvidesTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAClassFileLoadHook := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAClassLoadPrepare := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMAAThreadStart := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libAllowedFunctions := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libRedefineDoubleDelete := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libHandshakeTransitionTest := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libHasNoEntryPoint := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libReturnError := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libCNLookUp := -lc - BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libTestCheckedEnsureLocalCapacity := -lc -endif - ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rw := -z noexecstack BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack diff -r a7655cb387f9 -r b74ed86a116a make/test/JtregNativeJdk.gmk --- a/make/test/JtregNativeJdk.gmk Wed Mar 14 23:15:29 2018 +0100 +++ b/make/test/JtregNativeJdk.gmk Wed Mar 14 23:26:27 2018 +0100 @@ -49,8 +49,8 @@ # ifneq ($(OPENJDK_TARGET_OS), windows) - BUILD_JDK_JTREG_NATIVE_SRC += $(TOPDIR)/test/jdk/java/nio/channels/FileChannel/directio - BUILD_JDK_JTREG_NATIVE_SRC += $(TOPDIR)/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel + BUILD_JDK_JTREG_NATIVE_SRC += $(TOPDIR)/test/jdk/java/nio/channels/FileChannel/directio + BUILD_JDK_JTREG_NATIVE_SRC += $(TOPDIR)/test/jdk/java/nio/channels/spi/SelectorProvider/inheritedChannel endif BUILD_JDK_JTREG_OUTPUT_DIR := $(OUTPUTDIR)/support/test/jdk/jtreg/native @@ -58,19 +58,16 @@ BUILD_JDK_JTREG_IMAGE_DIR := $(TEST_IMAGE_DIR)/jdk/jtreg ifeq ($(OPENJDK_TARGET_OS), windows) - WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib - BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := $(WIN_LIB_JAVA) -else ifeq ($(OPENJDK_TARGET_OS), linux) - BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava - BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava + WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib + BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := $(WIN_LIB_JAVA) +else + BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava + BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava + ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -else ifeq ($(OPENJDK_TARGET_OS), solaris) - BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava -lc - BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava -lc - BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava -lc -else - BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava - BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava + else ifeq ($(OPENJDK_TARGET_OS), solaris) + BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava + endif endif $(eval $(call SetupTestFilesCompilation, BUILD_JDK_JTREG_LIBRARIES, \ diff -r a7655cb387f9 -r b74ed86a116a src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java --- a/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java Wed Mar 14 23:26:27 2018 +0100 @@ -104,10 +104,10 @@ * * @param lookup the lookup context describing the class performing the * operation (normally stacked by the JVM) + * @param name the name of the constant to return, which must exactly match + * an enum constant in the specified type. * @param type the {@code Class} object describing the enum type for which * a constant is to be returned - * @param name the name of the constant to return, which must exactly match - * an enum constant in the specified type. * @param The enum type for which a constant value is to be returned * @return the enum constant of the specified enum type with the * specified name @@ -208,20 +208,25 @@ /** * Returns the result of invoking a method handle with the provided * arguments. + *

+ * This method behaves as if the method handle to be invoked is the result + * of adapting the given method handle, via {@link MethodHandle#asType}, to + * adjust the return type to the desired type. * * @param lookup unused * @param name unused - * @param type the type of the value to be returned, which must be + * @param type the desired type of the value to be returned, which must be * compatible with the return type of the method handle * @param handle the method handle to be invoked * @param args the arguments to pass to the method handle, as if with * {@link MethodHandle#invokeWithArguments}. Each argument may be * {@code null}. * @return the result of invoking the method handle - * @throws WrongMethodTypeException if the handle's return type cannot be - * adjusted to the desired type - * @throws ClassCastException if an argument cannot be converted by - * reference casting + * @throws WrongMethodTypeException if the handle's method type cannot be + * adjusted to take the given number of arguments, or if the handle's return + * type cannot be adjusted to the desired type + * @throws ClassCastException if an argument or the result produced by + * invoking the handle cannot be converted by reference casting * @throws Throwable anything thrown by the method handle invocation */ public static Object invoke(MethodHandles.Lookup lookup, String name, Class type, diff -r a7655cb387f9 -r b74ed86a116a src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java --- a/src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java Wed Mar 14 23:26:27 2018 +0100 @@ -133,7 +133,7 @@ } static byte[] generateInvokersHolderClassBytes(String className, - MethodType[] methodTypes) { + MethodType[] invokerMethodTypes, MethodType[] callSiteMethodTypes) { HashSet dedupSet = new HashSet<>(); ArrayList forms = new ArrayList<>(); @@ -144,17 +144,33 @@ MethodTypeForm.LF_GEN_LINKER, MethodTypeForm.LF_GEN_INVOKER }; - for (int i = 0; i < methodTypes.length; i++) { + + for (int i = 0; i < invokerMethodTypes.length; i++) { // generate methods representing invokers of the specified type - if (dedupSet.add(methodTypes[i])) { + if (dedupSet.add(invokerMethodTypes[i])) { for (int type : types) { - LambdaForm invokerForm = Invokers.invokeHandleForm(methodTypes[i], + LambdaForm invokerForm = Invokers.invokeHandleForm(invokerMethodTypes[i], /*customized*/false, type); forms.add(invokerForm); names.add(invokerForm.kind.defaultLambdaName); } } } + + dedupSet = new HashSet<>(); + for (int i = 0; i < callSiteMethodTypes.length; i++) { + // generate methods representing invokers of the specified type + if (dedupSet.add(callSiteMethodTypes[i])) { + LambdaForm callSiteForm = Invokers.callSiteForm(callSiteMethodTypes[i], true); + forms.add(callSiteForm); + names.add(callSiteForm.kind.defaultLambdaName); + + LambdaForm methodHandleForm = Invokers.callSiteForm(callSiteMethodTypes[i], false); + forms.add(methodHandleForm); + names.add(methodHandleForm.kind.defaultLambdaName); + } + } + return generateCodeBytesForLFs(className, names.toArray(new String[0]), forms.toArray(new LambdaForm[0])); diff -r a7655cb387f9 -r b74ed86a116a src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java --- a/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Wed Mar 14 23:26:27 2018 +0100 @@ -649,6 +649,8 @@ } case EXACT_INVOKER: // fall-through case EXACT_LINKER: // fall-through + case LINK_TO_CALL_SITE: // fall-through + case LINK_TO_TARGET_METHOD: // fall-through case GENERIC_INVOKER: // fall-through case GENERIC_LINKER: return resolveFrom(name, invokerType.basicType(), Invokers.Holder.class); case GET_OBJECT: // fall-through diff -r a7655cb387f9 -r b74ed86a116a src/java.base/share/classes/java/lang/invoke/Invokers.java --- a/src/java.base/share/classes/java/lang/invoke/Invokers.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/java.base/share/classes/java/lang/invoke/Invokers.java Wed Mar 14 23:26:27 2018 +0100 @@ -523,7 +523,7 @@ } // skipCallSite is true if we are optimizing a ConstantCallSite - private static LambdaForm callSiteForm(MethodType mtype, boolean skipCallSite) { + static LambdaForm callSiteForm(MethodType mtype, boolean skipCallSite) { mtype = mtype.basicType(); // normalize Z to I, String to Object, etc. final int which = (skipCallSite ? MethodTypeForm.LF_MH_LINKER : MethodTypeForm.LF_CS_LINKER); LambdaForm lform = mtype.form().cachedLambdaForm(which); diff -r a7655cb387f9 -r b74ed86a116a src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java --- a/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Mar 14 23:26:27 2018 +0100 @@ -1841,10 +1841,13 @@ @Override public byte[] generateInvokersHolderClassBytes(final String className, - MethodType[] methodTypes) { + MethodType[] invokerMethodTypes, + MethodType[] callSiteMethodTypes) { return GenerateJLIClassesHelper - .generateInvokersHolderClassBytes(className, methodTypes); + .generateInvokersHolderClassBytes(className, + invokerMethodTypes, callSiteMethodTypes); } + }); } diff -r a7655cb387f9 -r b74ed86a116a src/java.base/share/classes/jdk/internal/misc/JavaLangInvokeAccess.java --- a/src/java.base/share/classes/jdk/internal/misc/JavaLangInvokeAccess.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/java.base/share/classes/jdk/internal/misc/JavaLangInvokeAccess.java Wed Mar 14 23:26:27 2018 +0100 @@ -84,7 +84,7 @@ /** * Returns a {@code byte[]} representation of {@code BoundMethodHandle} * species class implementing the signature defined by {@code types}. Used - * by GenerateBMHClassesPlugin to enable generation of such classes during + * by GenerateJLIClassesPlugin to enable generation of such classes during * the jlink phase. Should do some added validation since this string may be * user provided. */ @@ -99,8 +99,11 @@ /** * Returns a {@code byte[]} representation of a class implementing - * the invoker forms for the set of supplied {@code methodTypes}. + * the invoker forms for the set of supplied {@code invokerMethodTypes} + * and {@code callSiteMethodTypes}. */ byte[] generateInvokersHolderClassBytes(String className, - MethodType[] methodTypes); + MethodType[] invokerMethodTypes, + MethodType[] callSiteMethodTypes); + } diff -r a7655cb387f9 -r b74ed86a116a src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java --- a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java Wed Mar 14 23:15:29 2018 +0100 +++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java Wed Mar 14 23:26:27 2018 +0100 @@ -69,7 +69,9 @@ private static final String DELEGATING_HOLDER = "java/lang/invoke/DelegatingMethodHandle$Holder"; private static final String BASIC_FORMS_HOLDER = "java/lang/invoke/LambdaForm$Holder"; - private static final String INVOKERS_HOLDER = "java/lang/invoke/Invokers$Holder"; + + private static final String INVOKERS_HOLDER_NAME = "java.lang.invoke.Invokers$Holder"; + private static final String INVOKERS_HOLDER_INTERNAL_NAME = INVOKERS_HOLDER_NAME.replace('.', '/'); private static final JavaLangInvokeAccess JLIA = SharedSecrets.getJavaLangInvokeAccess(); @@ -78,6 +80,8 @@ Set invokerTypes = Set.of(); + Set callSiteTypes = Set.of(); + Map> dmhMethods = Map.of(); String mainArgument; @@ -128,7 +132,7 @@ * @return the default invoker forms to generate. */ private static Set defaultInvokers() { - return Set.of("LL_L", "LL_I", "LILL_I", "L6_L"); + return Set.of("LL_L", "LL_I", "LLLL_L", "LLLL_I", "LLIL_L", "LLIL_I", "L6_L"); } /** @@ -209,6 +213,8 @@ // ease finding methods in the generated code speciesTypes = new TreeSet<>(speciesTypes); invokerTypes = new TreeSet<>(invokerTypes); + callSiteTypes = new TreeSet<>(callSiteTypes); + TreeMap> newDMHMethods = new TreeMap<>(); for (Map.Entry> entry : dmhMethods.entrySet()) { newDMHMethods.put(entry.getKey(), new TreeSet<>(entry.getValue())); @@ -229,8 +235,13 @@ case "[LF_RESOLVE]": String methodType = parts[3]; validateMethodType(methodType); - if (parts[1].contains("Invokers")) { - invokerTypes.add(methodType); + if (parts[1].equals(INVOKERS_HOLDER_NAME)) { + if ("linkToTargetMethod".equals(parts[2]) || + "linkToCallSite".equals(parts[2])) { + callSiteTypes.add(methodType); + } else { + invokerTypes.add(methodType); + } } else if (parts[1].contains("DirectMethodHandle")) { String dmh = parts[2]; // ignore getObject etc for now (generated @@ -294,10 +305,11 @@ // Copy all but DMH_ENTRY to out in.transformAndCopy(entry -> { // filter out placeholder entries - if (entry.path().equals(DIRECT_METHOD_HOLDER_ENTRY) || - entry.path().equals(DELEGATING_METHOD_HOLDER_ENTRY) || - entry.path().equals(INVOKERS_HOLDER_ENTRY) || - entry.path().equals(BASIC_FORMS_HOLDER_ENTRY)) { + String path = entry.path(); + if (path.equals(DIRECT_METHOD_HOLDER_ENTRY) || + path.equals(DELEGATING_METHOD_HOLDER_ENTRY) || + path.equals(INVOKERS_HOLDER_ENTRY) || + path.equals(BASIC_FORMS_HOLDER_ENTRY)) { return null; } else { return entry; @@ -361,23 +373,40 @@ index++; } } + + // The invoker type to ask for is retrieved by removing the first + // and the last argument, which needs to be of Object.class MethodType[] invokerMethodTypes = new MethodType[this.invokerTypes.size()]; int i = 0; for (String invokerType : invokerTypes) { - // The invoker type to ask for is retrieved by removing the first - // and the last argument, which needs to be of Object.class MethodType mt = asMethodType(invokerType); final int lastParam = mt.parameterCount() - 1; if (mt.parameterCount() < 2 || mt.parameterType(0) != Object.class || mt.parameterType(lastParam) != Object.class) { throw new PluginException( - "Invoker type parameter must start and end with L"); + "Invoker type parameter must start and end with Object: " + invokerType); } mt = mt.dropParameterTypes(lastParam, lastParam + 1); invokerMethodTypes[i] = mt.dropParameterTypes(0, 1); i++; } + + // The callSite type to ask for is retrieved by removing the last + // argument, which needs to be of Object.class + MethodType[] callSiteMethodTypes = new MethodType[this.callSiteTypes.size()]; + i = 0; + for (String callSiteType : callSiteTypes) { + MethodType mt = asMethodType(callSiteType); + final int lastParam = mt.parameterCount() - 1; + if (mt.parameterCount() < 1 || + mt.parameterType(lastParam) != Object.class) { + throw new PluginException( + "CallSite type parameter must end with Object: " + callSiteType); + } + callSiteMethodTypes[i] = mt.dropParameterTypes(lastParam, lastParam + 1); + i++; + } try { byte[] bytes = JLIA.generateDirectMethodHandleHolderClassBytes( DIRECT_HOLDER, directMethodTypes, dmhTypes); @@ -390,8 +419,8 @@ ndata = ResourcePoolEntry.create(DELEGATING_METHOD_HOLDER_ENTRY, bytes); out.add(ndata); - bytes = JLIA.generateInvokersHolderClassBytes(INVOKERS_HOLDER, - invokerMethodTypes); + bytes = JLIA.generateInvokersHolderClassBytes(INVOKERS_HOLDER_INTERNAL_NAME, + invokerMethodTypes, callSiteMethodTypes); ndata = ResourcePoolEntry.create(INVOKERS_HOLDER_ENTRY, bytes); out.add(ndata); @@ -409,7 +438,7 @@ private static final String BASIC_FORMS_HOLDER_ENTRY = "/java.base/" + BASIC_FORMS_HOLDER + ".class"; private static final String INVOKERS_HOLDER_ENTRY = - "/java.base/" + INVOKERS_HOLDER + ".class"; + "/java.base/" + INVOKERS_HOLDER_INTERNAL_NAME + ".class"; // Convert LL -> LL, L3 -> LLL public static String expandSignature(String signature) {