# HG changeset patch # User jwilhelm # Date 1446159755 -3600 # Node ID 781823826ae062032aa45a71df07f42ec059f3e5 # Parent 3d71824cad308c20fd36692abfef238dc1656f86# Parent 400008d8de8cd947af6a9ff4644d96ca821c673d Merge diff -r 3d71824cad30 -r 781823826ae0 jdk/make/Import.gmk --- a/jdk/make/Import.gmk Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/Import.gmk Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ # -# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2015, 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 @@ -45,8 +45,16 @@ # # Import hotspot # + +# Don't import jsig library for static builds +ifneq ($(STATIC_BUILD), true) + JSIG_IMPORT = jsig.* +else + JSIG_IMPORT = +endif + HOTSPOT_BASE_IMPORT_FILES := \ - $(addprefix $(LIBRARY_PREFIX), jvm.* jsig.* jvm_db.* jvm_dtrace.*) \ + $(addprefix $(LIBRARY_PREFIX), jvm.* $(JSIG_IMPORT) jvm_db.* jvm_dtrace.*) \ Xusage.txt \ # @@ -79,32 +87,34 @@ ################################################################################ -ifeq ($(OPENJDK_TARGET_OS), macosx) - JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \ - $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) ) -else - JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \ - $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) ) -endif +ifneq ($(STATIC_BUILD), true) + ifeq ($(OPENJDK_TARGET_OS), macosx) + JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig$(SHARED_LIBRARY_SUFFIX).dSYM) \ + $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) ) + else + JSIG_DEBUGINFO := $(strip $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.debuginfo) \ + $(wildcard $(HOTSPOT_DIST)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/libjsig.diz) ) + endif -ifneq ($(OPENJDK_TARGET_OS), windows) - ifeq ($(JVM_VARIANT_SERVER), true) - BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/server/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) - ifneq (, $(JSIG_DEBUGINFO)) - BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/server/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + ifneq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(JVM_VARIANT_SERVER), true) + BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/server/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (, $(JSIG_DEBUGINFO)) + BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/server/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif endif - endif - ifeq ($(JVM_VARIANT_CLIENT), true) - BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/client/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) - ifneq (, $(JSIG_DEBUGINFO)) - BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/client/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + ifeq ($(JVM_VARIANT_CLIENT), true) + BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/client/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (, $(JSIG_DEBUGINFO)) + BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/client/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif endif - endif - ifneq ($(OPENJDK_TARGET_OS), macosx) - ifeq ($(JVM_VARIANT_MINIMAL1), true) - BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/minimal/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) - ifneq (,$(JSIG_DEBUGINFO)) - BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/minimal/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + ifneq ($(OPENJDK_TARGET_OS), macosx) + ifeq ($(JVM_VARIANT_MINIMAL1), true) + BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/minimal/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + BASE_TARGETS += $(BASE_INSTALL_LIBRARIES_HERE)/minimal/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif endif endif endif diff -r 3d71824cad30 -r 781823826ae0 jdk/make/launcher/LauncherCommon.gmk --- a/jdk/make/launcher/LauncherCommon.gmk Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/launcher/LauncherCommon.gmk Fri Oct 30 00:02:35 2015 +0100 @@ -106,10 +106,30 @@ endif endif - $1_LDFLAGS += -Wl,-all_load $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a \ - -framework Cocoa -framework Security -framework ApplicationServices \ - -sectcreate __TEXT __info_plist $(MACOSX_PLIST_DIR)/$$($1_PLIST_FILE) - $1_LDFLAGS_SUFFIX += -pthread + ifeq ($(STATIC_BUILD), true) + $1_LDFLAGS += -Wl,-all_load \ + $(shell $(FIND) $(SUPPORT_OUTPUTDIR)/modules_libs/java.base -name "*.a") \ + $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/libdt_socket.a \ + $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/libjdwp.a \ + $(SUPPORT_OUTPUTDIR)/native/java.base/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) \ + -framework CoreFoundation \ + -framework Foundation \ + -framework SystemConfiguration \ + -framework Cocoa -framework Security \ + -framework ApplicationServices \ + -lstdc++ -liconv \ + -sectcreate __TEXT __info_plist \ + $(MACOSX_PLIST_DIR)/$$($1_PLIST_FILE) \ + -exported_symbols_list \ + $(SUPPORT_OUTPUTDIR)/build-static/exported.symbols + else + $1_LDFLAGS += -Wl,-all_load $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a \ + -framework Cocoa -framework Security -framework ApplicationServices \ + -sectcreate __TEXT __info_plist $(MACOSX_PLIST_DIR)/$$($1_PLIST_FILE) + $1_LDFLAGS_SUFFIX += -pthread + endif + + endif ifeq ($(OPENJDK_TARGET_OS), aix) diff -r 3d71824cad30 -r 781823826ae0 jdk/make/lib/CoreLibraries.gmk --- a/jdk/make/lib/CoreLibraries.gmk Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/lib/CoreLibraries.gmk Fri Oct 30 00:02:35 2015 +0100 @@ -436,10 +436,14 @@ OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \ DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) - $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a: $(BUILD_LIBJLI_STATIC) + ifeq ($(STATIC_BUILD), true) + TARGETS += $(BUILD_LIBJLI_STATIC) + else + $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a: $(BUILD_LIBJLI_STATIC) $(call install-file) - TARGETS += $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a + TARGETS += $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a + endif else ifeq ($(OPENJDK_TARGET_OS), aix) # AIX also requires a static libjli because the compiler doesn't support '-rpath' diff -r 3d71824cad30 -r 781823826ae0 jdk/make/lib/Lib-java.base.gmk --- a/jdk/make/lib/Lib-java.base.gmk Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/lib/Lib-java.base.gmk Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2015, 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 @@ -33,3 +33,29 @@ include NetworkingLibraries.gmk include NioLibraries.gmk include SecurityLibraries.gmk + +ifeq ($(STATIC_BUILD), true) + JAVA_BASE_EXPORT_SYMBOLS_SRC := \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/jli/$(LIBRARY_PREFIX)jli.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$(LIBRARY_PREFIX)java.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$(LIBRARY_PREFIX)net.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$(LIBRARY_PREFIX)nio.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$(LIBRARY_PREFIX)verify.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$(LIBRARY_PREFIX)zip.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$(LIBRARY_PREFIX)jimage.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/server/$(LIBRARY_PREFIX)jvm.symbols \ + # + + JAVA_BASE_EXPORT_SYMBOL_FILE := $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/java.base.symbols + + $(JAVA_BASE_EXPORT_SYMBOL_FILE): $(JAVA_BASE_EXPORT_SYMBOLS_SRC) + $(ECHO) $(LOG_INFO) "Generating java.base.symbols file" + $(CAT) $^ > $@ + + # The individual symbol files is generated when the respective lib is built + $(JAVA_BASE_EXPORT_SYMBOLS_SRC): $(BUILD_LIBJLI) $(BUILD_LIBJAVA) \ + $(BUILD_LIBNET) $(BUILD_LIBNIO) $(BUILD_LIBVERIFY) $(BUILD_LIBZIP) \ + $(BUILD_LIBJIMAGE) + + TARGETS += $(JAVA_BASE_EXPORT_SYMBOL_FILE) +endif diff -r 3d71824cad30 -r 781823826ae0 jdk/make/lib/Lib-jdk.jdwp.agent.gmk --- a/jdk/make/lib/Lib-jdk.jdwp.agent.gmk Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/lib/Lib-jdk.jdwp.agent.gmk Fri Oct 30 00:02:35 2015 +0100 @@ -100,3 +100,23 @@ TARGETS += $(BUILD_LIBJDWP) ################################################################################ + +ifeq ($(STATIC_BUILD), true) + JDK_JDWP_AGENT_EXPORT_SYMBOLS_SRC := \ + $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/$(LIBRARY_PREFIX)dt_socket.symbols \ + $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/$(LIBRARY_PREFIX)jdwp.symbols + + JDK_JDWP_AGENT_EXPORT_SYMBOL_FILE := $(SUPPORT_OUTPUTDIR)/modules_libs/jdk.jdwp.agent/jdk.jdwp.agent.symbols + + $(JDK_JDWP_AGENT_EXPORT_SYMBOL_FILE): $(JDK_JDWP_AGENT_EXPORT_SYMBOLS_SRC) + $(ECHO) $(LOG_INFO) "Generating jdk.jdwp.agent symbols file" + $(CAT) $^ > $@ + + # The individual symbol files is generated when the respective lib is built + $(JDK_JDWP_AGENT_EXPORT_SYMBOLS_SRC): $(BUILD_LIBDT_SOCKET) $(BUILD_LIBJDWP) + + TARGETS += $(JDK_JDWP_AGENT_EXPORT_SYMBOL_FILE) + +endif + +################################################################################ diff -r 3d71824cad30 -r 781823826ae0 jdk/make/lib/SecurityLibraries.gmk --- a/jdk/make/lib/SecurityLibraries.gmk Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/lib/SecurityLibraries.gmk Fri Oct 30 00:02:35 2015 +0100 @@ -26,38 +26,42 @@ include LibCommon.gmk ifeq ($(OPENJDK_TARGET_OS), macosx) + # JavaNativeFoundation framework not supported in static builds + ifneq ($(STATIC_BUILD), true) ################################################################################ - LIBOSXSECURITY_DIRS := $(JDK_TOPDIR)/src/java.base/macosx/native/libosxsecurity - LIBOSXSECURITY_CFLAGS := -I$(LIBOSXSECURITY_DIRS) \ - $(LIBJAVA_HEADER_FLAGS) \ - -I$(SUPPORT_OUTPUTDIR)/headers/java.base \ + LIBOSXSECURITY_DIRS := $(JDK_TOPDIR)/src/java.base/macosx/native/libosxsecurity + LIBOSXSECURITY_CFLAGS := -I$(LIBOSXSECURITY_DIRS) \ + $(LIBJAVA_HEADER_FLAGS) \ + -I$(SUPPORT_OUTPUTDIR)/headers/java.base \ - $(eval $(call SetupNativeCompilation,BUILD_LIBOSXSECURITY, \ - LIBRARY := osxsecurity, \ - OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ - SRC := $(LIBOSXSECURITY_DIRS), \ - OPTIMIZATION := LOW, \ - CFLAGS := $(CFLAGS_JDKLIB) \ - $(LIBOSXSECURITY_CFLAGS), \ - DISABLED_WARNINGS_clang := deprecated-declarations, \ - LDFLAGS := $(LDFLAGS_JDKLIB) \ - -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ - -fobjc-link-runtime \ - -framework JavaNativeFoundation \ - -framework CoreServices \ - -framework Security \ - $(LDFLAGS_JDKLIB_SUFFIX), \ - OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosxsecurity, \ - DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) + $(eval $(call SetupNativeCompilation,BUILD_LIBOSXSECURITY, \ + LIBRARY := osxsecurity, \ + OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ + SRC := $(LIBOSXSECURITY_DIRS), \ + OPTIMIZATION := LOW, \ + CFLAGS := $(CFLAGS_JDKLIB) \ + $(LIBOSXSECURITY_CFLAGS), \ + DISABLED_WARNINGS_clang := deprecated-declarations, \ + LDFLAGS := $(LDFLAGS_JDKLIB) \ + -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_macosx := \ + -fobjc-link-runtime \ + -framework JavaNativeFoundation \ + -framework CoreServices \ + -framework Security \ + $(LDFLAGS_JDKLIB_SUFFIX), \ + OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libosxsecurity, \ + DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES))) - $(BUILD_LIBOSXSECURITY): $(BUILD_LIBJAVA) + $(BUILD_LIBOSXSECURITY): $(BUILD_LIBJAVA) - TARGETS += $(BUILD_LIBOSXSECURITY) + TARGETS += $(BUILD_LIBOSXSECURITY) ################################################################################ + endif endif + diff -r 3d71824cad30 -r 781823826ae0 jdk/make/mapfiles/libnio/mapfile-macosx --- a/jdk/make/mapfiles/libnio/mapfile-macosx Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/make/mapfiles/libnio/mapfile-macosx Fri Oct 30 00:02:35 2015 +0100 @@ -75,6 +75,7 @@ Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_KQueue_kqueue; Java_sun_nio_ch_KQueue_keventRegister; Java_sun_nio_ch_KQueue_keventPoll; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/agent_util/agent_util.h --- a/jdk/src/demo/share/jvmti/agent_util/agent_util.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/agent_util/agent_util.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -65,6 +65,51 @@ void *allocate(jvmtiEnv *jvmti, jint len); void add_demo_jar_to_bootclasspath(jvmtiEnv *jvmti, char *demo_name); +#ifdef STATIC_BUILD +/* Macros for handling declaration of static/dynamic + * Agent library Load/Attach/Unload functions + * + * DEF_Agent_OnLoad, DEF_Agent_OnAttach or DEF_Agent_OnUnload + * generate the appropriate entrypoint names based on static + * versus dynamic builds. + * + * STATIC_BUILD must be defined to build static versions of these libraries. + * LIBRARY_NAME must be set to the name of the library for static builds. + */ +#define ADD_LIB_NAME3(name, lib) name ## lib +#define ADD_LIB_NAME2(name, lib) ADD_LIB_NAME3(name, lib) +#define ADD_LIB_NAME(entry) ADD_LIB_NAME2(entry, LIBRARY_NAME) + +#define DEF_Agent_OnLoad \ +ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) \ +{ \ + jint JNICALL ADD_LIB_NAME(Agent_OnLoad_dynamic_)(JavaVM *vm, char *options, void *reserved); \ + return ADD_LIB_NAME(Agent_OnLoad_dynamic_)(vm, options, reserved); \ +} \ +jint JNICALL ADD_LIB_NAME(Agent_OnLoad_dynamic_) + +#define DEF_Agent_OnAttach \ +ADD_LIB_NAME(Agent_OnAttach_)(JavaVM *vm, char *options, void *reserved) \ +{ \ + jint JNICALL ADD_LIB_NAME(Agent_OnAttach_dynamic_)(JavaVM *vm, char *options, void *reserved); \ + return ADD_LIB_NAME(Agent_OnAttach_dynamic_)(vm, options, reserved); \ +} \ +jint JNICALL ADD_LIB_NAME(Agent_OnAttach_dynamic_) + +#define DEF_Agent_OnUnload \ +ADD_LIB_NAME(Agent_OnUnload_)(JavaVM *vm) \ +{ \ + void JNICALL ADD_LIB_NAME(Agent_OnUnload_dynamic_)(JavaVM *vm); \ + ADD_LIB_NAME(Agent_OnUnload_dynamic_)(vm); \ +} \ +void JNICALL ADD_LIB_NAME(Agent_OnUnload_dynamic_) + +#else +#define DEF_Agent_OnLoad Agent_OnLoad +#define DEF_Agent_OnAttach Agent_OnAttach +#define DEF_Agent_OnUnload Agent_OnUnload +#endif + #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/compiledMethodLoad/compiledMethodLoad.c --- a/jdk/src/demo/share/jvmti/compiledMethodLoad/compiledMethodLoad.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/compiledMethodLoad/compiledMethodLoad.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -225,7 +225,7 @@ * event here. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { jint rc; jvmtiError err; @@ -272,6 +272,6 @@ /* Agent_OnUnload() is called last */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/gctest/gctest.c --- a/jdk/src/demo/share/jvmti/gctest/gctest.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/gctest/gctest.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -148,7 +148,7 @@ /* Agent_OnLoad() is called first, we prepare for a VM_INIT event here. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { jint rc; jvmtiError err; @@ -193,6 +193,6 @@ /* Agent_OnUnload() is called last */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/heapTracker/heapTracker.c --- a/jdk/src/demo/share/jvmti/heapTracker/heapTracker.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/heapTracker/heapTracker.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -894,7 +894,7 @@ * loaded. This is the first code executed. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { static GlobalAgentData data; jvmtiEnv *jvmti; @@ -1010,7 +1010,7 @@ * unloaded. This is the last code executed. */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { /* Skip any cleanup, VM is about to die anyway */ } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/heapTracker/heapTracker.h --- a/jdk/src/demo/share/jvmti/heapTracker/heapTracker.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/heapTracker/heapTracker.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,9 +64,4 @@ #include "agent_util.h" -/* Agent library externals to export. */ - -JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved); -JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm); - #endif diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/heapViewer/heapViewer.c --- a/jdk/src/demo/share/jvmti/heapViewer/heapViewer.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/heapViewer/heapViewer.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -235,7 +235,7 @@ /* Agent_OnLoad() is called first, we prepare for a VM_INIT event here. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { jint rc; jvmtiError err; @@ -283,6 +283,6 @@ /* Agent_OnUnload() is called last */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/minst/minst.c --- a/jdk/src/demo/share/jvmti/minst/minst.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/minst/minst.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -373,7 +373,7 @@ * loaded. This is the first code executed. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { static GlobalAgentData data; jvmtiEnv *jvmti; @@ -467,7 +467,7 @@ * unloaded. This is the last code executed. */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { /* Make sure all malloc/calloc/strdup space is freed */ if ( gdata->include != NULL ) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/minst/minst.h --- a/jdk/src/demo/share/jvmti/minst/minst.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/minst/minst.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,9 +64,4 @@ #include "agent_util.h" -/* Agent library externals to export. */ - -JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved); -JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm); - #endif diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/mtrace/mtrace.c --- a/jdk/src/demo/share/jvmti/mtrace/mtrace.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/mtrace/mtrace.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -697,7 +697,7 @@ * loaded. This is the first code executed. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { static GlobalAgentData data; jvmtiEnv *jvmti; @@ -795,7 +795,7 @@ * unloaded. This is the last code executed. */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { /* Make sure all malloc/calloc/strdup space is freed */ if ( gdata->include != NULL ) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/mtrace/mtrace.h --- a/jdk/src/demo/share/jvmti/mtrace/mtrace.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/mtrace/mtrace.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,9 +64,4 @@ #include "agent_util.h" -/* Agent library externals to export. */ - -JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved); -JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm); - #endif diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/versionCheck/versionCheck.c --- a/jdk/src/demo/share/jvmti/versionCheck/versionCheck.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/versionCheck/versionCheck.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -89,7 +89,7 @@ /* Agent_OnLoad() is called first, we prepare for a VM_INIT event here. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { jint rc; jvmtiError err; @@ -116,6 +116,6 @@ /* Agent_OnUnload() is called last */ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/waiters/Monitor.hpp --- a/jdk/src/demo/share/jvmti/waiters/Monitor.hpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/waiters/Monitor.hpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,6 +37,10 @@ * this sample code. */ +#ifdef STATIC_BUILD +#define Monitor WaiterMonitor +#endif + /* C++ Monitor class */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/waiters/Thread.cpp --- a/jdk/src/demo/share/jvmti/waiters/Thread.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/waiters/Thread.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,6 +37,9 @@ * this sample code. */ +#ifdef STATIC_BUILD +#define Thread WaiterThread +#endif #include #include diff -r 3d71824cad30 -r 781823826ae0 jdk/src/demo/share/jvmti/waiters/waiters.cpp --- a/jdk/src/demo/share/jvmti/waiters/waiters.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/demo/share/jvmti/waiters/waiters.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -243,7 +243,7 @@ /* Agent_OnLoad() is called first, we prepare for a VM_INIT event here. */ JNIEXPORT jint JNICALL - Agent_OnLoad(JavaVM *vm, char *options, void *reserved) + DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { jvmtiEnv *jvmti; jint rc; @@ -288,7 +288,7 @@ /* Agent_OnUnload() is called last */ JNIEXPORT void JNICALL - Agent_OnUnload(JavaVM *vm) + DEF_Agent_OnUnload(JavaVM *vm) { } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/macosx/native/libjava/java_props_macosx.c --- a/jdk/src/java.base/macosx/native/libjava/java_props_macosx.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/macosx/native/libjava/java_props_macosx.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -35,13 +35,15 @@ #include "java_props_macosx.h" - // need dlopen/dlsym trick to avoid pulling in JavaRuntimeSupport before libjava.dylib is loaded static void *getJRSFramework() { static void *jrsFwk = NULL; +#ifndef STATIC_BUILD +// JavaRuntimeSupport doesn't support static Java runtimes if (jrsFwk == NULL) { jrsFwk = dlopen("/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/JavaRuntimeSupport", RTLD_LAZY | RTLD_LOCAL); } +#endif return jrsFwk; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/macosx/native/libjli/java_md_macosx.c --- a/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c Fri Oct 30 00:02:35 2015 +0100 @@ -245,6 +245,8 @@ return sExportedJNIFunctions = fxns; } +#ifndef STATIC_BUILD + JNIEXPORT jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *args) { InvocationFunctions *ifn = GetExportedJNIFunctions(); @@ -265,6 +267,7 @@ if (ifn == NULL) return JNI_ERR; return ifn->GetCreatedJavaVMs(vmBuf, bufLen, nVMs); } +#endif /* * Allow JLI-aware launchers to specify a client/server preference @@ -303,7 +306,12 @@ objc_registerThreadWithCollector(); if (main_fptr == NULL) { +#ifdef STATIC_BUILD + extern int main(int argc, char **argv); + main_fptr = &main; +#else main_fptr = (int (*)())dlsym(RTLD_DEFAULT, "main"); +#endif if (main_fptr == NULL) { JLI_ReportErrorMessageSys("error locating main entrypoint\n"); exit(1); @@ -588,6 +596,9 @@ JLI_TraceLauncher("Does `%s' exist ... ", jvmpath); +#ifdef STATIC_BUILD + return JNI_TRUE; +#else if (stat(jvmpath, &s) == 0) { JLI_TraceLauncher("yes.\n"); return JNI_TRUE; @@ -595,6 +606,7 @@ JLI_TraceLauncher("no.\n"); return JNI_FALSE; } +#endif } /* @@ -607,10 +619,18 @@ if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ +#ifdef STATIC_BUILD + char jvm_cfg[MAXPATHLEN]; + JLI_Snprintf(jvm_cfg, sizeof(jvm_cfg), "%s/lib/jvm.cfg", path); + if (access(jvm_cfg, F_OK) == 0) { + return JNI_TRUE; + } +#else JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/" JAVA_DLL, path); if (access(libjava, F_OK) == 0) { return JNI_TRUE; } +#endif /* ensure storage for path + /jre + NULL */ if ((JLI_StrLen(path) + 4 + 1) > (size_t) pathsize) { JLI_TraceLauncher("Insufficient space to store JRE path\n"); @@ -629,6 +649,24 @@ Dl_info selfInfo; dladdr(&GetJREPath, &selfInfo); +#ifdef STATIC_BUILD + char jvm_cfg[MAXPATHLEN]; + char *p = NULL; + strncpy(jvm_cfg, selfInfo.dli_fname, MAXPATHLEN); + p = strrchr(jvm_cfg, '/'); *p = '\0'; + p = strrchr(jvm_cfg, '/'); + if (strcmp(p, "/.") == 0) { + *p = '\0'; + p = strrchr(jvm_cfg, '/'); *p = '\0'; + } + else *p = '\0'; + strncpy(path, jvm_cfg, pathsize); + strncat(jvm_cfg, "/lib/jvm.cfg", MAXPATHLEN); + if (access(jvm_cfg, F_OK) == 0) { + return JNI_TRUE; + } +#endif + char *realPathToSelf = realpath(selfInfo.dli_fname, path); if (realPathToSelf != path) { return JNI_FALSE; @@ -664,7 +702,11 @@ JLI_TraceLauncher("JVM path is %s\n", jvmpath); +#ifndef STATIC_BUILD libjvm = dlopen(jvmpath, RTLD_NOW + RTLD_GLOBAL); +#else + libjvm = dlopen(NULL, RTLD_FIRST); +#endif if (libjvm == NULL) { JLI_ReportErrorMessage(DLL_ERROR1, __LINE__); JLI_ReportErrorMessage(DLL_ERROR2, jvmpath, dlerror()); @@ -714,9 +756,14 @@ char* exec_path = NULL; { Dl_info dlinfo; + +#ifdef STATIC_BUILD + void *fptr; + fptr = (void *)&SetExecname; +#else int (*fptr)(); - fptr = (int (*)())dlsym(RTLD_DEFAULT, "main"); +#endif if (fptr == NULL) { JLI_ReportErrorMessage(DLL_ERROR3, dlerror()); return JNI_FALSE; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/classes/java/nio/Bits.java --- a/jdk/src/java.base/share/classes/java/nio/Bits.java Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/nio/Bits.java Fri Oct 30 00:02:35 2015 +0100 @@ -32,7 +32,7 @@ import jdk.internal.misc.JavaNioAccess; import jdk.internal.misc.JavaLangRefAccess; import jdk.internal.misc.SharedSecrets; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; import sun.misc.VM; /** diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template --- a/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template Fri Oct 30 00:02:35 2015 +0100 @@ -29,7 +29,7 @@ import java.io.FileDescriptor; import sun.misc.Cleaner; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; import sun.misc.VM; import sun.nio.ch.DirectBuffer; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template --- a/jdk/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template Fri Oct 30 00:02:35 2015 +0100 @@ -27,7 +27,7 @@ package java.nio; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** #if[rw] diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java Fri Oct 30 00:02:35 2015 +0100 @@ -0,0 +1,1391 @@ +/* + * Copyright (c) 2000, 2015, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.internal.misc; + +import java.lang.reflect.Field; +import java.security.ProtectionDomain; + +import sun.reflect.CallerSensitive; +import sun.reflect.Reflection; +import sun.misc.VM; + +import jdk.internal.HotSpotIntrinsicCandidate; + + +/** + * A collection of methods for performing low-level, unsafe operations. + * Although the class and all methods are public, use of this class is + * limited because only trusted code can obtain instances of it. + * + * @author John R. Rose + * @see #getUnsafe + */ + +public final class Unsafe { + + private static native void registerNatives(); + static { + registerNatives(); + sun.reflect.Reflection.registerMethodsToFilter(Unsafe.class, "getUnsafe"); + } + + private Unsafe() {} + + private static final Unsafe theUnsafe = new Unsafe(); + + /** + * Provides the caller with the capability of performing unsafe + * operations. + * + *

