Merge from default ihse-jdk-library-branch
authorihse
Wed, 14 Mar 2018 23:26:27 +0100
branchihse-jdk-library-branch
changeset 56310 b74ed86a116a
parent 56309 a7655cb387f9 (current diff)
parent 49243 176b3da8ce61 (diff)
child 56311 e05b4241302b
Merge from default
make/autoconf/libraries.m4
make/common/NativeCompilation.gmk
make/launcher/Launcher-jdk.pack.gmk
make/launcher/LauncherCommon.gmk
make/lib/Awt2dLibraries.gmk
make/lib/CoreLibraries.gmk
make/lib/Lib-java.prefs.gmk
make/lib/Lib-java.security.jgss.gmk
make/lib/Lib-java.smartcardio.gmk
make/lib/Lib-jdk.crypto.cryptoki.gmk
make/lib/Lib-jdk.crypto.ec.gmk
make/lib/Lib-jdk.crypto.ucrypto.gmk
make/lib/Lib-jdk.hotspot.agent.gmk
make/lib/Lib-jdk.jdwp.agent.gmk
make/lib/Lib-jdk.net.gmk
make/lib/Lib-jdk.pack.gmk
make/lib/Lib-jdk.sctp.gmk
make/lib/Lib-jdk.security.auth.gmk
make/lib/NetworkingLibraries.gmk
make/lib/NioLibraries.gmk
make/lib/SoundLibraries.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, \
 ))
 
--- 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)
 ])
 
 ################################################################################
--- 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@
--- 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
--- 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
--- 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, \
     ))
--- 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), \
--- 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), \
--- 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), \
--- 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, \
--- 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), \
--- 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)
--- 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, \
 ))
 
--- 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)
--- 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)
--- 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)
--- 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
--- 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, \
 ))
 
--- 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)
--- 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), \
 ))
 
--- 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)
--- 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), \
 ))
 
--- 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, \
--- 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, \
--- 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, \
--- 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
--- 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, \
--- 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 <E> 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.
+     * <p>
+     * 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,
--- 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<MethodType> dedupSet = new HashSet<>();
         ArrayList<LambdaForm> 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]));
--- 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
--- 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);
--- 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);
             }
+
         });
     }
 
--- 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);
+
 }
--- 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<String> invokerTypes = Set.of();
 
+    Set<String> callSiteTypes = Set.of();
+
     Map<String, Set<String>> dmhMethods = Map.of();
 
     String mainArgument;
@@ -128,7 +132,7 @@
      * @return the default invoker forms to generate.
      */
     private static Set<String> 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<String, Set<String>> newDMHMethods = new TreeMap<>();
         for (Map.Entry<String, Set<String>> 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) {