mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-02 14:38:28 +00:00
Merge
This commit is contained in:
commit
e8a9982ea6
2
.hgtags
2
.hgtags
@ -471,3 +471,5 @@ e569e83139fdfbecfeb3cd9014d560917787f158 jdk-10+38
|
||||
107413b070b92c88bde6230ceb4a19b579781068 jdk-10+43
|
||||
dfa46cfe56346884a61efdc30dc50f7505d66761 jdk-11+1
|
||||
03ae177c26b016353e5ea1cab6ffd051dfa086ca jdk-11+2
|
||||
663f20fc51091bd7f95d18448850ba091207b7bd jdk-10+44
|
||||
4f96cf952e71cb8a127334494faf28880c26181b jdk-10+45
|
||||
|
||||
@ -61,7 +61,7 @@ MODULES_SOURCE_PATH := $(call PathList, $(call GetModuleSrcPath) \
|
||||
$(SUPPORT_OUTPUTDIR)/rmic/* $(TOPDIR)/src/*/share/doc/stub)
|
||||
|
||||
# URLs
|
||||
JAVADOC_BASE_URL := http://www.oracle.com/pls/topic/lookup?ctx=javase9&id=homepage
|
||||
JAVADOC_BASE_URL := http://www.oracle.com/pls/topic/lookup?ctx=javase10&id=homepage
|
||||
BUG_SUBMIT_URL := http://bugreport.java.com/bugreport/
|
||||
COPYRIGHT_URL := {@docroot}/../legal/copyright.html
|
||||
LICENSE_URL := http://www.oracle.com/technetwork/java/javase/terms/license/java10speclicense.html
|
||||
|
||||
@ -1127,6 +1127,8 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
|
||||
fi
|
||||
fi
|
||||
BASIC_REQUIRE_PROGS(SETFILE, SetFile)
|
||||
elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
|
||||
BASIC_REQUIRE_PROGS(ELFEDIT, elfedit)
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
@ -710,6 +710,7 @@ CYGPATH:=@CYGPATH@
|
||||
LDD:=@LDD@
|
||||
OTOOL:=@OTOOL@
|
||||
READELF:=@READELF@
|
||||
ELFEDIT:=@ELFEDIT@
|
||||
EXPR:=@EXPR@
|
||||
FILE:=@FILE@
|
||||
DOT:=@DOT@
|
||||
|
||||
@ -423,7 +423,7 @@ _sequence-do = \
|
||||
|
||||
################################################################################
|
||||
|
||||
MAX_PARAMS := 35
|
||||
MAX_PARAMS := 36
|
||||
PARAM_SEQUENCE := $(call sequence, 2, $(MAX_PARAMS))
|
||||
|
||||
# Template for creating a macro taking named parameters. To use it, assign the
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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 @@
|
||||
ifndef _NATIVE_COMPILATION_GMK
|
||||
_NATIVE_COMPILATION_GMK := 1
|
||||
|
||||
ifeq (,$(_MAKEBASE_GMK))
|
||||
ifeq ($(_MAKEBASE_GMK), )
|
||||
$(error You must include MakeBase.gmk prior to including NativeCompilation.gmk)
|
||||
endif
|
||||
|
||||
@ -231,32 +231,32 @@ define add_native_source
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$$(filter %.c,$2))
|
||||
ifneq ($$(filter %.c, $2), )
|
||||
# Compile as a C file
|
||||
$1_$2_FLAGS=$(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \
|
||||
$1_$2_FLAGS := $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \
|
||||
$$($1_$(notdir $2)_OPT_CFLAGS) \
|
||||
$$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c
|
||||
$1_$2_COMP=$5
|
||||
$1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
|
||||
else ifneq (,$$(filter %.m,$2))
|
||||
$1_$2_COMP := $5
|
||||
$1_$2_DEP_FLAG := $(C_FLAG_DEPS)
|
||||
else ifneq ($$(filter %.m, $2), )
|
||||
# Compile as an Objective-C file
|
||||
$1_$2_FLAGS=-x objective-c $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \
|
||||
$1_$2_FLAGS := -x objective-c $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $4 \
|
||||
$$($1_$(notdir $2)_OPT_CFLAGS) \
|
||||
$$($1_$(notdir $2)_CFLAGS) $$($1_$2_THIS_FILE) -c
|
||||
$1_$2_COMP=$5
|
||||
$1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
|
||||
else ifneq (,$$(filter %.s %.S,$2))
|
||||
$1_$2_COMP := $5
|
||||
$1_$2_DEP_FLAG := $(C_FLAG_DEPS)
|
||||
else ifneq ($$(filter %.s %.S, $2), )
|
||||
# Compile as assembler file
|
||||
$1_$2_FLAGS=$8
|
||||
$1_$2_COMP=$(AS)
|
||||
$1_$2_DEP_FLAG:=
|
||||
else ifneq (,$$(filter %.cpp,$2)$$(filter %.cc,$2)$$(filter %.mm,$2))
|
||||
$1_$2_FLAGS := $8
|
||||
$1_$2_COMP := $(AS)
|
||||
$1_$2_DEP_FLAG :=
|
||||
else ifneq ($$(filter %.cpp, $2)$$(filter %.cc, $2)$$(filter %.mm, $2), )
|
||||
# Compile as a C++ or Objective-C++ file
|
||||
$1_$2_FLAGS=$(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $6 \
|
||||
$1_$2_FLAGS := $(CFLAGS_CCACHE) $$($1_$2_USE_PCH_FLAGS) $6 \
|
||||
$$($1_$(notdir $2)_OPT_CXXFLAGS) \
|
||||
$$($1_$(notdir $2)_CXXFLAGS) $$($1_$2_THIS_FILE) -c
|
||||
$1_$2_COMP=$7
|
||||
$1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS)
|
||||
$1_$2_COMP := $7
|
||||
$1_$2_DEP_FLAG := $(CXX_FLAG_DEPS)
|
||||
else
|
||||
$$(error Internal error in NativeCompilation.gmk: no compiler for file $2)
|
||||
endif
|
||||
@ -264,14 +264,14 @@ define add_native_source
|
||||
$1_$2_OBJ := $3/$$(call replace_with_obj_extension, $$(notdir $2))
|
||||
# Only continue if this object file hasn't been processed already. This lets the first found
|
||||
# source file override any other with the same name.
|
||||
ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR)))
|
||||
$1_OBJS_SO_FAR+=$$($1_$2_OBJ)
|
||||
ifeq (,$$(filter %.s %.S,$2))
|
||||
ifeq ($$(findstring $$($1_$2_OBJ), $$($1_OBJS_SO_FAR)), )
|
||||
$1_OBJS_SO_FAR += $$($1_$2_OBJ)
|
||||
ifeq ($$(filter %.s %.S, $2), )
|
||||
# And this is the dependency file for this obj file.
|
||||
$1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
|
||||
$1_$2_DEP := $$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
|
||||
# The dependency target file lists all dependencies as empty targets
|
||||
# to avoid make error "No rule to make target" for removed files
|
||||
$1_$2_DEP_TARGETS:=$$(patsubst %$(OBJ_SUFFIX),%.d.targets,$$($1_$2_OBJ))
|
||||
$1_$2_DEP_TARGETS := $$(patsubst %$(OBJ_SUFFIX),%.d.targets,$$($1_$2_OBJ))
|
||||
|
||||
# Include previously generated dependency information. (if it exists)
|
||||
-include $$($1_$2_DEP)
|
||||
@ -280,7 +280,7 @@ define add_native_source
|
||||
ifeq ($(TOOLCHAIN_TYPE), microsoft)
|
||||
# To avoid name clashes between pdbs for objects and libs/execs, put
|
||||
# object pdbs in a separate subdir.
|
||||
$1_$2_DEBUG_OUT_FLAGS:=-Fd$$(strip $$(patsubst $$($1_OBJECT_DIR)/%, \
|
||||
$1_$2_DEBUG_OUT_FLAGS := -Fd$$(strip $$(patsubst $$($1_OBJECT_DIR)/%, \
|
||||
$$($1_OBJECT_DIR)/pdb/%, $$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ))))
|
||||
endif
|
||||
endif
|
||||
@ -293,10 +293,10 @@ define add_native_source
|
||||
endif
|
||||
|
||||
$$($1_$2_OBJ) : $2 $$($1_COMPILE_VARDEPS_FILE) $$($1_$2_VARDEPS_FILE) | $$($1_BUILD_INFO)
|
||||
$$(call LogInfo, Compiling $$(notdir $2) (for $$(notdir $$($1_TARGET))))
|
||||
$$(call LogInfo, Compiling $$(notdir $2) (for $$($1_BASENAME)))
|
||||
$$(call MakeDir, $$(@D) $$(@D)/pdb)
|
||||
ifneq ($(TOOLCHAIN_TYPE), microsoft)
|
||||
ifeq ($(TOOLCHAIN_TYPE)$$(filter %.s,$2), solstudio)
|
||||
ifeq ($(TOOLCHAIN_TYPE)$$(filter %.s, $2), solstudio)
|
||||
# The Solaris studio compiler doesn't output the full path to the object file in the
|
||||
# generated deps files. Fixing it with sed. If compiling assembly, don't try this.
|
||||
$$(call ExecuteWithLog, $$@, \
|
||||
@ -308,7 +308,7 @@ define add_native_source
|
||||
endif
|
||||
# Create a dependency target file from the dependency file.
|
||||
# Solution suggested by http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
|
||||
ifneq ($$($1_$2_DEP),)
|
||||
ifneq ($$($1_$2_DEP), )
|
||||
$(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_$2_DEP) > $$($1_$2_DEP_TARGETS)
|
||||
endif
|
||||
else
|
||||
@ -338,6 +338,9 @@ endef
|
||||
# and the targets generated are listed in a variable by that name.
|
||||
#
|
||||
# Remaining parameters are named arguments. These include:
|
||||
# NAME The base name for the resulting binary, excluding decorations (like *.exe)
|
||||
# TYPE Type of binary (EXECUTABLE, LIBRARY or STATIC_LIBRARY). Default is LIBRARY.
|
||||
# SUFFIX Override the default suffix for the output file
|
||||
# TOOLCHAIN Name of toolchain setup to use. Defaults to TOOLCHAIN_DEFAULT.
|
||||
# SRC one or more directory roots to scan for C/C++ files.
|
||||
# CFLAGS the compiler flags to be used, used both for C and C++.
|
||||
@ -347,8 +350,6 @@ endef
|
||||
# ARFLAGS the archiver flags to be used
|
||||
# OBJECT_DIR the directory where we store the object files
|
||||
# OUTPUT_DIR the directory where the resulting binary is put
|
||||
# LIBRARY the resulting library file
|
||||
# PROGRAM the resulting exec file
|
||||
# INCLUDES only pick source from these directories
|
||||
# EXCLUDES do not pick source from these directories
|
||||
# INCLUDE_FILES only compile exactly these files!
|
||||
@ -385,106 +386,60 @@ endef
|
||||
SetupNativeCompilation = $(NamedParamsMacroTemplate)
|
||||
define SetupNativeCompilationBody
|
||||
|
||||
# If type is unspecified, default to LIBRARY
|
||||
ifeq ($$($1_TYPE), )
|
||||
$1_TYPE := LIBRARY
|
||||
endif
|
||||
|
||||
# If we're doing a static build and producing a library
|
||||
# force it to be a static library and remove the -l libraries
|
||||
ifeq ($(STATIC_BUILD), true)
|
||||
ifneq ($$($1_LIBRARY),)
|
||||
$1_STATIC_LIBRARY := $$($1_LIBRARY)
|
||||
$1_LIBRARY :=
|
||||
ifeq ($$($1_TYPE), LIBRARY)
|
||||
$1_TYPE := STATIC_LIBRARY
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_BIN))
|
||||
$$(error BIN has been replaced with OBJECT_DIR)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_LIB))
|
||||
$$(error LIB has been replaced with LIBRARY)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_EXE))
|
||||
$$(error EXE has been replaced with PROGRAM)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_LIBRARY))
|
||||
ifeq (,$$($1_OUTPUT_DIR))
|
||||
$$(error LIBRARY requires OUTPUT_DIR)
|
||||
endif
|
||||
|
||||
ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY)))
|
||||
$$(error directory of LIBRARY should be specified using OUTPUT_DIR)
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY)))
|
||||
$$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX))
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY)))
|
||||
$$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX))
|
||||
endif
|
||||
|
||||
ifeq ($$($1_SUFFIX), )
|
||||
$1_SUFFIX := $(SHARED_LIBRARY_SUFFIX)
|
||||
endif
|
||||
|
||||
$1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$$($1_SUFFIX)
|
||||
$1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME)
|
||||
$1_NOSUFFIX:=$(LIBRARY_PREFIX)$$($1_LIBRARY)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_STATIC_LIBRARY))
|
||||
ifeq (,$$($1_OUTPUT_DIR))
|
||||
$$(error STATIC_LIBRARY requires OUTPUT_DIR)
|
||||
endif
|
||||
|
||||
ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY)))
|
||||
$$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR)
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY)))
|
||||
$$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX))
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY)))
|
||||
$$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX))
|
||||
endif
|
||||
|
||||
ifeq ($$($1_SUFFIX), )
|
||||
$1_SUFFIX := $(STATIC_LIBRARY_SUFFIX)
|
||||
endif
|
||||
|
||||
$1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$$($1_SUFFIX)
|
||||
$1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME)
|
||||
$1_NOSUFFIX:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_PROGRAM))
|
||||
ifeq (,$$($1_OUTPUT_DIR))
|
||||
$$(error PROGRAM requires OUTPUT_DIR)
|
||||
endif
|
||||
|
||||
ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM)))
|
||||
$$(error directory of PROGRAM should be specified using OUTPUT_DIR)
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM)))
|
||||
$$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX))
|
||||
endif
|
||||
|
||||
ifeq ($$($1_TYPE), EXECUTABLE)
|
||||
$1_PREFIX :=
|
||||
ifeq ($$($1_SUFFIX), )
|
||||
$1_SUFFIX := $(EXE_SUFFIX)
|
||||
endif
|
||||
|
||||
$1_BASENAME:=$$($1_PROGRAM)$$($1_SUFFIX)
|
||||
$1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME)
|
||||
$1_NOSUFFIX:=$$($1_PROGRAM)
|
||||
else
|
||||
$1_PREFIX := $(LIBRARY_PREFIX)
|
||||
ifeq ($$($1_TYPE), LIBRARY)
|
||||
ifeq ($$($1_SUFFIX), )
|
||||
$1_SUFFIX := $(SHARED_LIBRARY_SUFFIX)
|
||||
endif
|
||||
else ifeq ($$($1_TYPE), STATIC_LIBRARY)
|
||||
ifeq ($$($1_SUFFIX), )
|
||||
$1_SUFFIX := $(STATIC_LIBRARY_SUFFIX)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($$($1_NAME), $(basename $$($1_NAME)))
|
||||
$$(error NAME must not contain any directory path in $1)
|
||||
endif
|
||||
ifneq ($(findstring $$($1_SUFFIX), $$($1_NAME)), )
|
||||
$$(error NAME should be specified without suffix: $$($1_SUFFIX) in $1)
|
||||
endif
|
||||
ifneq ($(findstring $$($1_PREFIX), $$($1_NAME)), )
|
||||
$$(error NAME should be specified without prefix: $$($1_PREFIX) in $1)
|
||||
endif
|
||||
ifeq ($$($1_OUTPUT_DIR), )
|
||||
$$(error OUTPUT_DIR is missing in $1)
|
||||
endif
|
||||
ifneq ($$($1_MANIFEST), )
|
||||
ifeq ($$($1_MANIFEST_VERSION), )
|
||||
$$(error If MANIFEST is provided, then MANIFEST_VERSION is required in $1)
|
||||
endif
|
||||
endif
|
||||
|
||||
$1_BASENAME := $$($1_PREFIX)$$($1_NAME)$$($1_SUFFIX)
|
||||
$1_TARGET := $$($1_OUTPUT_DIR)/$$($1_BASENAME)
|
||||
$1_NOSUFFIX := $$($1_PREFIX)$$($1_NAME)
|
||||
$1_SAFE_NAME := $$(strip $$(subst /,_, $1))
|
||||
|
||||
ifeq (,$$($1_TARGET))
|
||||
$$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation)
|
||||
endif
|
||||
|
||||
# Setup the toolchain to be used
|
||||
$$(call SetIfEmpty, $1_TOOLCHAIN, TOOLCHAIN_DEFAULT)
|
||||
$$(call SetIfEmpty, $1_CC, $$($$($1_TOOLCHAIN)_CC))
|
||||
@ -499,41 +454,35 @@ define SetupNativeCompilationBody
|
||||
$$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_CFLAGS))
|
||||
$$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_LDFLAGS))
|
||||
|
||||
ifneq ($$($1_MANIFEST), )
|
||||
ifeq ($$($1_MANIFEST_VERSION), )
|
||||
$$(error If MANIFEST is provided, then MANIFEST_VERSION is required in $1)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Make sure the dirs exist.
|
||||
$$(call MakeDir,$$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))
|
||||
$$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),, \
|
||||
$$(call MakeDir, $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))
|
||||
$$(foreach d, $$($1_SRC), $$(if $$(wildcard $$d), , \
|
||||
$$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d)))
|
||||
|
||||
# Find all files in the source trees. Preserve order.
|
||||
$1_SRCS := $$(foreach s, $$($1_SRC), $$(call CacheFind,$$(s)))
|
||||
$1_SRCS := $$(foreach s, $$($1_SRC), $$(call CacheFind, $$(s)))
|
||||
$1_SRCS := $$(filter $$(NATIVE_SOURCE_EXTENSIONS), $$($1_SRCS))
|
||||
# Extract the C/C++ files.
|
||||
ifneq ($$($1_EXCLUDE_PATTERNS), )
|
||||
# We must not match the exclude pattern against the src root(s).
|
||||
$1_SRCS_WITHOUT_ROOTS := $$($1_SRCS)
|
||||
$$(foreach i,$$($1_SRC),$$(eval $1_SRCS_WITHOUT_ROOTS := $$(patsubst \
|
||||
$$(foreach i, $$($1_SRC), $$(eval $1_SRCS_WITHOUT_ROOTS := $$(patsubst \
|
||||
$$i/%,%, $$($1_SRCS_WITHOUT_ROOTS))))
|
||||
$1_ALL_EXCLUDE_FILES := $$(call containing, $$($1_EXCLUDE_PATTERNS), \
|
||||
$$($1_SRCS_WITHOUT_ROOTS))
|
||||
endif
|
||||
ifneq ($$($1_EXCLUDE_FILES),)
|
||||
ifneq ($$($1_EXCLUDE_FILES), )
|
||||
$1_ALL_EXCLUDE_FILES += $$($1_EXCLUDE_FILES)
|
||||
endif
|
||||
ifneq ($$($1_ALL_EXCLUDE_FILES),)
|
||||
ifneq ($$($1_ALL_EXCLUDE_FILES), )
|
||||
$1_EXCLUDE_FILES_PAT := $$($1_ALL_EXCLUDE_FILES) \
|
||||
$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_ALL_EXCLUDE_FILES)))
|
||||
$1_EXCLUDE_FILES_PAT := $$(addprefix %,$$($1_EXCLUDE_FILES_PAT))
|
||||
$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PAT),$$($1_SRCS))
|
||||
$$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$($1_ALL_EXCLUDE_FILES)))
|
||||
$1_EXCLUDE_FILES_PAT := $$(addprefix %, $$($1_EXCLUDE_FILES_PAT))
|
||||
$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PAT), $$($1_SRCS))
|
||||
endif
|
||||
ifneq ($$($1_INCLUDE_FILES), )
|
||||
$1_INCLUDE_FILES_PAT := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES)))
|
||||
$1_SRCS := $$(filter $$($1_INCLUDE_FILES_PAT),$$($1_SRCS))
|
||||
$1_INCLUDE_FILES_PAT := $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$($1_INCLUDE_FILES)))
|
||||
$1_SRCS := $$(filter $$($1_INCLUDE_FILES_PAT), $$($1_SRCS))
|
||||
endif
|
||||
# There can be only a single bin dir root, no need to foreach over the roots.
|
||||
$1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX))
|
||||
@ -541,29 +490,29 @@ define SetupNativeCompilationBody
|
||||
# and we have a list of all existing object files: $$($1_BINS)
|
||||
|
||||
# Prepend the source/bin path to the filter expressions. Then do the filtering.
|
||||
ifneq ($$($1_INCLUDES),)
|
||||
$1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES))))
|
||||
$1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS))
|
||||
ifneq ($$($1_INCLUDES), )
|
||||
$1_SRC_INCLUDES := $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$(addsuffix /%, $$($1_INCLUDES))))
|
||||
$1_SRCS := $$(filter $$($1_SRC_INCLUDES), $$($1_SRCS))
|
||||
endif
|
||||
ifneq ($$($1_EXCLUDES),)
|
||||
$1_SRC_EXCLUDES := $$(addsuffix /%,$$($1_EXCLUDES))
|
||||
$1_SRC_EXCLUDES += $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
|
||||
$1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
|
||||
ifneq ($$($1_EXCLUDES), )
|
||||
$1_SRC_EXCLUDES := $$(addsuffix /%, $$($1_EXCLUDES))
|
||||
$1_SRC_EXCLUDES += $$(foreach i, $$($1_SRC), $$(addprefix $$i/, $$(addsuffix /%, $$($1_EXCLUDES))))
|
||||
$1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES), $$($1_SRCS))
|
||||
endif
|
||||
|
||||
$1_SRCS += $$($1_EXTRA_FILES)
|
||||
|
||||
ifeq (,$$($1_SRCS))
|
||||
ifeq ($$($1_SRCS), )
|
||||
$$(error No sources found for $1 when looking inside the dirs $$($1_SRC))
|
||||
endif
|
||||
|
||||
# Calculate the expected output from compiling the sources
|
||||
$1_EXPECTED_OBJS_FILENAMES := $$(call replace_with_obj_extension, $$(notdir $$($1_SRCS)))
|
||||
$1_EXPECTED_OBJS := $$(addprefix $$($1_OBJECT_DIR)/,$$($1_EXPECTED_OBJS_FILENAMES))
|
||||
$1_EXPECTED_OBJS := $$(addprefix $$($1_OBJECT_DIR)/, $$($1_EXPECTED_OBJS_FILENAMES))
|
||||
# Are there too many object files on disk? Perhaps because some source file was removed?
|
||||
$1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS)))
|
||||
$1_SUPERFLOUS_OBJS := $$(sort $$(filter-out $$($1_EXPECTED_OBJS), $$($1_BINS)))
|
||||
# Clean out the superfluous object files.
|
||||
ifneq ($$($1_SUPERFLUOUS_OBJS),)
|
||||
ifneq ($$($1_SUPERFLUOUS_OBJS), )
|
||||
$$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS))
|
||||
endif
|
||||
# Sort to remove dupliates and provide a reproducable order on the input files to the linker.
|
||||
@ -571,42 +520,42 @@ define SetupNativeCompilationBody
|
||||
|
||||
# Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS, and/or OPENJDK_TARGET_OS plus
|
||||
# OPENJDK_TARGET_CPU pair dependent variables for CFLAGS.
|
||||
$1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) \
|
||||
$1_EXTRA_CFLAGS := $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) \
|
||||
$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU))
|
||||
ifneq ($(DEBUG_LEVEL),release)
|
||||
ifneq ($(DEBUG_LEVEL), release)
|
||||
# Pickup extra debug dependent variables for CFLAGS
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug)
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug)
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug)
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_debug)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_debug)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_debug)
|
||||
else
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_release)
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release)
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release)
|
||||
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_release)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_release)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release)
|
||||
$1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_release)
|
||||
endif
|
||||
|
||||
# Pickup extra OPENJDK_TARGET_OS_TYPE and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS.
|
||||
$1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS))
|
||||
ifneq ($(DEBUG_LEVEL),release)
|
||||
$1_EXTRA_CXXFLAGS := $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS))
|
||||
ifneq ($(DEBUG_LEVEL), release)
|
||||
# Pickup extra debug dependent variables for CXXFLAGS
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug)
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug)
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug)
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_debug)
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug)
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug)
|
||||
else
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release)
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release)
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release)
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_release)
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release)
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release)
|
||||
endif
|
||||
|
||||
# If no C++ flags are explicitly set, default to using the C flags.
|
||||
# After that, we can set additional C++ flags that should not interfere
|
||||
# with the mechanism for copying the C flags by default.
|
||||
ifeq ($$($1_CXXFLAGS),)
|
||||
$1_CXXFLAGS:=$$($1_CFLAGS)
|
||||
ifeq ($$($1_CXXFLAGS), )
|
||||
$1_CXXFLAGS := $$($1_CFLAGS)
|
||||
endif
|
||||
ifeq ($$(strip $$($1_EXTRA_CXXFLAGS)),)
|
||||
$1_EXTRA_CXXFLAGS:=$$($1_EXTRA_CFLAGS)
|
||||
ifeq ($$(strip $$($1_EXTRA_CXXFLAGS)), )
|
||||
$1_EXTRA_CXXFLAGS := $$($1_EXTRA_CFLAGS)
|
||||
endif
|
||||
|
||||
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
|
||||
@ -616,19 +565,19 @@ define SetupNativeCompilationBody
|
||||
$1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_DEBUG_SYMBOLS)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_REORDER))
|
||||
ifneq ($$($1_REORDER), )
|
||||
$1_EXTRA_CFLAGS += $$(C_FLAG_REORDER)
|
||||
$1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER)
|
||||
endif
|
||||
|
||||
# Pass the library name for static JNI library naming
|
||||
ifneq ($$($1_STATIC_LIBRARY),)
|
||||
$1_EXTRA_CFLAGS += -DLIBRARY_NAME=$$($1_STATIC_LIBRARY)
|
||||
$1_EXTRA_CXXFLAGS += -DLIBRARY_NAME=$$($1_STATIC_LIBRARY)
|
||||
ifeq ($$($1_TYPE), STATIC_LIBRARY)
|
||||
$1_EXTRA_CFLAGS += -DLIBRARY_NAME=$$($1_NAME)
|
||||
$1_EXTRA_CXXFLAGS += -DLIBRARY_NAME=$$($1_NAME)
|
||||
endif
|
||||
|
||||
# Pick up disabled warnings, if possible on this platform.
|
||||
ifneq ($(DISABLE_WARNING_PREFIX),)
|
||||
ifneq ($(DISABLE_WARNING_PREFIX), )
|
||||
$1_EXTRA_CFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \
|
||||
$$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \
|
||||
$$($1_DISABLED_WARNINGS_C_$(TOOLCHAIN_TYPE)))
|
||||
@ -639,8 +588,8 @@ define SetupNativeCompilationBody
|
||||
|
||||
# Check if warnings should be considered errors.
|
||||
# Pick first binary and toolchain specific, then binary specific, then general setting.
|
||||
ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)),)
|
||||
ifeq ($$($1_WARNINGS_AS_ERRORS),)
|
||||
ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), )
|
||||
ifeq ($$($1_WARNINGS_AS_ERRORS), )
|
||||
$1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS)
|
||||
else
|
||||
$1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS)
|
||||
@ -740,7 +689,7 @@ define SetupNativeCompilationBody
|
||||
endif
|
||||
|
||||
# Now call add_native_source for each source file we are going to compile.
|
||||
$$(foreach p,$$($1_SRCS), \
|
||||
$$(foreach p, $$($1_SRCS), \
|
||||
$$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR), \
|
||||
$$($1_CFLAGS) $$($1_EXTRA_CFLAGS) $$($1_SYSROOT_CFLAGS), \
|
||||
$$($1_CC), \
|
||||
@ -750,7 +699,7 @@ define SetupNativeCompilationBody
|
||||
# Setup rule for printing progress info when compiling source files.
|
||||
# This is a rough heuristic and may not always print accurate information.
|
||||
$$($1_BUILD_INFO): $$($1_SRCS) $$($1_COMPILE_VARDEPS_FILE)
|
||||
ifeq ($$(wildcard $$($1_TARGET)),)
|
||||
ifeq ($$(wildcard $$($1_TARGET)), )
|
||||
$(ECHO) 'Creating $$(subst $$(OUTPUTDIR)/,,$$($1_TARGET)) from $$(words \
|
||||
$$(filter-out %.vardeps, $$?)) file(s)'
|
||||
else
|
||||
@ -763,10 +712,10 @@ define SetupNativeCompilationBody
|
||||
|
||||
# On windows we need to create a resource file
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
ifneq (,$$($1_VERSIONINFO_RESOURCE))
|
||||
$1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res
|
||||
$1_RES_DEP:=$$($1_RES).d
|
||||
$1_RES_DEP_TARGETS:=$$($1_RES).d.targets
|
||||
ifneq ($$($1_VERSIONINFO_RESOURCE), )
|
||||
$1_RES := $$($1_OBJECT_DIR)/$$($1_BASENAME).res
|
||||
$1_RES_DEP := $$($1_RES).d
|
||||
$1_RES_DEP_TARGETS := $$($1_RES).d.targets
|
||||
-include $$($1_RES_DEP)
|
||||
-include $$($1_RES_DEP_TARGETS)
|
||||
|
||||
@ -775,7 +724,7 @@ define SetupNativeCompilationBody
|
||||
$$($1_RES).vardeps)
|
||||
|
||||
$$($1_RES): $$($1_VERSIONINFO_RESOURCE) $$($1_RES_VARDEPS_FILE)
|
||||
$$(call LogInfo, Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$(notdir $$($1_TARGET))))
|
||||
$$(call LogInfo, Compiling resource $$(notdir $$($1_VERSIONINFO_RESOURCE)) (for $$($1_BASENAME)))
|
||||
$$(call MakeDir, $$(@D) $$($1_OBJECT_DIR))
|
||||
$$(call ExecuteWithLog, $$@, \
|
||||
$$($1_RC) $$($1_RC_FLAGS) $$($1_SYSROOT_CFLAGS) $(CC_OUT_OPTION)$$@ \
|
||||
@ -798,10 +747,10 @@ define SetupNativeCompilationBody
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(DISABLE_MAPFILES),true)
|
||||
ifneq ($(DISABLE_MAPFILES), true)
|
||||
$1_REAL_MAPFILE := $$($1_MAPFILE)
|
||||
ifneq ($(OPENJDK_TARGET_OS),windows)
|
||||
ifneq (,$$($1_REORDER))
|
||||
ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
ifneq ($$($1_REORDER), )
|
||||
$1_REAL_MAPFILE := $$($1_OBJECT_DIR)/mapfile
|
||||
|
||||
$$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER)
|
||||
@ -815,9 +764,9 @@ define SetupNativeCompilationBody
|
||||
|
||||
# Pickup extra OPENJDK_TARGET_OS_TYPE and/or OPENJDK_TARGET_OS dependent variables
|
||||
# for LDFLAGS and LIBS
|
||||
$1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS))
|
||||
$1_EXTRA_LIBS:=$$($1_LIBS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_LIBS_$(OPENJDK_TARGET_OS))
|
||||
ifneq (,$$($1_REAL_MAPFILE))
|
||||
$1_EXTRA_LDFLAGS := $$($1_LDFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS))
|
||||
$1_EXTRA_LIBS := $$($1_LIBS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_LIBS_$(OPENJDK_TARGET_OS))
|
||||
ifneq ($$($1_REAL_MAPFILE), )
|
||||
$1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE))
|
||||
endif
|
||||
|
||||
@ -835,7 +784,7 @@ define SetupNativeCompilationBody
|
||||
ifeq ($$($1_COPY_DEBUG_SYMBOLS), true)
|
||||
ifneq ($$($1_DEBUG_SYMBOLS), false)
|
||||
# Only copy debug symbols for dynamic libraries and programs.
|
||||
ifeq ($$($1_STATIC_LIBRARY), )
|
||||
ifneq ($$($1_TYPE), STATIC_LIBRARY)
|
||||
# Generate debuginfo files.
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
$1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_OUTPUT_DIR)/$$($1_NOSUFFIX).pdb" \
|
||||
@ -899,17 +848,17 @@ define SetupNativeCompilationBody
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_LIBRARY))
|
||||
ifeq ($$($1_TYPE), LIBRARY)
|
||||
# Generating a dynamic library.
|
||||
$1_EXTRA_LDFLAGS += $$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME))
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
$1_EXTRA_LDFLAGS += "-implib:$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib"
|
||||
$1_EXTRA_LDFLAGS += "-implib:$$($1_OBJECT_DIR)/$$($1_NAME).lib"
|
||||
# Create a rule for the import lib so that other rules may depend on it
|
||||
$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib: $$($1_TARGET)
|
||||
$$($1_OBJECT_DIR)/$$($1_NAME).lib: $$($1_TARGET)
|
||||
endif
|
||||
|
||||
# Create loadmap on AIX. Helps in diagnosing some problems.
|
||||
ifneq ($(COMPILER_BINDCMD_FILE_FLAG),)
|
||||
ifneq ($(COMPILER_BINDCMD_FILE_FLAG), )
|
||||
$1_EXTRA_LDFLAGS += $(COMPILER_BINDCMD_FILE_FLAG)$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).loadmap
|
||||
endif
|
||||
|
||||
@ -924,7 +873,7 @@ define SetupNativeCompilationBody
|
||||
# If there are many object files, use an @-file...
|
||||
ifneq ($$(word 17, $$($1_ALL_OBJS)), )
|
||||
$1_OBJ_FILE_LIST := $$($1_OBJECT_DIR)/_$1_objectfilenames.txt
|
||||
ifneq ($(COMPILER_COMMAND_FILE_FLAG),)
|
||||
ifneq ($(COMPILER_COMMAND_FILE_FLAG), )
|
||||
$1_LD_OBJ_ARG := $(COMPILER_COMMAND_FILE_FLAG)$$($1_OBJ_FILE_LIST)
|
||||
else
|
||||
# ...except for toolchains which don't support them.
|
||||
@ -986,7 +935,7 @@ define SetupNativeCompilationBody
|
||||
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_STATIC_LIBRARY))
|
||||
ifeq ($$($1_TYPE), STATIC_LIBRARY)
|
||||
$1_VARDEPS := $$($1_AR) $$($1_ARFLAGS) $$($1_LIBS) \
|
||||
$$($1_EXTRA_LIBS)
|
||||
$1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \
|
||||
@ -1000,7 +949,7 @@ define SetupNativeCompilationBody
|
||||
endif
|
||||
|
||||
$$($1_TARGET): $$($1_ALL_OBJS) $$($1_RES) $$($1_VARDEPS_FILE) $$(STATIC_MAPFILE_DEP)
|
||||
$$(call LogInfo, Archiving $$($1_STATIC_LIBRARY))
|
||||
$$(call LogInfo, Building static library $$($1_BASENAME))
|
||||
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
|
||||
$$($1_AR) $$($1_ARFLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_ALL_OBJS) \
|
||||
$$($1_RES))
|
||||
@ -1013,7 +962,7 @@ define SetupNativeCompilationBody
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_PROGRAM))
|
||||
ifeq ($$($1_TYPE), EXECUTABLE)
|
||||
# A executable binary has been specified, setup the target for it.
|
||||
$1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \
|
||||
$$($1_LIBS) $$($1_EXTRA_LIBS) $$($1_MT) \
|
||||
@ -1038,13 +987,13 @@ define SetupNativeCompilationBody
|
||||
$$($1_LIBS) $$($1_EXTRA_LIBS))
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
ifneq ($$($1_MANIFEST), )
|
||||
$$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_PROGRAM).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1
|
||||
$$($1_MT) -nologo -manifest $$($1_MANIFEST) -identity:"$$($1_NAME).exe, version=$$($1_MANIFEST_VERSION)" -outputresource:$$@;#1
|
||||
endif
|
||||
endif
|
||||
# This only works if the openjdk_codesign identity is present on the system. Let
|
||||
# silently fail otherwise.
|
||||
ifneq (,$(CODESIGN))
|
||||
ifneq (,$$($1_CODESIGN))
|
||||
ifneq ($(CODESIGN), )
|
||||
ifneq ($$($1_CODESIGN), )
|
||||
$(CODESIGN) -s openjdk_codesign $$@
|
||||
endif
|
||||
endif
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2018, 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
|
||||
@ -61,11 +61,13 @@ define SetupTestFilesCompilationBody
|
||||
$1_OUTPUT_SUBDIR := lib
|
||||
$1_CFLAGS := $(CFLAGS_TESTLIB) $(CFLAGS_WARNINGS_ARE_ERRORS)
|
||||
$1_LDFLAGS := $(LDFLAGS_TESTLIB) $(call SET_SHARED_LIBRARY_ORIGIN)
|
||||
$1_COMPILATION_TYPE := LIBRARY
|
||||
else ifeq ($$($1_TYPE), PROGRAM)
|
||||
$1_PREFIX = exe
|
||||
$1_OUTPUT_SUBDIR := bin
|
||||
$1_CFLAGS := $(CFLAGS_TESTEXE) $(CFLAGS_WARNINGS_ARE_ERRORS)
|
||||
$1_LDFLAGS := $(LDFLAGS_TESTEXE)
|
||||
$1_COMPILATION_TYPE := EXECUTABLE
|
||||
else
|
||||
$$(error Unknown type: $$($1_TYPE))
|
||||
endif
|
||||
@ -78,7 +80,8 @@ define SetupTestFilesCompilationBody
|
||||
$$(foreach file, $$($1_FILE_LIST),\
|
||||
$$(eval name := $$(strip $$(patsubst $$($1_PREFIX)%, %, $$(basename $$(notdir $$(file)))))) \
|
||||
$$(eval $$(call SetupNativeCompilation, BUILD_TEST_$$(name), \
|
||||
$$($1_TYPE) := $$(name), \
|
||||
NAME := $$(name), \
|
||||
TYPE := $$($1_COMPILATION_TYPE), \
|
||||
SRC := $$(patsubst %/,%,$$(dir $$(file))), \
|
||||
INCLUDE_FILES := $$(notdir $$(file)), \
|
||||
OBJECT_DIR := $$($1_OUTPUT_DIR)/support/$$($1_PREFIX)$$(name), \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2018, 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
|
||||
@ -53,7 +53,7 @@ ifeq ($(call check-jvm-feature, compiler2), true)
|
||||
|
||||
# Set the C++ standard if supported
|
||||
ADLC_CFLAGS += $(CXXSTD_CXXFLAG)
|
||||
|
||||
|
||||
# NOTE: The old build didn't set -DASSERT for windows but it doesn't seem to
|
||||
# hurt.
|
||||
ADLC_CFLAGS += -DASSERT
|
||||
@ -63,6 +63,8 @@ ifeq ($(call check-jvm-feature, compiler2), true)
|
||||
ADLC_CFLAGS += -I$(TOPDIR)/src/hotspot/share
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_ADLC, \
|
||||
NAME := adlc, \
|
||||
TYPE := EXECUTABLE, \
|
||||
TOOLCHAIN := TOOLCHAIN_BUILD_LINK_CXX, \
|
||||
SRC := $(TOPDIR)/src/hotspot/share/adlc, \
|
||||
EXTRA_FILES := $(TOPDIR)/src/hotspot/share/opto/opcodes.cpp, \
|
||||
@ -71,7 +73,6 @@ ifeq ($(call check-jvm-feature, compiler2), true)
|
||||
LIBS := $(ADLC_LIBS), \
|
||||
OBJECT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/adlc/objs, \
|
||||
OUTPUT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/adlc, \
|
||||
PROGRAM := adlc, \
|
||||
DEBUG_SYMBOLS := false, \
|
||||
DISABLED_WARNINGS_clang := tautological-compare, \
|
||||
DISABLED_WARNINGS_solstudio := notemsource, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2018, 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,8 @@ ifeq ($(call check-jvm-feature, dtrace), true)
|
||||
# in the libjvm.so, using JVM_CFLAGS as setup in CompileJvm.gmk. Otherwise
|
||||
# this would preferrably have been done as a part of GensrcDtrace.gmk.
|
||||
$(eval $(call SetupNativeCompilation, BUILD_DTRACE_GEN_OFFSETS, \
|
||||
NAME := dtraceGenOffsets, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(TOPDIR)/make/hotspot/src/native/dtrace, \
|
||||
CC := $(BUILD_CXX), \
|
||||
CXX := $(BUILD_CXX), \
|
||||
@ -56,7 +58,6 @@ ifeq ($(call check-jvm-feature, dtrace), true)
|
||||
LIBS := -lc, \
|
||||
OBJECT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets/objs, \
|
||||
OUTPUT_DIR := $(JVM_VARIANT_OUTPUTDIR)/tools/dtrace-gen-offsets, \
|
||||
PROGRAM := dtraceGenOffsets, \
|
||||
))
|
||||
|
||||
DTRACE_GEN_OFFSETS_TOOL := $(BUILD_DTRACE_GEN_OFFSETS_TARGET)
|
||||
@ -156,21 +157,19 @@ ifeq ($(call check-jvm-feature, dtrace), true)
|
||||
|
||||
# Unfortunately dtrace generates incorrect types for some symbols in
|
||||
# dtrace_jhelper.o, resulting in "warning: symbol X has differing types"
|
||||
# This is tracked in JDK-6890703.
|
||||
$(DTRACE_JHELPER_OBJ): $(TOPDIR)/src/hotspot/os/solaris/dtrace/jhelper.d \
|
||||
$(JVM_OFFSETS_INDEX_H)
|
||||
# See JDK-6890703 for details.
|
||||
# We work around this by fixing the types for these symbols using elfedit,
|
||||
# after dtrace has generated the .o file.
|
||||
JHELPER_DTRACE_SRC := $(TOPDIR)/src/hotspot/os/solaris/dtrace/jhelper.d
|
||||
DTRACE_EXTERNAL_SYMBOLS := $(shell $(GREP) ^extern $(JHELPER_DTRACE_SRC) | $(AWK) '{ gsub(";","") ; print $$3 }')
|
||||
DTRACE_ELFEDIT_COMMANDS := $(foreach symbol, $(DTRACE_EXTERNAL_SYMBOLS), \
|
||||
-e 'sym:st_type $(symbol) 1')
|
||||
|
||||
$(DTRACE_JHELPER_OBJ): $(JHELPER_DTRACE_SRC) $(JVM_OFFSETS_INDEX_H)
|
||||
$(call LogInfo, Running dtrace for $(<F))
|
||||
$(call ExecuteWithLog, $@, $(DTRACE) $(DTRACE_FLAGS) $(DTRACE_CPP_FLAGS) -C \
|
||||
-I$(DTRACE_SUPPORT_DIR) -o $@ -s $<)
|
||||
|
||||
# NOTE: We should really do something like this, but unfortunately this
|
||||
# results in a compilation error. :-(
|
||||
# $(call MakeDir, $(DTRACE_SUPPORT_DIR))
|
||||
# $(call ExecuteWithLog, $(DTRACE_SUPPORT_DIR)/$(@F).d, $(CC) -E \
|
||||
# $(DTRACE_CPP_FLAGS) -I$(DTRACE_SUPPORT_DIR) $^ \
|
||||
# > $(DTRACE_SUPPORT_DIR)/$(@F).d)
|
||||
# $(call ExecuteWithLog, $@, $(DTRACE) $(DTRACE_FLAGS) -o $@ \
|
||||
# -s $(DTRACE_SUPPORT_DIR)/$(@F).d)
|
||||
$(call ExecuteWithLog, $@.elfedit, $(ELFEDIT) $(DTRACE_ELFEDIT_COMMANDS) $@)
|
||||
|
||||
############################################################################
|
||||
# Build the stand-alone dtrace libraries
|
||||
@ -178,7 +177,7 @@ ifeq ($(call check-jvm-feature, dtrace), true)
|
||||
LIBJVM_DTRACE_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/libjvm_dtrace
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJVM_DTRACE, \
|
||||
LIBRARY := jvm_dtrace, \
|
||||
NAME := jvm_dtrace, \
|
||||
OUTPUT_DIR := $(JVM_LIB_OUTPUTDIR), \
|
||||
SRC := $(TOPDIR)/src/java.base/solaris/native/libjvm_dtrace, \
|
||||
CFLAGS := -m64 -G -mt -KPIC, \
|
||||
@ -193,7 +192,7 @@ ifeq ($(call check-jvm-feature, dtrace), true)
|
||||
# Note that libjvm_db.c has tests for COMPILER2, but this was never set by
|
||||
# the old build.
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJVM_DB, \
|
||||
LIBRARY := jvm_db, \
|
||||
NAME := jvm_db, \
|
||||
OUTPUT_DIR := $(JVM_LIB_OUTPUTDIR), \
|
||||
SRC := $(TOPDIR)/src/java.base/solaris/native/libjvm_db, \
|
||||
CFLAGS := -I$(JVM_VARIANT_OUTPUTDIR)/gensrc -I$(DTRACE_SUPPORT_DIR) \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2018, 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
|
||||
@ -63,8 +63,8 @@ endif
|
||||
# exclusive to the gtest libjvm.so.
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_GTEST_LIBJVM, \
|
||||
NAME := jvm, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
LIBRARY := jvm, \
|
||||
OUTPUT_DIR := $(JVM_OUTPUTDIR)/gtest, \
|
||||
OBJECT_DIR := $(JVM_OUTPUTDIR)/gtest/objs, \
|
||||
SRC := $(GTEST_TEST_SRC), \
|
||||
@ -87,6 +87,7 @@ $(eval $(call SetupNativeCompilation, BUILD_GTEST_LIBJVM, \
|
||||
DISABLED_WARNINGS_clang := undef switch format-nonliteral \
|
||||
tautological-undefined-compare $(BUILD_LIBJVM_DISABLED_WARNINGS_clang), \
|
||||
DISABLED_WARNINGS_solstudio := identexpected, \
|
||||
DISABLED_WARNINGS_CXX_microsoft := 4996, \
|
||||
LDFLAGS := $(JVM_LDFLAGS), \
|
||||
LDFLAGS_solaris := -library=stlport4 $(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
LDFLAGS_aix := -bbigtoc, \
|
||||
@ -107,7 +108,8 @@ TARGETS += $(BUILD_GTEST_LIBJVM)
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_GTEST_LAUNCHER, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
PROGRAM := gtestLauncher, \
|
||||
NAME := gtestLauncher, \
|
||||
TYPE := EXECUTABLE, \
|
||||
OUTPUT_DIR := $(JVM_OUTPUTDIR)/gtest, \
|
||||
EXTRA_FILES := $(GTEST_LAUNCHER_SRC), \
|
||||
OBJECT_DIR := $(JVM_OUTPUTDIR)/gtest/launcher-objs, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2018, 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
|
||||
@ -210,8 +210,8 @@ JVM_STRIPFLAGS ?= $(STRIPFLAGS)
|
||||
# Now set up the actual compilation of the main hotspot native library
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJVM, \
|
||||
NAME := jvm, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
LIBRARY := jvm, \
|
||||
OUTPUT_DIR := $(JVM_LIB_OUTPUTDIR), \
|
||||
SRC := $(JVM_SRC_DIRS), \
|
||||
EXCLUDES := $(JVM_EXCLUDES), \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2018, 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
|
||||
@ -90,7 +90,7 @@ ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIB_OUTPUTDIR := $(call FindLibDirForModule, java.base)
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJSIG, \
|
||||
LIBRARY := jsig, \
|
||||
NAME := jsig, \
|
||||
SRC := $(LIBJSIG_SRC_DIR), \
|
||||
OUTPUT_DIR := $(LIB_OUTPUTDIR), \
|
||||
LANG := C, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2018, 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
|
||||
@ -49,14 +49,14 @@ import static jdk.javadoc.doclet.Taglet.Location.*;
|
||||
* will produce the following html
|
||||
* <p>
|
||||
* {@code
|
||||
* Please see <a href="https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=Borealis">a spectacular</a> sight.
|
||||
* Please see <a href="https://www.oracle.com/pls/topic/lookup?ctx=javase10&id=Borealis">a spectacular</a> sight.
|
||||
* }
|
||||
*/
|
||||
public class ExtLink implements Taglet {
|
||||
|
||||
static final String TAG_NAME = "extLink";
|
||||
|
||||
static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase9&id=";
|
||||
static final String URL = "https://www.oracle.com/pls/topic/lookup?ctx=javase10&id=";
|
||||
|
||||
static final Pattern TAG_PATTERN = Pattern.compile("(?s)(\\s*)(?<name>\\w+)(\\s+)(?<desc>.*)$");
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -73,6 +73,8 @@ $(eval $(call SetupBuildLauncher, keytool, \
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), linux)
|
||||
$(eval $(call SetupNativeCompilation, BUILD_JEXEC, \
|
||||
NAME := jexec, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \
|
||||
INCLUDE_FILES := jexec.c, \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -83,7 +85,6 @@ ifeq ($(OPENJDK_TARGET_OS), linux)
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE), \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/jexec_obj, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE), \
|
||||
PROGRAM := jexec, \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_JEXEC)
|
||||
@ -93,6 +94,8 @@ endif
|
||||
|
||||
ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), )
|
||||
$(eval $(call SetupNativeCompilation, BUILD_JSPAWNHELPER, \
|
||||
NAME := jspawnhelper, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(TOPDIR)/src/$(MODULE)/unix/native/jspawnhelper, \
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $(CFLAGS_JDKEXE) -I$(TOPDIR)/src/$(MODULE)/unix/native/libjava, \
|
||||
@ -100,7 +103,6 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), )
|
||||
LDFLAGS := $(LDFLAGS_JDKEXE), \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/jspawnhelper, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE), \
|
||||
PROGRAM := jspawnhelper, \
|
||||
))
|
||||
|
||||
TARGETS += $(BUILD_JSPAWNHELPER)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2018, 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,7 +33,9 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
JABSWITCH_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/jabswitch
|
||||
ACCESSBRIDGE_SRC := $(TOPDIR)/src/jdk.accessibility/windows/native/common
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_JABSWITCH, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_JABSWITCH, \
|
||||
NAME := jabswitch, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(JABSWITCH_SRC), \
|
||||
INCLUDE_FILES := jabswitch.cpp, \
|
||||
CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
|
||||
@ -44,7 +46,6 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIBS := advapi32.lib version.lib user32.lib, \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jabswitch, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/jdk.accessibility, \
|
||||
PROGRAM := jabswitch, \
|
||||
VERSIONINFO_RESOURCE := $(ACCESSBRIDGE_SRC)/AccessBridgeStatusWindow.RC, \
|
||||
RC_FLAGS := $(RC_FLAGS) \
|
||||
-D "JDK_FNAME=jabswitch.exe" \
|
||||
@ -70,6 +71,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
# Parameter 2 ACCESSBRIDGE_ARCH_ -D suffix
|
||||
|
||||
$$(eval $$(call SetupNativeCompilation, BUILD_JACCESSINSPECTOR$1, \
|
||||
NAME := jaccessinspector$1, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(TOPDIR)/jaccessinspector $(TOPDIR)/common \
|
||||
$(TOPDIR)/toolscommon $(TOPDIR)/bridge, \
|
||||
CFLAGS := $$(CFLAGS_JDKEXE) $(TOOLS_CFLAGS) -DACCESSBRIDGE_ARCH_$2 -EHsc, \
|
||||
@ -77,7 +80,6 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIBS := advapi32.lib user32.lib, \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jaccessinspector$1, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/jdk.accessibility, \
|
||||
PROGRAM := jaccessinspector$1, \
|
||||
VERSIONINFO_RESOURCE := $(TOPDIR)/jaccessinspector/jaccessinspectorWindow.rc, \
|
||||
RC_FLAGS := $$(RC_FLAGS) \
|
||||
-D "JDK_FNAME=jaccessinspector$1.exe" \
|
||||
@ -96,7 +98,9 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
# Parameter 1 File name suffix
|
||||
# Parameter 2 ACCESSBRIDGE_ARCH_ -D suffix
|
||||
|
||||
$$(eval $$(call SetupNativeCompilation,BUILD_JACCESSWALKER$1, \
|
||||
$$(eval $$(call SetupNativeCompilation, BUILD_JACCESSWALKER$1, \
|
||||
NAME := jaccesswalker$1, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(TOPDIR)/jaccesswalker $(TOPDIR)/common \
|
||||
$(TOPDIR)/toolscommon $(TOPDIR)/bridge, \
|
||||
CFLAGS := $$(CFLAGS_JDKEXE) $(TOOLS_CFLAGS) -DACCESSBRIDGE_ARCH_$2 -EHsc, \
|
||||
@ -104,7 +108,6 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIBS := advapi32.lib comctl32.lib gdi32.lib user32.lib, \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jaccesswalker$1, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/jdk.accessibility, \
|
||||
PROGRAM := jaccesswalker$1, \
|
||||
VERSIONINFO_RESOURCE := $(TOPDIR)/jaccesswalker/jaccesswalkerWindow.rc, \
|
||||
RC_FLAGS := $$(RC_FLAGS) \
|
||||
-D "JDK_FNAME=jaccesswalker$1.exe" \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -73,7 +73,9 @@ else
|
||||
UNPACK_MAPFILE := $(UNPACK_MAPFILE_DIR)/mapfile-vers-unpack200
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_UNPACKEXE, \
|
||||
NAME := unpack200, \
|
||||
TYPE := EXECUTABLE, \
|
||||
SRC := $(UNPACKEXE_SRC), \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -91,7 +93,6 @@ $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \
|
||||
LIBS_solaris := -lc, \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/unpackexe, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/$(MODULE), \
|
||||
PROGRAM := unpack200, \
|
||||
VERSIONINFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE), \
|
||||
RC_FLAGS := $(RC_FLAGS) \
|
||||
-D "JDK_FNAME=unpack200.exe" \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -183,6 +183,8 @@ define SetupBuildLauncherBody
|
||||
endif
|
||||
|
||||
$$(eval $$(call SetupNativeCompilation, BUILD_LAUNCHER_$1, \
|
||||
NAME := $1, \
|
||||
TYPE := EXECUTABLE, \
|
||||
EXTRA_FILES := $(LAUNCHER_SRC)/main.c, \
|
||||
OPTIMIZATION := $$($1_OPTIMIZATION), \
|
||||
CFLAGS := $$($1_CFLAGS) \
|
||||
@ -211,7 +213,6 @@ define SetupBuildLauncherBody
|
||||
$$($1_LIBS_windows), \
|
||||
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$1_objs, \
|
||||
OUTPUT_DIR := $$($1_OUTPUT_DIR), \
|
||||
PROGRAM := $1, \
|
||||
VERSIONINFO_RESOURCE := $$($1_VERSION_INFO_RESOURCE), \
|
||||
RC_FLAGS := $$(RC_FLAGS) \
|
||||
-D "JDK_FNAME=$1$(EXE_SUFFIX)" \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -48,8 +48,8 @@ ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
BUILD_LIBMLIB_LDLIBS += $(LIBM) $(LIBDL)
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE, \
|
||||
LIBRARY := mlib_image, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBMLIB_IMAGE, \
|
||||
NAME := mlib_image, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(BUILD_LIBMLIB_SRC), \
|
||||
EXCLUDE_FILES := mlib_c_ImageBlendTable.c, \
|
||||
@ -107,8 +107,8 @@ ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
|
||||
|
||||
LIBMLIB_IMAGE_V_CFLAGS += $(filter-out -DMLIB_NO_LIBSUNMATH, $(BUILD_LIBMLIB_CFLAGS))
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE_V, \
|
||||
LIBRARY := mlib_image_v, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBMLIB_IMAGE_V, \
|
||||
NAME := mlib_image_v, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBMLIB_IMAGE_V_SRC), \
|
||||
EXCLUDE_FILES := $(BUILD_LIBMLIB_IMAGE_V_EXFILES), \
|
||||
@ -226,8 +226,8 @@ ifeq ($(TOOLCHAIN_TYPE), gcc)
|
||||
LIBAWT_CFLAGS += -fgcse-after-reload
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT, \
|
||||
LIBRARY := awt, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBAWT, \
|
||||
NAME := awt, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBAWT_DIRS), \
|
||||
EXCLUDES := $(LIBAWT_EXCLUDES), \
|
||||
@ -347,8 +347,8 @@ ifeq ($(findstring $(OPENJDK_TARGET_OS),windows macosx),)
|
||||
BUILD_LIBAWT_XAWT_debug_mem.c_CFLAGS := -w
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT, \
|
||||
LIBRARY := awt_xawt, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBAWT_XAWT, \
|
||||
NAME := awt_xawt, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBAWT_XAWT_DIRS), \
|
||||
EXCLUDES := $(LIBAWT_XAWT_EXCLUDES), \
|
||||
@ -406,8 +406,8 @@ else
|
||||
LIBLCMS_CPPFLAGS += $(addprefix -I, $(LIBLCMS_SRC))
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBLCMS, \
|
||||
LIBRARY := lcms, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBLCMS, \
|
||||
NAME := lcms, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBLCMS_SRC), \
|
||||
INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \
|
||||
@ -483,8 +483,8 @@ else
|
||||
BUILD_LIBJAVAJPEG_HEADERS := $(addprefix -I, $(LIBJAVAJPEG_SRC))
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJAVAJPEG, \
|
||||
LIBRARY := javajpeg, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJAVAJPEG, \
|
||||
NAME := javajpeg, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJAVAJPEG_SRC), \
|
||||
INCLUDE_FILES := $(BUILD_LIBJAVAJPEG_INCLUDE_FILES), \
|
||||
@ -547,8 +547,8 @@ ifeq ($(findstring $(OPENJDK_TARGET_OS), windows macosx),)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS, \
|
||||
LIBRARY := awt_headless, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBAWT_HEADLESS, \
|
||||
NAME := awt_headless, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBAWT_HEADLESS_DIRS), \
|
||||
EXCLUDES := $(LIBAWT_HEADLESS_EXCLUDES), \
|
||||
@ -657,8 +657,8 @@ ifeq ($(TOOLCHAIN_TYPE), gcc)
|
||||
BUILD_LIBFONTMANAGER_ExtensionSubtables.cpp_CXXFLAGS := -fno-strict-aliasing
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER, \
|
||||
LIBRARY := fontmanager, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBFONTMANAGER, \
|
||||
NAME := fontmanager, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfontmanager, \
|
||||
SRC := $(LIBFONTMANAGER_SRC), \
|
||||
EXCLUDE_FILES := $(LIBFONTMANAGER_EXCLUDE_FILES) \
|
||||
@ -744,8 +744,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
ifeq ($(OPENJDK_TARGET_CPU), x86)
|
||||
KERNEL32_LIB := kernel32.lib
|
||||
endif
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJAWT, \
|
||||
LIBRARY := jawt, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJAWT, \
|
||||
NAME := jawt, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJAWT_SRC), \
|
||||
INCLUDE_FILES := $(LIBJAWT_INCLUDE_FILES), \
|
||||
@ -804,8 +804,8 @@ else # OPENJDK_TARGET_OS not windows
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJAWT, \
|
||||
LIBRARY := jawt, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJAWT, \
|
||||
NAME := jawt, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJAWT_SRC), \
|
||||
INCLUDE_FILES := $(JAWT_FILES), \
|
||||
@ -935,8 +935,8 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
|
||||
LIBSPLASHSCREEN_LIBS += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread -ldl
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBSPLASHSCREEN, \
|
||||
LIBRARY := splashscreen, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBSPLASHSCREEN, \
|
||||
NAME := splashscreen, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBSPLASHSCREEN_DIRS), \
|
||||
EXCLUDE_FILES := imageioJPEG.c jpegdecoder.c pngtest.c, \
|
||||
@ -1008,8 +1008,8 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
LIBAWT_LWAWT_EXFILES := fontpath.c awt_Font.c X11Color.c
|
||||
LIBAWT_LWAWT_EXCLUDES := $(TOPDIR)/src/java.desktop/unix/native/common/awt/medialib
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT, \
|
||||
LIBRARY := awt_lwawt, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBAWT_LWAWT, \
|
||||
NAME := awt_lwawt, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBAWT_LWAWT_DIRS), \
|
||||
INCLUDE_FILES := $(LIBAWT_LWAWT_FILES), \
|
||||
@ -1057,8 +1057,8 @@ endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI, \
|
||||
LIBRARY := osxui, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBOSXUI, \
|
||||
NAME := osxui, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/java.desktop/macosx/native/libosxui, \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +55,9 @@ LIBFDLIBM_SRC := $(TOPDIR)/src/java.base/share/native/libfdlibm
|
||||
LIBFDLIBM_CFLAGS := -I$(LIBFDLIBM_SRC)
|
||||
|
||||
ifneq ($(OPENJDK_TARGET_OS), macosx)
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM, \
|
||||
STATIC_LIBRARY := fdlibm, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM, \
|
||||
NAME := fdlibm, \
|
||||
TYPE := STATIC_LIBRARY, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
|
||||
SRC := $(LIBFDLIBM_SRC), \
|
||||
OPTIMIZATION := $(BUILD_LIBFDLIBM_OPTIMIZATION), \
|
||||
@ -77,8 +78,8 @@ else
|
||||
|
||||
# On macosx the old build does partial (incremental) linking of fdlibm instead of
|
||||
# a plain static library.
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM_MAC, \
|
||||
LIBRARY := fdlibm, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM_MAC, \
|
||||
NAME := fdlibm, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \
|
||||
SRC := $(LIBFDLIBM_SRC), \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \
|
||||
@ -107,8 +108,8 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY, \
|
||||
LIBRARY := verify, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBVERIFY, \
|
||||
NAME := verify, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/java.base/share/native/libverify, \
|
||||
OPTIMIZATION := $(LIBVERIFY_OPTIMIZATION), \
|
||||
@ -155,8 +156,8 @@ ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA, \
|
||||
LIBRARY := java, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJAVA, \
|
||||
NAME := java, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJAVA_SRC_DIRS), \
|
||||
OPTIMIZATION := HIGH, \
|
||||
@ -218,8 +219,8 @@ ifeq ($(LIBZIP_CAN_USE_MMAP), true)
|
||||
BUILD_LIBZIP_MMAP := -DUSE_MMAP
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBZIP, \
|
||||
LIBRARY := zip, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBZIP, \
|
||||
NAME := zip, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
OPTIMIZATION := LOW, \
|
||||
SRC := $(TOPDIR)/src/java.base/share/native/libzip, \
|
||||
@ -262,8 +263,8 @@ JIMAGELIB_CPPFLAGS := \
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/java.base \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJIMAGE, \
|
||||
LIBRARY := jimage, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJIMAGE, \
|
||||
NAME := jimage, \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -358,8 +359,8 @@ ifneq ($(USE_EXTERNAL_LIBZ), true)
|
||||
)
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJLI, \
|
||||
LIBRARY := jli, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJLI, \
|
||||
NAME := jli, \
|
||||
OUTPUT_DIR := $(LIBJLI_OUTPUT_DIR), \
|
||||
SRC := $(LIBJLI_SRC_DIRS), \
|
||||
EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
|
||||
@ -415,8 +416,9 @@ TARGETS += $(BUILD_LIBJLI)
|
||||
# with the shared library, so the static library is given a different name. No harm
|
||||
# in doing it for all platform to reduce complexity.
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC, \
|
||||
STATIC_LIBRARY := jli_static, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
|
||||
NAME := jli_static, \
|
||||
TYPE := STATIC_LIBRARY, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
|
||||
SRC := $(LIBJLI_SRC_DIRS), \
|
||||
EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
|
||||
@ -434,8 +436,8 @@ else ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
# On macosx they do partial (incremental) linking of libjli_static.a
|
||||
# code it here...rather than add support to NativeCompilation
|
||||
# as this is first time I see it
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC, \
|
||||
LIBRARY := jli_static, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
|
||||
NAME := jli_static, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
|
||||
SRC := $(LIBJLI_SRC_DIRS), \
|
||||
EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
|
||||
@ -457,8 +459,9 @@ else ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
|
||||
else ifeq ($(OPENJDK_TARGET_OS), aix)
|
||||
# AIX also requires a static libjli because the compiler doesn't support '-rpath'
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC, \
|
||||
STATIC_LIBRARY := jli_static, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
|
||||
NAME := jli_static, \
|
||||
TYPE := STATIC_LIBRARY, \
|
||||
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
|
||||
SRC := $(LIBJLI_SRC_DIRS), \
|
||||
EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -49,8 +49,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT, \
|
||||
LIBRARY := instrument, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBINSTRUMENT, \
|
||||
NAME := instrument, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBINSTRUMENT_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +44,8 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT, \
|
||||
LIBRARY := management, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBMANAGEMENT, \
|
||||
NAME := management, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBMANAGEMENT_SRC), \
|
||||
OPTIMIZATION := $(LIBMANAGEMENT_OPTIMIZATION), \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +33,8 @@ else
|
||||
LIBPREF_SRC_DIRS := $(TOPDIR)/src/java.prefs/$(OPENJDK_TARGET_OS_TYPE)/native/libprefs
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBPREFS, \
|
||||
LIBRARY := prefs, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBPREFS, \
|
||||
NAME := prefs, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBPREF_SRC_DIRS), \
|
||||
OPTIMIZATION := HIGH, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2018, 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,8 +27,8 @@ include LibCommon.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBRMI, \
|
||||
LIBRARY := rmi, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBRMI, \
|
||||
NAME := rmi, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/java.rmi/share/native/librmi, \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +32,8 @@ ifneq ($(OPENJDK_TARGET_OS), windows)
|
||||
$(TOPDIR)/src/java.security.jgss/$(OPENJDK_TARGET_OS_TYPE)/native/libj2gss \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS, \
|
||||
LIBRARY := j2gss, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJ2GSS, \
|
||||
NAME := j2gss, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJ2GSS_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -74,8 +74,8 @@ ifneq ($(BUILD_CRYPTO), false)
|
||||
ifneq ($(BUILD_LIBKRB5_NAME), )
|
||||
# libosxkrb5 needs to call deprecated krb5 APIs so that java
|
||||
# can use the native credentials cache.
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBKRB5, \
|
||||
LIBRARY := $(BUILD_LIBKRB5_NAME), \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBKRB5, \
|
||||
NAME := $(BUILD_LIBKRB5_NAME), \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(BUILD_LIBKRB5_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +33,8 @@ LIBJ2PCSC_CPPFLAGS := $(addprefix -I,$(LIBJ2PCSC_SRC)) \
|
||||
-I$(TOPDIR)/src/java.smartcardio/$(OPENJDK_TARGET_OS_TYPE)/native/libj2pcsc/MUSCLE \
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/java.smartcardio
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC, \
|
||||
LIBRARY := j2pcsc, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJ2PCSC, \
|
||||
NAME := j2pcsc, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJ2PCSC_SRC), \
|
||||
CFLAGS_unix := -D__sun_jdk, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2018, 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
|
||||
@ -41,8 +41,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
# Parameter 1 Suffix
|
||||
# Parameter 2 ACCESSBRIDGE_ARCH_ suffix
|
||||
|
||||
$(call SetupNativeCompilation,BUILD_JAVAACCESSBRIDGE$1, \
|
||||
LIBRARY = javaaccessbridge$1, \
|
||||
$(call SetupNativeCompilation, BUILD_JAVAACCESSBRIDGE$1, \
|
||||
NAME := javaaccessbridge$1, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(JAVA_AB_SRCDIR), \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -71,8 +71,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
define SetupWinDLL
|
||||
# Parameter 1 Suffix
|
||||
# Parameter 2 ACCESSBRIDGE_ARCH_ suffix
|
||||
$(call SetupNativeCompilation,BUILD_WINDOWSACCESSBRIDGE$1, \
|
||||
LIBRARY = windowsaccessbridge$1, \
|
||||
$(call SetupNativeCompilation, BUILD_WINDOWSACCESSBRIDGE$1, \
|
||||
NAME := windowsaccessbridge$1, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(WIN_AB_SRCDIR), \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -99,8 +99,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
|
||||
define SetupAccessBridgeSysInfo
|
||||
|
||||
$(call SetupNativeCompilation,BUILD_ACCESSBRIDGESYSINFO, \
|
||||
LIBRARY = jabsysinfo, \
|
||||
$(call SetupNativeCompilation, BUILD_ACCESSBRIDGESYSINFO, \
|
||||
NAME := jabsysinfo, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(SYSINFO_SRCDIR), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -34,8 +34,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIBATTACH_CFLAGS := -DPSAPI_VERSION=1
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH, \
|
||||
LIBRARY := attach, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBATTACH, \
|
||||
NAME := attach, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(call FindSrcDirsForLib, jdk.attach, attach), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +30,8 @@ include LibCommon.gmk
|
||||
LIBJ2PKCS11_SRC := $(TOPDIR)/src/jdk.crypto.cryptoki/share/native/libj2pkcs11 \
|
||||
$(TOPDIR)/src/jdk.crypto.cryptoki/$(OPENJDK_TARGET_OS_TYPE)/native/libj2pkcs11
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11, \
|
||||
LIBRARY := j2pkcs11, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJ2PKCS11, \
|
||||
NAME := j2pkcs11, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJ2PKCS11_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +43,8 @@ ifeq ($(ENABLE_INTREE_EC), true)
|
||||
ECC_JNI_SOLSPARC_FILTER := -xregs=no%appl
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBSUNEC, \
|
||||
LIBRARY := sunec, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBSUNEC, \
|
||||
NAME := sunec, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBSUNEC_SRC), \
|
||||
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +31,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
|
||||
LIBSUNMSCAPI_SRC := $(TOPDIR)/src/jdk.crypto.mscapi/$(OPENJDK_TARGET_OS_TYPE)/native/libsunmscapi
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI, \
|
||||
LIBRARY := sunmscapi, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBSUNMSCAPI, \
|
||||
NAME := sunmscapi, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBSUNMSCAPI_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2018, 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,8 +31,8 @@ ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
|
||||
LIBJ2UCRYPTO_SRC := $(TOPDIR)/src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJ2UCRYPTO, \
|
||||
LIBRARY := j2ucrypto, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJ2UCRYPTO, \
|
||||
NAME := j2ucrypto, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJ2UCRYPTO_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2018, 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
|
||||
@ -98,12 +98,12 @@ endif
|
||||
################################################################################
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBSA, \
|
||||
NAME := $(SA_NAME), \
|
||||
TOOLCHAIN := $(SA_TOOLCHAIN), \
|
||||
OPTIMIZATION := NONE, \
|
||||
DISABLED_WARNINGS_microsoft := 4267, \
|
||||
DISABLED_WARNINGS_gcc := sign-compare, \
|
||||
DISABLED_WARNINGS_CXX_solstudio := truncwarn unknownpragma, \
|
||||
LIBRARY := $(SA_NAME), \
|
||||
OUTPUT_DIR := $(call FindLibDirForModule, $(MODULE)), \
|
||||
SRC := $(SA_SRC), \
|
||||
EXCLUDE_FILES := test.c saproc_audit.cpp $(SA_EXCLUDE_FILES), \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2018, 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
|
||||
@ -36,8 +36,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/jdk.internal.le \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBLE, \
|
||||
LIBRARY := le, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBLE, \
|
||||
NAME := le, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBLE_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +39,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/jdk.jdi \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM, \
|
||||
LIBRARY := dt_shmem, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBDT_SHMEM, \
|
||||
NAME := dt_shmem, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBDT_SHMEM_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -36,14 +36,13 @@ LIBDT_SOCKET_CPPFLAGS := \
|
||||
-I$(TOPDIR)/src/jdk.jdwp.agent/share/native/include \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET, \
|
||||
LIBRARY := dt_socket, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBDT_SOCKET, \
|
||||
NAME := dt_socket, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBDT_SOCKET_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) -DUSE_MMAP \
|
||||
$(LIBDT_SOCKET_CPPFLAGS), \
|
||||
DISABLED_WARNINGS_gcc := shift-negative-value, \
|
||||
MAPFILE := $(TOPDIR)/make/mapfiles/libdt_socket/mapfile-vers, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) \
|
||||
$(call SET_SHARED_LIBRARY_ORIGIN), \
|
||||
@ -74,8 +73,8 @@ LIBJDWP_CPPFLAGS := \
|
||||
$(addprefix -I, $(LIBJDWP_SRC))
|
||||
|
||||
# JDWP_LOGGING causes log messages to be compiled into the library.
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJDWP, \
|
||||
LIBRARY := jdwp, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJDWP, \
|
||||
NAME := jdwp, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJDWP_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2017, 2018, 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,8 +33,8 @@ LIBMANAGEMENT_AGENT_CFLAGS := $(addprefix -I,$(LIBMANAGEMENT_AGENT_SRC)) \
|
||||
$(LIBJAVA_HEADER_FLAGS) \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT_AGENT, \
|
||||
LIBRARY := management_agent, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBMANAGEMENT_AGENT, \
|
||||
NAME := management_agent, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBMANAGEMENT_AGENT_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2018, 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
|
||||
@ -53,8 +53,8 @@ ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT_EXT, \
|
||||
LIBRARY := management_ext, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBMANAGEMENT_EXT, \
|
||||
NAME := management_ext, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBMANAGEMENT_EXT_SRC), \
|
||||
LANG := C, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2018, 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 LibCommon.gmk
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBEXTNET, \
|
||||
LIBRARY := extnet, \
|
||||
NAME := extnet, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/jdk.net/solaris/native/libextnet, \
|
||||
OPTIMIZATION := LOW, \
|
||||
@ -51,7 +51,7 @@ endif
|
||||
ifeq ($(OPENJDK_TARGET_OS), linux)
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBEXTNET, \
|
||||
LIBRARY := extnet, \
|
||||
NAME := extnet, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/jdk.net/linux/native/libextnet, \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +27,8 @@ include LibCommon.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK, \
|
||||
LIBRARY := unpack, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBUNPACK, \
|
||||
NAME := unpack, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/jdk.pack/share/native/libunpack \
|
||||
$(TOPDIR)/src/jdk.pack/share/native/common-unpack, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +30,8 @@ include LibCommon.gmk
|
||||
ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
|
||||
|
||||
ifeq (, $(filter $(OPENJDK_TARGET_OS), macosx aix))
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBSCTP, \
|
||||
LIBRARY := sctp, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBSCTP, \
|
||||
NAME := sctp, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(TOPDIR)/src/jdk.sctp/$(OPENJDK_TARGET_OS_TYPE)/native/libsctp, \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +38,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
LIBJAAS_NAME := jaas_nt
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJAAS, \
|
||||
LIBRARY := $(LIBJAAS_NAME), \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJAAS, \
|
||||
NAME := $(LIBJAAS_NAME), \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(call FindSrcDirsForLib, jdk.security.auth, jaas), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -34,8 +34,8 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/java.desktop \
|
||||
#
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBOSX, \
|
||||
LIBRARY := osx, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBOSX, \
|
||||
NAME := osx, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBOSX_DIRS), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +25,8 @@
|
||||
|
||||
LIBNET_SRC_DIRS := $(call FindSrcDirsForLib, java.base, net)
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBNET, \
|
||||
LIBRARY := net, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBNET, \
|
||||
NAME := net, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBNET_SRC_DIRS), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -56,8 +56,8 @@ ifeq ($(OPENJDK_TARGET_OS), aix)
|
||||
BUILD_LIBNIO_MAPFILE := $(TOPDIR)/make/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
|
||||
endif
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBNIO, \
|
||||
LIBRARY := nio, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBNIO, \
|
||||
NAME := nio, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(BUILD_LIBNIO_SRC), \
|
||||
EXCLUDE_FILES := $(BUILD_LIBNIO_EXFILES), \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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,8 +29,8 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
|
||||
LIBOSXAPP_SRC := $(TOPDIR)/src/java.desktop/macosx/native/libosxapp
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP, \
|
||||
LIBRARY := osxapp, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBOSXAPP, \
|
||||
NAME := osxapp, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBOSXAPP_SRC), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2015, 2018, 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,7 +26,7 @@
|
||||
include LibCommon.gmk
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
# JavaNativeFoundation framework not supported in static builds
|
||||
# JavaNativeFoundation framework not supported in static builds
|
||||
ifneq ($(STATIC_BUILD), true)
|
||||
|
||||
################################################################################
|
||||
@ -36,8 +36,8 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
$(LIBJAVA_HEADER_FLAGS) \
|
||||
-I$(SUPPORT_OUTPUTDIR)/headers/java.base \
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBOSXSECURITY, \
|
||||
LIBRARY := osxsecurity, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBOSXSECURITY, \
|
||||
NAME := osxsecurity, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBOSXSECURITY_DIRS), \
|
||||
OPTIMIZATION := LOW, \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2018, 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
|
||||
@ -114,8 +114,8 @@ endif # OPENJDK_TARGET_OS solaris
|
||||
|
||||
LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"'
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND, \
|
||||
LIBRARY := jsound, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJSOUND, \
|
||||
NAME := jsound, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJSOUND_SRC_DIRS), \
|
||||
INCLUDE_FILES := $(LIBJSOUND_SRC_FILES), \
|
||||
@ -149,8 +149,8 @@ TARGETS += $(BUILD_LIBJSOUND)
|
||||
|
||||
ifneq ($(filter jsoundalsa, $(EXTRA_SOUND_JNI_LIBS)), )
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA, \
|
||||
LIBRARY := jsoundalsa, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJSOUNDALSA, \
|
||||
NAME := jsoundalsa, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJSOUND_SRC_DIRS), \
|
||||
INCLUDE_FILES := Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \
|
||||
@ -186,8 +186,8 @@ endif
|
||||
|
||||
ifneq ($(filter jsoundds, $(EXTRA_SOUND_JNI_LIBS)), )
|
||||
|
||||
$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDDS, \
|
||||
LIBRARY := jsoundds, \
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBJSOUNDDS, \
|
||||
NAME := jsoundds, \
|
||||
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
|
||||
SRC := $(LIBJSOUND_SRC_DIRS), \
|
||||
INCLUDE_FILES := Utilities.c $(LIBJSOUND_DAUDIOFILES) \
|
||||
|
||||
@ -261,7 +261,6 @@ jdk.jshell
|
||||
jdk.jshell.execution
|
||||
jdk.jshell.spi
|
||||
jdk.jshell.tool
|
||||
jdk.management.cmm
|
||||
jdk.management.jfr
|
||||
jdk.management.resource
|
||||
jdk.nashorn.api.scripting
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2016, 2018, 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,7 +64,7 @@ TARGETS += $(BUILD_FAILURE_HANDLER)
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
|
||||
$(eval $(call SetupNativeCompilation, BUILD_LIBTIMEOUT_HANDLER, \
|
||||
LIBRARY := timeoutHandler, \
|
||||
NAME := timeoutHandler, \
|
||||
SRC := $(FH_BASEDIR)/src/windows/native/libtimeoutHandler, \
|
||||
OBJECT_DIR := $(FH_SUPPORT)/libtimeoutHandler, \
|
||||
OUTPUT_DIR := $(FH_SUPPORT), \
|
||||
|
||||
@ -684,14 +684,14 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
|
||||
if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) &&
|
||||
UseTLAB && FastTLABRefill) {
|
||||
UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Label slow_path;
|
||||
Register obj_size = r2;
|
||||
Register t1 = r19;
|
||||
Register t2 = r4;
|
||||
assert_different_registers(klass, obj, obj_size, t1, t2);
|
||||
|
||||
__ stp(r5, r19, Address(__ pre(sp, -2 * wordSize)));
|
||||
__ stp(r19, zr, Address(__ pre(sp, -2 * wordSize)));
|
||||
|
||||
if (id == fast_new_instance_init_check_id) {
|
||||
// make sure the klass is initialized
|
||||
@ -716,24 +716,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
// if we got here then the TLAB allocation failed, so try
|
||||
// refilling the TLAB or allocating directly from eden.
|
||||
Label retry_tlab, try_eden;
|
||||
__ tlab_refill(retry_tlab, try_eden, slow_path); // does not destroy r3 (klass), returns r5
|
||||
|
||||
__ bind(retry_tlab);
|
||||
|
||||
// get the instance size (size is postive so movl is fine for 64bit)
|
||||
__ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
|
||||
__ tlab_allocate(obj, obj_size, 0, t1, t2, slow_path);
|
||||
|
||||
__ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ true);
|
||||
__ verify_oop(obj);
|
||||
__ ldp(r5, r19, Address(__ post(sp, 2 * wordSize)));
|
||||
__ ret(lr);
|
||||
|
||||
__ bind(try_eden);
|
||||
// get the instance size (size is postive so movl is fine for 64bit)
|
||||
__ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
|
||||
@ -742,11 +724,11 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
|
||||
__ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ false);
|
||||
__ verify_oop(obj);
|
||||
__ ldp(r5, r19, Address(__ post(sp, 2 * wordSize)));
|
||||
__ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
|
||||
__ ret(lr);
|
||||
|
||||
__ bind(slow_path);
|
||||
__ ldp(r5, r19, Address(__ post(sp, 2 * wordSize)));
|
||||
__ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
|
||||
}
|
||||
|
||||
__ enter();
|
||||
@ -814,7 +796,7 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
if (UseTLAB && FastTLABRefill) {
|
||||
if (UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Register arr_size = r4;
|
||||
Register t1 = r2;
|
||||
Register t2 = r5;
|
||||
@ -826,45 +808,10 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ cmpw(length, rscratch1);
|
||||
__ br(Assembler::HI, slow_path);
|
||||
|
||||
// if we got here then the TLAB allocation failed, so try
|
||||
// refilling the TLAB or allocating directly from eden.
|
||||
Label retry_tlab, try_eden;
|
||||
const Register thread =
|
||||
__ tlab_refill(retry_tlab, try_eden, slow_path); // preserves r19 & r3, returns rthread
|
||||
|
||||
__ bind(retry_tlab);
|
||||
|
||||
// get the allocation size: round_up(hdr + length << (layout_helper & 0x1F))
|
||||
// since size is positive ldrw does right thing on 64bit
|
||||
__ ldrw(t1, Address(klass, Klass::layout_helper_offset()));
|
||||
__ lslvw(arr_size, length, t1);
|
||||
__ ubfx(t1, t1, Klass::_lh_header_size_shift,
|
||||
exact_log2(Klass::_lh_header_size_mask + 1));
|
||||
__ add(arr_size, arr_size, t1);
|
||||
__ add(arr_size, arr_size, MinObjAlignmentInBytesMask); // align up
|
||||
__ andr(arr_size, arr_size, ~MinObjAlignmentInBytesMask);
|
||||
|
||||
__ tlab_allocate(obj, arr_size, 0, t1, t2, slow_path); // preserves arr_size
|
||||
|
||||
__ initialize_header(obj, klass, length, t1, t2);
|
||||
__ ldrb(t1, Address(klass, in_bytes(Klass::layout_helper_offset()) + (Klass::_lh_header_size_shift / BitsPerByte)));
|
||||
assert(Klass::_lh_header_size_shift % BitsPerByte == 0, "bytewise");
|
||||
assert(Klass::_lh_header_size_mask <= 0xFF, "bytewise");
|
||||
__ andr(t1, t1, Klass::_lh_header_size_mask);
|
||||
__ sub(arr_size, arr_size, t1); // body length
|
||||
__ add(t1, t1, obj); // body start
|
||||
if (!ZeroTLAB) {
|
||||
__ initialize_body(t1, arr_size, 0, t2);
|
||||
}
|
||||
__ verify_oop(obj);
|
||||
|
||||
__ ret(lr);
|
||||
|
||||
__ bind(try_eden);
|
||||
// get the allocation size: round_up(hdr + length << (layout_helper & 0x1F))
|
||||
// since size is positive ldrw does right thing on 64bit
|
||||
__ ldrw(t1, Address(klass, Klass::layout_helper_offset()));
|
||||
// since size is postive movw does right thing on 64bit
|
||||
// since size is positive movw does right thing on 64bit
|
||||
__ movw(arr_size, length);
|
||||
__ lslvw(arr_size, length, t1);
|
||||
__ ubfx(t1, t1, Klass::_lh_header_size_shift,
|
||||
@ -874,7 +821,7 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ andr(arr_size, arr_size, ~MinObjAlignmentInBytesMask);
|
||||
|
||||
__ eden_allocate(obj, arr_size, 0, t1, slow_path); // preserves arr_size
|
||||
__ incr_allocated_bytes(thread, arr_size, 0, rscratch1);
|
||||
__ incr_allocated_bytes(rthread, arr_size, 0, rscratch1);
|
||||
|
||||
__ initialize_header(obj, klass, length, t1, t2);
|
||||
__ ldrb(t1, Address(klass, in_bytes(Klass::layout_helper_offset()) + (Klass::_lh_header_size_shift / BitsPerByte)));
|
||||
|
||||
@ -4096,131 +4096,6 @@ void MacroAssembler::tlab_allocate(Register obj,
|
||||
// verify_tlab();
|
||||
}
|
||||
|
||||
// Preserves r19, and r3.
|
||||
Register MacroAssembler::tlab_refill(Label& retry,
|
||||
Label& try_eden,
|
||||
Label& slow_case) {
|
||||
Register top = r0;
|
||||
Register t1 = r2;
|
||||
Register t2 = r4;
|
||||
assert_different_registers(top, rthread, t1, t2, /* preserve: */ r19, r3);
|
||||
Label do_refill, discard_tlab;
|
||||
|
||||
if (!Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// No allocation in the shared eden.
|
||||
b(slow_case);
|
||||
}
|
||||
|
||||
ldr(top, Address(rthread, in_bytes(JavaThread::tlab_top_offset())));
|
||||
ldr(t1, Address(rthread, in_bytes(JavaThread::tlab_end_offset())));
|
||||
|
||||
// calculate amount of free space
|
||||
sub(t1, t1, top);
|
||||
lsr(t1, t1, LogHeapWordSize);
|
||||
|
||||
// Retain tlab and allocate object in shared space if
|
||||
// the amount free in the tlab is too large to discard.
|
||||
|
||||
ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_refill_waste_limit_offset())));
|
||||
cmp(t1, rscratch1);
|
||||
br(Assembler::LE, discard_tlab);
|
||||
|
||||
// Retain
|
||||
// ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_refill_waste_limit_offset())));
|
||||
mov(t2, (int32_t) ThreadLocalAllocBuffer::refill_waste_limit_increment());
|
||||
add(rscratch1, rscratch1, t2);
|
||||
str(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_refill_waste_limit_offset())));
|
||||
|
||||
if (TLABStats) {
|
||||
// increment number of slow_allocations
|
||||
addmw(Address(rthread, in_bytes(JavaThread::tlab_slow_allocations_offset())),
|
||||
1, rscratch1);
|
||||
}
|
||||
b(try_eden);
|
||||
|
||||
bind(discard_tlab);
|
||||
if (TLABStats) {
|
||||
// increment number of refills
|
||||
addmw(Address(rthread, in_bytes(JavaThread::tlab_number_of_refills_offset())), 1,
|
||||
rscratch1);
|
||||
// accumulate wastage -- t1 is amount free in tlab
|
||||
addmw(Address(rthread, in_bytes(JavaThread::tlab_fast_refill_waste_offset())), t1,
|
||||
rscratch1);
|
||||
}
|
||||
|
||||
// if tlab is currently allocated (top or end != null) then
|
||||
// fill [top, end + alignment_reserve) with array object
|
||||
cbz(top, do_refill);
|
||||
|
||||
// set up the mark word
|
||||
mov(rscratch1, (intptr_t)markOopDesc::prototype()->copy_set_hash(0x2));
|
||||
str(rscratch1, Address(top, oopDesc::mark_offset_in_bytes()));
|
||||
// set the length to the remaining space
|
||||
sub(t1, t1, typeArrayOopDesc::header_size(T_INT));
|
||||
add(t1, t1, (int32_t)ThreadLocalAllocBuffer::alignment_reserve());
|
||||
lsl(t1, t1, log2_intptr(HeapWordSize/sizeof(jint)));
|
||||
strw(t1, Address(top, arrayOopDesc::length_offset_in_bytes()));
|
||||
// set klass to intArrayKlass
|
||||
{
|
||||
unsigned long offset;
|
||||
// dubious reloc why not an oop reloc?
|
||||
adrp(rscratch1, ExternalAddress((address)Universe::intArrayKlassObj_addr()),
|
||||
offset);
|
||||
ldr(t1, Address(rscratch1, offset));
|
||||
}
|
||||
// store klass last. concurrent gcs assumes klass length is valid if
|
||||
// klass field is not null.
|
||||
store_klass(top, t1);
|
||||
|
||||
mov(t1, top);
|
||||
ldr(rscratch1, Address(rthread, in_bytes(JavaThread::tlab_start_offset())));
|
||||
sub(t1, t1, rscratch1);
|
||||
incr_allocated_bytes(rthread, t1, 0, rscratch1);
|
||||
|
||||
// refill the tlab with an eden allocation
|
||||
bind(do_refill);
|
||||
ldr(t1, Address(rthread, in_bytes(JavaThread::tlab_size_offset())));
|
||||
lsl(t1, t1, LogHeapWordSize);
|
||||
// allocate new tlab, address returned in top
|
||||
eden_allocate(top, t1, 0, t2, slow_case);
|
||||
|
||||
// Check that t1 was preserved in eden_allocate.
|
||||
#ifdef ASSERT
|
||||
if (UseTLAB) {
|
||||
Label ok;
|
||||
Register tsize = r4;
|
||||
assert_different_registers(tsize, rthread, t1);
|
||||
str(tsize, Address(pre(sp, -16)));
|
||||
ldr(tsize, Address(rthread, in_bytes(JavaThread::tlab_size_offset())));
|
||||
lsl(tsize, tsize, LogHeapWordSize);
|
||||
cmp(t1, tsize);
|
||||
br(Assembler::EQ, ok);
|
||||
STOP("assert(t1 != tlab size)");
|
||||
should_not_reach_here();
|
||||
|
||||
bind(ok);
|
||||
ldr(tsize, Address(post(sp, 16)));
|
||||
}
|
||||
#endif
|
||||
str(top, Address(rthread, in_bytes(JavaThread::tlab_start_offset())));
|
||||
str(top, Address(rthread, in_bytes(JavaThread::tlab_top_offset())));
|
||||
add(top, top, t1);
|
||||
sub(top, top, (int32_t)ThreadLocalAllocBuffer::alignment_reserve_in_bytes());
|
||||
str(top, Address(rthread, in_bytes(JavaThread::tlab_end_offset())));
|
||||
|
||||
if (ZeroTLAB) {
|
||||
// This is a fast TLAB refill, therefore the GC is not notified of it.
|
||||
// So compiled code must fill the new TLAB with zeroes.
|
||||
ldr(top, Address(rthread, in_bytes(JavaThread::tlab_start_offset())));
|
||||
zero_memory(top,t1,t2);
|
||||
}
|
||||
|
||||
verify_tlab();
|
||||
b(retry);
|
||||
|
||||
return rthread; // for use by caller
|
||||
}
|
||||
|
||||
// Zero words; len is in bytes
|
||||
// Destroys all registers except addr
|
||||
// len must be a nonzero multiple of wordSize
|
||||
|
||||
@ -861,7 +861,6 @@ public:
|
||||
Register t2, // temp register
|
||||
Label& slow_case // continuation point if fast allocation fails
|
||||
);
|
||||
Register tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case); // returns TLS address
|
||||
void zero_memory(Register addr, Register len, Register t1);
|
||||
void verify_tlab();
|
||||
|
||||
|
||||
@ -722,10 +722,10 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
const Register result = R0;
|
||||
const Register klass = R1;
|
||||
|
||||
if (UseTLAB && FastTLABRefill && id != new_instance_id) {
|
||||
if (UseTLAB && Universe::heap()->supports_inline_contig_alloc() && id != new_instance_id) {
|
||||
// We come here when TLAB allocation failed.
|
||||
// In this case we either refill TLAB or allocate directly from eden.
|
||||
Label retry_tlab, try_eden, slow_case, slow_case_no_pop;
|
||||
// In this case we try to allocate directly from eden.
|
||||
Label slow_case, slow_case_no_pop;
|
||||
|
||||
// Make sure the class is fully initialized
|
||||
if (id == fast_new_instance_init_check_id) {
|
||||
@ -742,17 +742,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
|
||||
__ raw_push(R4, R5, LR);
|
||||
|
||||
__ tlab_refill(result, obj_size, tmp1, tmp2, obj_end, try_eden, slow_case);
|
||||
|
||||
__ bind(retry_tlab);
|
||||
__ ldr_u32(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
__ tlab_allocate(result, obj_end, tmp1, obj_size, slow_case); // initializes result and obj_end
|
||||
__ initialize_object(result, obj_end, klass, noreg /* len */, tmp1, tmp2,
|
||||
instanceOopDesc::header_size() * HeapWordSize, -1,
|
||||
/* is_tlab_allocated */ true);
|
||||
__ raw_pop_and_ret(R4, R5);
|
||||
|
||||
__ bind(try_eden);
|
||||
__ ldr_u32(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
__ eden_allocate(result, obj_end, tmp1, tmp2, obj_size, slow_case); // initializes result and obj_end
|
||||
__ incr_allocated_bytes(obj_size, tmp2);
|
||||
@ -803,10 +792,10 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
const Register klass = R1;
|
||||
const Register length = R2;
|
||||
|
||||
if (UseTLAB && FastTLABRefill) {
|
||||
if (UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// We come here when TLAB allocation failed.
|
||||
// In this case we either refill TLAB or allocate directly from eden.
|
||||
Label retry_tlab, try_eden, slow_case, slow_case_no_pop;
|
||||
// In this case we try to allocate directly from eden.
|
||||
Label slow_case, slow_case_no_pop;
|
||||
|
||||
#ifdef AARCH64
|
||||
__ mov_slow(Rtemp, C1_MacroAssembler::max_array_allocation_length);
|
||||
@ -825,40 +814,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
|
||||
__ raw_push(R4, R5, LR);
|
||||
|
||||
__ tlab_refill(result, arr_size, tmp1, tmp2, tmp3, try_eden, slow_case);
|
||||
|
||||
__ bind(retry_tlab);
|
||||
// Get the allocation size: round_up((length << (layout_helper & 0xff)) + header_size)
|
||||
__ ldr_u32(tmp1, Address(klass, Klass::layout_helper_offset()));
|
||||
__ mov(arr_size, MinObjAlignmentInBytesMask);
|
||||
__ and_32(tmp2, tmp1, (unsigned int)(Klass::_lh_header_size_mask << Klass::_lh_header_size_shift));
|
||||
|
||||
#ifdef AARCH64
|
||||
__ lslv_w(tmp3, length, tmp1);
|
||||
__ add(arr_size, arr_size, tmp3);
|
||||
#else
|
||||
__ add(arr_size, arr_size, AsmOperand(length, lsl, tmp1));
|
||||
#endif // AARCH64
|
||||
|
||||
__ add(arr_size, arr_size, AsmOperand(tmp2, lsr, Klass::_lh_header_size_shift));
|
||||
__ align_reg(arr_size, arr_size, MinObjAlignmentInBytes);
|
||||
|
||||
// tlab_allocate initializes result and obj_end, and preserves tmp2 which contains header_size
|
||||
__ tlab_allocate(result, obj_end, tmp1, arr_size, slow_case);
|
||||
|
||||
assert_different_registers(result, obj_end, klass, length, tmp1, tmp2);
|
||||
__ initialize_header(result, klass, length, tmp1);
|
||||
|
||||
__ add(tmp2, result, AsmOperand(tmp2, lsr, Klass::_lh_header_size_shift));
|
||||
if (!ZeroTLAB) {
|
||||
__ initialize_body(tmp2, obj_end, tmp1);
|
||||
}
|
||||
|
||||
__ membar(MacroAssembler::StoreStore, tmp1);
|
||||
|
||||
__ raw_pop_and_ret(R4, R5);
|
||||
|
||||
__ bind(try_eden);
|
||||
// Get the allocation size: round_up((length << (layout_helper & 0xff)) + header_size)
|
||||
__ ldr_u32(tmp1, Address(klass, Klass::layout_helper_offset()));
|
||||
__ mov(arr_size, MinObjAlignmentInBytesMask);
|
||||
|
||||
@ -1316,98 +1316,6 @@ void MacroAssembler::tlab_allocate(Register obj, Register obj_end, Register tmp1
|
||||
str(obj_end, Address(Rthread, JavaThread::tlab_top_offset()));
|
||||
}
|
||||
|
||||
void MacroAssembler::tlab_refill(Register top, Register tmp1, Register tmp2,
|
||||
Register tmp3, Register tmp4,
|
||||
Label& try_eden, Label& slow_case) {
|
||||
if (!Universe::heap()->supports_inline_contig_alloc()) {
|
||||
b(slow_case);
|
||||
return;
|
||||
}
|
||||
|
||||
InlinedAddress intArrayKlass_addr((address)Universe::intArrayKlassObj_addr());
|
||||
Label discard_tlab, do_refill;
|
||||
ldr(top, Address(Rthread, JavaThread::tlab_top_offset()));
|
||||
ldr(tmp1, Address(Rthread, JavaThread::tlab_end_offset()));
|
||||
ldr(tmp2, Address(Rthread, JavaThread::tlab_refill_waste_limit_offset()));
|
||||
|
||||
// Calculate amount of free space
|
||||
sub(tmp1, tmp1, top);
|
||||
// Retain tlab and allocate in shared space
|
||||
// if the amount of free space in tlab is too large to discard
|
||||
cmp(tmp2, AsmOperand(tmp1, lsr, LogHeapWordSize));
|
||||
b(discard_tlab, ge);
|
||||
|
||||
// Increment waste limit to prevent getting stuck on this slow path
|
||||
mov_slow(tmp3, ThreadLocalAllocBuffer::refill_waste_limit_increment());
|
||||
add(tmp2, tmp2, tmp3);
|
||||
str(tmp2, Address(Rthread, JavaThread::tlab_refill_waste_limit_offset()));
|
||||
if (TLABStats) {
|
||||
ldr_u32(tmp2, Address(Rthread, JavaThread::tlab_slow_allocations_offset()));
|
||||
add_32(tmp2, tmp2, 1);
|
||||
str_32(tmp2, Address(Rthread, JavaThread::tlab_slow_allocations_offset()));
|
||||
}
|
||||
b(try_eden);
|
||||
bind_literal(intArrayKlass_addr);
|
||||
|
||||
bind(discard_tlab);
|
||||
if (TLABStats) {
|
||||
ldr_u32(tmp2, Address(Rthread, JavaThread::tlab_number_of_refills_offset()));
|
||||
ldr_u32(tmp3, Address(Rthread, JavaThread::tlab_fast_refill_waste_offset()));
|
||||
add_32(tmp2, tmp2, 1);
|
||||
add_32(tmp3, tmp3, AsmOperand(tmp1, lsr, LogHeapWordSize));
|
||||
str_32(tmp2, Address(Rthread, JavaThread::tlab_number_of_refills_offset()));
|
||||
str_32(tmp3, Address(Rthread, JavaThread::tlab_fast_refill_waste_offset()));
|
||||
}
|
||||
// If tlab is currently allocated (top or end != null)
|
||||
// then fill [top, end + alignment_reserve) with array object
|
||||
cbz(top, do_refill);
|
||||
|
||||
// Set up the mark word
|
||||
mov_slow(tmp2, (intptr_t)markOopDesc::prototype()->copy_set_hash(0x2));
|
||||
str(tmp2, Address(top, oopDesc::mark_offset_in_bytes()));
|
||||
// Set klass to intArrayKlass and the length to the remaining space
|
||||
ldr_literal(tmp2, intArrayKlass_addr);
|
||||
add(tmp1, tmp1, ThreadLocalAllocBuffer::alignment_reserve_in_bytes() -
|
||||
typeArrayOopDesc::header_size(T_INT) * HeapWordSize);
|
||||
Register klass = tmp2;
|
||||
ldr(klass, Address(tmp2));
|
||||
logical_shift_right(tmp1, tmp1, LogBytesPerInt); // divide by sizeof(jint)
|
||||
str_32(tmp1, Address(top, arrayOopDesc::length_offset_in_bytes()));
|
||||
store_klass(klass, top); // blows klass:
|
||||
klass = noreg;
|
||||
|
||||
ldr(tmp1, Address(Rthread, JavaThread::tlab_start_offset()));
|
||||
sub(tmp1, top, tmp1); // size of tlab's allocated portion
|
||||
incr_allocated_bytes(tmp1, tmp2);
|
||||
|
||||
bind(do_refill);
|
||||
// Refill the tlab with an eden allocation
|
||||
ldr(tmp1, Address(Rthread, JavaThread::tlab_size_offset()));
|
||||
logical_shift_left(tmp4, tmp1, LogHeapWordSize);
|
||||
eden_allocate(top, tmp1, tmp2, tmp3, tmp4, slow_case);
|
||||
str(top, Address(Rthread, JavaThread::tlab_start_offset()));
|
||||
str(top, Address(Rthread, JavaThread::tlab_top_offset()));
|
||||
|
||||
#ifdef ASSERT
|
||||
// Verify that tmp1 contains tlab_end
|
||||
ldr(tmp2, Address(Rthread, JavaThread::tlab_size_offset()));
|
||||
add(tmp2, top, AsmOperand(tmp2, lsl, LogHeapWordSize));
|
||||
cmp(tmp1, tmp2);
|
||||
breakpoint(ne);
|
||||
#endif
|
||||
|
||||
sub(tmp1, tmp1, ThreadLocalAllocBuffer::alignment_reserve_in_bytes());
|
||||
str(tmp1, Address(Rthread, JavaThread::tlab_end_offset()));
|
||||
|
||||
if (ZeroTLAB) {
|
||||
// clobbers start and tmp
|
||||
// top must be preserved!
|
||||
add(tmp1, tmp1, ThreadLocalAllocBuffer::alignment_reserve_in_bytes());
|
||||
ldr(tmp2, Address(Rthread, JavaThread::tlab_start_offset()));
|
||||
zero_memory(tmp2, tmp1, tmp3);
|
||||
}
|
||||
}
|
||||
|
||||
// Fills memory regions [start..end] with zeroes. Clobbers `start` and `tmp` registers.
|
||||
void MacroAssembler::zero_memory(Register start, Register end, Register tmp) {
|
||||
Label loop;
|
||||
|
||||
@ -359,8 +359,6 @@ public:
|
||||
void tlab_allocate(Register obj, Register obj_end, Register tmp1,
|
||||
RegisterOrConstant size_expression, Label& slow_case);
|
||||
|
||||
void tlab_refill(Register top, Register tmp1, Register tmp2, Register tmp3, Register tmp4,
|
||||
Label& try_eden, Label& slow_case);
|
||||
void zero_memory(Register start, Register end, Register tmp);
|
||||
|
||||
void incr_allocated_bytes(RegisterOrConstant size_in_bytes, Register tmp);
|
||||
|
||||
@ -413,34 +413,9 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
assert(id == fast_new_instance_init_check_id, "bad StubID");
|
||||
__ set_info("fast new_instance init check", dont_gc_arguments);
|
||||
}
|
||||
|
||||
// We don't support eden allocation.
|
||||
// if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) &&
|
||||
// UseTLAB && FastTLABRefill) {
|
||||
// if (id == fast_new_instance_init_check_id) {
|
||||
// // make sure the klass is initialized
|
||||
// __ lbz(R0, in_bytes(InstanceKlass::init_state_offset()), R3_ARG1);
|
||||
// __ cmpwi(CCR0, R0, InstanceKlass::fully_initialized);
|
||||
// __ bne(CCR0, slow_path);
|
||||
// }
|
||||
//#ifdef ASSERT
|
||||
// // assert object can be fast path allocated
|
||||
// {
|
||||
// Label ok, not_ok;
|
||||
// __ lwz(R0, in_bytes(Klass::layout_helper_offset()), R3_ARG1);
|
||||
// // make sure it's an instance (LH > 0)
|
||||
// __ cmpwi(CCR0, R0, 0);
|
||||
// __ ble(CCR0, not_ok);
|
||||
// __ testbitdi(CCR0, R0, R0, Klass::_lh_instance_slow_path_bit);
|
||||
// __ beq(CCR0, ok);
|
||||
//
|
||||
// __ bind(not_ok);
|
||||
// __ stop("assert(can be fast path allocated)");
|
||||
// __ bind(ok);
|
||||
// }
|
||||
//#endif // ASSERT
|
||||
// // We don't support eden allocation.
|
||||
// __ bind(slow_path);
|
||||
// }
|
||||
|
||||
oop_maps = generate_stub_call(sasm, R3_RET, CAST_FROM_FN_PTR(address, new_instance), R4_ARG2);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -2336,9 +2336,6 @@ void MacroAssembler::tlab_allocate(
|
||||
std(new_top, in_bytes(JavaThread::tlab_top_offset()), R16_thread);
|
||||
//verify_tlab(); not implemented
|
||||
}
|
||||
void MacroAssembler::tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case) {
|
||||
unimplemented("tlab_refill");
|
||||
}
|
||||
void MacroAssembler::incr_allocated_bytes(RegisterOrConstant size_in_bytes, Register t1, Register t2) {
|
||||
unimplemented("incr_allocated_bytes");
|
||||
}
|
||||
|
||||
@ -602,7 +602,6 @@ class MacroAssembler: public Assembler {
|
||||
Register t1, // temp register
|
||||
Label& slow_case // continuation point if fast allocation fails
|
||||
);
|
||||
void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case);
|
||||
void incr_allocated_bytes(RegisterOrConstant size_in_bytes, Register t1, Register t2);
|
||||
|
||||
enum { trampoline_stub_size = 6 * 4 };
|
||||
|
||||
@ -346,11 +346,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ set_info("fast new_instance init check", dont_gc_arguments);
|
||||
}
|
||||
|
||||
if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) &&
|
||||
UseTLAB && FastTLABRefill) {
|
||||
// Sapjvm: must call RT to generate allocation events.
|
||||
}
|
||||
|
||||
OopMap* map = save_live_registers_except_r2(sasm);
|
||||
int call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_instance), klass);
|
||||
oop_maps = new OopMapSet();
|
||||
@ -411,10 +406,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
if (UseTLAB && FastTLABRefill) {
|
||||
// sapjvm: must call RT to generate allocation events.
|
||||
}
|
||||
|
||||
OopMap* map = save_live_registers_except_r2(sasm);
|
||||
int call_offset;
|
||||
if (id == new_type_array_id) {
|
||||
|
||||
@ -389,7 +389,7 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
|
||||
if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) &&
|
||||
UseTLAB && FastTLABRefill) {
|
||||
UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Label slow_path;
|
||||
Register G1_obj_size = G1;
|
||||
Register G3_t1 = G3;
|
||||
@ -424,25 +424,8 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ bind(ok);
|
||||
}
|
||||
#endif // ASSERT
|
||||
// if we got here then the TLAB allocation failed, so try
|
||||
// refilling the TLAB or allocating directly from eden.
|
||||
Label retry_tlab, try_eden;
|
||||
__ tlab_refill(retry_tlab, try_eden, slow_path); // preserves G5_klass
|
||||
|
||||
__ bind(retry_tlab);
|
||||
|
||||
// get the instance size
|
||||
__ ld(G5_klass, in_bytes(Klass::layout_helper_offset()), G1_obj_size);
|
||||
|
||||
__ tlab_allocate(O0_obj, G1_obj_size, 0, G3_t1, slow_path);
|
||||
|
||||
__ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2, /* is_tlab_allocated */ true);
|
||||
__ verify_oop(O0_obj);
|
||||
__ mov(O0, I0);
|
||||
__ ret();
|
||||
__ delayed()->restore();
|
||||
|
||||
__ bind(try_eden);
|
||||
// If we got here then the TLAB allocation failed, so try allocating directly from eden.
|
||||
// get the instance size
|
||||
__ ld(G5_klass, in_bytes(Klass::layout_helper_offset()), G1_obj_size);
|
||||
__ eden_allocate(O0_obj, G1_obj_size, 0, G3_t1, G4_t2, slow_path);
|
||||
@ -508,73 +491,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
if (UseTLAB && FastTLABRefill) {
|
||||
Label slow_path;
|
||||
Register G1_arr_size = G1;
|
||||
Register G3_t1 = G3;
|
||||
Register O1_t2 = O1;
|
||||
assert_different_registers(G5_klass, G4_length, G1_arr_size, G3_t1, O1_t2);
|
||||
|
||||
// check that array length is small enough for fast path
|
||||
__ set(C1_MacroAssembler::max_array_allocation_length, G3_t1);
|
||||
__ cmp(G4_length, G3_t1);
|
||||
__ br(Assembler::greaterUnsigned, false, Assembler::pn, slow_path);
|
||||
__ delayed()->nop();
|
||||
|
||||
// if we got here then the TLAB allocation failed, so try
|
||||
// refilling the TLAB or allocating directly from eden.
|
||||
Label retry_tlab, try_eden;
|
||||
__ tlab_refill(retry_tlab, try_eden, slow_path); // preserves G4_length and G5_klass
|
||||
|
||||
__ bind(retry_tlab);
|
||||
|
||||
// get the allocation size: (length << (layout_helper & 0x1F)) + header_size
|
||||
__ ld(klass_lh, G3_t1);
|
||||
__ sll(G4_length, G3_t1, G1_arr_size);
|
||||
__ srl(G3_t1, Klass::_lh_header_size_shift, G3_t1);
|
||||
__ and3(G3_t1, Klass::_lh_header_size_mask, G3_t1);
|
||||
__ add(G1_arr_size, G3_t1, G1_arr_size);
|
||||
__ add(G1_arr_size, MinObjAlignmentInBytesMask, G1_arr_size); // align up
|
||||
__ and3(G1_arr_size, ~MinObjAlignmentInBytesMask, G1_arr_size);
|
||||
|
||||
__ tlab_allocate(O0_obj, G1_arr_size, 0, G3_t1, slow_path); // preserves G1_arr_size
|
||||
|
||||
__ initialize_header(O0_obj, G5_klass, G4_length, G3_t1, O1_t2);
|
||||
__ ldub(klass_lh, G3_t1, klass_lh_header_size_offset);
|
||||
__ sub(G1_arr_size, G3_t1, O1_t2); // body length
|
||||
__ add(O0_obj, G3_t1, G3_t1); // body start
|
||||
if (!ZeroTLAB) {
|
||||
__ initialize_body(G3_t1, O1_t2);
|
||||
}
|
||||
__ verify_oop(O0_obj);
|
||||
__ retl();
|
||||
__ delayed()->nop();
|
||||
|
||||
__ bind(try_eden);
|
||||
// get the allocation size: (length << (layout_helper & 0x1F)) + header_size
|
||||
__ ld(klass_lh, G3_t1);
|
||||
__ sll(G4_length, G3_t1, G1_arr_size);
|
||||
__ srl(G3_t1, Klass::_lh_header_size_shift, G3_t1);
|
||||
__ and3(G3_t1, Klass::_lh_header_size_mask, G3_t1);
|
||||
__ add(G1_arr_size, G3_t1, G1_arr_size);
|
||||
__ add(G1_arr_size, MinObjAlignmentInBytesMask, G1_arr_size);
|
||||
__ and3(G1_arr_size, ~MinObjAlignmentInBytesMask, G1_arr_size);
|
||||
|
||||
__ eden_allocate(O0_obj, G1_arr_size, 0, G3_t1, O1_t2, slow_path); // preserves G1_arr_size
|
||||
__ incr_allocated_bytes(G1_arr_size, G3_t1, O1_t2);
|
||||
|
||||
__ initialize_header(O0_obj, G5_klass, G4_length, G3_t1, O1_t2);
|
||||
__ ldub(klass_lh, G3_t1, klass_lh_header_size_offset);
|
||||
__ sub(G1_arr_size, G3_t1, O1_t2); // body length
|
||||
__ add(O0_obj, G3_t1, G3_t1); // body start
|
||||
__ initialize_body(G3_t1, O1_t2);
|
||||
__ verify_oop(O0_obj);
|
||||
__ retl();
|
||||
__ delayed()->nop();
|
||||
|
||||
__ bind(slow_path);
|
||||
}
|
||||
|
||||
if (id == new_type_array_id) {
|
||||
oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_type_array), G5_klass, G4_length);
|
||||
} else {
|
||||
|
||||
@ -3242,127 +3242,6 @@ void MacroAssembler::tlab_allocate(
|
||||
verify_tlab();
|
||||
}
|
||||
|
||||
|
||||
void MacroAssembler::tlab_refill(Label& retry, Label& try_eden, Label& slow_case) {
|
||||
Register top = O0;
|
||||
Register t1 = G1;
|
||||
Register t2 = G3;
|
||||
Register t3 = O1;
|
||||
assert_different_registers(top, t1, t2, t3, G4, G5 /* preserve G4 and G5 */);
|
||||
Label do_refill, discard_tlab;
|
||||
|
||||
if (!Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// No allocation in the shared eden.
|
||||
ba(slow_case);
|
||||
delayed()->nop();
|
||||
}
|
||||
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_top_offset()), top);
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_end_offset()), t1);
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()), t2);
|
||||
|
||||
// calculate amount of free space
|
||||
sub(t1, top, t1);
|
||||
srl_ptr(t1, LogHeapWordSize, t1);
|
||||
|
||||
// Retain tlab and allocate object in shared space if
|
||||
// the amount free in the tlab is too large to discard.
|
||||
cmp(t1, t2);
|
||||
|
||||
brx(Assembler::lessEqual, false, Assembler::pt, discard_tlab);
|
||||
// increment waste limit to prevent getting stuck on this slow path
|
||||
if (Assembler::is_simm13(ThreadLocalAllocBuffer::refill_waste_limit_increment())) {
|
||||
delayed()->add(t2, ThreadLocalAllocBuffer::refill_waste_limit_increment(), t2);
|
||||
} else {
|
||||
delayed()->nop();
|
||||
// set64 does not use the temp register if the given constant is 32 bit. So
|
||||
// we can just use any register; using G0 results in ignoring of the upper 32 bit
|
||||
// of that value.
|
||||
set64(ThreadLocalAllocBuffer::refill_waste_limit_increment(), t3, G0);
|
||||
add(t2, t3, t2);
|
||||
}
|
||||
|
||||
st_ptr(t2, G2_thread, in_bytes(JavaThread::tlab_refill_waste_limit_offset()));
|
||||
if (TLABStats) {
|
||||
// increment number of slow_allocations
|
||||
ld(G2_thread, in_bytes(JavaThread::tlab_slow_allocations_offset()), t2);
|
||||
add(t2, 1, t2);
|
||||
stw(t2, G2_thread, in_bytes(JavaThread::tlab_slow_allocations_offset()));
|
||||
}
|
||||
ba(try_eden);
|
||||
delayed()->nop();
|
||||
|
||||
bind(discard_tlab);
|
||||
if (TLABStats) {
|
||||
// increment number of refills
|
||||
ld(G2_thread, in_bytes(JavaThread::tlab_number_of_refills_offset()), t2);
|
||||
add(t2, 1, t2);
|
||||
stw(t2, G2_thread, in_bytes(JavaThread::tlab_number_of_refills_offset()));
|
||||
// accumulate wastage
|
||||
ld(G2_thread, in_bytes(JavaThread::tlab_fast_refill_waste_offset()), t2);
|
||||
add(t2, t1, t2);
|
||||
stw(t2, G2_thread, in_bytes(JavaThread::tlab_fast_refill_waste_offset()));
|
||||
}
|
||||
|
||||
// if tlab is currently allocated (top or end != null) then
|
||||
// fill [top, end + alignment_reserve) with array object
|
||||
br_null_short(top, Assembler::pn, do_refill);
|
||||
|
||||
set((intptr_t)markOopDesc::prototype()->copy_set_hash(0x2), t2);
|
||||
st_ptr(t2, top, oopDesc::mark_offset_in_bytes()); // set up the mark word
|
||||
// set klass to intArrayKlass
|
||||
sub(t1, typeArrayOopDesc::header_size(T_INT), t1);
|
||||
add(t1, ThreadLocalAllocBuffer::alignment_reserve(), t1);
|
||||
sll_ptr(t1, log2_intptr(HeapWordSize/sizeof(jint)), t1);
|
||||
st(t1, top, arrayOopDesc::length_offset_in_bytes());
|
||||
set((intptr_t)Universe::intArrayKlassObj_addr(), t2);
|
||||
ld_ptr(t2, 0, t2);
|
||||
// store klass last. concurrent gcs assumes klass length is valid if
|
||||
// klass field is not null.
|
||||
store_klass(t2, top);
|
||||
verify_oop(top);
|
||||
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_start_offset()), t1);
|
||||
sub(top, t1, t1); // size of tlab's allocated portion
|
||||
incr_allocated_bytes(t1, t2, t3);
|
||||
|
||||
// refill the tlab with an eden allocation
|
||||
bind(do_refill);
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_size_offset()), t1);
|
||||
sll_ptr(t1, LogHeapWordSize, t1);
|
||||
// allocate new tlab, address returned in top
|
||||
eden_allocate(top, t1, 0, t2, t3, slow_case);
|
||||
|
||||
st_ptr(top, G2_thread, in_bytes(JavaThread::tlab_start_offset()));
|
||||
st_ptr(top, G2_thread, in_bytes(JavaThread::tlab_top_offset()));
|
||||
#ifdef ASSERT
|
||||
// check that tlab_size (t1) is still valid
|
||||
{
|
||||
Label ok;
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_size_offset()), t2);
|
||||
sll_ptr(t2, LogHeapWordSize, t2);
|
||||
cmp_and_br_short(t1, t2, Assembler::equal, Assembler::pt, ok);
|
||||
STOP("assert(t1 == tlab_size)");
|
||||
should_not_reach_here();
|
||||
|
||||
bind(ok);
|
||||
}
|
||||
#endif // ASSERT
|
||||
add(top, t1, top); // t1 is tlab_size
|
||||
sub(top, ThreadLocalAllocBuffer::alignment_reserve_in_bytes(), top);
|
||||
st_ptr(top, G2_thread, in_bytes(JavaThread::tlab_end_offset()));
|
||||
|
||||
if (ZeroTLAB) {
|
||||
// This is a fast TLAB refill, therefore the GC is not notified of it.
|
||||
// So compiled code must fill the new TLAB with zeroes.
|
||||
ld_ptr(G2_thread, in_bytes(JavaThread::tlab_start_offset()), t2);
|
||||
zero_memory(t2, t1);
|
||||
}
|
||||
verify_tlab();
|
||||
ba(retry);
|
||||
delayed()->nop();
|
||||
}
|
||||
|
||||
void MacroAssembler::zero_memory(Register base, Register index) {
|
||||
assert_different_registers(base, index);
|
||||
Label loop;
|
||||
|
||||
@ -1266,7 +1266,6 @@ public:
|
||||
Register t1, // temp register
|
||||
Label& slow_case // continuation point if fast allocation fails
|
||||
);
|
||||
void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case);
|
||||
void zero_memory(Register base, Register index);
|
||||
void incr_allocated_bytes(RegisterOrConstant size_in_bytes,
|
||||
Register t1, Register t2);
|
||||
|
||||
@ -529,12 +529,16 @@ void LIR_Assembler::return_op(LIR_Opr result) {
|
||||
|
||||
if (SafepointMechanism::uses_thread_local_poll()) {
|
||||
#ifdef _LP64
|
||||
__ movptr(rscratch1, Address(r15_thread, Thread::polling_page_offset()));
|
||||
__ relocate(relocInfo::poll_return_type);
|
||||
__ testl(rax, Address(rscratch1, 0));
|
||||
const Register poll_addr = rscratch1;
|
||||
__ movptr(poll_addr, Address(r15_thread, Thread::polling_page_offset()));
|
||||
#else
|
||||
ShouldNotReachHere();
|
||||
const Register poll_addr = rbx;
|
||||
assert(FrameMap::is_caller_save_register(poll_addr), "will overwrite");
|
||||
__ get_thread(poll_addr);
|
||||
__ movptr(poll_addr, Address(poll_addr, Thread::polling_page_offset()));
|
||||
#endif
|
||||
__ relocate(relocInfo::poll_return_type);
|
||||
__ testl(rax, Address(poll_addr, 0));
|
||||
} else {
|
||||
AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_return_type);
|
||||
|
||||
@ -555,16 +559,20 @@ int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
|
||||
int offset = __ offset();
|
||||
if (SafepointMechanism::uses_thread_local_poll()) {
|
||||
#ifdef _LP64
|
||||
__ movptr(rscratch1, Address(r15_thread, Thread::polling_page_offset()));
|
||||
const Register poll_addr = rscratch1;
|
||||
__ movptr(poll_addr, Address(r15_thread, Thread::polling_page_offset()));
|
||||
#else
|
||||
assert(tmp->is_cpu_register(), "needed");
|
||||
const Register poll_addr = tmp->as_register();
|
||||
__ get_thread(poll_addr);
|
||||
__ movptr(poll_addr, Address(poll_addr, in_bytes(Thread::polling_page_offset())));
|
||||
#endif
|
||||
add_debug_info_for_branch(info);
|
||||
__ relocate(relocInfo::poll_type);
|
||||
address pre_pc = __ pc();
|
||||
__ testl(rax, Address(rscratch1, 0));
|
||||
__ testl(rax, Address(poll_addr, 0));
|
||||
address post_pc = __ pc();
|
||||
guarantee(pointer_delta(post_pc, pre_pc, 1) == 3, "must be exact length");
|
||||
#else
|
||||
ShouldNotReachHere();
|
||||
#endif
|
||||
guarantee(pointer_delta(post_pc, pre_pc, 1) == 2 LP64_ONLY(+1), "must be exact length");
|
||||
} else {
|
||||
AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_type);
|
||||
if (Assembler::is_polling_page_far()) {
|
||||
|
||||
@ -143,6 +143,7 @@ bool LIRGenerator::can_inline_as_constant(LIR_Const* c) const {
|
||||
|
||||
|
||||
LIR_Opr LIRGenerator::safepoint_poll_register() {
|
||||
NOT_LP64( if (SafepointMechanism::uses_thread_local_poll()) { return new_register(T_ADDRESS); } )
|
||||
return LIR_OprFact::illegalOpr;
|
||||
}
|
||||
|
||||
@ -1515,7 +1516,7 @@ void LIRGenerator::do_If(If* x) {
|
||||
if (x->is_safepoint()) {
|
||||
// increment backedge counter if needed
|
||||
increment_backedge_counter(state_for(x, x->state_before()), x->profiled_bci());
|
||||
__ safepoint(LIR_OprFact::illegalOpr, state_for(x, x->state_before()));
|
||||
__ safepoint(safepoint_poll_register(), state_for(x, x->state_before()));
|
||||
}
|
||||
set_no_result(x);
|
||||
|
||||
|
||||
@ -994,8 +994,8 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ set_info("fast new_instance init check", dont_gc_arguments);
|
||||
}
|
||||
|
||||
if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) &&
|
||||
UseTLAB && FastTLABRefill) {
|
||||
if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) && UseTLAB
|
||||
&& Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Label slow_path;
|
||||
Register obj_size = rcx;
|
||||
Register t1 = rbx;
|
||||
@ -1030,21 +1030,8 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
// if we got here then the TLAB allocation failed, so try
|
||||
// refilling the TLAB or allocating directly from eden.
|
||||
Label retry_tlab, try_eden;
|
||||
const Register thread =
|
||||
__ tlab_refill(retry_tlab, try_eden, slow_path); // does not destroy rdx (klass), returns rdi
|
||||
|
||||
__ bind(retry_tlab);
|
||||
|
||||
// get the instance size (size is postive so movl is fine for 64bit)
|
||||
__ movl(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
|
||||
__ tlab_allocate(obj, obj_size, 0, t1, t2, slow_path);
|
||||
|
||||
__ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ true);
|
||||
__ verify_oop(obj);
|
||||
__ pop(rbx);
|
||||
__ pop(rdi);
|
||||
__ ret(0);
|
||||
const Register thread = NOT_LP64(rdi) LP64_ONLY(r15_thread);
|
||||
NOT_LP64(__ get_thread(thread));
|
||||
|
||||
__ bind(try_eden);
|
||||
// get the instance size (size is postive so movl is fine for 64bit)
|
||||
@ -1128,54 +1115,14 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
if (UseTLAB && FastTLABRefill) {
|
||||
// If we got here, the TLAB allocation failed, so try allocating from
|
||||
// eden if inline contiguous allocations are supported.
|
||||
if (UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Register arr_size = rsi;
|
||||
Register t1 = rcx; // must be rcx for use as shift count
|
||||
Register t2 = rdi;
|
||||
Label slow_path;
|
||||
assert_different_registers(length, klass, obj, arr_size, t1, t2);
|
||||
|
||||
// check that array length is small enough for fast path.
|
||||
__ cmpl(length, C1_MacroAssembler::max_array_allocation_length);
|
||||
__ jcc(Assembler::above, slow_path);
|
||||
|
||||
// if we got here then the TLAB allocation failed, so try
|
||||
// refilling the TLAB or allocating directly from eden.
|
||||
Label retry_tlab, try_eden;
|
||||
const Register thread =
|
||||
__ tlab_refill(retry_tlab, try_eden, slow_path); // preserves rbx & rdx, returns rdi
|
||||
|
||||
__ bind(retry_tlab);
|
||||
|
||||
// get the allocation size: round_up(hdr + length << (layout_helper & 0x1F))
|
||||
// since size is positive movl does right thing on 64bit
|
||||
__ movl(t1, Address(klass, Klass::layout_helper_offset()));
|
||||
// since size is postive movl does right thing on 64bit
|
||||
__ movl(arr_size, length);
|
||||
assert(t1 == rcx, "fixed register usage");
|
||||
__ shlptr(arr_size /* by t1=rcx, mod 32 */);
|
||||
__ shrptr(t1, Klass::_lh_header_size_shift);
|
||||
__ andptr(t1, Klass::_lh_header_size_mask);
|
||||
__ addptr(arr_size, t1);
|
||||
__ addptr(arr_size, MinObjAlignmentInBytesMask); // align up
|
||||
__ andptr(arr_size, ~MinObjAlignmentInBytesMask);
|
||||
|
||||
__ tlab_allocate(obj, arr_size, 0, t1, t2, slow_path); // preserves arr_size
|
||||
|
||||
__ initialize_header(obj, klass, length, t1, t2);
|
||||
__ movb(t1, Address(klass, in_bytes(Klass::layout_helper_offset()) + (Klass::_lh_header_size_shift / BitsPerByte)));
|
||||
assert(Klass::_lh_header_size_shift % BitsPerByte == 0, "bytewise");
|
||||
assert(Klass::_lh_header_size_mask <= 0xFF, "bytewise");
|
||||
__ andptr(t1, Klass::_lh_header_size_mask);
|
||||
__ subptr(arr_size, t1); // body length
|
||||
__ addptr(t1, obj); // body start
|
||||
if (!ZeroTLAB) {
|
||||
__ initialize_body(t1, arr_size, 0, t2);
|
||||
}
|
||||
__ verify_oop(obj);
|
||||
__ ret(0);
|
||||
|
||||
__ bind(try_eden);
|
||||
// get the allocation size: round_up(hdr + length << (layout_helper & 0x1F))
|
||||
// since size is positive movl does right thing on 64bit
|
||||
__ movl(t1, Address(klass, Klass::layout_helper_offset()));
|
||||
@ -1190,6 +1137,10 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ andptr(arr_size, ~MinObjAlignmentInBytesMask);
|
||||
|
||||
__ eden_allocate(obj, arr_size, 0, t1, slow_path); // preserves arr_size
|
||||
|
||||
// Using t2 for non 64-bit.
|
||||
const Register thread = NOT_LP64(t2) LP64_ONLY(r15_thread);
|
||||
NOT_LP64(__ get_thread(thread));
|
||||
__ incr_allocated_bytes(thread, arr_size, 0);
|
||||
|
||||
__ initialize_header(obj, klass, length, t1, t2);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2018, 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,9 +65,6 @@ const bool CCallingConventionRequiresIntsAsLongs = false;
|
||||
#define SUPPORT_RESERVED_STACK_AREA
|
||||
#endif
|
||||
|
||||
#ifdef _LP64
|
||||
// X64 have implemented the local polling
|
||||
#define THREAD_LOCAL_POLL
|
||||
#endif
|
||||
|
||||
#endif // CPU_X86_VM_GLOBALDEFINITIONS_X86_HPP
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2018, 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
|
||||
@ -97,9 +97,10 @@ define_pd_global(bool, PreserveFramePointer, false);
|
||||
|
||||
define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong);
|
||||
|
||||
#ifdef _LP64
|
||||
#if defined(_LP64) || defined(_WINDOWS)
|
||||
define_pd_global(bool, ThreadLocalHandshakes, true);
|
||||
#else
|
||||
// get_thread() is slow on linux 32 bit, therefore off by default
|
||||
define_pd_global(bool, ThreadLocalHandshakes, false);
|
||||
#endif
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -830,13 +830,12 @@ void InterpreterMacroAssembler::dispatch_base(TosState state,
|
||||
if (verifyoop) {
|
||||
verify_oop(rax, state);
|
||||
}
|
||||
#ifdef _LP64
|
||||
|
||||
Label no_safepoint, dispatch;
|
||||
address* const safepoint_table = Interpreter::safept_table(state);
|
||||
#ifdef _LP64
|
||||
Label no_safepoint, dispatch;
|
||||
if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table && generate_poll) {
|
||||
NOT_PRODUCT(block_comment("Thread-local Safepoint poll"));
|
||||
|
||||
testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
|
||||
|
||||
jccb(Assembler::zero, no_safepoint);
|
||||
@ -851,9 +850,23 @@ void InterpreterMacroAssembler::dispatch_base(TosState state,
|
||||
|
||||
#else
|
||||
Address index(noreg, rbx, Address::times_ptr);
|
||||
ExternalAddress tbl((address)table);
|
||||
ArrayAddress dispatch(tbl, index);
|
||||
jump(dispatch);
|
||||
if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table && generate_poll) {
|
||||
NOT_PRODUCT(block_comment("Thread-local Safepoint poll"));
|
||||
Label no_safepoint;
|
||||
const Register thread = rcx;
|
||||
get_thread(thread);
|
||||
testb(Address(thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
|
||||
|
||||
jccb(Assembler::zero, no_safepoint);
|
||||
ArrayAddress dispatch_addr(ExternalAddress((address)safepoint_table), index);
|
||||
jump(dispatch_addr);
|
||||
bind(no_safepoint);
|
||||
}
|
||||
|
||||
{
|
||||
ArrayAddress dispatch_addr(ExternalAddress((address)table), index);
|
||||
jump(dispatch_addr);
|
||||
}
|
||||
#endif // _LP64
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -3767,10 +3767,17 @@ void MacroAssembler::serialize_memory(Register thread, Register tmp) {
|
||||
movl(as_Address(ArrayAddress(page, index)), tmp);
|
||||
}
|
||||
|
||||
#ifdef _LP64
|
||||
void MacroAssembler::safepoint_poll(Label& slow_path, Register thread_reg, Register temp_reg) {
|
||||
if (SafepointMechanism::uses_thread_local_poll()) {
|
||||
testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
|
||||
#ifdef _LP64
|
||||
assert(thread_reg == r15_thread, "should be");
|
||||
#else
|
||||
if (thread_reg == noreg) {
|
||||
thread_reg = temp_reg;
|
||||
get_thread(thread_reg);
|
||||
}
|
||||
#endif
|
||||
testb(Address(thread_reg, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
|
||||
jcc(Assembler::notZero, slow_path); // handshake bit set implies poll
|
||||
} else {
|
||||
cmp32(ExternalAddress(SafepointSynchronize::address_of_state()),
|
||||
@ -3778,13 +3785,6 @@ void MacroAssembler::safepoint_poll(Label& slow_path, Register thread_reg, Regis
|
||||
jcc(Assembler::notEqual, slow_path);
|
||||
}
|
||||
}
|
||||
#else
|
||||
void MacroAssembler::safepoint_poll(Label& slow_path) {
|
||||
cmp32(ExternalAddress(SafepointSynchronize::address_of_state()),
|
||||
SafepointSynchronize::_not_synchronized);
|
||||
jcc(Assembler::notEqual, slow_path);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Calls to C land
|
||||
//
|
||||
@ -5604,121 +5604,6 @@ void MacroAssembler::tlab_allocate(Register obj,
|
||||
verify_tlab();
|
||||
}
|
||||
|
||||
// Preserves rbx, and rdx.
|
||||
Register MacroAssembler::tlab_refill(Label& retry,
|
||||
Label& try_eden,
|
||||
Label& slow_case) {
|
||||
Register top = rax;
|
||||
Register t1 = rcx; // object size
|
||||
Register t2 = rsi;
|
||||
Register thread_reg = NOT_LP64(rdi) LP64_ONLY(r15_thread);
|
||||
assert_different_registers(top, thread_reg, t1, t2, /* preserve: */ rbx, rdx);
|
||||
Label do_refill, discard_tlab;
|
||||
|
||||
if (!Universe::heap()->supports_inline_contig_alloc()) {
|
||||
// No allocation in the shared eden.
|
||||
jmp(slow_case);
|
||||
}
|
||||
|
||||
NOT_LP64(get_thread(thread_reg));
|
||||
|
||||
movptr(top, Address(thread_reg, in_bytes(JavaThread::tlab_top_offset())));
|
||||
movptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_end_offset())));
|
||||
|
||||
// calculate amount of free space
|
||||
subptr(t1, top);
|
||||
shrptr(t1, LogHeapWordSize);
|
||||
|
||||
// Retain tlab and allocate object in shared space if
|
||||
// the amount free in the tlab is too large to discard.
|
||||
cmpptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_refill_waste_limit_offset())));
|
||||
jcc(Assembler::lessEqual, discard_tlab);
|
||||
|
||||
// Retain
|
||||
// %%% yuck as movptr...
|
||||
movptr(t2, (int32_t) ThreadLocalAllocBuffer::refill_waste_limit_increment());
|
||||
addptr(Address(thread_reg, in_bytes(JavaThread::tlab_refill_waste_limit_offset())), t2);
|
||||
if (TLABStats) {
|
||||
// increment number of slow_allocations
|
||||
addl(Address(thread_reg, in_bytes(JavaThread::tlab_slow_allocations_offset())), 1);
|
||||
}
|
||||
jmp(try_eden);
|
||||
|
||||
bind(discard_tlab);
|
||||
if (TLABStats) {
|
||||
// increment number of refills
|
||||
addl(Address(thread_reg, in_bytes(JavaThread::tlab_number_of_refills_offset())), 1);
|
||||
// accumulate wastage -- t1 is amount free in tlab
|
||||
addl(Address(thread_reg, in_bytes(JavaThread::tlab_fast_refill_waste_offset())), t1);
|
||||
}
|
||||
|
||||
// if tlab is currently allocated (top or end != null) then
|
||||
// fill [top, end + alignment_reserve) with array object
|
||||
testptr(top, top);
|
||||
jcc(Assembler::zero, do_refill);
|
||||
|
||||
// set up the mark word
|
||||
movptr(Address(top, oopDesc::mark_offset_in_bytes()), (intptr_t)markOopDesc::prototype()->copy_set_hash(0x2));
|
||||
// set the length to the remaining space
|
||||
subptr(t1, typeArrayOopDesc::header_size(T_INT));
|
||||
addptr(t1, (int32_t)ThreadLocalAllocBuffer::alignment_reserve());
|
||||
shlptr(t1, log2_intptr(HeapWordSize/sizeof(jint)));
|
||||
movl(Address(top, arrayOopDesc::length_offset_in_bytes()), t1);
|
||||
// set klass to intArrayKlass
|
||||
// dubious reloc why not an oop reloc?
|
||||
movptr(t1, ExternalAddress((address)Universe::intArrayKlassObj_addr()));
|
||||
// store klass last. concurrent gcs assumes klass length is valid if
|
||||
// klass field is not null.
|
||||
store_klass(top, t1);
|
||||
|
||||
movptr(t1, top);
|
||||
subptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_start_offset())));
|
||||
incr_allocated_bytes(thread_reg, t1, 0);
|
||||
|
||||
// refill the tlab with an eden allocation
|
||||
bind(do_refill);
|
||||
movptr(t1, Address(thread_reg, in_bytes(JavaThread::tlab_size_offset())));
|
||||
shlptr(t1, LogHeapWordSize);
|
||||
// allocate new tlab, address returned in top
|
||||
eden_allocate(top, t1, 0, t2, slow_case);
|
||||
|
||||
// Check that t1 was preserved in eden_allocate.
|
||||
#ifdef ASSERT
|
||||
if (UseTLAB) {
|
||||
Label ok;
|
||||
Register tsize = rsi;
|
||||
assert_different_registers(tsize, thread_reg, t1);
|
||||
push(tsize);
|
||||
movptr(tsize, Address(thread_reg, in_bytes(JavaThread::tlab_size_offset())));
|
||||
shlptr(tsize, LogHeapWordSize);
|
||||
cmpptr(t1, tsize);
|
||||
jcc(Assembler::equal, ok);
|
||||
STOP("assert(t1 != tlab size)");
|
||||
should_not_reach_here();
|
||||
|
||||
bind(ok);
|
||||
pop(tsize);
|
||||
}
|
||||
#endif
|
||||
movptr(Address(thread_reg, in_bytes(JavaThread::tlab_start_offset())), top);
|
||||
movptr(Address(thread_reg, in_bytes(JavaThread::tlab_top_offset())), top);
|
||||
addptr(top, t1);
|
||||
subptr(top, (int32_t)ThreadLocalAllocBuffer::alignment_reserve_in_bytes());
|
||||
movptr(Address(thread_reg, in_bytes(JavaThread::tlab_end_offset())), top);
|
||||
|
||||
if (ZeroTLAB) {
|
||||
// This is a fast TLAB refill, therefore the GC is not notified of it.
|
||||
// So compiled code must fill the new TLAB with zeroes.
|
||||
movptr(top, Address(thread_reg, in_bytes(JavaThread::tlab_start_offset())));
|
||||
zero_memory(top, t1, 0, t2);
|
||||
}
|
||||
|
||||
verify_tlab();
|
||||
jmp(retry);
|
||||
|
||||
return thread_reg; // for use by caller
|
||||
}
|
||||
|
||||
// Preserves the contents of address, destroys the contents length_in_bytes and temp.
|
||||
void MacroAssembler::zero_memory(Register address, Register length_in_bytes, int offset_in_bytes, Register temp) {
|
||||
assert(address != length_in_bytes && address != temp && temp != length_in_bytes, "registers must be different");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -531,7 +531,6 @@ class MacroAssembler: public Assembler {
|
||||
Register t2, // temp register
|
||||
Label& slow_case // continuation point if fast allocation fails
|
||||
);
|
||||
Register tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case); // returns TLS address
|
||||
void zero_memory(Register address, Register length_in_bytes, int offset_in_bytes, Register temp);
|
||||
|
||||
void incr_allocated_bytes(Register thread,
|
||||
@ -657,11 +656,9 @@ class MacroAssembler: public Assembler {
|
||||
// Support for serializing memory accesses between threads
|
||||
void serialize_memory(Register thread, Register tmp);
|
||||
|
||||
#ifdef _LP64
|
||||
// If thread_reg is != noreg the code assumes the register passed contains
|
||||
// the thread (required on 64 bit).
|
||||
void safepoint_poll(Label& slow_path, Register thread_reg, Register temp_reg);
|
||||
#else
|
||||
void safepoint_poll(Label& slow_path);
|
||||
#endif
|
||||
|
||||
void verify_tlab();
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -704,14 +704,18 @@ inline bool NativeInstruction::is_far_jump() { return is_mov_literal64(); }
|
||||
inline bool NativeInstruction::is_cond_jump() { return (int_at(0) & 0xF0FF) == 0x800F /* long jump */ ||
|
||||
(ubyte_at(0) & 0xF0) == 0x70; /* short jump */ }
|
||||
inline bool NativeInstruction::is_safepoint_poll() {
|
||||
#ifdef AMD64
|
||||
if (SafepointMechanism::uses_thread_local_poll()) {
|
||||
#ifdef AMD64
|
||||
const bool has_rex_prefix = ubyte_at(0) == NativeTstRegMem::instruction_rex_b_prefix;
|
||||
const int test_offset = has_rex_prefix ? 1 : 0;
|
||||
#else
|
||||
const int test_offset = 0;
|
||||
#endif
|
||||
const bool is_test_opcode = ubyte_at(test_offset) == NativeTstRegMem::instruction_code_memXregl;
|
||||
const bool is_rax_target = (ubyte_at(test_offset + 1) & NativeTstRegMem::modrm_mask) == NativeTstRegMem::modrm_reg;
|
||||
return is_test_opcode && is_rax_target;
|
||||
}
|
||||
#ifdef AMD64
|
||||
// Try decoding a near safepoint first:
|
||||
if (ubyte_at(0) == NativeTstRegMem::instruction_code_memXregl &&
|
||||
ubyte_at(1) == 0x05) { // 00 rax 101
|
||||
|
||||
@ -2111,16 +2111,13 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
|
||||
Label after_transition;
|
||||
|
||||
// check for safepoint operation in progress and/or pending suspend requests
|
||||
{ Label Continue;
|
||||
{ Label Continue, slow_path;
|
||||
|
||||
__ cmp32(ExternalAddress((address)SafepointSynchronize::address_of_state()),
|
||||
SafepointSynchronize::_not_synchronized);
|
||||
__ safepoint_poll(slow_path, thread, noreg);
|
||||
|
||||
Label L;
|
||||
__ jcc(Assembler::notEqual, L);
|
||||
__ cmpl(Address(thread, JavaThread::suspend_flags_offset()), 0);
|
||||
__ jcc(Assembler::equal, Continue);
|
||||
__ bind(L);
|
||||
__ bind(slow_path);
|
||||
|
||||
// Don't use call_VM as it will see a possible pending exception and forward it
|
||||
// and never return here preventing us from clearing _last_native_pc down below.
|
||||
@ -2996,8 +2993,11 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
|
||||
|
||||
// if this was not a poll_return then we need to correct the return address now.
|
||||
if (!cause_return) {
|
||||
__ movptr(rax, Address(java_thread, JavaThread::saved_exception_pc_offset()));
|
||||
__ movptr(Address(rbp, wordSize), rax);
|
||||
// Get the return pc saved by the signal handler and stash it in its appropriate place on the stack.
|
||||
// Additionally, rbx is a callee saved register and we can look at it later to determine
|
||||
// if someone changed the return address for us!
|
||||
__ movptr(rbx, Address(java_thread, JavaThread::saved_exception_pc_offset()));
|
||||
__ movptr(Address(rbp, wordSize), rbx);
|
||||
}
|
||||
|
||||
// do the call
|
||||
@ -3029,11 +3029,63 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
|
||||
|
||||
__ bind(noException);
|
||||
|
||||
Label no_adjust, bail, not_special;
|
||||
if (SafepointMechanism::uses_thread_local_poll() && !cause_return) {
|
||||
// If our stashed return pc was modified by the runtime we avoid touching it
|
||||
__ cmpptr(rbx, Address(rbp, wordSize));
|
||||
__ jccb(Assembler::notEqual, no_adjust);
|
||||
|
||||
// Skip over the poll instruction.
|
||||
// See NativeInstruction::is_safepoint_poll()
|
||||
// Possible encodings:
|
||||
// 85 00 test %eax,(%rax)
|
||||
// 85 01 test %eax,(%rcx)
|
||||
// 85 02 test %eax,(%rdx)
|
||||
// 85 03 test %eax,(%rbx)
|
||||
// 85 06 test %eax,(%rsi)
|
||||
// 85 07 test %eax,(%rdi)
|
||||
//
|
||||
// 85 04 24 test %eax,(%rsp)
|
||||
// 85 45 00 test %eax,0x0(%rbp)
|
||||
|
||||
#ifdef ASSERT
|
||||
__ movptr(rax, rbx); // remember where 0x85 should be, for verification below
|
||||
#endif
|
||||
// rsp/rbp base encoding takes 3 bytes with the following register values:
|
||||
// rsp 0x04
|
||||
// rbp 0x05
|
||||
__ movzbl(rcx, Address(rbx, 1));
|
||||
__ andptr(rcx, 0x07); // looking for 0x04 .. 0x05
|
||||
__ subptr(rcx, 4); // looking for 0x00 .. 0x01
|
||||
__ cmpptr(rcx, 1);
|
||||
__ jcc(Assembler::above, not_special);
|
||||
__ addptr(rbx, 1);
|
||||
__ bind(not_special);
|
||||
#ifdef ASSERT
|
||||
// Verify the correct encoding of the poll we're about to skip.
|
||||
__ cmpb(Address(rax, 0), NativeTstRegMem::instruction_code_memXregl);
|
||||
__ jcc(Assembler::notEqual, bail);
|
||||
// Mask out the modrm bits
|
||||
__ testb(Address(rax, 1), NativeTstRegMem::modrm_mask);
|
||||
// rax encodes to 0, so if the bits are nonzero it's incorrect
|
||||
__ jcc(Assembler::notZero, bail);
|
||||
#endif
|
||||
// Adjust return pc forward to step over the safepoint poll instruction
|
||||
__ addptr(rbx, 2);
|
||||
__ movptr(Address(rbp, wordSize), rbx);
|
||||
}
|
||||
|
||||
__ bind(no_adjust);
|
||||
// Normal exit, register restoring and exit
|
||||
RegisterSaver::restore_live_registers(masm, save_vectors);
|
||||
|
||||
__ ret(0);
|
||||
|
||||
#ifdef ASSERT
|
||||
__ bind(bail);
|
||||
__ stop("Attempting to adjust pc to skip safepoint poll but the return point is not what we expected");
|
||||
#endif
|
||||
|
||||
// make sure all code is generated
|
||||
masm->flush();
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2018, 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
|
||||
@ -303,45 +303,45 @@ ALIGNED_(64) juint StubRoutines::x86::_k256_W[2*sizeof(StubRoutines::x86::_k256)
|
||||
// used in MacroAssembler::sha512_AVX2
|
||||
ALIGNED_(64) julong StubRoutines::x86::_k512_W[] =
|
||||
{
|
||||
0x428a2f98d728ae22LL, 0x7137449123ef65cdLL,
|
||||
0xb5c0fbcfec4d3b2fLL, 0xe9b5dba58189dbbcLL,
|
||||
0x3956c25bf348b538LL, 0x59f111f1b605d019LL,
|
||||
0x923f82a4af194f9bLL, 0xab1c5ed5da6d8118LL,
|
||||
0xd807aa98a3030242LL, 0x12835b0145706fbeLL,
|
||||
0x243185be4ee4b28cLL, 0x550c7dc3d5ffb4e2LL,
|
||||
0x72be5d74f27b896fLL, 0x80deb1fe3b1696b1LL,
|
||||
0x9bdc06a725c71235LL, 0xc19bf174cf692694LL,
|
||||
0xe49b69c19ef14ad2LL, 0xefbe4786384f25e3LL,
|
||||
0x0fc19dc68b8cd5b5LL, 0x240ca1cc77ac9c65LL,
|
||||
0x2de92c6f592b0275LL, 0x4a7484aa6ea6e483LL,
|
||||
0x5cb0a9dcbd41fbd4LL, 0x76f988da831153b5LL,
|
||||
0x983e5152ee66dfabLL, 0xa831c66d2db43210LL,
|
||||
0xb00327c898fb213fLL, 0xbf597fc7beef0ee4LL,
|
||||
0xc6e00bf33da88fc2LL, 0xd5a79147930aa725LL,
|
||||
0x06ca6351e003826fLL, 0x142929670a0e6e70LL,
|
||||
0x27b70a8546d22ffcLL, 0x2e1b21385c26c926LL,
|
||||
0x4d2c6dfc5ac42aedLL, 0x53380d139d95b3dfLL,
|
||||
0x650a73548baf63deLL, 0x766a0abb3c77b2a8LL,
|
||||
0x81c2c92e47edaee6LL, 0x92722c851482353bLL,
|
||||
0xa2bfe8a14cf10364LL, 0xa81a664bbc423001LL,
|
||||
0xc24b8b70d0f89791LL, 0xc76c51a30654be30LL,
|
||||
0xd192e819d6ef5218LL, 0xd69906245565a910LL,
|
||||
0xf40e35855771202aLL, 0x106aa07032bbd1b8LL,
|
||||
0x19a4c116b8d2d0c8LL, 0x1e376c085141ab53LL,
|
||||
0x2748774cdf8eeb99LL, 0x34b0bcb5e19b48a8LL,
|
||||
0x391c0cb3c5c95a63LL, 0x4ed8aa4ae3418acbLL,
|
||||
0x5b9cca4f7763e373LL, 0x682e6ff3d6b2b8a3LL,
|
||||
0x748f82ee5defb2fcLL, 0x78a5636f43172f60LL,
|
||||
0x84c87814a1f0ab72LL, 0x8cc702081a6439ecLL,
|
||||
0x90befffa23631e28LL, 0xa4506cebde82bde9LL,
|
||||
0xbef9a3f7b2c67915LL, 0xc67178f2e372532bLL,
|
||||
0xca273eceea26619cLL, 0xd186b8c721c0c207LL,
|
||||
0xeada7dd6cde0eb1eLL, 0xf57d4f7fee6ed178LL,
|
||||
0x06f067aa72176fbaLL, 0x0a637dc5a2c898a6LL,
|
||||
0x113f9804bef90daeLL, 0x1b710b35131c471bLL,
|
||||
0x28db77f523047d84LL, 0x32caab7b40c72493LL,
|
||||
0x3c9ebe0a15c9bebcLL, 0x431d67c49c100d4cLL,
|
||||
0x4cc5d4becb3e42b6LL, 0x597f299cfc657e2aLL,
|
||||
0x5fcb6fab3ad6faecLL, 0x6c44198c4a475817LL,
|
||||
0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
|
||||
0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
|
||||
0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
|
||||
0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
|
||||
0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
|
||||
0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
|
||||
0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
|
||||
0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
|
||||
0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
|
||||
0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
|
||||
0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
|
||||
0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
|
||||
0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
|
||||
0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
|
||||
0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
|
||||
0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
|
||||
0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
|
||||
0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
|
||||
0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
|
||||
0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
|
||||
0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
|
||||
0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
|
||||
0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
|
||||
0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
|
||||
0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
|
||||
0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
|
||||
0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
|
||||
0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
|
||||
0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
|
||||
0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
|
||||
0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
|
||||
0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
|
||||
0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
|
||||
0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
|
||||
0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
|
||||
0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
|
||||
0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
|
||||
0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
|
||||
0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
|
||||
0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL,
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2018, 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
|
||||
@ -1148,7 +1148,7 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
|
||||
Label slow_path;
|
||||
|
||||
#ifndef _LP64
|
||||
__ safepoint_poll(slow_path);
|
||||
__ safepoint_poll(slow_path, thread, noreg);
|
||||
#else
|
||||
__ safepoint_poll(slow_path, r15_thread, rscratch1);
|
||||
#endif
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -61,10 +61,7 @@ address TemplateInterpreterGenerator::generate_CRC32_update_entry() {
|
||||
|
||||
Label slow_path;
|
||||
// If we need a safepoint check, generate full interpreter entry.
|
||||
ExternalAddress state(SafepointSynchronize::address_of_state());
|
||||
__ cmp32(ExternalAddress(SafepointSynchronize::address_of_state()),
|
||||
SafepointSynchronize::_not_synchronized);
|
||||
__ jcc(Assembler::notEqual, slow_path);
|
||||
__ safepoint_poll(slow_path, noreg, rdi);
|
||||
|
||||
// We don't generate local frame and don't align stack because
|
||||
// we call stub code and there is no safepoint on this path.
|
||||
@ -113,10 +110,7 @@ address TemplateInterpreterGenerator::generate_CRC32_updateBytes_entry(AbstractI
|
||||
|
||||
Label slow_path;
|
||||
// If we need a safepoint check, generate full interpreter entry.
|
||||
ExternalAddress state(SafepointSynchronize::address_of_state());
|
||||
__ cmp32(ExternalAddress(SafepointSynchronize::address_of_state()),
|
||||
SafepointSynchronize::_not_synchronized);
|
||||
__ jcc(Assembler::notEqual, slow_path);
|
||||
__ safepoint_poll(slow_path, noreg, rdi);
|
||||
|
||||
// We don't generate local frame and don't align stack because
|
||||
// we call stub code and there is no safepoint on this path.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -2692,11 +2692,16 @@ void TemplateTable::_return(TosState state) {
|
||||
__ bind(skip_register_finalizer);
|
||||
}
|
||||
|
||||
#ifdef _LP64
|
||||
if (SafepointMechanism::uses_thread_local_poll() && _desc->bytecode() != Bytecodes::_return_register_finalizer) {
|
||||
Label no_safepoint;
|
||||
NOT_PRODUCT(__ block_comment("Thread-local Safepoint poll"));
|
||||
#ifdef _LP64
|
||||
__ testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
|
||||
#else
|
||||
const Register thread = rdi;
|
||||
__ get_thread(thread);
|
||||
__ testb(Address(thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
|
||||
#endif
|
||||
__ jcc(Assembler::zero, no_safepoint);
|
||||
__ push(state);
|
||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
|
||||
@ -2704,7 +2709,6 @@ void TemplateTable::_return(TosState state) {
|
||||
__ pop(state);
|
||||
__ bind(no_safepoint);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Narrow result if state is itos but result type is smaller.
|
||||
// Need to narrow in the return bytecode rather than in generate_return_entry
|
||||
|
||||
@ -317,7 +317,7 @@ int MachCallRuntimeNode::ret_addr_offset() {
|
||||
// Indicate if the safepoint node needs the polling page as an input.
|
||||
// Since x86 does have absolute addressing, it doesn't.
|
||||
bool SafePointNode::needs_polling_address_input() {
|
||||
return false;
|
||||
return SafepointMechanism::uses_thread_local_poll();
|
||||
}
|
||||
|
||||
//
|
||||
@ -706,34 +706,25 @@ void MachEpilogNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
|
||||
}
|
||||
|
||||
if (do_polling() && C->is_method_compilation()) {
|
||||
cbuf.relocate(cbuf.insts_end(), relocInfo::poll_return_type, 0);
|
||||
emit_opcode(cbuf,0x85);
|
||||
emit_rm(cbuf, 0x0, EAX_enc, 0x5); // EAX
|
||||
emit_d32(cbuf, (intptr_t)os::get_polling_page());
|
||||
if (SafepointMechanism::uses_thread_local_poll()) {
|
||||
Register pollReg = as_Register(EBX_enc);
|
||||
MacroAssembler masm(&cbuf);
|
||||
masm.get_thread(pollReg);
|
||||
masm.movl(pollReg, Address(pollReg, in_bytes(Thread::polling_page_offset())));
|
||||
masm.relocate(relocInfo::poll_return_type);
|
||||
masm.testl(rax, Address(pollReg, 0));
|
||||
} else {
|
||||
cbuf.relocate(cbuf.insts_end(), relocInfo::poll_return_type, 0);
|
||||
emit_opcode(cbuf,0x85);
|
||||
emit_rm(cbuf, 0x0, EAX_enc, 0x5); // EAX
|
||||
emit_d32(cbuf, (intptr_t)os::get_polling_page());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint MachEpilogNode::size(PhaseRegAlloc *ra_) const {
|
||||
Compile *C = ra_->C;
|
||||
// If method set FPU control word, restore to standard control word
|
||||
int size = C->in_24_bit_fp_mode() ? 6 : 0;
|
||||
if (C->max_vector_size() > 16) size += 3; // vzeroupper
|
||||
if (do_polling() && C->is_method_compilation()) size += 6;
|
||||
|
||||
int framesize = C->frame_size_in_bytes();
|
||||
assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
|
||||
// Remove two words for return addr and rbp,
|
||||
framesize -= 2*wordSize;
|
||||
|
||||
size++; // popl rbp,
|
||||
|
||||
if (framesize >= 128) {
|
||||
size += 6;
|
||||
} else {
|
||||
size += framesize ? 3 : 0;
|
||||
}
|
||||
size += 64; // added to support ReservedStackAccess
|
||||
return size;
|
||||
return MachNode::size(ra_); // too many variables; just compute it
|
||||
// the hard way
|
||||
}
|
||||
|
||||
int MachEpilogNode::reloc() const {
|
||||
@ -13336,6 +13327,7 @@ instruct cmpFastUnlock(eFlagsReg cr, eRegP object, eAXRegP box, eRegP tmp ) %{
|
||||
// ============================================================================
|
||||
// Safepoint Instruction
|
||||
instruct safePoint_poll(eFlagsReg cr) %{
|
||||
predicate(SafepointMechanism::uses_global_page_poll());
|
||||
match(SafePoint);
|
||||
effect(KILL cr);
|
||||
|
||||
@ -13354,6 +13346,25 @@ instruct safePoint_poll(eFlagsReg cr) %{
|
||||
ins_pipe( ialu_reg_mem );
|
||||
%}
|
||||
|
||||
instruct safePoint_poll_tls(eFlagsReg cr, eRegP_no_EBP poll) %{
|
||||
predicate(SafepointMechanism::uses_thread_local_poll());
|
||||
match(SafePoint poll);
|
||||
effect(KILL cr, USE poll);
|
||||
|
||||
format %{ "TSTL #EAX,[$poll]\t! Safepoint: poll for GC" %}
|
||||
ins_cost(125);
|
||||
// EBP would need size(3)
|
||||
size(2); /* setting an explicit size will cause debug builds to assert if size is incorrect */
|
||||
ins_encode %{
|
||||
__ relocate(relocInfo::poll_type);
|
||||
address pre_pc = __ pc();
|
||||
__ testl(rax, Address($poll$$Register, 0));
|
||||
address post_pc = __ pc();
|
||||
guarantee(pre_pc[0] == 0x85, "must emit test-ax [reg]");
|
||||
%}
|
||||
ins_pipe(ialu_reg_mem);
|
||||
%}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// This name is KNOWN by the ADLC and cannot be changed.
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
#ifdef __APPLE__
|
||||
#include "jvm.h"
|
||||
#include "decoder_machO.hpp"
|
||||
#include "memory/allocation.inline.hpp"
|
||||
|
||||
#include <cxxabi.h>
|
||||
#include <mach-o/loader.h>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2018, 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
|
||||
@ -62,6 +62,11 @@
|
||||
product(bool, UseContainerSupport, true, \
|
||||
"Enable detection and runtime container configuration support") \
|
||||
\
|
||||
product(bool, PreferContainerQuotaForCPUCount, true, \
|
||||
"Calculate the container CPU availability based on the value" \
|
||||
" of quotas (if set), when true. Otherwise, use the CPU" \
|
||||
" shares value, provided it is less than quota.") \
|
||||
\
|
||||
diagnostic(bool, UseCpuAllocPath, false, \
|
||||
"Use CPU_ALLOC code path in os::active_processor_count ")
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2018, 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
|
||||
@ -499,11 +499,11 @@ jlong OSContainer::memory_max_usage_in_bytes() {
|
||||
/* active_processor_count
|
||||
*
|
||||
* Calculate an appropriate number of active processors for the
|
||||
* VM to use based on these three cgroup options.
|
||||
* VM to use based on these three inputs.
|
||||
*
|
||||
* cpu affinity
|
||||
* cpu quota & cpu period
|
||||
* cpu shares
|
||||
* cgroup cpu quota & cpu period
|
||||
* cgroup cpu shares
|
||||
*
|
||||
* Algorithm:
|
||||
*
|
||||
@ -513,42 +513,61 @@ jlong OSContainer::memory_max_usage_in_bytes() {
|
||||
* required CPUs by dividing quota by period.
|
||||
*
|
||||
* If shares are in effect (shares != -1), calculate the number
|
||||
* of cpus required for the shares by dividing the share value
|
||||
* of CPUs required for the shares by dividing the share value
|
||||
* by PER_CPU_SHARES.
|
||||
*
|
||||
* All results of division are rounded up to the next whole number.
|
||||
*
|
||||
* Return the smaller number from the three different settings.
|
||||
* If neither shares or quotas have been specified, return the
|
||||
* number of active processors in the system.
|
||||
*
|
||||
* If both shares and quotas have been specified, the results are
|
||||
* based on the flag PreferContainerQuotaForCPUCount. If true,
|
||||
* return the quota value. If false return the smallest value
|
||||
* between shares or quotas.
|
||||
*
|
||||
* If shares and/or quotas have been specified, the resulting number
|
||||
* returned will never exceed the number of active processors.
|
||||
*
|
||||
* return:
|
||||
* number of cpus
|
||||
* OSCONTAINER_ERROR if failure occured during extract of cpuset info
|
||||
* number of CPUs
|
||||
*/
|
||||
int OSContainer::active_processor_count() {
|
||||
int cpu_count, share_count, quota_count;
|
||||
int share, quota, period;
|
||||
int quota_count = 0, share_count = 0;
|
||||
int cpu_count, limit_count;
|
||||
int result;
|
||||
|
||||
cpu_count = os::Linux::active_processor_count();
|
||||
cpu_count = limit_count = os::Linux::active_processor_count();
|
||||
int quota = cpu_quota();
|
||||
int period = cpu_period();
|
||||
int share = cpu_shares();
|
||||
|
||||
share = cpu_shares();
|
||||
if (share > -1) {
|
||||
share_count = ceilf((float)share / (float)PER_CPU_SHARES);
|
||||
log_trace(os, container)("cpu_share count: %d", share_count);
|
||||
} else {
|
||||
share_count = cpu_count;
|
||||
}
|
||||
|
||||
quota = cpu_quota();
|
||||
period = cpu_period();
|
||||
if (quota > -1 && period > 0) {
|
||||
quota_count = ceilf((float)quota / (float)period);
|
||||
log_trace(os, container)("quota_count: %d", quota_count);
|
||||
} else {
|
||||
quota_count = cpu_count;
|
||||
log_trace(os, container)("CPU Quota count based on quota/period: %d", quota_count);
|
||||
}
|
||||
if (share > -1) {
|
||||
share_count = ceilf((float)share / (float)PER_CPU_SHARES);
|
||||
log_trace(os, container)("CPU Share count based on shares: %d", share_count);
|
||||
}
|
||||
|
||||
result = MIN2(cpu_count, MIN2(share_count, quota_count));
|
||||
// If both shares and quotas are setup results depend
|
||||
// on flag PreferContainerQuotaForCPUCount.
|
||||
// If true, limit CPU count to quota
|
||||
// If false, use minimum of shares and quotas
|
||||
if (quota_count !=0 && share_count != 0) {
|
||||
if (PreferContainerQuotaForCPUCount) {
|
||||
limit_count = quota_count;
|
||||
} else {
|
||||
limit_count = MIN2(quota_count, share_count);
|
||||
}
|
||||
} else if (quota_count != 0) {
|
||||
limit_count = quota_count;
|
||||
} else if (share_count != 0) {
|
||||
limit_count = share_count;
|
||||
}
|
||||
|
||||
result = MIN2(cpu_count, limit_count);
|
||||
log_trace(os, container)("OSContainer::active_processor_count: %d", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -979,11 +979,6 @@ void os::shutdown() {
|
||||
}
|
||||
|
||||
|
||||
static BOOL (WINAPI *_MiniDumpWriteDump)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
|
||||
PMINIDUMP_EXCEPTION_INFORMATION,
|
||||
PMINIDUMP_USER_STREAM_INFORMATION,
|
||||
PMINIDUMP_CALLBACK_INFORMATION);
|
||||
|
||||
static HANDLE dumpFile = NULL;
|
||||
|
||||
// Check if dump file can be created.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2018, 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,7 +27,7 @@
|
||||
|
||||
#include "memory/allocation.hpp"
|
||||
|
||||
#include <windef.h>
|
||||
#include <windows.h>
|
||||
|
||||
class WindowsSemaphore : public CHeapObj<mtInternal> {
|
||||
HANDLE _semaphore;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2018, 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,7 @@
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
|
||||
#ifdef _WIN64
|
||||
// These are copied defines from fdlibm.h, this allows us to keep the code
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2018, 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,7 @@
|
||||
#include "utilities/globalDefinitions.hpp"
|
||||
#include "symbolengine.hpp"
|
||||
#include "utilities/debug.hpp"
|
||||
#include "utilities/ostream.hpp"
|
||||
#include "windbghelp.hpp"
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2018, 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
|
||||
@ -22,8 +22,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef OS_WINDOWS_VM_DBGHELPLOADER_HPP
|
||||
#define OS_WINDOWS_VM_DBGHELPLOADER_HPP
|
||||
#ifndef OS_WINDOWS_WINDBGHELP_HPP
|
||||
#define OS_WINDOWS_WINDBGHELP_HPP
|
||||
|
||||
#include <windows.h>
|
||||
#include <imagehlp.h>
|
||||
@ -71,6 +71,5 @@ namespace WindowsDbgHelp {
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // OS_WINDOWS_VM_DBGHELPLOADER_HPP
|
||||
#endif // OS_WINDOWS_WINDBGHELP_HPP
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2018, 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
|
||||
@ -69,6 +69,11 @@ class AllStatic {
|
||||
//------------------------------Chunk------------------------------------------
|
||||
// Linked list of raw memory chunks
|
||||
class Chunk: public CHeapObj {
|
||||
private:
|
||||
// This ordinary operator delete is needed even though not used, so the
|
||||
// below two-argument operator delete will be treated as a placement
|
||||
// delete rather than an ordinary sized delete; see C++14 3.7.4.2/p2.
|
||||
void operator delete(void* p);
|
||||
public:
|
||||
void* operator new(size_t size, size_t length) throw();
|
||||
void operator delete(void* p, size_t length);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2018, 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 @@ void AOTLib::verify_config() {
|
||||
}
|
||||
|
||||
AOTLib::~AOTLib() {
|
||||
free((void*) _name);
|
||||
os::free((void*) _name);
|
||||
}
|
||||
|
||||
AOTCodeHeap::~AOTCodeHeap() {
|
||||
@ -207,7 +207,7 @@ AOTCodeHeap::~AOTCodeHeap() {
|
||||
}
|
||||
|
||||
AOTLib::AOTLib(void* handle, const char* name, int dso_id) : _valid(true), _dl_handle(handle), _dso_id(dso_id) {
|
||||
_name = (const char*) strdup(name);
|
||||
_name = (const char*) os::strdup(name);
|
||||
|
||||
// Verify that VM runs with the same parameters as AOT tool.
|
||||
_config = (AOTConfiguration*) load_symbol("A.config");
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
#include "memory/oopFactory.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/access.inline.hpp"
|
||||
#include "oops/objArrayOop.inline.hpp"
|
||||
#include "oops/objArrayKlass.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "runtime/atomic.hpp"
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
#include "ci/ciUtilities.hpp"
|
||||
#include "oops/objArrayOop.inline.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "oops/typeArrayOop.hpp"
|
||||
#include "oops/typeArrayOop.inline.hpp"
|
||||
|
||||
// ciArray
|
||||
//
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
#include "precompiled.hpp"
|
||||
#include "ci/ciTypeArray.hpp"
|
||||
#include "ci/ciUtilities.hpp"
|
||||
#include "oops/typeArrayOop.inline.hpp"
|
||||
|
||||
// ciTypeArray
|
||||
//
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -137,7 +137,6 @@ PerfCounter* ClassLoader::_sync_JVMFindLoadedClassLockFreeCounter = NULL;
|
||||
PerfCounter* ClassLoader::_sync_JVMDefineClassLockFreeCounter = NULL;
|
||||
PerfCounter* ClassLoader::_sync_JNIDefineClassLockFreeCounter = NULL;
|
||||
PerfCounter* ClassLoader::_unsafe_defineClassCallCounter = NULL;
|
||||
PerfCounter* ClassLoader::_isUnsyncloadClass = NULL;
|
||||
PerfCounter* ClassLoader::_load_instance_class_failCounter = NULL;
|
||||
|
||||
GrowableArray<ModuleClassPathList*>* ClassLoader::_patch_mod_entries = NULL;
|
||||
@ -1642,9 +1641,6 @@ void ClassLoader::initialize() {
|
||||
// of the bug fix of 6365597. They are mainly focused on finding out
|
||||
// the behavior of system & user-defined classloader lock, whether
|
||||
// ClassLoader.loadClass/findClass is being called synchronized or not.
|
||||
// Also two additional counters are created to see whether 'UnsyncloadClass'
|
||||
// flag is being set or not and how many times load_instance_class call
|
||||
// fails with linkageError etc.
|
||||
NEWPERFEVENTCOUNTER(_sync_systemLoaderLockContentionRate, SUN_CLS,
|
||||
"systemLoaderLockContentionRate");
|
||||
NEWPERFEVENTCOUNTER(_sync_nonSystemLoaderLockContentionRate, SUN_CLS,
|
||||
@ -1660,14 +1656,8 @@ void ClassLoader::initialize() {
|
||||
NEWPERFEVENTCOUNTER(_unsafe_defineClassCallCounter, SUN_CLS,
|
||||
"unsafeDefineClassCalls");
|
||||
|
||||
NEWPERFEVENTCOUNTER(_isUnsyncloadClass, SUN_CLS, "isUnsyncloadClassSet");
|
||||
NEWPERFEVENTCOUNTER(_load_instance_class_failCounter, SUN_CLS,
|
||||
"loadInstanceClassFailRate");
|
||||
|
||||
// increment the isUnsyncloadClass counter if UnsyncloadClass is set.
|
||||
if (UnsyncloadClass) {
|
||||
_isUnsyncloadClass->inc();
|
||||
}
|
||||
}
|
||||
|
||||
// lookup zip library entry points
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -207,7 +207,6 @@ class ClassLoader: AllStatic {
|
||||
static PerfCounter* _sync_JNIDefineClassLockFreeCounter;
|
||||
|
||||
static PerfCounter* _unsafe_defineClassCallCounter;
|
||||
static PerfCounter* _isUnsyncloadClass;
|
||||
static PerfCounter* _load_instance_class_failCounter;
|
||||
|
||||
// The boot class path consists of 3 ordered pieces:
|
||||
|
||||
@ -1001,9 +1001,8 @@ ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_anonymous, TRA
|
||||
|
||||
|
||||
if (!is_anonymous) {
|
||||
ClassLoaderData** cld_addr = java_lang_ClassLoader::loader_data_addr(loader());
|
||||
// First, Atomically set it
|
||||
ClassLoaderData* old = Atomic::cmpxchg(cld, cld_addr, (ClassLoaderData*)NULL);
|
||||
ClassLoaderData* old = java_lang_ClassLoader::cmpxchg_loader_data(cld, loader(), NULL);
|
||||
if (old != NULL) {
|
||||
delete cld;
|
||||
// Returns the data.
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
#include "memory/oopFactory.hpp"
|
||||
#include "oops/objArrayOop.inline.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "oops/typeArrayOop.inline.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
|
||||
bool JavaAssertions::_userDefault = false;
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
#include "oops/objArrayOop.inline.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "oops/symbol.hpp"
|
||||
#include "oops/typeArrayOop.hpp"
|
||||
#include "oops/typeArrayOop.inline.hpp"
|
||||
#include "prims/resolvedMethodTable.hpp"
|
||||
#include "runtime/fieldDescriptor.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
@ -3403,7 +3403,7 @@ void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() {
|
||||
|
||||
DependencyContext java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) {
|
||||
assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), "");
|
||||
intptr_t* vmdeps_addr = (intptr_t*)call_site->address_field_addr(_vmdependencies_offset);
|
||||
intptr_t* vmdeps_addr = (intptr_t*)call_site->field_addr(_vmdependencies_offset);
|
||||
DependencyContext dep_ctx(vmdeps_addr);
|
||||
return dep_ctx;
|
||||
}
|
||||
@ -3458,13 +3458,14 @@ int java_lang_ClassLoader::parallelCapable_offset = -1;
|
||||
int java_lang_ClassLoader::name_offset = -1;
|
||||
int java_lang_ClassLoader::unnamedModule_offset = -1;
|
||||
|
||||
ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) {
|
||||
assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop");
|
||||
return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset);
|
||||
ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) {
|
||||
assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop");
|
||||
return HeapAccess<>::load_at(loader, _loader_data_offset);
|
||||
}
|
||||
|
||||
ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) {
|
||||
return *java_lang_ClassLoader::loader_data_addr(loader);
|
||||
ClassLoaderData* java_lang_ClassLoader::cmpxchg_loader_data(ClassLoaderData* new_data, oop loader, ClassLoaderData* expected_data) {
|
||||
assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop");
|
||||
return HeapAccess<>::atomic_cmpxchg_at(new_data, loader, _loader_data_offset, expected_data);
|
||||
}
|
||||
|
||||
void java_lang_ClassLoader::compute_offsets() {
|
||||
|
||||
@ -881,15 +881,15 @@ class java_lang_ref_Reference: AllStatic {
|
||||
static inline oop referent(oop ref);
|
||||
static inline void set_referent(oop ref, oop value);
|
||||
static inline void set_referent_raw(oop ref, oop value);
|
||||
static inline HeapWord* referent_addr(oop ref);
|
||||
static inline HeapWord* referent_addr_raw(oop ref);
|
||||
static inline oop next(oop ref);
|
||||
static inline void set_next(oop ref, oop value);
|
||||
static inline void set_next_raw(oop ref, oop value);
|
||||
static inline HeapWord* next_addr(oop ref);
|
||||
static inline HeapWord* next_addr_raw(oop ref);
|
||||
static inline oop discovered(oop ref);
|
||||
static inline void set_discovered(oop ref, oop value);
|
||||
static inline void set_discovered_raw(oop ref, oop value);
|
||||
static inline HeapWord* discovered_addr(oop ref);
|
||||
static inline HeapWord* discovered_addr_raw(oop ref);
|
||||
static bool is_referent_field(oop obj, ptrdiff_t offset);
|
||||
static inline bool is_phantom(oop ref);
|
||||
};
|
||||
@ -1229,8 +1229,8 @@ class java_lang_ClassLoader : AllStatic {
|
||||
public:
|
||||
static void compute_offsets();
|
||||
|
||||
static ClassLoaderData** loader_data_addr(oop loader);
|
||||
static ClassLoaderData* loader_data(oop loader);
|
||||
static ClassLoaderData* cmpxchg_loader_data(ClassLoaderData* new_data, oop loader, ClassLoaderData* expected_data);
|
||||
|
||||
static oop parent(oop loader);
|
||||
static oop name(oop loader);
|
||||
|
||||
@ -100,8 +100,8 @@ void java_lang_ref_Reference::set_referent(oop ref, oop value) {
|
||||
void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) {
|
||||
ref->obj_field_put_raw(referent_offset, value);
|
||||
}
|
||||
HeapWord* java_lang_ref_Reference::referent_addr(oop ref) {
|
||||
return ref->obj_field_addr<HeapWord>(referent_offset);
|
||||
HeapWord* java_lang_ref_Reference::referent_addr_raw(oop ref) {
|
||||
return ref->obj_field_addr_raw<HeapWord>(referent_offset);
|
||||
}
|
||||
oop java_lang_ref_Reference::next(oop ref) {
|
||||
return ref->obj_field(next_offset);
|
||||
@ -112,8 +112,8 @@ void java_lang_ref_Reference::set_next(oop ref, oop value) {
|
||||
void java_lang_ref_Reference::set_next_raw(oop ref, oop value) {
|
||||
ref->obj_field_put_raw(next_offset, value);
|
||||
}
|
||||
HeapWord* java_lang_ref_Reference::next_addr(oop ref) {
|
||||
return ref->obj_field_addr<HeapWord>(next_offset);
|
||||
HeapWord* java_lang_ref_Reference::next_addr_raw(oop ref) {
|
||||
return ref->obj_field_addr_raw<HeapWord>(next_offset);
|
||||
}
|
||||
oop java_lang_ref_Reference::discovered(oop ref) {
|
||||
return ref->obj_field(discovered_offset);
|
||||
@ -124,8 +124,8 @@ void java_lang_ref_Reference::set_discovered(oop ref, oop value) {
|
||||
void java_lang_ref_Reference::set_discovered_raw(oop ref, oop value) {
|
||||
ref->obj_field_put_raw(discovered_offset, value);
|
||||
}
|
||||
HeapWord* java_lang_ref_Reference::discovered_addr(oop ref) {
|
||||
return ref->obj_field_addr<HeapWord>(discovered_offset);
|
||||
HeapWord* java_lang_ref_Reference::discovered_addr_raw(oop ref) {
|
||||
return ref->obj_field_addr_raw<HeapWord>(discovered_offset);
|
||||
}
|
||||
bool java_lang_ref_Reference::is_phantom(oop ref) {
|
||||
return InstanceKlass::cast(ref->klass())->reference_type() == REF_PHANTOM;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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,7 @@
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "oops/access.inline.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "oops/typeArrayOop.inline.hpp"
|
||||
#include "runtime/atomic.hpp"
|
||||
#include "runtime/mutexLocker.hpp"
|
||||
#include "services/diagnosticCommand.hpp"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2018, 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
|
||||
@ -106,7 +106,6 @@ InstanceKlass* SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*,
|
||||
oop SystemDictionary::_java_system_loader = NULL;
|
||||
oop SystemDictionary::_java_platform_loader = NULL;
|
||||
|
||||
bool SystemDictionary::_has_loadClassInternal = false;
|
||||
bool SystemDictionary::_has_checkPackageAccess = false;
|
||||
|
||||
// lazily initialized klass variables
|
||||
@ -159,7 +158,7 @@ ClassLoaderData* SystemDictionary::register_loader(Handle class_loader, TRAPS) {
|
||||
// Parallel class loading check
|
||||
|
||||
bool SystemDictionary::is_parallelCapable(Handle class_loader) {
|
||||
if (UnsyncloadClass || class_loader.is_null()) return true;
|
||||
if (class_loader.is_null()) return true;
|
||||
if (AlwaysLockClassLoader) return false;
|
||||
return java_lang_ClassLoader::parallelCapable(class_loader());
|
||||
}
|
||||
@ -503,8 +502,7 @@ void SystemDictionary::validate_protection_domain(InstanceKlass* klass,
|
||||
//
|
||||
// We only get here if
|
||||
// 1) custom classLoader, i.e. not bootstrap classloader
|
||||
// 2) UnsyncloadClass not set
|
||||
// 3) custom classLoader has broken the class loader objectLock
|
||||
// 2) custom classLoader has broken the class loader objectLock
|
||||
// so another thread got here in parallel
|
||||
//
|
||||
// lockObject must be held.
|
||||
@ -594,7 +592,6 @@ InstanceKlass* SystemDictionary::handle_parallel_super_load(
|
||||
} else {
|
||||
placeholder = placeholders()->get_entry(p_index, p_hash, name, loader_data);
|
||||
if (placeholder && placeholder->super_load_in_progress() ){
|
||||
// Before UnsyncloadClass:
|
||||
// We only get here if the application has released the
|
||||
// classloader lock when another thread was in the middle of loading a
|
||||
// superclass/superinterface for this class, and now
|
||||
@ -687,9 +684,9 @@ Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
||||
// defining the class in parallel by accident.
|
||||
// This lock must be acquired here so the waiter will find
|
||||
// any successful result in the SystemDictionary and not attempt
|
||||
// the define
|
||||
// ParallelCapable Classloaders and the bootstrap classloader,
|
||||
// or all classloaders with UnsyncloadClass do not acquire lock here
|
||||
// the define.
|
||||
// ParallelCapable Classloaders and the bootstrap classloader
|
||||
// do not acquire lock here.
|
||||
bool DoObjectLock = true;
|
||||
if (is_parallelCapable(class_loader)) {
|
||||
DoObjectLock = false;
|
||||
@ -765,14 +762,11 @@ Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
||||
// and that lock is still held when calling classloader's loadClass.
|
||||
// For these classloaders, we ensure that the first requestor
|
||||
// completes the load and other requestors wait for completion.
|
||||
// case 3. UnsyncloadClass - don't use objectLocker
|
||||
// With this flag, we allow parallel classloading of a
|
||||
// class/classloader pair
|
||||
// case4. Bootstrap classloader - don't own objectLocker
|
||||
// case 3. Bootstrap classloader - don't own objectLocker
|
||||
// This classloader supports parallelism at the classloader level,
|
||||
// but only allows a single load of a class/classloader pair.
|
||||
// No performance benefit and no deadlock issues.
|
||||
// case 5. parallelCapable user level classloaders - without objectLocker
|
||||
// case 4. parallelCapable user level classloaders - without objectLocker
|
||||
// Allow parallel classloading of a class/classloader pair
|
||||
|
||||
{
|
||||
@ -788,7 +782,7 @@ Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
||||
// case 1: traditional: should never see load_in_progress.
|
||||
while (!class_has_been_loaded && oldprobe && oldprobe->instance_load_in_progress()) {
|
||||
|
||||
// case 4: bootstrap classloader: prevent futile classloading,
|
||||
// case 3: bootstrap classloader: prevent futile classloading,
|
||||
// wait on first requestor
|
||||
if (class_loader.is_null()) {
|
||||
SystemDictionary_lock->wait();
|
||||
@ -811,7 +805,7 @@ Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
||||
}
|
||||
}
|
||||
// All cases: add LOAD_INSTANCE holding SystemDictionary_lock
|
||||
// case 3: UnsyncloadClass || case 5: parallelCapable: allow competing threads to try
|
||||
// case 4: parallelCapable: allow competing threads to try
|
||||
// LOAD_INSTANCE in parallel
|
||||
|
||||
if (!throw_circularity_error && !class_has_been_loaded) {
|
||||
@ -844,28 +838,6 @@ Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
||||
// Do actual loading
|
||||
k = load_instance_class(name, class_loader, THREAD);
|
||||
|
||||
// For UnsyncloadClass only
|
||||
// If they got a linkageError, check if a parallel class load succeeded.
|
||||
// If it did, then for bytecode resolution the specification requires
|
||||
// that we return the same result we did for the other thread, i.e. the
|
||||
// successfully loaded InstanceKlass
|
||||
// Should not get here for classloaders that support parallelism
|
||||
// with the new cleaner mechanism, even with AllowParallelDefineClass
|
||||
// Bootstrap goes through here to allow for an extra guarantee check
|
||||
if (UnsyncloadClass || (class_loader.is_null())) {
|
||||
if (k == NULL && HAS_PENDING_EXCEPTION
|
||||
&& PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) {
|
||||
MutexLocker mu(SystemDictionary_lock, THREAD);
|
||||
InstanceKlass* check = find_class(d_hash, name, dictionary);
|
||||
if (check != NULL) {
|
||||
// Klass is already loaded, so just use it
|
||||
k = check;
|
||||
CLEAR_PENDING_EXCEPTION;
|
||||
guarantee((!class_loader.is_null()), "dup definition for bootstrap loader?");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If everything was OK (no exceptions, no null return value), and
|
||||
// class_loader is NOT the defining loader, do a little more bookkeeping.
|
||||
if (!HAS_PENDING_EXCEPTION && k != NULL &&
|
||||
@ -1097,7 +1069,7 @@ InstanceKlass* SystemDictionary::resolve_from_stream(Symbol* class_name,
|
||||
HandleMark hm(THREAD);
|
||||
|
||||
// Classloaders that support parallelism, e.g. bootstrap classloader,
|
||||
// or all classloaders with UnsyncloadClass do not acquire lock here
|
||||
// do not acquire lock here
|
||||
bool DoObjectLock = true;
|
||||
if (is_parallelCapable(class_loader)) {
|
||||
DoObjectLock = false;
|
||||
@ -1556,40 +1528,17 @@ InstanceKlass* SystemDictionary::load_instance_class(Symbol* class_name, Handle
|
||||
|
||||
InstanceKlass* spec_klass = SystemDictionary::ClassLoader_klass();
|
||||
|
||||
// Call public unsynchronized loadClass(String) directly for all class loaders
|
||||
// for parallelCapable class loaders. JDK >=7, loadClass(String, boolean) will
|
||||
// Call public unsynchronized loadClass(String) directly for all class loaders.
|
||||
// For parallelCapable class loaders, JDK >=7, loadClass(String, boolean) will
|
||||
// acquire a class-name based lock rather than the class loader object lock.
|
||||
// JDK < 7 already acquire the class loader lock in loadClass(String, boolean),
|
||||
// so the call to loadClassInternal() was not required.
|
||||
//
|
||||
// UnsyncloadClass flag means both call loadClass(String) and do
|
||||
// not acquire the class loader lock even for class loaders that are
|
||||
// not parallelCapable. This was a risky transitional
|
||||
// flag for diagnostic purposes only. It is risky to call
|
||||
// custom class loaders without synchronization.
|
||||
// WARNING If a custom class loader does NOT synchronizer findClass, or callers of
|
||||
// findClass, the UnsyncloadClass flag risks unexpected timing bugs in the field.
|
||||
// Do NOT assume this will be supported in future releases.
|
||||
//
|
||||
// Added MustCallLoadClassInternal in case we discover in the field
|
||||
// a customer that counts on this call
|
||||
if (MustCallLoadClassInternal && has_loadClassInternal()) {
|
||||
JavaCalls::call_special(&result,
|
||||
class_loader,
|
||||
spec_klass,
|
||||
vmSymbols::loadClassInternal_name(),
|
||||
vmSymbols::string_class_signature(),
|
||||
string,
|
||||
CHECK_NULL);
|
||||
} else {
|
||||
JavaCalls::call_virtual(&result,
|
||||
class_loader,
|
||||
spec_klass,
|
||||
vmSymbols::loadClass_name(),
|
||||
vmSymbols::string_class_signature(),
|
||||
string,
|
||||
CHECK_NULL);
|
||||
}
|
||||
// JDK < 7 already acquire the class loader lock in loadClass(String, boolean).
|
||||
JavaCalls::call_virtual(&result,
|
||||
class_loader,
|
||||
spec_klass,
|
||||
vmSymbols::loadClass_name(),
|
||||
vmSymbols::string_class_signature(),
|
||||
string,
|
||||
CHECK_NULL);
|
||||
|
||||
assert(result.get_type() == T_OBJECT, "just checking");
|
||||
oop obj = (oop) result.get_jobject();
|
||||
@ -1718,7 +1667,7 @@ InstanceKlass* SystemDictionary::find_or_define_instance_class(Symbol* class_nam
|
||||
{
|
||||
MutexLocker mu(SystemDictionary_lock, THREAD);
|
||||
// First check if class already defined
|
||||
if (UnsyncloadClass || (is_parallelDefine(class_loader))) {
|
||||
if (is_parallelDefine(class_loader)) {
|
||||
InstanceKlass* check = find_class(d_hash, name_h, dictionary);
|
||||
if (check != NULL) {
|
||||
return check;
|
||||
@ -1737,7 +1686,7 @@ InstanceKlass* SystemDictionary::find_or_define_instance_class(Symbol* class_nam
|
||||
// Only special cases allow parallel defines and can use other thread's results
|
||||
// Other cases fall through, and may run into duplicate defines
|
||||
// caught by finding an entry in the SystemDictionary
|
||||
if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->instance_klass() != NULL)) {
|
||||
if (is_parallelDefine(class_loader) && (probe->instance_klass() != NULL)) {
|
||||
placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, PlaceholderTable::DEFINE_CLASS, THREAD);
|
||||
SystemDictionary_lock->notify_all();
|
||||
#ifdef ASSERT
|
||||
@ -2174,10 +2123,6 @@ void SystemDictionary::initialize_preloaded_classes(TRAPS) {
|
||||
//_box_klasses[T_OBJECT] = WK_KLASS(object_klass);
|
||||
//_box_klasses[T_ARRAY] = WK_KLASS(object_klass);
|
||||
|
||||
{ // Compute whether we should use loadClass or loadClassInternal when loading classes.
|
||||
Method* method = InstanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature());
|
||||
_has_loadClassInternal = (method != NULL);
|
||||
}
|
||||
{ // Compute whether we should use checkPackageAccess or NOT
|
||||
Method* method = InstanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::checkPackageAccess_name(), vmSymbols::class_protectiondomain_signature());
|
||||
_has_checkPackageAccess = (method != NULL);
|
||||
|
||||
@ -467,9 +467,6 @@ public:
|
||||
static void load_abstract_ownable_synchronizer_klass(TRAPS);
|
||||
|
||||
protected:
|
||||
// Tells whether ClassLoader.loadClassInternal is present
|
||||
static bool has_loadClassInternal() { return _has_loadClassInternal; }
|
||||
|
||||
// Returns the class loader data to be used when looking up/updating the
|
||||
// system dictionary.
|
||||
static ClassLoaderData *class_loader_data(Handle class_loader) {
|
||||
@ -746,7 +743,6 @@ protected:
|
||||
static oop _java_system_loader;
|
||||
static oop _java_platform_loader;
|
||||
|
||||
static bool _has_loadClassInternal;
|
||||
static bool _has_checkPackageAccess;
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user