The returned {@code Unsafe} object should be carefully guarded + * by the caller, since it can be used to read and write data at arbitrary + * memory addresses. It must never be passed to untrusted code. + * + *

Most methods in this class are very low-level, and correspond to a + * small number of hardware instructions (on typical machines). Compilers + * are encouraged to optimize these methods accordingly. + * + *

Here is a suggested idiom for using unsafe operations: + * + *

 {@code
+     * class MyTrustedClass {
+     *   private static final Unsafe unsafe = Unsafe.getUnsafe();
+     *   ...
+     *   private long myCountAddress = ...;
+     *   public int getCount() { return unsafe.getByte(myCountAddress); }
+     * }}
+ * + * (It may assist compilers to make the local variable {@code final}.) + * + * @throws SecurityException if a security manager exists and its + * {@code checkPropertiesAccess} method doesn't allow + * access to the system properties. + */ + @CallerSensitive + public static Unsafe getUnsafe() { + Class caller = Reflection.getCallerClass(); + if (!VM.isSystemDomainLoader(caller.getClassLoader())) + throw new SecurityException("Unsafe"); + return theUnsafe; + } + + /// peek and poke operations + /// (compilers should optimize these to memory ops) + + // These work on object fields in the Java heap. + // They will not work on elements of packed arrays. + + /** + * Fetches a value from a given Java variable. + * More specifically, fetches a field or array element within the given + * object {@code o} at the given offset, or (if {@code o} is null) + * from the memory address whose numerical value is the given offset. + *

+ * The results are undefined unless one of the following cases is true: + *

+ *

+ * If one of the above cases is true, the call references a specific Java + * variable (field or array element). However, the results are undefined + * if that variable is not in fact of the type returned by this method. + *

+ * This method refers to a variable by means of two parameters, and so + * it provides (in effect) a double-register addressing mode + * for Java variables. When the object reference is null, this method + * uses its offset as an absolute address. This is similar in operation + * to methods such as {@link #getInt(long)}, which provide (in effect) a + * single-register addressing mode for non-Java variables. + * However, because Java variables may have a different layout in memory + * from non-Java variables, programmers should not assume that these + * two addressing modes are ever equivalent. Also, programmers should + * remember that offsets from the double-register addressing mode cannot + * be portably confused with longs used in the single-register addressing + * mode. + * + * @param o Java heap object in which the variable resides, if any, else + * null + * @param offset indication of where the variable resides in a Java heap + * object, if any, else a memory address locating the variable + * statically + * @return the value fetched from the indicated Java variable + * @throws RuntimeException No defined exceptions are thrown, not even + * {@link NullPointerException} + */ + @HotSpotIntrinsicCandidate + public native int getInt(Object o, long offset); + + /** + * Stores a value into a given Java variable. + *

+ * The first two parameters are interpreted exactly as with + * {@link #getInt(Object, long)} to refer to a specific + * Java variable (field or array element). The given value + * is stored into that variable. + *

+ * The variable must be of the same type as the method + * parameter {@code x}. + * + * @param o Java heap object in which the variable resides, if any, else + * null + * @param offset indication of where the variable resides in a Java heap + * object, if any, else a memory address locating the variable + * statically + * @param x the value to store into the indicated Java variable + * @throws RuntimeException No defined exceptions are thrown, not even + * {@link NullPointerException} + */ + @HotSpotIntrinsicCandidate + public native void putInt(Object o, long offset, int x); + + /** + * Fetches a reference value from a given Java variable. + * @see #getInt(Object, long) + */ + @HotSpotIntrinsicCandidate + public native Object getObject(Object o, long offset); + + /** + * Stores a reference value into a given Java variable. + *

+ * Unless the reference {@code x} being stored is either null + * or matches the field type, the results are undefined. + * If the reference {@code o} is non-null, card marks or + * other store barriers for that object (if the VM requires them) + * are updated. + * @see #putInt(Object, long, int) + */ + @HotSpotIntrinsicCandidate + public native void putObject(Object o, long offset, Object x); + + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native boolean getBoolean(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putBoolean(Object o, long offset, boolean x); + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native byte getByte(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putByte(Object o, long offset, byte x); + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native short getShort(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putShort(Object o, long offset, short x); + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native char getChar(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putChar(Object o, long offset, char x); + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native long getLong(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putLong(Object o, long offset, long x); + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native float getFloat(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putFloat(Object o, long offset, float x); + /** @see #getInt(Object, long) */ + @HotSpotIntrinsicCandidate + public native double getDouble(Object o, long offset); + /** @see #putInt(Object, long, int) */ + @HotSpotIntrinsicCandidate + public native void putDouble(Object o, long offset, double x); + + // These read VM internal data. + + /** + * Fetches an uncompressed reference value from a given native variable + * ignoring the VM's compressed references mode. + * + * @param address a memory address locating the variable + * @return the value fetched from the indicated native variable + */ + public native Object getUncompressedObject(long address); + + /** + * Fetches the {@link java.lang.Class} Java mirror for the given native + * metaspace {@code Klass} pointer. + * + * @param metaspaceKlass a native metaspace {@code Klass} pointer + * @return the {@link java.lang.Class} Java mirror + */ + public native Class getJavaMirror(long metaspaceKlass); + + /** + * Fetches a native metaspace {@code Klass} pointer for the given Java + * object. + * + * @param o Java heap object for which to fetch the class pointer + * @return a native metaspace {@code Klass} pointer + */ + public native long getKlassPointer(Object o); + + // These work on values in the C heap. + + /** + * Fetches a value from a given memory address. If the address is zero, or + * does not point into a block obtained from {@link #allocateMemory}, the + * results are undefined. + * + * @see #allocateMemory + */ + @HotSpotIntrinsicCandidate + public native byte getByte(long address); + + /** + * Stores a value into a given memory address. If the address is zero, or + * does not point into a block obtained from {@link #allocateMemory}, the + * results are undefined. + * + * @see #getByte(long) + */ + @HotSpotIntrinsicCandidate + public native void putByte(long address, byte x); + + /** @see #getByte(long) */ + @HotSpotIntrinsicCandidate + public native short getShort(long address); + /** @see #putByte(long, byte) */ + @HotSpotIntrinsicCandidate + public native void putShort(long address, short x); + /** @see #getByte(long) */ + @HotSpotIntrinsicCandidate + public native char getChar(long address); + /** @see #putByte(long, byte) */ + @HotSpotIntrinsicCandidate + public native void putChar(long address, char x); + /** @see #getByte(long) */ + @HotSpotIntrinsicCandidate + public native int getInt(long address); + /** @see #putByte(long, byte) */ + @HotSpotIntrinsicCandidate + public native void putInt(long address, int x); + /** @see #getByte(long) */ + @HotSpotIntrinsicCandidate + public native long getLong(long address); + /** @see #putByte(long, byte) */ + @HotSpotIntrinsicCandidate + public native void putLong(long address, long x); + /** @see #getByte(long) */ + @HotSpotIntrinsicCandidate + public native float getFloat(long address); + /** @see #putByte(long, byte) */ + @HotSpotIntrinsicCandidate + public native void putFloat(long address, float x); + /** @see #getByte(long) */ + @HotSpotIntrinsicCandidate + public native double getDouble(long address); + /** @see #putByte(long, byte) */ + @HotSpotIntrinsicCandidate + public native void putDouble(long address, double x); + + /** + * Fetches a native pointer from a given memory address. If the address is + * zero, or does not point into a block obtained from {@link + * #allocateMemory}, the results are undefined. + * + *

If the native pointer is less than 64 bits wide, it is extended as + * an unsigned number to a Java long. The pointer may be indexed by any + * given byte offset, simply by adding that offset (as a simple integer) to + * the long representing the pointer. The number of bytes actually read + * from the target address may be determined by consulting {@link + * #addressSize}. + * + * @see #allocateMemory + */ + @HotSpotIntrinsicCandidate + public native long getAddress(long address); + + /** + * Stores a native pointer into a given memory address. If the address is + * zero, or does not point into a block obtained from {@link + * #allocateMemory}, the results are undefined. + * + *

The number of bytes actually written at the target address may be + * determined by consulting {@link #addressSize}. + * + * @see #getAddress(long) + */ + @HotSpotIntrinsicCandidate + public native void putAddress(long address, long x); + + /// wrappers for malloc, realloc, free: + + /** + * Allocates a new block of native memory, of the given size in bytes. The + * contents of the memory are uninitialized; they will generally be + * garbage. The resulting native pointer will never be zero, and will be + * aligned for all value types. Dispose of this memory by calling {@link + * #freeMemory}, or resize it with {@link #reallocateMemory}. + * + * @throws IllegalArgumentException if the size is negative or too large + * for the native size_t type + * + * @throws OutOfMemoryError if the allocation is refused by the system + * + * @see #getByte(long) + * @see #putByte(long, byte) + */ + public native long allocateMemory(long bytes); + + /** + * Resizes a new block of native memory, to the given size in bytes. The + * contents of the new block past the size of the old block are + * uninitialized; they will generally be garbage. The resulting native + * pointer will be zero if and only if the requested size is zero. The + * resulting native pointer will be aligned for all value types. Dispose + * of this memory by calling {@link #freeMemory}, or resize it with {@link + * #reallocateMemory}. The address passed to this method may be null, in + * which case an allocation will be performed. + * + * @throws IllegalArgumentException if the size is negative or too large + * for the native size_t type + * + * @throws OutOfMemoryError if the allocation is refused by the system + * + * @see #allocateMemory + */ + public native long reallocateMemory(long address, long bytes); + + /** + * Sets all bytes in a given block of memory to a fixed value + * (usually zero). + * + *

This method determines a block's base address by means of two parameters, + * and so it provides (in effect) a double-register addressing mode, + * as discussed in {@link #getInt(Object,long)}. When the object reference is null, + * the offset supplies an absolute base address. + * + *

The stores are in coherent (atomic) units of a size determined + * by the address and length parameters. If the effective address and + * length are all even modulo 8, the stores take place in 'long' units. + * If the effective address and length are (resp.) even modulo 4 or 2, + * the stores take place in units of 'int' or 'short'. + * + * @since 1.7 + */ + public native void setMemory(Object o, long offset, long bytes, byte value); + + /** + * Sets all bytes in a given block of memory to a fixed value + * (usually zero). This provides a single-register addressing mode, + * as discussed in {@link #getInt(Object,long)}. + * + *

Equivalent to {@code setMemory(null, address, bytes, value)}. + */ + public void setMemory(long address, long bytes, byte value) { + setMemory(null, address, bytes, value); + } + + /** + * Sets all bytes in a given block of memory to a copy of another + * block. + * + *

This method determines each block's base address by means of two parameters, + * and so it provides (in effect) a double-register addressing mode, + * as discussed in {@link #getInt(Object,long)}. When the object reference is null, + * the offset supplies an absolute base address. + * + *

The transfers are in coherent (atomic) units of a size determined + * by the address and length parameters. If the effective addresses and + * length are all even modulo 8, the transfer takes place in 'long' units. + * If the effective addresses and length are (resp.) even modulo 4 or 2, + * the transfer takes place in units of 'int' or 'short'. + * + * @since 1.7 + */ + @HotSpotIntrinsicCandidate + public native void copyMemory(Object srcBase, long srcOffset, + Object destBase, long destOffset, + long bytes); + /** + * Sets all bytes in a given block of memory to a copy of another + * block. This provides a single-register addressing mode, + * as discussed in {@link #getInt(Object,long)}. + * + * Equivalent to {@code copyMemory(null, srcAddress, null, destAddress, bytes)}. + */ + public void copyMemory(long srcAddress, long destAddress, long bytes) { + copyMemory(null, srcAddress, null, destAddress, bytes); + } + + /** + * Disposes of a block of native memory, as obtained from {@link + * #allocateMemory} or {@link #reallocateMemory}. The address passed to + * this method may be null, in which case no action is taken. + * + * @see #allocateMemory + */ + public native void freeMemory(long address); + + /// random queries + + /** + * This constant differs from all results that will ever be returned from + * {@link #staticFieldOffset}, {@link #objectFieldOffset}, + * or {@link #arrayBaseOffset}. + */ + public static final int INVALID_FIELD_OFFSET = -1; + + /** + * Reports the location of a given field in the storage allocation of its + * class. Do not expect to perform any sort of arithmetic on this offset; + * it is just a cookie which is passed to the unsafe heap memory accessors. + * + *

Any given field will always have the same offset and base, and no + * two distinct fields of the same class will ever have the same offset + * and base. + * + *

As of 1.4.1, offsets for fields are represented as long values, + * although the Sun JVM does not use the most significant 32 bits. + * However, JVM implementations which store static fields at absolute + * addresses can use long offsets and null base pointers to express + * the field locations in a form usable by {@link #getInt(Object,long)}. + * Therefore, code which will be ported to such JVMs on 64-bit platforms + * must preserve all bits of static field offsets. + * @see #getInt(Object, long) + */ + public native long objectFieldOffset(Field f); + + /** + * Reports the location of a given static field, in conjunction with {@link + * #staticFieldBase}. + *

Do not expect to perform any sort of arithmetic on this offset; + * it is just a cookie which is passed to the unsafe heap memory accessors. + * + *

Any given field will always have the same offset, and no two distinct + * fields of the same class will ever have the same offset. + * + *

As of 1.4.1, offsets for fields are represented as long values, + * although the Sun JVM does not use the most significant 32 bits. + * It is hard to imagine a JVM technology which needs more than + * a few bits to encode an offset within a non-array object, + * However, for consistency with other methods in this class, + * this method reports its result as a long value. + * @see #getInt(Object, long) + */ + public native long staticFieldOffset(Field f); + + /** + * Reports the location of a given static field, in conjunction with {@link + * #staticFieldOffset}. + *

Fetch the base "Object", if any, with which static fields of the + * given class can be accessed via methods like {@link #getInt(Object, + * long)}. This value may be null. This value may refer to an object + * which is a "cookie", not guaranteed to be a real Object, and it should + * not be used in any way except as argument to the get and put routines in + * this class. + */ + public native Object staticFieldBase(Field f); + + /** + * Detects if the given class may need to be initialized. This is often + * needed in conjunction with obtaining the static field base of a + * class. + * @return false only if a call to {@code ensureClassInitialized} would have no effect + */ + public native boolean shouldBeInitialized(Class c); + + /** + * Ensures the given class has been initialized. This is often + * needed in conjunction with obtaining the static field base of a + * class. + */ + public native void ensureClassInitialized(Class c); + + /** + * Reports the offset of the first element in the storage allocation of a + * given array class. If {@link #arrayIndexScale} returns a non-zero value + * for the same class, you may use that scale factor, together with this + * base offset, to form new offsets to access elements of arrays of the + * given class. + * + * @see #getInt(Object, long) + * @see #putInt(Object, long, int) + */ + public native int arrayBaseOffset(Class arrayClass); + + /** The value of {@code arrayBaseOffset(boolean[].class)} */ + public static final int ARRAY_BOOLEAN_BASE_OFFSET + = theUnsafe.arrayBaseOffset(boolean[].class); + + /** The value of {@code arrayBaseOffset(byte[].class)} */ + public static final int ARRAY_BYTE_BASE_OFFSET + = theUnsafe.arrayBaseOffset(byte[].class); + + /** The value of {@code arrayBaseOffset(short[].class)} */ + public static final int ARRAY_SHORT_BASE_OFFSET + = theUnsafe.arrayBaseOffset(short[].class); + + /** The value of {@code arrayBaseOffset(char[].class)} */ + public static final int ARRAY_CHAR_BASE_OFFSET + = theUnsafe.arrayBaseOffset(char[].class); + + /** The value of {@code arrayBaseOffset(int[].class)} */ + public static final int ARRAY_INT_BASE_OFFSET + = theUnsafe.arrayBaseOffset(int[].class); + + /** The value of {@code arrayBaseOffset(long[].class)} */ + public static final int ARRAY_LONG_BASE_OFFSET + = theUnsafe.arrayBaseOffset(long[].class); + + /** The value of {@code arrayBaseOffset(float[].class)} */ + public static final int ARRAY_FLOAT_BASE_OFFSET + = theUnsafe.arrayBaseOffset(float[].class); + + /** The value of {@code arrayBaseOffset(double[].class)} */ + public static final int ARRAY_DOUBLE_BASE_OFFSET + = theUnsafe.arrayBaseOffset(double[].class); + + /** The value of {@code arrayBaseOffset(Object[].class)} */ + public static final int ARRAY_OBJECT_BASE_OFFSET + = theUnsafe.arrayBaseOffset(Object[].class); + + /** + * Reports the scale factor for addressing elements in the storage + * allocation of a given array class. However, arrays of "narrow" types + * will generally not work properly with accessors like {@link + * #getByte(Object, long)}, so the scale factor for such classes is reported + * as zero. + * + * @see #arrayBaseOffset + * @see #getInt(Object, long) + * @see #putInt(Object, long, int) + */ + public native int arrayIndexScale(Class arrayClass); + + /** The value of {@code arrayIndexScale(boolean[].class)} */ + public static final int ARRAY_BOOLEAN_INDEX_SCALE + = theUnsafe.arrayIndexScale(boolean[].class); + + /** The value of {@code arrayIndexScale(byte[].class)} */ + public static final int ARRAY_BYTE_INDEX_SCALE + = theUnsafe.arrayIndexScale(byte[].class); + + /** The value of {@code arrayIndexScale(short[].class)} */ + public static final int ARRAY_SHORT_INDEX_SCALE + = theUnsafe.arrayIndexScale(short[].class); + + /** The value of {@code arrayIndexScale(char[].class)} */ + public static final int ARRAY_CHAR_INDEX_SCALE + = theUnsafe.arrayIndexScale(char[].class); + + /** The value of {@code arrayIndexScale(int[].class)} */ + public static final int ARRAY_INT_INDEX_SCALE + = theUnsafe.arrayIndexScale(int[].class); + + /** The value of {@code arrayIndexScale(long[].class)} */ + public static final int ARRAY_LONG_INDEX_SCALE + = theUnsafe.arrayIndexScale(long[].class); + + /** The value of {@code arrayIndexScale(float[].class)} */ + public static final int ARRAY_FLOAT_INDEX_SCALE + = theUnsafe.arrayIndexScale(float[].class); + + /** The value of {@code arrayIndexScale(double[].class)} */ + public static final int ARRAY_DOUBLE_INDEX_SCALE + = theUnsafe.arrayIndexScale(double[].class); + + /** The value of {@code arrayIndexScale(Object[].class)} */ + public static final int ARRAY_OBJECT_INDEX_SCALE + = theUnsafe.arrayIndexScale(Object[].class); + + /** + * Reports the size in bytes of a native pointer, as stored via {@link + * #putAddress}. This value will be either 4 or 8. Note that the sizes of + * other primitive types (as stored in native memory blocks) is determined + * fully by their information content. + */ + public native int addressSize(); + + /** The value of {@code addressSize()} */ + public static final int ADDRESS_SIZE = theUnsafe.addressSize(); + + /** + * Reports the size in bytes of a native memory page (whatever that is). + * This value will always be a power of two. + */ + public native int pageSize(); + + + /// random trusted operations from JNI: + + /** + * Tells the VM to define a class, without security checks. By default, the + * class loader and protection domain come from the caller's class. + */ + public native Class defineClass(String name, byte[] b, int off, int len, + ClassLoader loader, + ProtectionDomain protectionDomain); + + /** + * Defines a class but does not make it known to the class loader or system dictionary. + *

+ * For each CP entry, the corresponding CP patch must either be null or have + * the a format that matches its tag: + *

+ * @param hostClass context for linkage, access control, protection domain, and class loader + * @param data bytes of a class file + * @param cpPatches where non-null entries exist, they replace corresponding CP entries in data + */ + public native Class defineAnonymousClass(Class hostClass, byte[] data, Object[] cpPatches); + + /** + * Allocates an instance but does not run any constructor. + * Initializes the class if it has not yet been. + */ + @HotSpotIntrinsicCandidate + public native Object allocateInstance(Class cls) + throws InstantiationException; + + /** Throws the exception without telling the verifier. */ + public native void throwException(Throwable ee); + + /** + * Atomically updates Java variable to {@code x} if it is currently + * holding {@code expected}. + * + *

This operation has memory semantics of a {@code volatile} read + * and write. Corresponds to C11 atomic_compare_exchange_strong. + * + * @return {@code true} if successful + */ + @HotSpotIntrinsicCandidate + public final native boolean compareAndSwapObject(Object o, long offset, + Object expected, + Object x); + + /** + * Atomically updates Java variable to {@code x} if it is currently + * holding {@code expected}. + * + *

This operation has memory semantics of a {@code volatile} read + * and write. Corresponds to C11 atomic_compare_exchange_strong. + * + * @return {@code true} if successful + */ + @HotSpotIntrinsicCandidate + public final native boolean compareAndSwapInt(Object o, long offset, + int expected, + int x); + + /** + * Atomically updates Java variable to {@code x} if it is currently + * holding {@code expected}. + * + *

This operation has memory semantics of a {@code volatile} read + * and write. Corresponds to C11 atomic_compare_exchange_strong. + * + * @return {@code true} if successful + */ + @HotSpotIntrinsicCandidate + public final native boolean compareAndSwapLong(Object o, long offset, + long expected, + long x); + + /** + * Fetches a reference value from a given Java variable, with volatile + * load semantics. Otherwise identical to {@link #getObject(Object, long)} + */ + @HotSpotIntrinsicCandidate + public native Object getObjectVolatile(Object o, long offset); + + /** + * Stores a reference value into a given Java variable, with + * volatile store semantics. Otherwise identical to {@link #putObject(Object, long, Object)} + */ + @HotSpotIntrinsicCandidate + public native void putObjectVolatile(Object o, long offset, Object x); + + /** Volatile version of {@link #getInt(Object, long)} */ + @HotSpotIntrinsicCandidate + public native int getIntVolatile(Object o, long offset); + + /** Volatile version of {@link #putInt(Object, long, int)} */ + @HotSpotIntrinsicCandidate + public native void putIntVolatile(Object o, long offset, int x); + + /** Volatile version of {@link #getBoolean(Object, long)} */ + @HotSpotIntrinsicCandidate + public native boolean getBooleanVolatile(Object o, long offset); + + /** Volatile version of {@link #putBoolean(Object, long, boolean)} */ + @HotSpotIntrinsicCandidate + public native void putBooleanVolatile(Object o, long offset, boolean x); + + /** Volatile version of {@link #getByte(Object, long)} */ + @HotSpotIntrinsicCandidate + public native byte getByteVolatile(Object o, long offset); + + /** Volatile version of {@link #putByte(Object, long, byte)} */ + @HotSpotIntrinsicCandidate + public native void putByteVolatile(Object o, long offset, byte x); + + /** Volatile version of {@link #getShort(Object, long)} */ + @HotSpotIntrinsicCandidate + public native short getShortVolatile(Object o, long offset); + + /** Volatile version of {@link #putShort(Object, long, short)} */ + @HotSpotIntrinsicCandidate + public native void putShortVolatile(Object o, long offset, short x); + + /** Volatile version of {@link #getChar(Object, long)} */ + @HotSpotIntrinsicCandidate + public native char getCharVolatile(Object o, long offset); + + /** Volatile version of {@link #putChar(Object, long, char)} */ + @HotSpotIntrinsicCandidate + public native void putCharVolatile(Object o, long offset, char x); + + /** Volatile version of {@link #getLong(Object, long)} */ + @HotSpotIntrinsicCandidate + public native long getLongVolatile(Object o, long offset); + + /** Volatile version of {@link #putLong(Object, long, long)} */ + @HotSpotIntrinsicCandidate + public native void putLongVolatile(Object o, long offset, long x); + + /** Volatile version of {@link #getFloat(Object, long)} */ + @HotSpotIntrinsicCandidate + public native float getFloatVolatile(Object o, long offset); + + /** Volatile version of {@link #putFloat(Object, long, float)} */ + @HotSpotIntrinsicCandidate + public native void putFloatVolatile(Object o, long offset, float x); + + /** Volatile version of {@link #getDouble(Object, long)} */ + @HotSpotIntrinsicCandidate + public native double getDoubleVolatile(Object o, long offset); + + /** Volatile version of {@link #putDouble(Object, long, double)} */ + @HotSpotIntrinsicCandidate + public native void putDoubleVolatile(Object o, long offset, double x); + + /** + * Version of {@link #putObjectVolatile(Object, long, Object)} + * that does not guarantee immediate visibility of the store to + * other threads. This method is generally only useful if the + * underlying field is a Java volatile (or if an array cell, one + * that is otherwise only accessed using volatile accesses). + * + * Corresponds to C11 atomic_store_explicit(..., memory_order_release). + */ + @HotSpotIntrinsicCandidate + public native void putOrderedObject(Object o, long offset, Object x); + + /** Ordered/Lazy version of {@link #putIntVolatile(Object, long, int)} */ + @HotSpotIntrinsicCandidate + public native void putOrderedInt(Object o, long offset, int x); + + /** Ordered/Lazy version of {@link #putLongVolatile(Object, long, long)} */ + @HotSpotIntrinsicCandidate + public native void putOrderedLong(Object o, long offset, long x); + + /** + * Unblocks the given thread blocked on {@code park}, or, if it is + * not blocked, causes the subsequent call to {@code park} not to + * block. Note: this operation is "unsafe" solely because the + * caller must somehow ensure that the thread has not been + * destroyed. Nothing special is usually required to ensure this + * when called from Java (in which there will ordinarily be a live + * reference to the thread) but this is not nearly-automatically + * so when calling from native code. + * + * @param thread the thread to unpark. + */ + @HotSpotIntrinsicCandidate + public native void unpark(Object thread); + + /** + * Blocks current thread, returning when a balancing + * {@code unpark} occurs, or a balancing {@code unpark} has + * already occurred, or the thread is interrupted, or, if not + * absolute and time is not zero, the given time nanoseconds have + * elapsed, or if absolute, the given deadline in milliseconds + * since Epoch has passed, or spuriously (i.e., returning for no + * "reason"). Note: This operation is in the Unsafe class only + * because {@code unpark} is, so it would be strange to place it + * elsewhere. + */ + @HotSpotIntrinsicCandidate + public native void park(boolean isAbsolute, long time); + + /** + * Gets the load average in the system run queue assigned + * to the available processors averaged over various periods of time. + * This method retrieves the given {@code nelem} samples and + * assigns to the elements of the given {@code loadavg} array. + * The system imposes a maximum of 3 samples, representing + * averages over the last 1, 5, and 15 minutes, respectively. + * + * @param loadavg an array of double of size nelems + * @param nelems the number of samples to be retrieved and + * must be 1 to 3. + * + * @return the number of samples actually retrieved; or -1 + * if the load average is unobtainable. + */ + public native int getLoadAverage(double[] loadavg, int nelems); + + // The following contain CAS-based Java implementations used on + // platforms not supporting native instructions + + /** + * Atomically adds the given value to the current value of a field + * or array element within the given object {@code o} + * at the given {@code offset}. + * + * @param o object/array to update the field/element in + * @param offset field/element offset + * @param delta the value to add + * @return the previous value + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public final int getAndAddInt(Object o, long offset, int delta) { + int v; + do { + v = getIntVolatile(o, offset); + } while (!compareAndSwapInt(o, offset, v, v + delta)); + return v; + } + + /** + * Atomically adds the given value to the current value of a field + * or array element within the given object {@code o} + * at the given {@code offset}. + * + * @param o object/array to update the field/element in + * @param offset field/element offset + * @param delta the value to add + * @return the previous value + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public final long getAndAddLong(Object o, long offset, long delta) { + long v; + do { + v = getLongVolatile(o, offset); + } while (!compareAndSwapLong(o, offset, v, v + delta)); + return v; + } + + /** + * Atomically exchanges the given value with the current value of + * a field or array element within the given object {@code o} + * at the given {@code offset}. + * + * @param o object/array to update the field/element in + * @param offset field/element offset + * @param newValue new value + * @return the previous value + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public final int getAndSetInt(Object o, long offset, int newValue) { + int v; + do { + v = getIntVolatile(o, offset); + } while (!compareAndSwapInt(o, offset, v, newValue)); + return v; + } + + /** + * Atomically exchanges the given value with the current value of + * a field or array element within the given object {@code o} + * at the given {@code offset}. + * + * @param o object/array to update the field/element in + * @param offset field/element offset + * @param newValue new value + * @return the previous value + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public final long getAndSetLong(Object o, long offset, long newValue) { + long v; + do { + v = getLongVolatile(o, offset); + } while (!compareAndSwapLong(o, offset, v, newValue)); + return v; + } + + /** + * Atomically exchanges the given reference value with the current + * reference value of a field or array element within the given + * object {@code o} at the given {@code offset}. + * + * @param o object/array to update the field/element in + * @param offset field/element offset + * @param newValue new value + * @return the previous value + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public final Object getAndSetObject(Object o, long offset, Object newValue) { + Object v; + do { + v = getObjectVolatile(o, offset); + } while (!compareAndSwapObject(o, offset, v, newValue)); + return v; + } + + + /** + * Ensures that loads before the fence will not be reordered with loads and + * stores after the fence; a "LoadLoad plus LoadStore barrier". + * + * Corresponds to C11 atomic_thread_fence(memory_order_acquire) + * (an "acquire fence"). + * + * A pure LoadLoad fence is not provided, since the addition of LoadStore + * is almost always desired, and most current hardware instructions that + * provide a LoadLoad barrier also provide a LoadStore barrier for free. + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public native void loadFence(); + + /** + * Ensures that loads and stores before the fence will not be reordered with + * stores after the fence; a "StoreStore plus LoadStore barrier". + * + * Corresponds to C11 atomic_thread_fence(memory_order_release) + * (a "release fence"). + * + * A pure StoreStore fence is not provided, since the addition of LoadStore + * is almost always desired, and most current hardware instructions that + * provide a StoreStore barrier also provide a LoadStore barrier for free. + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public native void storeFence(); + + /** + * Ensures that loads and stores before the fence will not be reordered + * with loads and stores after the fence. Implies the effects of both + * loadFence() and storeFence(), and in addition, the effect of a StoreLoad + * barrier. + * + * Corresponds to C11 atomic_thread_fence(memory_order_seq_cst). + * @since 1.8 + */ + @HotSpotIntrinsicCandidate + public native void fullFence(); + + /** + * Throws IllegalAccessError; for use by the VM for access control + * error support. + * @since 1.8 + */ + private static void throwIllegalAccessError() { + throw new IllegalAccessError(); + } + + /** + * @return Returns true if the native byte ordering of this + * platform is big-endian, false if it is little-endian. + */ + public final boolean isBigEndian() { return BE; } + + /** + * @return Returns true if this platform is capable of performing + * accesses at addresses which are not aligned for the type of the + * primitive type being accessed, false otherwise. + */ + public final boolean unalignedAccess() { return unalignedAccess; } + + /** + * Fetches a value at some byte offset into a given Java object. + * More specifically, fetches a value within the given object + * o at the given offset, or (if o is + * null) from the memory address whose numerical value is the + * given offset.

+ * + * The specification of this method is the same as {@link + * #getLong(Object, long)} except that the offset does not need to + * have been obtained from {@link #objectFieldOffset} on the + * {@link java.lang.reflect.Field} of some Java field. The value + * in memory is raw data, and need not correspond to any Java + * variable. Unless o is null, the value accessed + * must be entirely within the allocated object. The endianness + * of the value in memory is the endianness of the native platform. + * + *

The read will be atomic with respect to the largest power + * of two that divides the GCD of the offset and the storage size. + * For example, getLongUnaligned will make atomic reads of 2-, 4-, + * or 8-byte storage units if the offset is zero mod 2, 4, or 8, + * respectively. There are no other guarantees of atomicity. + *

+ * 8-byte atomicity is only guaranteed on platforms on which + * support atomic accesses to longs. + * + * @param o Java heap object in which the value resides, if any, else + * null + * @param offset The offset in bytes from the start of the object + * @return the value fetched from the indicated object + * @throws RuntimeException No defined exceptions are thrown, not even + * {@link NullPointerException} + * @since 1.9 + */ + @HotSpotIntrinsicCandidate + public final long getLongUnaligned(Object o, long offset) { + if ((offset & 7) == 0) { + return getLong(o, offset); + } else if ((offset & 3) == 0) { + return makeLong(getInt(o, offset), + getInt(o, offset + 4)); + } else if ((offset & 1) == 0) { + return makeLong(getShort(o, offset), + getShort(o, offset + 2), + getShort(o, offset + 4), + getShort(o, offset + 6)); + } else { + return makeLong(getByte(o, offset), + getByte(o, offset + 1), + getByte(o, offset + 2), + getByte(o, offset + 3), + getByte(o, offset + 4), + getByte(o, offset + 5), + getByte(o, offset + 6), + getByte(o, offset + 7)); + } + } + /** + * As {@link #getLongUnaligned(Object, long)} but with an + * additional argument which specifies the endianness of the value + * as stored in memory. + * + * @param o Java heap object in which the variable resides + * @param offset The offset in bytes from the start of the object + * @param bigEndian The endianness of the value + * @return the value fetched from the indicated object + * @since 1.9 + */ + public final long getLongUnaligned(Object o, long offset, boolean bigEndian) { + return convEndian(bigEndian, getLongUnaligned(o, offset)); + } + + /** @see #getLongUnaligned(Object, long) */ + @HotSpotIntrinsicCandidate + public final int getIntUnaligned(Object o, long offset) { + if ((offset & 3) == 0) { + return getInt(o, offset); + } else if ((offset & 1) == 0) { + return makeInt(getShort(o, offset), + getShort(o, offset + 2)); + } else { + return makeInt(getByte(o, offset), + getByte(o, offset + 1), + getByte(o, offset + 2), + getByte(o, offset + 3)); + } + } + /** @see #getLongUnaligned(Object, long, boolean) */ + public final int getIntUnaligned(Object o, long offset, boolean bigEndian) { + return convEndian(bigEndian, getIntUnaligned(o, offset)); + } + + /** @see #getLongUnaligned(Object, long) */ + @HotSpotIntrinsicCandidate + public final short getShortUnaligned(Object o, long offset) { + if ((offset & 1) == 0) { + return getShort(o, offset); + } else { + return makeShort(getByte(o, offset), + getByte(o, offset + 1)); + } + } + /** @see #getLongUnaligned(Object, long, boolean) */ + public final short getShortUnaligned(Object o, long offset, boolean bigEndian) { + return convEndian(bigEndian, getShortUnaligned(o, offset)); + } + + /** @see #getLongUnaligned(Object, long) */ + @HotSpotIntrinsicCandidate + public final char getCharUnaligned(Object o, long offset) { + return (char)getShortUnaligned(o, offset); + } + + /** @see #getLongUnaligned(Object, long, boolean) */ + public final char getCharUnaligned(Object o, long offset, boolean bigEndian) { + return convEndian(bigEndian, getCharUnaligned(o, offset)); + } + + /** + * Stores a value at some byte offset into a given Java object. + *

+ * The specification of this method is the same as {@link + * #getLong(Object, long)} except that the offset does not need to + * have been obtained from {@link #objectFieldOffset} on the + * {@link java.lang.reflect.Field} of some Java field. The value + * in memory is raw data, and need not correspond to any Java + * variable. The endianness of the value in memory is the + * endianness of the native platform. + *

+ * The write will be atomic with respect to the largest power of + * two that divides the GCD of the offset and the storage size. + * For example, putLongUnaligned will make atomic writes of 2-, 4-, + * or 8-byte storage units if the offset is zero mod 2, 4, or 8, + * respectively. There are no other guarantees of atomicity. + *

+ * 8-byte atomicity is only guaranteed on platforms on which + * support atomic accesses to longs. + * + * @param o Java heap object in which the value resides, if any, else + * null + * @param offset The offset in bytes from the start of the object + * @param x the value to store + * @throws RuntimeException No defined exceptions are thrown, not even + * {@link NullPointerException} + * @since 1.9 + */ + @HotSpotIntrinsicCandidate + public final void putLongUnaligned(Object o, long offset, long x) { + if ((offset & 7) == 0) { + putLong(o, offset, x); + } else if ((offset & 3) == 0) { + putLongParts(o, offset, + (int)(x >> 0), + (int)(x >>> 32)); + } else if ((offset & 1) == 0) { + putLongParts(o, offset, + (short)(x >>> 0), + (short)(x >>> 16), + (short)(x >>> 32), + (short)(x >>> 48)); + } else { + putLongParts(o, offset, + (byte)(x >>> 0), + (byte)(x >>> 8), + (byte)(x >>> 16), + (byte)(x >>> 24), + (byte)(x >>> 32), + (byte)(x >>> 40), + (byte)(x >>> 48), + (byte)(x >>> 56)); + } + } + + /** + * As {@link #putLongUnaligned(Object, long, long)} but with an additional + * argument which specifies the endianness of the value as stored in memory. + * @param o Java heap object in which the value resides + * @param offset The offset in bytes from the start of the object + * @param x the value to store + * @param bigEndian The endianness of the value + * @throws RuntimeException No defined exceptions are thrown, not even + * {@link NullPointerException} + * @since 1.9 + */ + public final void putLongUnaligned(Object o, long offset, long x, boolean bigEndian) { + putLongUnaligned(o, offset, convEndian(bigEndian, x)); + } + + /** @see #putLongUnaligned(Object, long, long) */ + @HotSpotIntrinsicCandidate + public final void putIntUnaligned(Object o, long offset, int x) { + if ((offset & 3) == 0) { + putInt(o, offset, x); + } else if ((offset & 1) == 0) { + putIntParts(o, offset, + (short)(x >> 0), + (short)(x >>> 16)); + } else { + putIntParts(o, offset, + (byte)(x >>> 0), + (byte)(x >>> 8), + (byte)(x >>> 16), + (byte)(x >>> 24)); + } + } + /** @see #putLongUnaligned(Object, long, long, boolean) */ + public final void putIntUnaligned(Object o, long offset, int x, boolean bigEndian) { + putIntUnaligned(o, offset, convEndian(bigEndian, x)); + } + + /** @see #putLongUnaligned(Object, long, long) */ + @HotSpotIntrinsicCandidate + public final void putShortUnaligned(Object o, long offset, short x) { + if ((offset & 1) == 0) { + putShort(o, offset, x); + } else { + putShortParts(o, offset, + (byte)(x >>> 0), + (byte)(x >>> 8)); + } + } + /** @see #putLongUnaligned(Object, long, long, boolean) */ + public final void putShortUnaligned(Object o, long offset, short x, boolean bigEndian) { + putShortUnaligned(o, offset, convEndian(bigEndian, x)); + } + + /** @see #putLongUnaligned(Object, long, long) */ + @HotSpotIntrinsicCandidate + public final void putCharUnaligned(Object o, long offset, char x) { + putShortUnaligned(o, offset, (short)x); + } + /** @see #putLongUnaligned(Object, long, long, boolean) */ + public final void putCharUnaligned(Object o, long offset, char x, boolean bigEndian) { + putCharUnaligned(o, offset, convEndian(bigEndian, x)); + } + + // JVM interface methods + private native boolean unalignedAccess0(); + private native boolean isBigEndian0(); + + // BE is true iff the native endianness of this platform is big. + private static final boolean BE = theUnsafe.isBigEndian0(); + + // unalignedAccess is true iff this platform can perform unaligned accesses. + private static final boolean unalignedAccess = theUnsafe.unalignedAccess0(); + + private static int pickPos(int top, int pos) { return BE ? top - pos : pos; } + + // These methods construct integers from bytes. The byte ordering + // is the native endianness of this platform. + private static long makeLong(byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) { + return ((toUnsignedLong(i0) << pickPos(56, 0)) + | (toUnsignedLong(i1) << pickPos(56, 8)) + | (toUnsignedLong(i2) << pickPos(56, 16)) + | (toUnsignedLong(i3) << pickPos(56, 24)) + | (toUnsignedLong(i4) << pickPos(56, 32)) + | (toUnsignedLong(i5) << pickPos(56, 40)) + | (toUnsignedLong(i6) << pickPos(56, 48)) + | (toUnsignedLong(i7) << pickPos(56, 56))); + } + private static long makeLong(short i0, short i1, short i2, short i3) { + return ((toUnsignedLong(i0) << pickPos(48, 0)) + | (toUnsignedLong(i1) << pickPos(48, 16)) + | (toUnsignedLong(i2) << pickPos(48, 32)) + | (toUnsignedLong(i3) << pickPos(48, 48))); + } + private static long makeLong(int i0, int i1) { + return (toUnsignedLong(i0) << pickPos(32, 0)) + | (toUnsignedLong(i1) << pickPos(32, 32)); + } + private static int makeInt(short i0, short i1) { + return (toUnsignedInt(i0) << pickPos(16, 0)) + | (toUnsignedInt(i1) << pickPos(16, 16)); + } + private static int makeInt(byte i0, byte i1, byte i2, byte i3) { + return ((toUnsignedInt(i0) << pickPos(24, 0)) + | (toUnsignedInt(i1) << pickPos(24, 8)) + | (toUnsignedInt(i2) << pickPos(24, 16)) + | (toUnsignedInt(i3) << pickPos(24, 24))); + } + private static short makeShort(byte i0, byte i1) { + return (short)((toUnsignedInt(i0) << pickPos(8, 0)) + | (toUnsignedInt(i1) << pickPos(8, 8))); + } + + private static byte pick(byte le, byte be) { return BE ? be : le; } + private static short pick(short le, short be) { return BE ? be : le; } + private static int pick(int le, int be) { return BE ? be : le; } + + // These methods write integers to memory from smaller parts + // provided by their caller. The ordering in which these parts + // are written is the native endianness of this platform. + private void putLongParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) { + putByte(o, offset + 0, pick(i0, i7)); + putByte(o, offset + 1, pick(i1, i6)); + putByte(o, offset + 2, pick(i2, i5)); + putByte(o, offset + 3, pick(i3, i4)); + putByte(o, offset + 4, pick(i4, i3)); + putByte(o, offset + 5, pick(i5, i2)); + putByte(o, offset + 6, pick(i6, i1)); + putByte(o, offset + 7, pick(i7, i0)); + } + private void putLongParts(Object o, long offset, short i0, short i1, short i2, short i3) { + putShort(o, offset + 0, pick(i0, i3)); + putShort(o, offset + 2, pick(i1, i2)); + putShort(o, offset + 4, pick(i2, i1)); + putShort(o, offset + 6, pick(i3, i0)); + } + private void putLongParts(Object o, long offset, int i0, int i1) { + putInt(o, offset + 0, pick(i0, i1)); + putInt(o, offset + 4, pick(i1, i0)); + } + private void putIntParts(Object o, long offset, short i0, short i1) { + putShort(o, offset + 0, pick(i0, i1)); + putShort(o, offset + 2, pick(i1, i0)); + } + private void putIntParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3) { + putByte(o, offset + 0, pick(i0, i3)); + putByte(o, offset + 1, pick(i1, i2)); + putByte(o, offset + 2, pick(i2, i1)); + putByte(o, offset + 3, pick(i3, i0)); + } + private void putShortParts(Object o, long offset, byte i0, byte i1) { + putByte(o, offset + 0, pick(i0, i1)); + putByte(o, offset + 1, pick(i1, i0)); + } + + // Zero-extend an integer + private static int toUnsignedInt(byte n) { return n & 0xff; } + private static int toUnsignedInt(short n) { return n & 0xffff; } + private static long toUnsignedLong(byte n) { return n & 0xffl; } + private static long toUnsignedLong(short n) { return n & 0xffffl; } + private static long toUnsignedLong(int n) { return n & 0xffffffffl; } + + // Maybe byte-reverse an integer + private static char convEndian(boolean big, char n) { return big == BE ? n : Character.reverseBytes(n); } + private static short convEndian(boolean big, short n) { return big == BE ? n : Short.reverseBytes(n) ; } + private static int convEndian(boolean big, int n) { return big == BE ? n : Integer.reverseBytes(n) ; } + private static long convEndian(boolean big, long n) { return big == BE ? n : Long.reverseBytes(n) ; } +} diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/classes/sun/misc/Unsafe.java --- a/jdk/src/java.base/share/classes/sun/misc/Unsafe.java Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/misc/Unsafe.java Fri Oct 30 00:02:35 2015 +0100 @@ -1036,355 +1036,8 @@ throw new IllegalAccessError(); } - /** - * @return Returns true if the native byte ordering of this - * platform is big-endian, false if it is little-endian. - */ - public final boolean isBigEndian() { return BE; } - - /** - * @return Returns true if this platform is capable of performing - * accesses at addresses which are not aligned for the type of the - * primitive type being accessed, false otherwise. - */ - public final boolean unalignedAccess() { return unalignedAccess; } - - /** - * Fetches a value at some byte offset into a given Java object. - * More specifically, fetches a value within the given object - * o at the given offset, or (if o is - * null) from the memory address whose numerical value is the - * given offset.

- * - * The specification of this method is the same as {@link - * #getLong(Object, long)} except that the offset does not need to - * have been obtained from {@link #objectFieldOffset} on the - * {@link java.lang.reflect.Field} of some Java field. The value - * in memory is raw data, and need not correspond to any Java - * variable. Unless o is null, the value accessed - * must be entirely within the allocated object. The endianness - * of the value in memory is the endianness of the native platform. - * - *

The read will be atomic with respect to the largest power - * of two that divides the GCD of the offset and the storage size. - * For example, getLongUnaligned will make atomic reads of 2-, 4-, - * or 8-byte storage units if the offset is zero mod 2, 4, or 8, - * respectively. There are no other guarantees of atomicity. - *

- * 8-byte atomicity is only guaranteed on platforms on which - * support atomic accesses to longs. - * - * @param o Java heap object in which the value resides, if any, else - * null - * @param offset The offset in bytes from the start of the object - * @return the value fetched from the indicated object - * @throws RuntimeException No defined exceptions are thrown, not even - * {@link NullPointerException} - * @since 1.9 - */ - @HotSpotIntrinsicCandidate - public final long getLongUnaligned(Object o, long offset) { - if ((offset & 7) == 0) { - return getLong(o, offset); - } else if ((offset & 3) == 0) { - return makeLong(getInt(o, offset), - getInt(o, offset + 4)); - } else if ((offset & 1) == 0) { - return makeLong(getShort(o, offset), - getShort(o, offset + 2), - getShort(o, offset + 4), - getShort(o, offset + 6)); - } else { - return makeLong(getByte(o, offset), - getByte(o, offset + 1), - getByte(o, offset + 2), - getByte(o, offset + 3), - getByte(o, offset + 4), - getByte(o, offset + 5), - getByte(o, offset + 6), - getByte(o, offset + 7)); - } - } - /** - * As {@link #getLongUnaligned(Object, long)} but with an - * additional argument which specifies the endianness of the value - * as stored in memory. - * - * @param o Java heap object in which the variable resides - * @param offset The offset in bytes from the start of the object - * @param bigEndian The endianness of the value - * @return the value fetched from the indicated object - * @since 1.9 - */ - public final long getLongUnaligned(Object o, long offset, boolean bigEndian) { - return convEndian(bigEndian, getLongUnaligned(o, offset)); - } - - /** @see #getLongUnaligned(Object, long) */ - @HotSpotIntrinsicCandidate - public final int getIntUnaligned(Object o, long offset) { - if ((offset & 3) == 0) { - return getInt(o, offset); - } else if ((offset & 1) == 0) { - return makeInt(getShort(o, offset), - getShort(o, offset + 2)); - } else { - return makeInt(getByte(o, offset), - getByte(o, offset + 1), - getByte(o, offset + 2), - getByte(o, offset + 3)); - } - } - /** @see #getLongUnaligned(Object, long, boolean) */ - public final int getIntUnaligned(Object o, long offset, boolean bigEndian) { - return convEndian(bigEndian, getIntUnaligned(o, offset)); - } - - /** @see #getLongUnaligned(Object, long) */ - @HotSpotIntrinsicCandidate - public final short getShortUnaligned(Object o, long offset) { - if ((offset & 1) == 0) { - return getShort(o, offset); - } else { - return makeShort(getByte(o, offset), - getByte(o, offset + 1)); - } - } - /** @see #getLongUnaligned(Object, long, boolean) */ - public final short getShortUnaligned(Object o, long offset, boolean bigEndian) { - return convEndian(bigEndian, getShortUnaligned(o, offset)); - } - - /** @see #getLongUnaligned(Object, long) */ - @HotSpotIntrinsicCandidate - public final char getCharUnaligned(Object o, long offset) { - return (char)getShortUnaligned(o, offset); - } - - /** @see #getLongUnaligned(Object, long, boolean) */ - public final char getCharUnaligned(Object o, long offset, boolean bigEndian) { - return convEndian(bigEndian, getCharUnaligned(o, offset)); - } - - /** - * Stores a value at some byte offset into a given Java object. - *

- * The specification of this method is the same as {@link - * #getLong(Object, long)} except that the offset does not need to - * have been obtained from {@link #objectFieldOffset} on the - * {@link java.lang.reflect.Field} of some Java field. The value - * in memory is raw data, and need not correspond to any Java - * variable. The endianness of the value in memory is the - * endianness of the native platform. - *

- * The write will be atomic with respect to the largest power of - * two that divides the GCD of the offset and the storage size. - * For example, putLongUnaligned will make atomic writes of 2-, 4-, - * or 8-byte storage units if the offset is zero mod 2, 4, or 8, - * respectively. There are no other guarantees of atomicity. - *

- * 8-byte atomicity is only guaranteed on platforms on which - * support atomic accesses to longs. - * - * @param o Java heap object in which the value resides, if any, else - * null - * @param offset The offset in bytes from the start of the object - * @param x the value to store - * @throws RuntimeException No defined exceptions are thrown, not even - * {@link NullPointerException} - * @since 1.9 - */ - @HotSpotIntrinsicCandidate - public final void putLongUnaligned(Object o, long offset, long x) { - if ((offset & 7) == 0) { - putLong(o, offset, x); - } else if ((offset & 3) == 0) { - putLongParts(o, offset, - (int)(x >> 0), - (int)(x >>> 32)); - } else if ((offset & 1) == 0) { - putLongParts(o, offset, - (short)(x >>> 0), - (short)(x >>> 16), - (short)(x >>> 32), - (short)(x >>> 48)); - } else { - putLongParts(o, offset, - (byte)(x >>> 0), - (byte)(x >>> 8), - (byte)(x >>> 16), - (byte)(x >>> 24), - (byte)(x >>> 32), - (byte)(x >>> 40), - (byte)(x >>> 48), - (byte)(x >>> 56)); - } - } - - /** - * As {@link #putLongUnaligned(Object, long, long)} but with an additional - * argument which specifies the endianness of the value as stored in memory. - * @param o Java heap object in which the value resides - * @param offset The offset in bytes from the start of the object - * @param x the value to store - * @param bigEndian The endianness of the value - * @throws RuntimeException No defined exceptions are thrown, not even - * {@link NullPointerException} - * @since 1.9 - */ - public final void putLongUnaligned(Object o, long offset, long x, boolean bigEndian) { - putLongUnaligned(o, offset, convEndian(bigEndian, x)); - } - - /** @see #putLongUnaligned(Object, long, long) */ - @HotSpotIntrinsicCandidate - public final void putIntUnaligned(Object o, long offset, int x) { - if ((offset & 3) == 0) { - putInt(o, offset, x); - } else if ((offset & 1) == 0) { - putIntParts(o, offset, - (short)(x >> 0), - (short)(x >>> 16)); - } else { - putIntParts(o, offset, - (byte)(x >>> 0), - (byte)(x >>> 8), - (byte)(x >>> 16), - (byte)(x >>> 24)); - } - } - /** @see #putLongUnaligned(Object, long, long, boolean) */ - public final void putIntUnaligned(Object o, long offset, int x, boolean bigEndian) { - putIntUnaligned(o, offset, convEndian(bigEndian, x)); - } - - /** @see #putLongUnaligned(Object, long, long) */ - @HotSpotIntrinsicCandidate - public final void putShortUnaligned(Object o, long offset, short x) { - if ((offset & 1) == 0) { - putShort(o, offset, x); - } else { - putShortParts(o, offset, - (byte)(x >>> 0), - (byte)(x >>> 8)); - } - } - /** @see #putLongUnaligned(Object, long, long, boolean) */ - public final void putShortUnaligned(Object o, long offset, short x, boolean bigEndian) { - putShortUnaligned(o, offset, convEndian(bigEndian, x)); - } - - /** @see #putLongUnaligned(Object, long, long) */ - @HotSpotIntrinsicCandidate - public final void putCharUnaligned(Object o, long offset, char x) { - putShortUnaligned(o, offset, (short)x); - } - /** @see #putLongUnaligned(Object, long, long, boolean) */ - public final void putCharUnaligned(Object o, long offset, char x, boolean bigEndian) { - putCharUnaligned(o, offset, convEndian(bigEndian, x)); - } - // JVM interface methods private native boolean unalignedAccess0(); private native boolean isBigEndian0(); - // BE is true iff the native endianness of this platform is big. - private static final boolean BE = theUnsafe.isBigEndian0(); - - // unalignedAccess is true iff this platform can perform unaligned accesses. - private static final boolean unalignedAccess = theUnsafe.unalignedAccess0(); - - private static int pickPos(int top, int pos) { return BE ? top - pos : pos; } - - // These methods construct integers from bytes. The byte ordering - // is the native endianness of this platform. - private static long makeLong(byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) { - return ((toUnsignedLong(i0) << pickPos(56, 0)) - | (toUnsignedLong(i1) << pickPos(56, 8)) - | (toUnsignedLong(i2) << pickPos(56, 16)) - | (toUnsignedLong(i3) << pickPos(56, 24)) - | (toUnsignedLong(i4) << pickPos(56, 32)) - | (toUnsignedLong(i5) << pickPos(56, 40)) - | (toUnsignedLong(i6) << pickPos(56, 48)) - | (toUnsignedLong(i7) << pickPos(56, 56))); - } - private static long makeLong(short i0, short i1, short i2, short i3) { - return ((toUnsignedLong(i0) << pickPos(48, 0)) - | (toUnsignedLong(i1) << pickPos(48, 16)) - | (toUnsignedLong(i2) << pickPos(48, 32)) - | (toUnsignedLong(i3) << pickPos(48, 48))); - } - private static long makeLong(int i0, int i1) { - return (toUnsignedLong(i0) << pickPos(32, 0)) - | (toUnsignedLong(i1) << pickPos(32, 32)); - } - private static int makeInt(short i0, short i1) { - return (toUnsignedInt(i0) << pickPos(16, 0)) - | (toUnsignedInt(i1) << pickPos(16, 16)); - } - private static int makeInt(byte i0, byte i1, byte i2, byte i3) { - return ((toUnsignedInt(i0) << pickPos(24, 0)) - | (toUnsignedInt(i1) << pickPos(24, 8)) - | (toUnsignedInt(i2) << pickPos(24, 16)) - | (toUnsignedInt(i3) << pickPos(24, 24))); - } - private static short makeShort(byte i0, byte i1) { - return (short)((toUnsignedInt(i0) << pickPos(8, 0)) - | (toUnsignedInt(i1) << pickPos(8, 8))); - } - - private static byte pick(byte le, byte be) { return BE ? be : le; } - private static short pick(short le, short be) { return BE ? be : le; } - private static int pick(int le, int be) { return BE ? be : le; } - - // These methods write integers to memory from smaller parts - // provided by their caller. The ordering in which these parts - // are written is the native endianness of this platform. - private void putLongParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3, byte i4, byte i5, byte i6, byte i7) { - putByte(o, offset + 0, pick(i0, i7)); - putByte(o, offset + 1, pick(i1, i6)); - putByte(o, offset + 2, pick(i2, i5)); - putByte(o, offset + 3, pick(i3, i4)); - putByte(o, offset + 4, pick(i4, i3)); - putByte(o, offset + 5, pick(i5, i2)); - putByte(o, offset + 6, pick(i6, i1)); - putByte(o, offset + 7, pick(i7, i0)); - } - private void putLongParts(Object o, long offset, short i0, short i1, short i2, short i3) { - putShort(o, offset + 0, pick(i0, i3)); - putShort(o, offset + 2, pick(i1, i2)); - putShort(o, offset + 4, pick(i2, i1)); - putShort(o, offset + 6, pick(i3, i0)); - } - private void putLongParts(Object o, long offset, int i0, int i1) { - putInt(o, offset + 0, pick(i0, i1)); - putInt(o, offset + 4, pick(i1, i0)); - } - private void putIntParts(Object o, long offset, short i0, short i1) { - putShort(o, offset + 0, pick(i0, i1)); - putShort(o, offset + 2, pick(i1, i0)); - } - private void putIntParts(Object o, long offset, byte i0, byte i1, byte i2, byte i3) { - putByte(o, offset + 0, pick(i0, i3)); - putByte(o, offset + 1, pick(i1, i2)); - putByte(o, offset + 2, pick(i2, i1)); - putByte(o, offset + 3, pick(i3, i0)); - } - private void putShortParts(Object o, long offset, byte i0, byte i1) { - putByte(o, offset + 0, pick(i0, i1)); - putByte(o, offset + 1, pick(i1, i0)); - } - - // Zero-extend an integer - private static int toUnsignedInt(byte n) { return n & 0xff; } - private static int toUnsignedInt(short n) { return n & 0xffff; } - private static long toUnsignedLong(byte n) { return n & 0xffl; } - private static long toUnsignedLong(short n) { return n & 0xffffl; } - private static long toUnsignedLong(int n) { return n & 0xffffffffl; } - - // Maybe byte-reverse an integer - private static char convEndian(boolean big, char n) { return big == BE ? n : Character.reverseBytes(n); } - private static short convEndian(boolean big, short n) { return big == BE ? n : Short.reverseBytes(n) ; } - private static int convEndian(boolean big, int n) { return big == BE ? n : Integer.reverseBytes(n) ; } - private static long convEndian(boolean big, long n) { return big == BE ? n : Long.reverseBytes(n) ; } } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/classes/sun/security/provider/ByteArrayAccess.java --- a/jdk/src/java.base/share/classes/sun/security/provider/ByteArrayAccess.java Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/classes/sun/security/provider/ByteArrayAccess.java Fri Oct 30 00:02:35 2015 +0100 @@ -30,7 +30,7 @@ import java.nio.ByteOrder; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Optimized methods for converting between byte[] and int[]/long[], both for diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libjava/check_version.c --- a/jdk/src/java.base/share/native/libjava/check_version.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libjava/check_version.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -24,10 +24,11 @@ */ #include "jni.h" +#include "jni_util.h" #include "jvm.h" JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { jint vm_version = JVM_GetInterfaceVersion(); if (vm_version != JVM_INTERFACE_VERSION) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libjava/jio.c --- a/jdk/src/java.base/share/native/libjava/jio.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libjava/jio.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -27,6 +27,7 @@ #include "jni.h" +#ifndef STATIC_BUILD /* This is a temporary solution until we figure out how to let native * libraries use jio_* without linking with the VM. @@ -63,3 +64,6 @@ return len; } + +#endif + diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libjava/jni_util.h --- a/jdk/src/java.base/share/native/libjava/jni_util.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libjava/jni_util.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -389,6 +389,117 @@ extern size_t getLastErrorString(char *buf, size_t len); extern int getErrorString(int err, char *buf, size_t len); + +#ifdef STATIC_BUILD +/* Macros for handling declaration of static/dynamic + * JNI library Load/Unload functions + * + * Use DEF_JNI_On{Un}Load when you want a static and non-static entry points. + * Use DEF_STATIC_JNI_On{Un}Load when you only want a static one. + * + * LIBRARY_NAME must be set to the name of the library + */ + +/* These three macros are needed to get proper concatenation of + * the LIBRARY_NAME + * + * NOTE: LIBRARY_NAME must be set for static builds. + */ +#define ADD_LIB_NAME3(name, lib) name ## lib +#define ADD_LIB_NAME2(name, lib) ADD_LIB_NAME3(name, lib) +#define ADD_LIB_NAME(entry) ADD_LIB_NAME2(entry, LIBRARY_NAME) + +#define DEF_JNI_OnLoad \ +ADD_LIB_NAME(JNI_OnLoad_)(JavaVM *vm, void *reserved) \ +{ \ + jint JNICALL ADD_LIB_NAME(JNI_OnLoad_dynamic_)(JavaVM *vm, void *reserved); \ + ADD_LIB_NAME(JNI_OnLoad_dynamic_)(vm, reserved); \ + return JNI_VERSION_1_8; \ +} \ +jint JNICALL ADD_LIB_NAME(JNI_OnLoad_dynamic_) + +#define DEF_STATIC_JNI_OnLoad \ +JNIEXPORT jint JNICALL ADD_LIB_NAME(JNI_OnLoad_)(JavaVM *vm, void *reserved) { \ + return JNI_VERSION_1_8; \ +} + +#define DEF_JNI_OnUnload \ +ADD_LIB_NAME(JNI_OnUnload_)(JavaVM *vm, void *reserved) \ +{ \ + void JNICALL ADD_LIB_NAME(JNI_OnUnload_dynamic_)(JavaVM *vm, void *reserved); \ + ADD_LIB_NAME(JNI_OnUnload_dynamic_)(vm, reserved); \ +} \ +void JNICALL ADD_LIB_NAME(JNI_OnUnload_dynamic_) + +#define DEF_STATIC_JNI_OnUnload \ +ADD_LIB_NAME(JNI_OnUnload_) + +#else + +#define DEF_JNI_OnLoad JNI_OnLoad +#define DEF_STATIC_JNI_OnLoad +#define DEF_JNI_OnUnload JNI_OnUnload +#define DEF_STATIC_JNI_OnUnload +#endif + +#ifdef STATIC_BUILD +/* Macros for handling declaration of static/dynamic + * Agent library Load/Attach/Unload functions + * + * Use DEF_Agent_OnLoad, DEF_Agent_OnAttach or DEF_Agent_OnUnload + * when you want both static and non-static entry points. + * Use DEF_STATIC_Agent_OnLoad, DEF_STATIC_Agent_OnAttach or + * DEF_STATIC_Agent_OnUnload when you only want a static one. + * + * LIBRARY_NAME must be set to the name of the library for static builds. + */ + +#define DEF_Agent_OnLoad \ +ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) \ +{ \ + jint JNICALL ADD_LIB_NAME(Agent_OnLoad_dynamic_)(JavaVM *vm, char *options, void *reserved); \ + return ADD_LIB_NAME(Agent_OnLoad_dynamic_)(vm, options, reserved); \ +} \ +jint JNICALL ADD_LIB_NAME(Agent_OnLoad_dynamic_) + +#define DEF_STATIC_Agent_OnLoad \ +JNIEXPORT jint JNICALL ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) { \ + return JNI_FALSE; \ +} + +#define DEF_Agent_OnAttach \ +ADD_LIB_NAME(Agent_OnAttach_)(JavaVM *vm, char *options, void *reserved) \ +{ \ + jint JNICALL ADD_LIB_NAME(Agent_OnAttach_dynamic_)(JavaVM *vm, char *options, void *reserved); \ + return ADD_LIB_NAME(Agent_OnAttach_dynamic_)(vm, options, reserved); \ +} \ +jint JNICALL ADD_LIB_NAME(Agent_OnAttach_dynamic_) + +#define DEF_STATIC_Agent_OnAttach \ +JNIEXPORT jint JNICALL ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) { \ + return JNI_FALSE; \ +} + +#define DEF_Agent_OnUnload \ +ADD_LIB_NAME(Agent_OnUnload_)(JavaVM *vm) \ +{ \ + void JNICALL ADD_LIB_NAME(Agent_OnUnload_dynamic_)(JavaVM *vm); \ + ADD_LIB_NAME(Agent_OnUnload_dynamic_)(vm); \ +} \ +void JNICALL ADD_LIB_NAME(Agent_OnUnload_dynamic_) + +#define DEF_STATIC_Agent_OnUnload \ +ADD_LIB_NAME(Agent_OnUnload_) + +#else +#define DEF_Agent_OnLoad Agent_OnLoad +#define DEF_Agent_OnAttach Agent_OnAttach +#define DEF_Agent_OnUnload Agent_OnUnload +#define DEF_STATIC_Agent_OnLoad +#define DEF_STATIC_Agent_OnAttach +#define DEF_STATIC_Agent_OnUnload +#endif + #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp --- a/jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libjimage/ImageNativeSubstrate.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -236,7 +236,7 @@ } JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) { +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; if (vm->GetEnv((void**) &env, JNI_VERSION_1_2) != JNI_OK) { @@ -594,6 +594,6 @@ return module; } -JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) { +JNIEXPORT void JNICALL DEF_JNI_OnUnload(JavaVM *vm, void *reserved) { ImageDecompressor::image_decompressor_close(); } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libnet/net_util.c --- a/jdk/src/java.base/share/native/libnet/net_util.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libnet/net_util.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -38,7 +38,7 @@ } JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; jclass iCls; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libnio/nio_util.c --- a/jdk/src/java.base/share/native/libnio/nio_util.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libnio/nio_util.c Fri Oct 30 00:02:35 2015 +0100 @@ -28,7 +28,7 @@ #include "jni_util.h" JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libverify/check_code.c --- a/jdk/src/java.base/share/native/libverify/check_code.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libverify/check_code.c Fri Oct 30 00:02:35 2015 +0100 @@ -86,6 +86,7 @@ #include #include "jni.h" +#include "jni_util.h" #include "jvm.h" #include "classfile_constants.h" #include "opcodes.in_out" @@ -481,6 +482,11 @@ static void print_formatted_methodname(context_type *context, int index); #endif +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + void initialize_class_hash(context_type *context) { hash_table_type *class_hash = &(context->class_hash); diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/share/native/libzip/ZipFile.c --- a/jdk/src/java.base/share/native/libzip/ZipFile.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/share/native/libzip/ZipFile.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -55,6 +55,12 @@ static int OPEN_READ = java_util_zip_ZipFile_OPEN_READ; static int OPEN_DELETE = java_util_zip_ZipFile_OPEN_DELETE; + +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + JNIEXPORT void JNICALL Java_java_util_zip_ZipFile_initIDs(JNIEnv *env, jclass cls) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.base/unix/native/libjava/jlong_md.h --- a/jdk/src/java.base/unix/native/libjava/jlong_md.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.base/unix/native/libjava/jlong_md.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -65,11 +65,19 @@ #define jlong_zero_init ((jlong) 0L) #ifdef _LP64 -#define jlong_to_ptr(a) ((void*)(a)) -#define ptr_to_jlong(a) ((jlong)(a)) + #ifndef jlong_to_ptr + #define jlong_to_ptr(a) ((void*)(a)) + #endif + #ifndef ptr_to_jlong + #define ptr_to_jlong(a) ((jlong)(a)) + #endif #else -#define jlong_to_ptr(a) ((void*)(int)(a)) -#define ptr_to_jlong(a) ((jlong)(int)(a)) + #ifndef jlong_to_ptr + #define jlong_to_ptr(a) ((void*)(int)(a)) + #endif + #ifndef ptr_to_jlong + #define ptr_to_jlong(a) ((jlong)(int)(a)) + #endif #endif #define jint_to_jlong(a) ((jlong)(a)) diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m --- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m Fri Oct 30 00:02:35 2015 +0100 @@ -740,7 +740,7 @@ JNF_COCOA_EXIT(env) } -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { OSXAPP_SetJavaVM(vm); // We need to let Foundation know that this is a multithreaded application, if it isn't already. diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/macosx/native/libjawt/jawt.m --- a/jdk/src/java.desktop/macosx/native/libjawt/jawt.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/macosx/native/libjawt/jawt.m Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -24,12 +24,18 @@ */ #import +#import "jni_util.h" #import #import "awt_DrawingSurface.h" /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Get the AWT native structure. * This function returns JNI_FALSE if an error occurs. */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h --- a/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.h Fri Oct 30 00:02:35 2015 +0100 @@ -23,6 +23,12 @@ * questions. */ +/* + * Must include this before JavaNativeFoundation.h to get jni.h from build + */ +#include "jni.h" +#include "jni_util.h" + #import #import diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m --- a/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m Fri Oct 30 00:02:35 2015 +0100 @@ -33,6 +33,10 @@ #import "QueuingApplicationDelegate.h" #import "AWTIconData.h" +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad static BOOL sUsingDefaultNIB = YES; static NSString *SHARED_FRAMEWORK_BUNDLE = @"/System/Library/Frameworks/JavaVM.framework"; @@ -432,10 +436,10 @@ @end -void OSXAPP_SetApplicationDelegate(id delegate) +void OSXAPP_SetApplicationDelegate(id newdelegate) { AWT_ASSERT_APPKIT_THREAD; - applicationDelegate = delegate; + applicationDelegate = newdelegate; if (NSApp != nil) { [NSApp setDelegate: applicationDelegate]; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/macosx/native/libosxui/AquaLookAndFeel.m --- a/jdk/src/java.desktop/macosx/native/libosxui/AquaLookAndFeel.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/macosx/native/libosxui/AquaLookAndFeel.m Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -23,6 +23,10 @@ * questions. */ +// Must include this before JavaNativeFoundation.h to get jni.h from build +#include "jni.h" +#include "jni_util.h" + #import /* @@ -30,6 +34,7 @@ * AWT's JNI_OnLoad called multiple times * Please remove when has been resolved. */ -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) +{ return JNI_VERSION_1_4; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/libfontmanager/sunFont.c --- a/jdk/src/java.desktop/share/native/libfontmanager/sunFont.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libfontmanager/sunFont.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, 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 @@ -37,6 +37,10 @@ static void *theNullScalerContext = NULL; extern void AccelGlyphCache_RemoveAllCellInfos(GlyphInfo *glyph); +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad JNIEXPORT jlong JNICALL Java_sun_font_NullFontScaler_getNullScalerContext diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c --- a/jdk/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2015, 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 @@ -67,7 +67,7 @@ JavaVM *jvm; JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { jvm = vm; return JNI_VERSION_1_2; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/libjsound/Platform.c --- a/jdk/src/java.desktop/share/native/libjsound/Platform.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libjsound/Platform.c Fri Oct 30 00:02:35 2015 +0100 @@ -28,6 +28,10 @@ // Platform.java includes #include "com_sun_media_sound_Platform.h" +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad /* * Class: com_sun_media_sound_Platform diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/libjsound/Utilities.h --- a/jdk/src/java.desktop/share/native/libjsound/Utilities.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libjsound/Utilities.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -24,6 +24,7 @@ */ #include +#include "jni_util.h" #include "SoundDefs.h" #include "Configure.h" // put flags for debug msgs etc. here diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/liblcms/LCMS.c --- a/jdk/src/java.desktop/share/native/liblcms/LCMS.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/liblcms/LCMS.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, 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 @@ -134,7 +134,7 @@ JNU_ThrowByName(env, "java/awt/color/CMMException", errMsg); } -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *jvm, void *reserved) { javaVM = jvm; cmsSetLogErrorHandler(errorHandler); diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/libmlib_image/mlib_ImageUtils.c --- a/jdk/src/java.desktop/share/native/libmlib_image/mlib_ImageUtils.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libmlib_image/mlib_ImageUtils.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -26,6 +26,14 @@ #include "mlib_image.h" +#include +#include "jni_util.h" + +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + /***************************************************************/ typedef union { mlib_d64 db; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/share/native/libsplashscreen/java_awt_SplashScreen.c --- a/jdk/src/java.desktop/share/native/libsplashscreen/java_awt_SplashScreen.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/share/native/libsplashscreen/java_awt_SplashScreen.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -30,7 +30,7 @@ #include JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM * vm, void *reserved) +DEF_JNI_OnLoad(JavaVM * vm, void *reserved) { return JNI_VERSION_1_2; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c --- a/jdk/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -178,7 +178,7 @@ } JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { return AWT_OnLoad(vm, reserved); } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/unix/native/libawt_headless/awt/HeadlessToolkit.c --- a/jdk/src/java.desktop/unix/native/libawt_headless/awt/HeadlessToolkit.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/unix/native/libawt_headless/awt/HeadlessToolkit.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -31,14 +31,17 @@ extern JavaVM *jvm; JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { jvm = vm; return JNI_VERSION_1_2; } +#ifndef STATIC_BUILD +// The same function exists in libawt.a::awt_LoadLibrary.c JNIEXPORT jboolean JNICALL AWTIsHeadless() { return JNI_TRUE; } +#endif #endif diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c --- a/jdk/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c Fri Oct 30 00:02:35 2015 +0100 @@ -151,7 +151,7 @@ JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { jvm = vm; return JNI_VERSION_1_2; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/unix/native/libjawt/jawt.c --- a/jdk/src/java.desktop/unix/native/libjawt/jawt.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/unix/native/libjawt/jawt.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, 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 @@ -24,10 +24,16 @@ */ #include +#include "jni_util.h" #include "awt_DrawingSurface.h" /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Get the AWT native structure. This function returns JNI_FALSE if * an error occurs. */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/unix/native/libjsound/PLATFORM_API_LinuxOS_ALSA_CommonUtils.c --- a/jdk/src/java.desktop/unix/native/libjsound/PLATFORM_API_LinuxOS_ALSA_CommonUtils.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/unix/native/libjsound/PLATFORM_API_LinuxOS_ALSA_CommonUtils.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -44,6 +44,11 @@ static int alsa_enumerate_pcm_subdevices = FALSE; // default: no static int alsa_enumerate_midi_subdevices = FALSE; // default: no +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + void initAlsaSupport() { char* enumerate; if (!alsa_inited) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp --- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2015, 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 @@ -91,7 +91,7 @@ JavaVM *jvm = NULL; JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { TRY; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.desktop/windows/native/libjawt/jawt.cpp --- a/jdk/src/java.desktop/windows/native/libjawt/jawt.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.desktop/windows/native/libjawt/jawt.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, 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 @@ -25,11 +25,17 @@ #define _JNI_IMPLEMENTATION_ #include +#include "jni_util.h" #include "awt.h" #include "awt_DrawingSurface.h" /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Get the AWT native structure. This function returns JNI_FALSE if * an error occurs. */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.instrument/share/native/libinstrument/InstrumentationImplNativeMethods.c --- a/jdk/src/java.instrument/share/native/libinstrument/InstrumentationImplNativeMethods.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.instrument/share/native/libinstrument/InstrumentationImplNativeMethods.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -50,6 +50,11 @@ */ /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Class: sun_instrument_InstrumentationImpl * Method: isModifiableClass0 * Signature: (Ljava/lang/Class;)Z diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.instrument/share/native/libinstrument/InvocationAdapter.c --- a/jdk/src/java.instrument/share/native/libinstrument/InvocationAdapter.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.instrument/share/native/libinstrument/InvocationAdapter.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -141,7 +141,7 @@ * to create boot class path segments to append to the boot class path. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *tail, void * reserved) { +DEF_Agent_OnLoad(JavaVM *vm, char *tail, void * reserved) { JPLISInitializationError initerror = JPLIS_INIT_ERROR_NONE; jint result = JNI_OK; JPLISAgent * agent = NULL; @@ -290,7 +290,7 @@ * the JPLIS library. */ JNIEXPORT jint JNICALL -Agent_OnAttach(JavaVM* vm, char *args, void * reserved) { +DEF_Agent_OnAttach(JavaVM* vm, char *args, void * reserved) { JPLISInitializationError initerror = JPLIS_INIT_ERROR_NONE; jint result = JNI_OK; JPLISAgent * agent = NULL; @@ -435,7 +435,7 @@ JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) { +DEF_Agent_OnUnload(JavaVM *vm) { } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.instrument/share/native/libinstrument/JarFacade.h --- a/jdk/src/java.instrument/share/native/libinstrument/JarFacade.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.instrument/share/native/libinstrument/JarFacade.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, 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 @@ -23,6 +23,10 @@ * questions. */ +#ifdef STATIC_BUILD +#define getAttribute JarGetAttribute +#endif + typedef struct _jarAttribute { char* name; char* value; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.instrument/share/native/libinstrument/Utilities.h --- a/jdk/src/java.instrument/share/native/libinstrument/Utilities.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.instrument/share/native/libinstrument/Utilities.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -32,6 +32,13 @@ #include #include +#include "jni_util.h" + +#ifdef STATIC_BUILD +#define allocate instAllocate +#define deallocate instDeallocate +#endif + #ifdef __cplusplus extern "C" { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.management/share/native/libmanagement/management.c --- a/jdk/src/java.management/share/native/libmanagement/management.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.management/share/native/libmanagement/management.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -25,6 +25,7 @@ #include #include +#include "jni_util.h" #include "jvm.h" #include "management.h" @@ -35,7 +36,7 @@ jint jmm_version = 0; JNIEXPORT jint JNICALL - JNI_OnLoad(JavaVM *vm, void *reserved) { + DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv* env; jvm = vm; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.prefs/macosx/native/libprefs/MacOSXPreferencesFile.m --- a/jdk/src/java.prefs/macosx/native/libprefs/MacOSXPreferencesFile.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.prefs/macosx/native/libprefs/MacOSXPreferencesFile.m Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -64,6 +64,11 @@ #include "jlong.h" #include "jvm.h" +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + // Throw an OutOfMemoryError with the given message. static void throwOutOfMemoryError(JNIEnv *env, const char *msg) diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.prefs/unix/native/libprefs/FileSystemPreferences.c --- a/jdk/src/java.prefs/unix/native/libprefs/FileSystemPreferences.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.prefs/unix/native/libprefs/FileSystemPreferences.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, 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 @@ -35,6 +35,11 @@ #include #include "jni_util.h" +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + JNIEXPORT jint JNICALL Java_java_util_prefs_FileSystemPreferences_chmod(JNIEnv *env, jclass thisclass, jstring java_fname, jint permission) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.prefs/windows/native/libprefs/WindowsPreferences.c --- a/jdk/src/java.prefs/windows/native/libprefs/WindowsPreferences.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.prefs/windows/native/libprefs/WindowsPreferences.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -31,6 +31,12 @@ #ifdef __cplusplus extern "C" { #endif + +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + JNIEXPORT jintArray JNICALL Java_java_util_prefs_WindowsPreferences_WindowsRegOpenKey (JNIEnv* env, jclass this_class, jint hKey, jbyteArray lpSubKey, jint securityMask) { HKEY handle; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.security.jgss/macosx/native/libosxkrb5/nativeccache.c --- a/jdk/src/java.security.jgss/macosx/native/libosxkrb5/nativeccache.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.security.jgss/macosx/native/libosxkrb5/nativeccache.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -28,6 +28,8 @@ #import #import +#include "jni_util.h" + /* * Based largely on klist.c, * @@ -92,7 +94,7 @@ * Class: sun_security_krb5_KrbCreds * Method: JNI_OnLoad */ -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *jvm, void *reserved) { JNIEnv *env; @@ -191,7 +193,7 @@ * Class: sun_security_jgss_KrbCreds * Method: JNI_OnUnload */ -JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved) +JNIEXPORT void JNICALL DEF_JNI_OnUnload(JavaVM *jvm, void *reserved) { JNIEnv *env; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.security.jgss/share/native/libj2gss/NativeUtil.c --- a/jdk/src/java.security.jgss/share/native/libj2gss/NativeUtil.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.security.jgss/share/native/libj2gss/NativeUtil.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -27,6 +27,7 @@ #include "NativeFunc.h" #include "jlong.h" #include +#include "jni_util.h" const int JAVA_DUPLICATE_TOKEN_CODE = 19; /* DUPLICATE_TOKEN */ const int JAVA_OLD_TOKEN_CODE = 20; /* OLD_TOKEN */ @@ -94,7 +95,7 @@ int JGSS_DEBUG; JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *jvm, void *reserved) { +DEF_JNI_OnLoad(JavaVM *jvm, void *reserved) { JNIEnv *env; jclass cls; @@ -363,7 +364,7 @@ } JNIEXPORT void JNICALL -JNI_OnUnload(JavaVM *jvm, void *reserved) { +DEF_JNI_OnUnload(JavaVM *jvm, void *reserved) { JNIEnv *env; if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_2)) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.security.jgss/share/native/libj2gss/NativeUtil.h --- a/jdk/src/java.security.jgss/share/native/libj2gss/NativeUtil.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.security.jgss/share/native/libj2gss/NativeUtil.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -54,9 +54,6 @@ extern jstring getMinorMessage(JNIEnv *, jobject, OM_uint32); extern int sameMech(gss_OID, gss_OID); - JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *, void *); - JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *, void *); - extern int JGSS_DEBUG; extern jclass CLS_Object; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.security.jgss/windows/native/libw2k_lsa_auth/NativeCreds.c --- a/jdk/src/java.security.jgss/windows/native/libw2k_lsa_auth/NativeCreds.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.security.jgss/windows/native/libw2k_lsa_auth/NativeCreds.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -42,6 +42,7 @@ #include #include #include +#include "jni_util.h" #include #undef LSA_SUCCESS @@ -107,7 +108,7 @@ * Method: JNI_OnLoad */ -JNIEXPORT jint JNICALL JNI_OnLoad( +JNIEXPORT jint JNICALL DEF_JNI_OnLoad( JavaVM *jvm, void *reserved) { @@ -329,7 +330,7 @@ * Method: JNI_OnUnload */ -JNIEXPORT void JNICALL JNI_OnUnload( +JNIEXPORT void JNICALL DEF_JNI_OnUnload( JavaVM *jvm, void *reserved) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/java.smartcardio/share/native/libj2pcsc/pcsc.c --- a/jdk/src/java.smartcardio/share/native/libj2pcsc/pcsc.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/java.smartcardio/share/native/libj2pcsc/pcsc.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -55,6 +55,8 @@ #include "pcsc_md.h" +#include "jni_util.h" + #define MAX_STACK_BUFFER_SIZE 8192 // make the buffers larger than what should be necessary, just in case @@ -101,7 +103,7 @@ } } -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_VERSION_1_4; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.attach/linux/native/libattach/VirtualMachineImpl.c --- a/jdk/src/jdk.attach/linux/native/libattach/VirtualMachineImpl.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.attach/linux/native/libattach/VirtualMachineImpl.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -50,6 +50,11 @@ } while(0) /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Defines a callback that is invoked for each process */ typedef void (*ProcessCallback)(const pid_t pid, void* user_data); diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.attach/macosx/native/libattach/VirtualMachineImpl.c --- a/jdk/src/jdk.attach/macosx/native/libattach/VirtualMachineImpl.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.attach/macosx/native/libattach/VirtualMachineImpl.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -51,6 +51,11 @@ } while(0) /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Class: sun_tools_attach_VirtualMachineImpl * Method: socket * Signature: ()I diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.attach/solaris/native/libattach/VirtualMachineImpl.c --- a/jdk/src/jdk.attach/solaris/native/libattach/VirtualMachineImpl.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.attach/solaris/native/libattach/VirtualMachineImpl.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -46,6 +46,11 @@ } while(0) /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Class: sun_tools_attach_VirtualMachineImpl * Method: open * Signature: (Ljava/lang/String;)I diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.attach/windows/native/libattach/VirtualMachineImpl.c --- a/jdk/src/jdk.attach/windows/native/libattach/VirtualMachineImpl.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.attach/windows/native/libattach/VirtualMachineImpl.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -87,6 +87,10 @@ #define ERR_OPEN_JVM_FAIL 200 #define ERR_GET_ENQUEUE_FUNC_FAIL 201 +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad /* * Code copied to target process diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp --- a/jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.crypto.ec/share/native/libsunec/ECC_JNI.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -24,6 +24,7 @@ */ #include +#include "jni_util.h" #include "impl/ecc_impl.h" #define ILLEGAL_STATE_EXCEPTION "java/lang/IllegalStateException" @@ -36,6 +37,11 @@ extern "C" { /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Throws an arbitrary Java exception. */ void ThrowException(JNIEnv *env, const char *exceptionName) diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.crypto.mscapi/windows/native/libsunmscapi/security.cpp --- a/jdk/src/jdk.crypto.mscapi/windows/native/libsunmscapi/security.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.crypto.mscapi/windows/native/libsunmscapi/security.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -29,6 +29,7 @@ // #include +#include "jni_util.h" #include #include #include @@ -51,6 +52,11 @@ extern "C" { /* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + +/* * Throws an arbitrary Java exception. * The exception message is a Windows system error message. */ diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c --- a/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.crypto.pkcs11/share/native/libj2pkcs11/p11_general.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. */ /* Copyright (c) 2002 Graz University of Technology. All rights reserved. @@ -73,7 +73,7 @@ JavaVM* jvm = NULL; -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { jvm = vm; return JNI_VERSION_1_4; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCrypto.c --- a/jdk/src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCrypto.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCrypto.c Fri Oct 30 00:02:35 2015 +0100 @@ -27,6 +27,7 @@ #include #include #include +#include "jni_util.h" #include #include "nativeCrypto.h" #include "nativeFunc.h" @@ -59,7 +60,7 @@ (*env)->DeleteLocalRef(env, jExClass); } -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { +JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_VERSION_1_4; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.deploy.osx/macosx/native/libapplescriptengine/AppleScriptEngine.m --- a/jdk/src/jdk.deploy.osx/macosx/native/libapplescriptengine/AppleScriptEngine.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.deploy.osx/macosx/native/libapplescriptengine/AppleScriptEngine.m Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -26,6 +26,10 @@ #import "apple_applescript_AppleScriptEngine.h" #import "apple_applescript_AppleScriptEngineFactory.h" +// Must include this before JavaNativeFoundation.h to get jni.h from build +#include "jni.h" +#include "jni_util.h" + #import #import "NS_Java_ConversionUtils.h" @@ -33,6 +37,10 @@ //#define DEBUG 1 +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad /* * Class: apple_applescript_AppleScriptEngineFactory diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.deploy.osx/macosx/native/libosx/Dispatch.m --- a/jdk/src/jdk.deploy.osx/macosx/native/libosx/Dispatch.m Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.deploy.osx/macosx/native/libosx/Dispatch.m Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -23,11 +23,21 @@ * questions. */ +/* + * Must include this before JavaNativeFoundation.h to get jni.h from build + */ +#include "jni.h" +#include "jni_util.h" + #import "com_apple_concurrent_LibDispatchNative.h" #import #import +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad /* * Class: com_apple_concurrent_LibDispatchNative diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c --- a/jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -194,7 +194,7 @@ * Returning JNI_ERR will cause the java_g VM to core dump, be careful. */ JNIEXPORT jint JNICALL -Agent_OnLoad(JavaVM *vm, char *options, void *reserved) +DEF_Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { jvmtiError error; jvmtiCapabilities needed_capabilities; @@ -380,7 +380,7 @@ } JNIEXPORT void JNICALL -Agent_OnUnload(JavaVM *vm) +DEF_Agent_OnUnload(JavaVM *vm) { gdata->isLoaded = JNI_FALSE; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.h --- a/jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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,7 +39,4 @@ void debugInit_exit(jvmtiError, const char *); void forceExit(int); -JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *, char *, void *); -JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *); - #endif diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.jdwp.agent/share/native/libjdwp/transport.c --- a/jdk/src/jdk.jdwp.agent/share/native/libjdwp/transport.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.jdwp.agent/share/native/libjdwp/transport.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -101,9 +101,10 @@ static void * loadTransportLibrary(const char *libdir, const char *name) { + char buf[MAXPATHLEN*2+100]; +#ifndef STATIC_BUILD void *handle; char libname[MAXPATHLEN+2]; - char buf[MAXPATHLEN*2+100]; const char *plibdir; /* Convert libdir from UTF-8 to platform encoding */ @@ -125,6 +126,9 @@ /* dlopen (unix) / LoadLibrary (windows) the transport library */ handle = dbgsysLoadLibrary(libname, buf, sizeof(buf)); return handle; +#else + return (dbgsysLoadLibrary(NULL, buf, sizeof(buf))); +#endif } /* diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.jdwp.agent/share/native/libjdwp/util.h --- a/jdk/src/jdk.jdwp.agent/share/native/libjdwp/util.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.jdwp.agent/share/native/libjdwp/util.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -278,18 +278,6 @@ #define MOD_SYNTHETIC 0xf0000000 /* not in source code */ /* - * jlong conversion macros - */ -#define jlong_zero ((jlong) 0) -#define jlong_one ((jlong) 1) - -#define jlong_to_ptr(a) ((void*)(intptr_t)(a)) -#define ptr_to_jlong(a) ((jlong)(intptr_t)(a)) -#define jint_to_jlong(a) ((jlong)(a)) -#define jlong_to_jint(a) ((jint)(a)) - - -/* * util funcs */ void util_initialize(JNIEnv *env); diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.jdwp.agent/share/native/libjdwp/vm_interface.h --- a/jdk/src/jdk.jdwp.agent/share/native/libjdwp/vm_interface.h Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.jdwp.agent/share/native/libjdwp/vm_interface.h Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -33,6 +33,7 @@ #include #include #include +#include "jni_util.h" #include "log_messages.h" diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.management/share/native/libmanagement_ext/management_ext.c --- a/jdk/src/jdk.management/share/native/libmanagement_ext/management_ext.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.management/share/native/libmanagement_ext/management_ext.c Fri Oct 30 00:02:35 2015 +0100 @@ -25,6 +25,7 @@ #include #include +#include "jni_util.h" #include "jvm.h" #include "management_ext.h" @@ -35,7 +36,7 @@ jint jmm_version = 0; JNIEXPORT jint JNICALL - JNI_OnLoad(JavaVM *vm, void *reserved) { + DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv* env; jvm = vm; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.pack200/share/native/common-unpack/utils.cpp --- a/jdk/src/jdk.pack200/share/native/common-unpack/utils.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.pack200/share/native/common-unpack/utils.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, 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 @@ -77,6 +77,8 @@ #ifndef PRODUCT +#ifndef STATIC_BUILD +// use the definition in libjvm when building statically void breakpoint() { } // hook for debugger int assert_failed(const char* p) { char message[1<<12]; @@ -87,6 +89,7 @@ return 0; } #endif +#endif void unpack_abort(const char* msg, unpacker* u) { if (msg == null) msg = "corrupt pack file or internal error"; diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.pack200/share/native/libunpack/jni.cpp --- a/jdk/src/jdk.pack200/share/native/libunpack/jni.cpp Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.pack200/share/native/libunpack/jni.cpp Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -95,6 +95,11 @@ } while (JNI_FALSE) #endif +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + static jlong read_input_via_jni(unpacker* self, void* buf, jlong minlen, jlong maxlen); diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.sctp/unix/native/libsctp/SctpNet.c --- a/jdk/src/jdk.sctp/unix/native/libsctp/SctpNet.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.sctp/unix/native/libsctp/SctpNet.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -43,7 +43,7 @@ static const char* nativeSctpLib = "libsctp.so.1"; static jboolean funcsLoaded = JNI_FALSE; -JNIEXPORT jint JNICALL JNI_OnLoad +JNIEXPORT jint JNICALL DEF_JNI_OnLoad (JavaVM *vm, void *reserved) { return JNI_VERSION_1_2; } diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.security.auth/unix/native/libjaas/Unix.c --- a/jdk/src/jdk.security.auth/unix/native/libjaas/Unix.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.security.auth/unix/native/libjaas/Unix.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -28,6 +28,7 @@ #endif #include +#include "jni_util.h" #include "com_sun_security_auth_module_UnixSystem.h" #include #include @@ -36,6 +37,11 @@ #include #include +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + JNIEXPORT void JNICALL Java_com_sun_security_auth_module_UnixSystem_getUnixInfo (JNIEnv *env, jobject obj) { diff -r 3d71824cad30 -r 781823826ae0 jdk/src/jdk.security.auth/windows/native/libjaas/nt.c --- a/jdk/src/jdk.security.auth/windows/native/libjaas/nt.c Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/src/jdk.security.auth/windows/native/libjaas/nt.c Fri Oct 30 00:02:35 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -24,6 +24,7 @@ */ #include +#include "jni_util.h" #include "com_sun_security_auth_module_NTSystem.h" #include @@ -49,6 +50,11 @@ (*env)->ThrowNew(env, clazz, msg); } +/* + * Declare library specific JNI_Onload entry if static build + */ +DEF_STATIC_JNI_OnLoad + JNIEXPORT jlong JNICALL Java_com_sun_security_auth_module_NTSystem_getImpersonationToken0 (JNIEnv *env, jobject obj) { diff -r 3d71824cad30 -r 781823826ae0 jdk/test/ProblemList.txt --- a/jdk/test/ProblemList.txt Mon Oct 26 17:19:13 2015 -0700 +++ b/jdk/test/ProblemList.txt Fri Oct 30 00:02:35 2015 +0100 @@ -366,6 +366,18 @@ # 8062512 java/util/spi/ResourceBundleControlProvider/UserDefaultControlTest.java generic-all +# 8076458 +java/util/stream/test/org/openjdk/tests/java/util/stream/FlatMapOpTest.java generic-all + +# 8130337 +java/util/stream/test/org/openjdk/tests/java/util/stream/IntPrimitiveOpsTests.java generic-all + +# 8080165, 8085982 +java/util/Arrays/ParallelPrefix.java generic-all + +# 8079538 +java/util/BitSet/BitSetStreamTest.java generic-all + ############################################################################ # jdk_instrument