8017234: Hotspot should stop using mapfiles

Reviewed-by: djelinski, erikj, dholmes
This commit is contained in:
Magnus Ihse Bursie 2024-02-27 10:26:55 +00:00
parent d482c1af28
commit da14aa463b
33 changed files with 423 additions and 762 deletions

View File

@ -1,26 +0,0 @@
#
# Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
JVM_handle_aix_signal
numa_error
numa_warn

View File

@ -1,26 +0,0 @@
#
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
JVM_AccessVMBooleanFlag
JVM_AccessVMIntFlag
JVM_VMBreakPoint

View File

@ -1,27 +0,0 @@
#
# Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
JVM_handle_linux_signal
JVM_IsUseContainerSupport
numa_error
numa_warn

View File

@ -1,24 +0,0 @@
#
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
JVM_handle_bsd_signal

View File

@ -1,35 +0,0 @@
#
# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AsyncGetCallTrace
jio_fprintf
jio_printf
jio_snprintf
jio_vfprintf
jio_vsnprintf
JNI_CreateJavaVM
JNI_GetCreatedJavaVMs
JNI_GetDefaultJavaVMInitArgs
JVM_IsForeignLinkerSupported
JVM_FindClassFromBootLoader
JVM_InitAgentProperties

View File

@ -1,233 +0,0 @@
#
# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
JVM_ActiveProcessorCount
JVM_AreNestMates
JVM_ArrayCopy
JVM_AssertionStatusDirectives
JVM_BeforeHalt
JVM_CallStackWalk
JVM_Clone
JVM_ConstantPoolGetClassAt
JVM_ConstantPoolGetClassAtIfLoaded
JVM_ConstantPoolGetClassRefIndexAt
JVM_ConstantPoolGetDoubleAt
JVM_ConstantPoolGetFieldAt
JVM_ConstantPoolGetFieldAtIfLoaded
JVM_ConstantPoolGetFloatAt
JVM_ConstantPoolGetIntAt
JVM_ConstantPoolGetLongAt
JVM_ConstantPoolGetMemberRefInfoAt
JVM_ConstantPoolGetMethodAt
JVM_ConstantPoolGetMethodAtIfLoaded
JVM_ConstantPoolGetNameAndTypeRefIndexAt
JVM_ConstantPoolGetNameAndTypeRefInfoAt
JVM_ConstantPoolGetSize
JVM_ConstantPoolGetStringAt
JVM_ConstantPoolGetTagAt
JVM_ConstantPoolGetUTF8At
JVM_CurrentCarrierThread
JVM_CurrentThread
JVM_SetCurrentThread
JVM_CurrentTimeMillis
JVM_DefineClass
JVM_DefineClassWithSource
JVM_DesiredAssertionStatus
JVM_DumpAllStacks
JVM_DumpClassListToFile
JVM_DumpDynamicArchive
JVM_DumpThreads
JVM_ExpandStackFrameInfo
JVM_FillInStackTrace
JVM_FindClassFromCaller
JVM_FindClassFromClass
JVM_FindLibraryEntry
JVM_FindLoadedClass
JVM_FindPrimitiveClass
JVM_FindSignal
JVM_FreeMemory
JVM_GC
JVM_GetAllThreads
JVM_GetAndClearReferencePendingList
JVM_GetArrayElement
JVM_GetArrayLength
JVM_GetCallerClass
JVM_GetClassAccessFlags
JVM_GetClassAnnotations
JVM_GetClassConstantPool
JVM_GetClassContext
JVM_GetClassCPEntriesCount
JVM_GetClassCPTypes
JVM_GetClassDeclaredConstructors
JVM_GetClassDeclaredFields
JVM_GetClassDeclaredMethods
JVM_GetClassFieldsCount
JVM_GetClassFileVersion
JVM_GetClassInterfaces
JVM_GetClassMethodsCount
JVM_GetClassModifiers
JVM_GetClassNameUTF
JVM_GetClassSignature
JVM_GetClassSigners
JVM_GetClassTypeAnnotations
JVM_GetCPClassNameUTF
JVM_GetCPFieldClassNameUTF
JVM_GetCPFieldModifiers
JVM_GetCPFieldNameUTF
JVM_GetCPFieldSignatureUTF
JVM_GetCPMethodClassNameUTF
JVM_GetCPMethodModifiers
JVM_GetCPMethodNameUTF
JVM_GetCPMethodSignatureUTF
JVM_GetDeclaredClasses
JVM_GetDeclaringClass
JVM_GetEnclosingMethodInfo
JVM_GetExtendedNPEMessage
JVM_GetFieldIxModifiers
JVM_GetFieldTypeAnnotations
JVM_GetInheritedAccessControlContext
JVM_GetManagement
JVM_GetMethodIxArgsSize
JVM_GetMethodIxByteCode
JVM_GetMethodIxByteCodeLength
JVM_GetMethodIxExceptionIndexes
JVM_GetMethodIxExceptionsCount
JVM_GetMethodIxExceptionTableEntry
JVM_GetMethodIxExceptionTableLength
JVM_GetMethodIxLocalsCount
JVM_GetMethodIxMaxStack
JVM_GetMethodIxModifiers
JVM_GetMethodIxNameUTF
JVM_GetMethodIxSignatureUTF
JVM_GetMethodParameters
JVM_GetMethodTypeAnnotations
JVM_GetNanoTimeAdjustment
JVM_GetNestHost
JVM_GetNestMembers
JVM_GetNextThreadIdOffset
JVM_GetPermittedSubclasses
JVM_GetPrimitiveArrayElement
JVM_GetProperties
JVM_GetProtectionDomain
JVM_GetRandomSeedForDumping
JVM_GetRecordComponents
JVM_GetSimpleBinaryName
JVM_GetStackAccessControlContext
JVM_GetSystemPackage
JVM_GetSystemPackages
JVM_GetTemporaryDirectory
JVM_GetVmArguments
JVM_Halt
JVM_HasReferencePendingList
JVM_HoldsLock
JVM_GetStackTrace
JVM_IHashCode
JVM_InitClassName
JVM_InitStackTraceElement
JVM_InitStackTraceElementArray
JVM_InitializeFromArchive
JVM_InternString
JVM_Interrupt
JVM_InvokeMethod
JVM_IsArrayClass
JVM_IsCDSDumpingEnabled
JVM_IsConstructorIx
JVM_IsDumpingClassList
JVM_IsFinalizationEnabled
JVM_IsHiddenClass
JVM_IsInterface
JVM_IsPreviewEnabled
JVM_IsContinuationsSupported
JVM_IsPrimitiveClass
JVM_IsRecord
JVM_IsSameClassPackage
JVM_IsSharingEnabled
JVM_IsSupportedJNIVersion
JVM_IsVMGeneratedMethodIx
JVM_LatestUserDefinedLoader
JVM_LoadZipLibrary
JVM_LoadLibrary
JVM_LookupDefineClass
JVM_LookupLambdaProxyClassFromArchive
JVM_LogLambdaFormInvoker
JVM_MaxMemory
JVM_MaxObjectInspectionAge
JVM_MonitorNotify
JVM_MonitorNotifyAll
JVM_MonitorWait
JVM_MoreStackWalk
JVM_NanoTime
JVM_NativePath
JVM_NewArray
JVM_NewInstanceFromConstructor
JVM_NewMultiArray
JVM_PhantomReferenceRefersTo
JVM_PrintWarningAtDynamicAgentLoad
JVM_RaiseSignal
JVM_RawMonitorCreate
JVM_RawMonitorDestroy
JVM_RawMonitorEnter
JVM_RawMonitorExit
JVM_ReferenceClear
JVM_ReferenceRefersTo
JVM_RegisterContinuationMethods
JVM_RegisterLambdaProxyClassForArchiving
JVM_RegisterSignal
JVM_ReleaseUTF
JVM_ReportFinalizationComplete
JVM_SetArrayElement
JVM_SetClassSigners
JVM_SetNativeThreadName
JVM_SetPrimitiveArrayElement
JVM_SetStackWalkContinuation
JVM_SetThreadPriority
JVM_SleepNanos
JVM_StartThread
JVM_TotalMemory
JVM_UnloadLibrary
JVM_WaitForReferencePendingList
JVM_Yield
# Module related API's
JVM_AddModuleExports
JVM_AddModuleExportsToAll
JVM_AddModuleExportsToAllUnnamed
JVM_AddReadsModule
JVM_DefineArchivedModules
JVM_DefineModule
JVM_SetBootLoaderUnnamedModule
# Virtual thread notifications for JVMTI
JVM_VirtualThreadStart
JVM_VirtualThreadEnd
JVM_VirtualThreadMount
JVM_VirtualThreadUnmount
JVM_VirtualThreadHideFrames
JVM_VirtualThreadDisableSuspend
# Scoped values
JVM_EnsureMaterializedForStackWalk_func
JVM_FindScopedValueBindings
JVM_ScopedValueCache
JVM_SetScopedValueCache
#

View File

@ -0,0 +1,11 @@
SUNWprivate_1.1 {
global:
*;
local:
__bss_start;
_edata;
_end;
_fini;
_init;
};

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -75,20 +75,6 @@ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBGTEST, \
TARGETS += $(BUILD_GTEST_LIBGTEST) TARGETS += $(BUILD_GTEST_LIBGTEST)
################################################################################ ################################################################################
ifeq ($(call isTargetOs, windows), true)
GTEST_JVM_MAPFILE := $(JVM_MAPFILE)
else
GTEST_JVM_MAPFILE := $(JVM_OUTPUTDIR)/gtest/mapfile
$(JVM_OUTPUTDIR)/gtest/symbols: $(JVM_OUTPUTDIR)/symbols
$(call MakeDir, $(@D))
( $(CAT) $< ; echo "runUnitTests" ) > $@
$(GTEST_JVM_MAPFILE): $(JVM_OUTPUTDIR)/gtest/symbols
$(call create-mapfile)
endif
# Additional disabled warnings are due to code in the test source. # Additional disabled warnings are due to code in the test source.
$(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \
@ -123,8 +109,6 @@ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \
LIBS_unix := -lgtest, \ LIBS_unix := -lgtest, \
LIBS_windows := $(JVM_OUTPUTDIR)/libgtest/gtest.lib, \ LIBS_windows := $(JVM_OUTPUTDIR)/libgtest/gtest.lib, \
OPTIMIZATION := $(JVM_OPTIMIZATION), \ OPTIMIZATION := $(JVM_OPTIMIZATION), \
MAPFILE := $(GTEST_JVM_MAPFILE), \
USE_MAPFILE_FOR_SYMBOLS := true, \
COPY_DEBUG_SYMBOLS := $(GTEST_COPY_DEBUG_SYMBOLS), \ COPY_DEBUG_SYMBOLS := $(GTEST_COPY_DEBUG_SYMBOLS), \
ZIP_EXTERNAL_DEBUG_SYMBOLS := false, \ ZIP_EXTERNAL_DEBUG_SYMBOLS := false, \
STRIP_SYMBOLS := false, \ STRIP_SYMBOLS := false, \
@ -134,6 +118,11 @@ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \
$(BUILD_GTEST_LIBJVM) : $(BUILD_GTEST_LIBGTEST) $(BUILD_GTEST_LIBJVM) : $(BUILD_GTEST_LIBGTEST)
ifeq ($(call isTargetOs, windows), true)
$(BUILD_GTEST_LIBJVM_TARGET): $(WIN_EXPORT_FILE)
endif
TARGETS += $(BUILD_GTEST_LIBJVM) TARGETS += $(BUILD_GTEST_LIBJVM)
################################################################################ ################################################################################

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -33,7 +33,6 @@ include lib/JvmFlags.gmk
# Setup compilation of the main Hotspot native library (libjvm). # Setup compilation of the main Hotspot native library (libjvm).
JVM_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/libjvm JVM_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/libjvm
JVM_MAPFILE := $(JVM_OUTPUTDIR)/mapfile
################################################################################ ################################################################################
# Platform independent setup # Platform independent setup
@ -146,6 +145,18 @@ $(call FillFindCache, $(JVM_SRC_DIRS))
# operator new. # operator new.
LIBJVM_STATIC_EXCLUDE_OBJS := operator_new.o LIBJVM_STATIC_EXCLUDE_OBJS := operator_new.o
ifeq ($(call isTargetOs, windows), true)
WIN_EXPORT_FILE := $(JVM_OUTPUTDIR)/win-exports.def
JVM_LDFLAGS += -def:$(WIN_EXPORT_FILE)
endif
ifeq ($(call isTargetOs, linux), true)
HOTSPOT_VERSION_SCRIPT := $(TOPDIR)/make/data/hotspot-symbols/version-script.txt
JVM_LDFLAGS += -Wl,--exclude-libs,ALL -Wl,-version-script=$(HOTSPOT_VERSION_SCRIPT)
endif
################################################################################ ################################################################################
# Now set up the actual compilation of the main hotspot native library # Now set up the actual compilation of the main hotspot native library
@ -195,8 +206,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \
LIBS := $(JVM_LIBS), \ LIBS := $(JVM_LIBS), \
OPTIMIZATION := $(JVM_OPTIMIZATION), \ OPTIMIZATION := $(JVM_OPTIMIZATION), \
OBJECT_DIR := $(JVM_OUTPUTDIR)/objs, \ OBJECT_DIR := $(JVM_OUTPUTDIR)/objs, \
MAPFILE := $(JVM_MAPFILE), \
USE_MAPFILE_FOR_SYMBOLS := true, \
STRIPFLAGS := $(JVM_STRIPFLAGS), \ STRIPFLAGS := $(JVM_STRIPFLAGS), \
EMBED_MANIFEST := true, \ EMBED_MANIFEST := true, \
RC_FILEDESC := $(HOTSPOT_VM_DISTRO) $(OPENJDK_TARGET_CPU_BITS)-Bit $(JVM_VARIANT) VM, \ RC_FILEDESC := $(HOTSPOT_VM_DISTRO) $(OPENJDK_TARGET_CPU_BITS)-Bit $(JVM_VARIANT) VM, \
@ -205,11 +214,48 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \
STATIC_LIB_EXCLUDE_OBJS := $(LIBJVM_STATIC_EXCLUDE_OBJS), \ STATIC_LIB_EXCLUDE_OBJS := $(LIBJVM_STATIC_EXCLUDE_OBJS), \
)) ))
ifeq ($(call isTargetOs, windows), true)
# The following lines create a list of vftable symbols to be filtered out of
# the symbol file. Removing this line causes the linker to complain about too
# many (> 64K) symbols, so the _guess_ is that this line is here to keep down
# the number of exported symbols below that limit.
#
# Some usages of C++ lambdas require the vftable symbol of classes that use
# the lambda type as a template parameter. The usage of those classes won't
# link if their vftable symbols are removed. That's why there's an exception
# for vftable symbols containing the string 'lambda'.
#
# A very simple example of a lambda usage that fails if the lambda vftable
# symbols are missing in the symbol file:
#
# #include <functional>
# std::function<void()> f = [](){}
FILTER_SYMBOLS_AWK_SCRIPT := \
'{ \
if ($$7 ~ /\?\?_7.*@@6B@/ && $$7 !~ /type_info/ && $$7 !~ /lambda/) print $$7; \
}'
# A more correct solution would be to send BUILD_LIBJVM_ALL_OBJS instead of
# cd && *.obj, but this will result in very long command lines, which could be
# problematic.
$(WIN_EXPORT_FILE): $(BUILD_LIBJVM_ALL_OBJS)
$(call LogInfo, Generating list of symbols to export from object files)
$(call MakeDir, $(@D))
$(CD) $(JVM_OUTPUTDIR)/objs && \
$(DUMPBIN) -symbols *$(OBJ_SUFFIX) | $(AWK) $(FILTER_SYMBOLS_AWK_SCRIPT) | $(SORT) -u > $@.syms
$(ECHO) "EXPORTS" > $@.tmp
$(AWK) '{ if ($$0 ~ ".") { print " " $$0 } }' < $@.syms >> $@.tmp
$(RM) $@
$(MV) $@.tmp $@
$(BUILD_LIBJVM_TARGET): $(WIN_EXPORT_FILE)
endif
# Always recompile abstract_vm_version.cpp if libjvm needs to be relinked. This ensures # Always recompile abstract_vm_version.cpp if libjvm needs to be relinked. This ensures
# that the internal vm version is updated as it relies on __DATE__ and __TIME__ # that the internal vm version is updated as it relies on __DATE__ and __TIME__
# macros. # macros.
ABSTRACT_VM_VERSION_OBJ := $(JVM_OUTPUTDIR)/objs/abstract_vm_version$(OBJ_SUFFIX) ABSTRACT_VM_VERSION_OBJ := $(JVM_OUTPUTDIR)/objs/abstract_vm_version$(OBJ_SUFFIX)
$(ABSTRACT_VM_VERSION_OBJ): $(filter-out $(ABSTRACT_VM_VERSION_OBJ) $(JVM_MAPFILE), \ $(ABSTRACT_VM_VERSION_OBJ): $(filter-out $(ABSTRACT_VM_VERSION_OBJ), \
$(BUILD_LIBJVM_TARGET_DEPS)) $(BUILD_LIBJVM_TARGET_DEPS))
ifneq ($(GENERATE_COMPILE_COMMANDS_ONLY), true) ifneq ($(GENERATE_COMPILE_COMMANDS_ONLY), true)
@ -237,11 +283,6 @@ endif
# 1540-1090 : (I) The destructor of "..." might not be called. # 1540-1090 : (I) The destructor of "..." might not be called.
# 1540-1639 : (I) The behavior of long type bit fields has changed ... # 1540-1639 : (I) The behavior of long type bit fields has changed ...
# Include mapfile generation. It relies on BUILD_LIBJVM_ALL_OBJS which is only
# defined after the above call to BUILD_LIBJVM. Mapfile will be generated
# after all object files are built, but before the jvm library is linked.
include lib/JvmMapfile.gmk
TARGETS += $(BUILD_LIBJVM) TARGETS += $(BUILD_LIBJVM)
################################################################################ ################################################################################

View File

@ -1,176 +0,0 @@
#
# Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
$(eval $(call IncludeCustomExtension, hotspot/lib/JvmMapfile.gmk))
################################################################################
# Combine a list of static symbols
ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86_64)), false)
# On Windows x86_64, we should not have any symbols at all, since that
# results in duplicate warnings from the linker (JDK-8043491).
SYMBOLS_SRC += $(TOPDIR)/make/data/hotspot-symbols/symbols-shared
endif
ifeq ($(call isTargetOsType, unix), true)
SYMBOLS_SRC += $(TOPDIR)/make/data/hotspot-symbols/symbols-unix
endif
ifneq ($(wildcard $(TOPDIR)/make/data/hotspot-symbols/symbols-$(OPENJDK_TARGET_OS)), )
SYMBOLS_SRC += $(TOPDIR)/make/data/hotspot-symbols/symbols-$(OPENJDK_TARGET_OS)
endif
ifneq ($(findstring debug, $(DEBUG_LEVEL)), )
ifneq ($(wildcard $(TOPDIR)/make/data/hotspot-symbols/symbols-$(OPENJDK_TARGET_OS)-debug), )
SYMBOLS_SRC += $(TOPDIR)/make/data/hotspot-symbols/symbols-$(OPENJDK_TARGET_OS)-debug
endif
endif
################################################################################
# Create a dynamic list of symbols from the built object files. This is highly
# platform dependent.
ifeq ($(call isTargetOs, linux), true)
DUMP_SYMBOLS_CMD := $(NM) $(NMFLAGS) --defined-only *$(OBJ_SUFFIX)
ifneq ($(FILTER_SYMBOLS_PATTERN), )
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
endif
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)^_ZTV|^gHotSpotVM|^UseSharedSpaces$$
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|^_ZN9Arguments17SharedArchivePathE$$
FILTER_SYMBOLS_AWK_SCRIPT := \
'{ \
if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
}'
else ifeq ($(call isTargetOs, macosx), true)
# nm on macosx prints out "warning: nm: no name list" to stderr for
# files without symbols. Hide this, even at the expense of hiding real errors.
DUMP_SYMBOLS_CMD := $(NM) $(NMFLAGS) -Uj *$(OBJ_SUFFIX) 2> /dev/null
ifneq ($(FILTER_SYMBOLS_PATTERN), )
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)|
endif
FILTER_SYMBOLS_PATTERN := $(FILTER_SYMBOLS_PATTERN)^_ZTV|^gHotSpotVM
FILTER_SYMBOLS_AWK_SCRIPT := \
'{ \
if ($$3 ~ /$(FILTER_SYMBOLS_PATTERN)/) print $$3; \
}'
# NOTE: The script is from the old build. It is broken and finds no symbols.
# The script below might be what was intended, but it fails to link with tons
# of 'cannot export hidden symbol vtable for X'.
# '{ if ($$1 ~ /^__ZTV/ || $$1 ~ /^_gHotSpotVM/) print substr($$1, 2) }'
else ifeq ($(call isTargetOs, aix), true)
# NOTE: The old build had the solution below. This should to be fixed in
# configure instead.
# On AIX we have to prevent that we pick up the 'nm' version from the GNU binutils
# which may be installed under /opt/freeware/bin. So better use an absolute path here!
# NM=/usr/bin/nm
DUMP_SYMBOLS_CMD := $(NM) $(NMFLAGS) -B -C *$(OBJ_SUFFIX)
FILTER_SYMBOLS_AWK_SCRIPT := \
'{ \
if (($$2="d" || $$2="D") && ($$3 ~ /^__vft/ || $$3 ~ /^gHotSpotVM/)) print $$3; \
if ($$3 ~ /^UseSharedSpaces$$/) print $$3; \
if ($$3 ~ /^SharedArchivePath__9Arguments$$/) print $$3; \
}'
else ifeq ($(call isTargetOs, windows), true)
DUMP_SYMBOLS_CMD := $(DUMPBIN) -symbols *$(OBJ_SUFFIX)
# The following lines create a list of vftable symbols to be filtered out of
# the mapfile. Removing this line causes the linker to complain about too many
# (> 64K) symbols, so the _guess_ is that this line is here to keep down the
# number of exported symbols below that limit.
#
# Some usages of C++ lambdas require the vftable symbol of classes that use
# the lambda type as a template parameter. The usage of those classes won't
# link if their vftable symbols are removed. That's why there's an exception
# for vftable symbols containing the string 'lambda'.
#
# A very simple example of a lambda usage that fails if the lambda vftable
# symbols are missing in the mapfile:
#
# #include <functional>
# std::function<void()> f = [](){}
FILTER_SYMBOLS_AWK_SCRIPT := \
'{ \
if ($$7 ~ /\?\?_7.*@@6B@/ && $$7 !~ /type_info/ && $$7 !~ /lambda/) print $$7; \
}'
else
$(error Unknown target OS $(OPENJDK_TARGET_OS) in JvmMapfile.gmk)
endif
# A more correct solution would be to send BUILD_LIBJVM_ALL_OBJS instead of
# cd && *.o, but this will result in very long command lines, which is
# problematic on some platforms.
$(JVM_OUTPUTDIR)/symbols-objects: $(BUILD_LIBJVM_ALL_OBJS)
$(call LogInfo, Generating symbol list from object files)
$(CD) $(JVM_OUTPUTDIR)/objs && \
$(DUMP_SYMBOLS_CMD) | $(AWK) $(FILTER_SYMBOLS_AWK_SCRIPT) | $(SORT) -u > $@
SYMBOLS_SRC += $(JVM_OUTPUTDIR)/symbols-objects
################################################################################
# Now concatenate all symbol lists into a single file and remove comments.
$(JVM_OUTPUTDIR)/symbols: $(SYMBOLS_SRC)
$(SED) -e '/^#/d' $^ > $@
################################################################################
# Finally convert the symbol list into a platform-specific mapfile
ifeq ($(call isTargetOs, macosx), true)
# On macosx, we need to add a leading underscore
define create-mapfile-work
$(AWK) '{ if ($$0 ~ ".") { print " _" $$0 } }' < $^ > $@.tmp
endef
else ifeq ($(call isTargetOs, windows), true)
# On windows, add an 'EXPORTS' header
define create-mapfile-work
$(ECHO) "EXPORTS" > $@.tmp
$(AWK) '{ if ($$0 ~ ".") { print " " $$0 } }' < $^ >> $@.tmp
endef
else
# Assume standard linker script
define create-mapfile-work
$(PRINTF) "SUNWprivate_1.1 { \n global: \n" > $@.tmp
$(AWK) '{ if ($$0 ~ ".") { print " " $$0 ";" } }' < $^ >> $@.tmp
$(PRINTF) " local: \n *; \n }; \n" >> $@.tmp
endef
endif
define create-mapfile
$(call LogInfo, Creating mapfile)
$(call MakeDir, $(@D))
$(call create-mapfile-work)
$(RM) $@
$(MV) $@.tmp $@
endef
$(JVM_MAPFILE): $(JVM_OUTPUTDIR)/symbols
$(call create-mapfile)

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2020 Red Hat Inc. All rights reserved. * Copyright (c) 2014, 2020 Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
@ -31,6 +31,11 @@
#include "memory/resourceArea.hpp" #include "memory/resourceArea.hpp"
#include "metaprogramming/primitiveConversions.hpp" #include "metaprogramming/primitiveConversions.hpp"
#if defined(TARGET_COMPILER_gcc)
#undef JNIEXPORT
#define JNIEXPORT
#endif
#ifndef PRODUCT #ifndef PRODUCT
const uintptr_t Assembler::asm_bp = 0x0000ffffac221240; const uintptr_t Assembler::asm_bp = 0x0000ffffac221240;
#endif #endif

View File

@ -28,6 +28,11 @@
.global CFUNC(_Copy_conjoint_words) .global CFUNC(_Copy_conjoint_words)
.global CFUNC(_Copy_disjoint_words) .global CFUNC(_Copy_disjoint_words)
#ifdef __APPLE__
.private_extern CFUNC(_Copy_conjoint_words)
.private_extern CFUNC(_Copy_disjoint_words)
#endif
s .req x0 s .req x0
d .req x1 d .req x1
count .req x2 count .req x2

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2022 SAP SE. All rights reserved. * Copyright (c) 2022 SAP SE. All rights reserved.
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -39,6 +39,15 @@
.global SYMBOL(_SafeFetch32_fault) .global SYMBOL(_SafeFetch32_fault)
.global SYMBOL(_SafeFetch32_continuation) .global SYMBOL(_SafeFetch32_continuation)
#ifdef __APPLE__
.private_extern SYMBOL(SafeFetchN_impl)
.private_extern SYMBOL(_SafeFetchN_fault)
.private_extern SYMBOL(_SafeFetchN_continuation)
.private_extern SYMBOL(SafeFetch32_impl)
.private_extern SYMBOL(_SafeFetch32_fault)
.private_extern SYMBOL(_SafeFetch32_continuation)
#endif
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #
# x0 : address # x0 : address

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -32,6 +32,7 @@
#endif #endif
.globl SYMBOL(fixcw) .globl SYMBOL(fixcw)
.globl SYMBOL(SpinPause)
# NOTE WELL! The _Copy functions are called directly # NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP, # from server-compiler-generated code via CallLeafNoFP,
@ -50,6 +51,20 @@
.globl SYMBOL(_Atomic_cmpxchg_long) .globl SYMBOL(_Atomic_cmpxchg_long)
.globl SYMBOL(_Atomic_move_long) .globl SYMBOL(_Atomic_move_long)
#ifdef __APPLE__
.private_extern SYMBOL(fixcw)
.private_extern SYMBOL(SpinPause)
.private_extern SYMBOL(_Copy_arrayof_conjoint_bytes)
.private_extern SYMBOL(_Copy_conjoint_jshorts_atomic)
.private_extern SYMBOL(_Copy_arrayof_conjoint_jshorts)
.private_extern SYMBOL(_Copy_conjoint_jints_atomic)
.private_extern SYMBOL(_Copy_arrayof_conjoint_jints)
.private_extern SYMBOL(_Copy_conjoint_jlongs_atomic)
.private_extern SYMBOL(_mmx_Copy_arrayof_conjoint_jshorts)
.private_extern SYMBOL(_Atomic_cmpxchg_long)
.private_extern SYMBOL(_Atomic_move_long)
#endif
.text .text
# Support for void os::Solaris::init_thread_fpu_state() in os_solaris_i486.cpp # Support for void os::Solaris::init_thread_fpu_state() in os_solaris_i486.cpp
@ -62,7 +77,6 @@ SYMBOL(fixcw):
popl %eax popl %eax
ret ret
.globl SYMBOL(SpinPause)
ELF_TYPE(SpinPause,@function) ELF_TYPE(SpinPause,@function)
.p2align 4,,15 .p2align 4,,15
SYMBOL(SpinPause): SYMBOL(SpinPause):

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -31,22 +31,33 @@
#endif #endif
# NOTE WELL! The _Copy functions are called directly # NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP, # from server-compiler-generated code via CallLeafNoFP,
# which means that they *must* either not use floating # which means that they *must* either not use floating
# point or use it in the same manner as does the server # point or use it in the same manner as does the server
# compiler. # compiler.
.globl SYMBOL(SpinPause)
.globl SYMBOL(_Copy_arrayof_conjoint_bytes) .globl SYMBOL(_Copy_arrayof_conjoint_bytes)
.globl SYMBOL(_Copy_arrayof_conjoint_jshorts) .globl SYMBOL(_Copy_arrayof_conjoint_jshorts)
.globl SYMBOL(_Copy_conjoint_jshorts_atomic) .globl SYMBOL(_Copy_conjoint_jshorts_atomic)
.globl SYMBOL(_Copy_arrayof_conjoint_jints) .globl SYMBOL(_Copy_arrayof_conjoint_jints)
.globl SYMBOL(_Copy_conjoint_jints_atomic) .globl SYMBOL(_Copy_conjoint_jints_atomic)
.globl SYMBOL(_Copy_arrayof_conjoint_jlongs) .globl SYMBOL(_Copy_arrayof_conjoint_jlongs)
.globl SYMBOL(_Copy_conjoint_jlongs_atomic) .globl SYMBOL(_Copy_conjoint_jlongs_atomic)
.text #ifdef __APPLE__
.private_extern SYMBOL(SpinPause)
.private_extern SYMBOL(_Copy_arrayof_conjoint_bytes)
.private_extern SYMBOL(_Copy_arrayof_conjoint_jshorts)
.private_extern SYMBOL(_Copy_conjoint_jshorts_atomic)
.private_extern SYMBOL(_Copy_arrayof_conjoint_jints)
.private_extern SYMBOL(_Copy_conjoint_jints_atomic)
.private_extern SYMBOL(_Copy_arrayof_conjoint_jlongs)
.private_extern SYMBOL(_Copy_conjoint_jlongs_atomic)
#endif
.text
.globl SYMBOL(SpinPause)
.p2align 4,,15 .p2align 4,,15
ELF_TYPE(SpinPause,@function) ELF_TYPE(SpinPause,@function)
SYMBOL(SpinPause): SYMBOL(SpinPause):
@ -63,7 +74,7 @@ SYMBOL(SpinPause):
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
ELF_TYPE(_Copy_arrayof_conjoint_bytes,@function) ELF_TYPE(_Copy_arrayof_conjoint_bytes,@function)
SYMBOL(_Copy_arrayof_conjoint_bytes): SYMBOL(_Copy_arrayof_conjoint_bytes):
movq %rdx,%r8 # byte count movq %rdx,%r8 # byte count
shrq $3,%rdx # qword count shrq $3,%rdx # qword count
@ -71,7 +82,7 @@ SYMBOL(_Copy_arrayof_conjoint_bytes):
leaq -1(%rdi,%r8,1),%rax # from + bcount*1 - 1 leaq -1(%rdi,%r8,1),%rax # from + bcount*1 - 1
jbe acb_CopyRight jbe acb_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe acb_CopyLeft jbe acb_CopyLeft
acb_CopyRight: acb_CopyRight:
leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
@ -165,8 +176,8 @@ acb_CopyLeft:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
ELF_TYPE(_Copy_arrayof_conjoint_jshorts,@function) ELF_TYPE(_Copy_arrayof_conjoint_jshorts,@function)
ELF_TYPE(_Copy_conjoint_jshorts_atomic,@function) ELF_TYPE(_Copy_conjoint_jshorts_atomic,@function)
SYMBOL(_Copy_arrayof_conjoint_jshorts): SYMBOL(_Copy_arrayof_conjoint_jshorts):
SYMBOL(_Copy_conjoint_jshorts_atomic): SYMBOL(_Copy_conjoint_jshorts_atomic):
movq %rdx,%r8 # word count movq %rdx,%r8 # word count
@ -175,7 +186,7 @@ SYMBOL(_Copy_conjoint_jshorts_atomic):
leaq -2(%rdi,%r8,2),%rax # from + wcount*2 - 2 leaq -2(%rdi,%r8,2),%rax # from + wcount*2 - 2
jbe acs_CopyRight jbe acs_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe acs_CopyLeft jbe acs_CopyLeft
acs_CopyRight: acs_CopyRight:
leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
@ -255,8 +266,8 @@ acs_CopyLeft:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
ELF_TYPE(_Copy_arrayof_conjoint_jints,@function) ELF_TYPE(_Copy_arrayof_conjoint_jints,@function)
ELF_TYPE(_Copy_conjoint_jints_atomic,@function) ELF_TYPE(_Copy_conjoint_jints_atomic,@function)
SYMBOL(_Copy_arrayof_conjoint_jints): SYMBOL(_Copy_arrayof_conjoint_jints):
SYMBOL(_Copy_conjoint_jints_atomic): SYMBOL(_Copy_conjoint_jints_atomic):
movq %rdx,%r8 # dword count movq %rdx,%r8 # dword count
@ -265,7 +276,7 @@ SYMBOL(_Copy_conjoint_jints_atomic):
leaq -4(%rdi,%r8,4),%rax # from + dcount*4 - 4 leaq -4(%rdi,%r8,4),%rax # from + dcount*4 - 4
jbe aci_CopyRight jbe aci_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe aci_CopyLeft jbe aci_CopyLeft
aci_CopyRight: aci_CopyRight:
leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
@ -334,15 +345,15 @@ aci_CopyLeft:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
ELF_TYPE(_Copy_arrayof_conjoint_jlongs,@function) ELF_TYPE(_Copy_arrayof_conjoint_jlongs,@function)
ELF_TYPE(_Copy_conjoint_jlongs_atomic,@function) ELF_TYPE(_Copy_conjoint_jlongs_atomic,@function)
SYMBOL(_Copy_arrayof_conjoint_jlongs): SYMBOL(_Copy_arrayof_conjoint_jlongs):
SYMBOL(_Copy_conjoint_jlongs_atomic): SYMBOL(_Copy_conjoint_jlongs_atomic):
cmpq %rdi,%rsi cmpq %rdi,%rsi
leaq -8(%rdi,%rdx,8),%rax # from + count*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + count*8 - 8
jbe acl_CopyRight jbe acl_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe acl_CopyLeft jbe acl_CopyLeft
acl_CopyRight: acl_CopyRight:
leaq -8(%rsi,%rdx,8),%rcx # to + count*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + count*8 - 8
negq %rdx negq %rdx

View File

@ -1,6 +1,6 @@
# #
# Copyright (c) 2022 SAP SE. All rights reserved. # Copyright (c) 2022 SAP SE. All rights reserved.
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -38,13 +38,22 @@
.globl SYMBOL(_SafeFetch32_continuation) .globl SYMBOL(_SafeFetch32_continuation)
.globl SYMBOL(_SafeFetchN_continuation) .globl SYMBOL(_SafeFetchN_continuation)
#ifdef __APPLE__
.private_extern SYMBOL(SafeFetch32_impl)
.private_extern SYMBOL(SafeFetchN_impl)
.private_extern SYMBOL(_SafeFetch32_fault)
.private_extern SYMBOL(_SafeFetchN_fault)
.private_extern SYMBOL(_SafeFetch32_continuation)
.private_extern SYMBOL(_SafeFetchN_continuation)
#endif
.text .text
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #
# %rdi : address # %rdi : address
# %esi : defaultval # %esi : defaultval
ELF_TYPE(SafeFetch32_impl,@function) ELF_TYPE(SafeFetch32_impl,@function)
SYMBOL(SafeFetch32_impl:) SYMBOL(SafeFetch32_impl:)
SYMBOL(_SafeFetch32_fault:) SYMBOL(_SafeFetch32_fault:)
movl (%rdi), %eax movl (%rdi), %eax

View File

@ -24,6 +24,7 @@
.text .text
.globl aarch64_atomic_fetch_add_8_default_impl .globl aarch64_atomic_fetch_add_8_default_impl
.hidden aarch64_atomic_fetch_add_8_default_impl
.align 5 .align 5
aarch64_atomic_fetch_add_8_default_impl: aarch64_atomic_fetch_add_8_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -40,6 +41,7 @@ aarch64_atomic_fetch_add_8_default_impl:
ret ret
.globl aarch64_atomic_fetch_add_4_default_impl .globl aarch64_atomic_fetch_add_4_default_impl
.hidden aarch64_atomic_fetch_add_4_default_impl
.align 5 .align 5
aarch64_atomic_fetch_add_4_default_impl: aarch64_atomic_fetch_add_4_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -56,6 +58,7 @@ aarch64_atomic_fetch_add_4_default_impl:
ret ret
.global aarch64_atomic_fetch_add_8_relaxed_default_impl .global aarch64_atomic_fetch_add_8_relaxed_default_impl
.hidden aarch64_atomic_fetch_add_8_relaxed_default_impl
.align 5 .align 5
aarch64_atomic_fetch_add_8_relaxed_default_impl: aarch64_atomic_fetch_add_8_relaxed_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -71,6 +74,7 @@ aarch64_atomic_fetch_add_8_relaxed_default_impl:
ret ret
.global aarch64_atomic_fetch_add_4_relaxed_default_impl .global aarch64_atomic_fetch_add_4_relaxed_default_impl
.hidden aarch64_atomic_fetch_add_4_relaxed_default_impl
.align 5 .align 5
aarch64_atomic_fetch_add_4_relaxed_default_impl: aarch64_atomic_fetch_add_4_relaxed_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -86,6 +90,7 @@ aarch64_atomic_fetch_add_4_relaxed_default_impl:
ret ret
.globl aarch64_atomic_xchg_4_default_impl .globl aarch64_atomic_xchg_4_default_impl
.hidden aarch64_atomic_xchg_4_default_impl
.align 5 .align 5
aarch64_atomic_xchg_4_default_impl: aarch64_atomic_xchg_4_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -101,6 +106,7 @@ aarch64_atomic_xchg_4_default_impl:
ret ret
.globl aarch64_atomic_xchg_8_default_impl .globl aarch64_atomic_xchg_8_default_impl
.hidden aarch64_atomic_xchg_8_default_impl
.align 5 .align 5
aarch64_atomic_xchg_8_default_impl: aarch64_atomic_xchg_8_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -116,6 +122,7 @@ aarch64_atomic_xchg_8_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_1_default_impl .globl aarch64_atomic_cmpxchg_1_default_impl
.hidden aarch64_atomic_cmpxchg_1_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_1_default_impl: aarch64_atomic_cmpxchg_1_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -136,6 +143,7 @@ aarch64_atomic_cmpxchg_1_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_4_default_impl .globl aarch64_atomic_cmpxchg_4_default_impl
.hidden aarch64_atomic_cmpxchg_4_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_4_default_impl: aarch64_atomic_cmpxchg_4_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -155,6 +163,7 @@ aarch64_atomic_cmpxchg_4_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_8_default_impl .globl aarch64_atomic_cmpxchg_8_default_impl
.hidden aarch64_atomic_cmpxchg_8_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_8_default_impl: aarch64_atomic_cmpxchg_8_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -174,6 +183,7 @@ aarch64_atomic_cmpxchg_8_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_4_release_default_impl .globl aarch64_atomic_cmpxchg_4_release_default_impl
.hidden aarch64_atomic_cmpxchg_4_release_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_4_release_default_impl: aarch64_atomic_cmpxchg_4_release_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -191,6 +201,7 @@ aarch64_atomic_cmpxchg_4_release_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_8_release_default_impl .globl aarch64_atomic_cmpxchg_8_release_default_impl
.hidden aarch64_atomic_cmpxchg_8_release_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_8_release_default_impl: aarch64_atomic_cmpxchg_8_release_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -208,6 +219,7 @@ aarch64_atomic_cmpxchg_8_release_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_4_seq_cst_default_impl .globl aarch64_atomic_cmpxchg_4_seq_cst_default_impl
.hidden aarch64_atomic_cmpxchg_4_seq_cst_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_4_seq_cst_default_impl: aarch64_atomic_cmpxchg_4_seq_cst_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -225,6 +237,7 @@ aarch64_atomic_cmpxchg_4_seq_cst_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_8_seq_cst_default_impl .globl aarch64_atomic_cmpxchg_8_seq_cst_default_impl
.hidden aarch64_atomic_cmpxchg_8_seq_cst_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_8_seq_cst_default_impl: aarch64_atomic_cmpxchg_8_seq_cst_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -242,6 +255,7 @@ aarch64_atomic_cmpxchg_8_seq_cst_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_1_relaxed_default_impl .globl aarch64_atomic_cmpxchg_1_relaxed_default_impl
.hidden aarch64_atomic_cmpxchg_1_relaxed_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_1_relaxed_default_impl: aarch64_atomic_cmpxchg_1_relaxed_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -260,6 +274,7 @@ aarch64_atomic_cmpxchg_1_relaxed_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_4_relaxed_default_impl .globl aarch64_atomic_cmpxchg_4_relaxed_default_impl
.hidden aarch64_atomic_cmpxchg_4_relaxed_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_4_relaxed_default_impl: aarch64_atomic_cmpxchg_4_relaxed_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS
@ -277,6 +292,7 @@ aarch64_atomic_cmpxchg_4_relaxed_default_impl:
ret ret
.globl aarch64_atomic_cmpxchg_8_relaxed_default_impl .globl aarch64_atomic_cmpxchg_8_relaxed_default_impl
.hidden aarch64_atomic_cmpxchg_8_relaxed_default_impl
.align 5 .align 5
aarch64_atomic_cmpxchg_8_relaxed_default_impl: aarch64_atomic_cmpxchg_8_relaxed_default_impl:
#ifdef __ARM_FEATURE_ATOMICS #ifdef __ARM_FEATURE_ATOMICS

View File

@ -24,6 +24,9 @@
.global _Copy_conjoint_words .global _Copy_conjoint_words
.global _Copy_disjoint_words .global _Copy_disjoint_words
.hidden _Copy_conjoint_words
.hidden _Copy_disjoint_words
s .req x0 s .req x0
d .req x1 d .req x1
count .req x2 count .req x2

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2022 SAP SE. All rights reserved. * Copyright (c) 2022 SAP SE. All rights reserved.
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,6 +30,13 @@
.globl _SafeFetch32_fault .globl _SafeFetch32_fault
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.hidden SafeFetchN_impl
.hidden _SafeFetchN_fault
.hidden _SafeFetchN_continuation
.hidden SafeFetch32_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetch32_continuation
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #
# x0 : address # x0 : address

View File

@ -25,22 +25,23 @@
// Clobber x1, flags. // Clobber x1, flags.
// All other registers are preserved, // All other registers are preserved,
.global _ZN10JavaThread25aarch64_get_thread_helperEv .global _ZN10JavaThread25aarch64_get_thread_helperEv
.type _ZN10JavaThread25aarch64_get_thread_helperEv, %function .hidden _ZN10JavaThread25aarch64_get_thread_helperEv
.type _ZN10JavaThread25aarch64_get_thread_helperEv, %function
_ZN10JavaThread25aarch64_get_thread_helperEv: _ZN10JavaThread25aarch64_get_thread_helperEv:
hint #0x19 // paciasp hint #0x19 // paciasp
stp x29, x30, [sp, -16]! stp x29, x30, [sp, -16]!
adrp x0, :tlsdesc:_ZN6Thread12_thr_currentE adrp x0, :tlsdesc:_ZN6Thread12_thr_currentE
ldr x1, [x0, #:tlsdesc_lo12:_ZN6Thread12_thr_currentE] ldr x1, [x0, #:tlsdesc_lo12:_ZN6Thread12_thr_currentE]
add x0, x0, :tlsdesc_lo12:_ZN6Thread12_thr_currentE add x0, x0, :tlsdesc_lo12:_ZN6Thread12_thr_currentE
.tlsdesccall _ZN6Thread12_thr_currentE .tlsdesccall _ZN6Thread12_thr_currentE
blr x1 blr x1
mrs x1, tpidr_el0 mrs x1, tpidr_el0
add x0, x1, x0 add x0, x1, x0
ldr x0, [x0] ldr x0, [x0]
ldp x29, x30, [sp], 16 ldp x29, x30, [sp], 16
hint #0x1d // autiasp hint #0x1d // autiasp
ret ret
.size _ZN10JavaThread25aarch64_get_thread_helperEv, .-_ZN10JavaThread25aarch64_get_thread_helperEv .size _ZN10JavaThread25aarch64_get_thread_helperEv, .-_ZN10JavaThread25aarch64_get_thread_helperEv

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -23,38 +23,46 @@
# NOTE WELL! The _Copy functions are called directly # NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP, # from server-compiler-generated code via CallLeafNoFP,
# which means that they *must* either not use floating # which means that they *must* either not use floating
# point or use it in the same manner as does the server # point or use it in the same manner as does the server
# compiler. # compiler.
.globl _Copy_conjoint_bytes .globl SpinPause
.type _Copy_conjoint_bytes, %function .hidden SpinPause
.type SpinPause, %function
.globl _Copy_arrayof_conjoint_bytes .globl _Copy_arrayof_conjoint_bytes
.type _Copy_arrayof_conjoint_bytes, %function .hidden _Copy_arrayof_conjoint_bytes
.globl _Copy_disjoint_words .type _Copy_arrayof_conjoint_bytes, %function
.type _Copy_disjoint_words, %function .globl _Copy_disjoint_words
.globl _Copy_conjoint_words .hidden _Copy_disjoint_words
.type _Copy_conjoint_words, %function .type _Copy_disjoint_words, %function
.globl _Copy_conjoint_words
.hidden _Copy_conjoint_words
.type _Copy_conjoint_words, %function
.globl _Copy_conjoint_jshorts_atomic .globl _Copy_conjoint_jshorts_atomic
.type _Copy_conjoint_jshorts_atomic, %function .hidden _Copy_conjoint_jshorts_atomic
.globl _Copy_arrayof_conjoint_jshorts .type _Copy_conjoint_jshorts_atomic, %function
.type _Copy_arrayof_conjoint_jshorts, %function .globl _Copy_arrayof_conjoint_jshorts
.hidden _Copy_arrayof_conjoint_jshorts
.type _Copy_arrayof_conjoint_jshorts, %function
.globl _Copy_conjoint_jints_atomic .globl _Copy_conjoint_jints_atomic
.type _Copy_conjoint_jints_atomic, %function .hidden _Copy_conjoint_jints_atomic
.type _Copy_conjoint_jints_atomic, %function
.globl _Copy_arrayof_conjoint_jints .globl _Copy_arrayof_conjoint_jints
.type _Copy_arrayof_conjoint_jints, %function .hidden _Copy_arrayof_conjoint_jints
.globl _Copy_conjoint_jlongs_atomic .type _Copy_arrayof_conjoint_jints, %function
.type _Copy_conjoint_jlongs_atomic, %function .globl _Copy_conjoint_jlongs_atomic
.globl _Copy_arrayof_conjoint_jlongs .hidden _Copy_conjoint_jlongs_atomic
.type _Copy_arrayof_conjoint_jlongs, %function .type _Copy_conjoint_jlongs_atomic, %function
.globl _Copy_arrayof_conjoint_jlongs
.hidden _Copy_arrayof_conjoint_jlongs
.type _Copy_arrayof_conjoint_jlongs, %function
from .req r0 from .req r0
to .req r1 to .req r1
.text .text
.globl SpinPause
.type SpinPause, %function
SpinPause: SpinPause:
bx LR bx LR
@ -70,7 +78,7 @@ _Copy_arrayof_conjoint_bytes:
# size_t count) # size_t count)
_Copy_disjoint_words: _Copy_disjoint_words:
stmdb sp!, {r3 - r9, ip} stmdb sp!, {r3 - r9, ip}
cmp r2, #0 cmp r2, #0
beq disjoint_words_finish beq disjoint_words_finish
@ -81,17 +89,17 @@ _Copy_disjoint_words:
.align 3 .align 3
dw_f2b_loop_32: dw_f2b_loop_32:
subs r2, #32 subs r2, #32
blt dw_f2b_loop_32_finish blt dw_f2b_loop_32_finish
ldmia from!, {r3 - r9, ip} ldmia from!, {r3 - r9, ip}
nop nop
pld [from] pld [from]
stmia to!, {r3 - r9, ip} stmia to!, {r3 - r9, ip}
bgt dw_f2b_loop_32 bgt dw_f2b_loop_32
dw_f2b_loop_32_finish: dw_f2b_loop_32_finish:
addlts r2, #32 addlts r2, #32
beq disjoint_words_finish beq disjoint_words_finish
cmp r2, #16 cmp r2, #16
blt disjoint_words_small blt disjoint_words_small
ldmia from!, {r3 - r6} ldmia from!, {r3 - r6}
subge r2, r2, #16 subge r2, r2, #16
stmia to!, {r3 - r6} stmia to!, {r3 - r6}
@ -116,8 +124,8 @@ disjoint_words_finish:
_Copy_conjoint_words: _Copy_conjoint_words:
stmdb sp!, {r3 - r9, ip} stmdb sp!, {r3 - r9, ip}
cmp r2, #0 cmp r2, #0
beq conjoint_words_finish beq conjoint_words_finish
pld [from, #0] pld [from, #0]
cmp r2, #12 cmp r2, #12
@ -129,17 +137,17 @@ _Copy_conjoint_words:
.align 3 .align 3
cw_f2b_loop_32: cw_f2b_loop_32:
subs r2, #32 subs r2, #32
blt cw_f2b_loop_32_finish blt cw_f2b_loop_32_finish
ldmia from!, {r3 - r9, ip} ldmia from!, {r3 - r9, ip}
nop nop
pld [from] pld [from]
stmia to!, {r3 - r9, ip} stmia to!, {r3 - r9, ip}
bgt cw_f2b_loop_32 bgt cw_f2b_loop_32
cw_f2b_loop_32_finish: cw_f2b_loop_32_finish:
addlts r2, #32 addlts r2, #32
beq conjoint_words_finish beq conjoint_words_finish
cmp r2, #16 cmp r2, #16
blt conjoint_words_small blt conjoint_words_small
ldmia from!, {r3 - r6} ldmia from!, {r3 - r6}
subge r2, r2, #16 subge r2, r2, #16
stmia to!, {r3 - r6} stmia to!, {r3 - r6}
@ -154,7 +162,7 @@ conjoint_words_small:
strgt r9, [to], #4 strgt r9, [to], #4
b conjoint_words_finish b conjoint_words_finish
# Src and dest overlap, copy in a descending order # Src and dest overlap, copy in a descending order
cw_b2f_copy: cw_b2f_copy:
add from, r2 add from, r2
pld [from, #-32] pld [from, #-32]
@ -162,17 +170,17 @@ cw_b2f_copy:
.align 3 .align 3
cw_b2f_loop_32: cw_b2f_loop_32:
subs r2, #32 subs r2, #32
blt cw_b2f_loop_32_finish blt cw_b2f_loop_32_finish
ldmdb from!, {r3-r9,ip} ldmdb from!, {r3-r9,ip}
nop nop
pld [from, #-32] pld [from, #-32]
stmdb to!, {r3-r9,ip} stmdb to!, {r3-r9,ip}
bgt cw_b2f_loop_32 bgt cw_b2f_loop_32
cw_b2f_loop_32_finish: cw_b2f_loop_32_finish:
addlts r2, #32 addlts r2, #32
beq conjoint_words_finish beq conjoint_words_finish
cmp r2, #16 cmp r2, #16
blt cw_b2f_copy_small blt cw_b2f_copy_small
ldmdb from!, {r3 - r6} ldmdb from!, {r3 - r6}
subge r2, r2, #16 subge r2, r2, #16
stmdb to!, {r3 - r6} stmdb to!, {r3 - r6}
@ -196,8 +204,8 @@ conjoint_words_finish:
_Copy_conjoint_jshorts_atomic: _Copy_conjoint_jshorts_atomic:
stmdb sp!, {r3 - r9, ip} stmdb sp!, {r3 - r9, ip}
cmp r2, #0 cmp r2, #0
beq conjoint_shorts_finish beq conjoint_shorts_finish
subs r3, to, from subs r3, to, from
cmphi r2, r3 cmphi r2, r3
@ -210,11 +218,11 @@ _Copy_conjoint_jshorts_atomic:
ands r3, from, #3 ands r3, from, #3
bne cs_f2b_src_u bne cs_f2b_src_u
# Aligned source address # Aligned source address
.align 3 .align 3
cs_f2b_loop_32: cs_f2b_loop_32:
subs r2, #32 subs r2, #32
blt cs_f2b_loop_32_finish blt cs_f2b_loop_32_finish
ldmia from!, {r3 - r9, ip} ldmia from!, {r3 - r9, ip}
nop nop
pld [from] pld [from]
@ -244,14 +252,14 @@ cs_f2b_4:
strgth r5, [to], #2 strgth r5, [to], #2
b conjoint_shorts_finish b conjoint_shorts_finish
# Destination not aligned # Destination not aligned
cs_f2b_dest_u: cs_f2b_dest_u:
ldrh r3, [from], #2 ldrh r3, [from], #2
subs r2, #2 subs r2, #2
strh r3, [to], #2 strh r3, [to], #2
beq conjoint_shorts_finish beq conjoint_shorts_finish
# Check to see if source is not aligned ether # Check to see if source is not aligned ether
ands r3, from, #3 ands r3, from, #3
beq cs_f2b_loop_32 beq cs_f2b_loop_32
@ -259,11 +267,11 @@ cs_f2b_src_u:
cmp r2, #16 cmp r2, #16
blt cs_f2b_8_u blt cs_f2b_8_u
# Load 2 first bytes to r7 and make src ptr word aligned # Load 2 first bytes to r7 and make src ptr word aligned
bic from, #3 bic from, #3
ldr r7, [from], #4 ldr r7, [from], #4
# Destination aligned, source not # Destination aligned, source not
mov r8, r2, lsr #4 mov r8, r2, lsr #4
.align 3 .align 3
cs_f2b_16_u_loop: cs_f2b_16_u_loop:
@ -306,7 +314,7 @@ cs_f2b_4_u:
strgth r5, [to], #2 strgth r5, [to], #2
b conjoint_shorts_finish b conjoint_shorts_finish
# Src and dest overlap, copy in a descending order # Src and dest overlap, copy in a descending order
cs_b2f_copy: cs_b2f_copy:
add from, r2 add from, r2
pld [from, #-32] pld [from, #-32]
@ -319,7 +327,7 @@ cs_b2f_copy:
.align 3 .align 3
cs_b2f_loop_32: cs_b2f_loop_32:
subs r2, #32 subs r2, #32
blt cs_b2f_loop_32_finish blt cs_b2f_loop_32_finish
ldmdb from!, {r3-r9,ip} ldmdb from!, {r3-r9,ip}
nop nop
pld [from, #-32] pld [from, #-32]
@ -359,16 +367,16 @@ cs_b2f_all_copy:
strgth r5, [to, #-2]! strgth r5, [to, #-2]!
b conjoint_shorts_finish b conjoint_shorts_finish
# Destination not aligned # Destination not aligned
cs_b2f_dest_u: cs_b2f_dest_u:
ldrh r3, [from, #-2]! ldrh r3, [from, #-2]!
strh r3, [to, #-2]! strh r3, [to, #-2]!
sub r2, #2 sub r2, #2
# Check source alignment as well # Check source alignment as well
ands r3, from, #3 ands r3, from, #3
beq cs_b2f_loop_32 beq cs_b2f_loop_32
# Source not aligned # Source not aligned
cs_b2f_src_u: cs_b2f_src_u:
bic from, #3 bic from, #3
.align 3 .align 3
@ -393,7 +401,7 @@ cs_b2f_16_loop_u:
cs_b2f_16_loop_u_finished: cs_b2f_16_loop_u_finished:
addlts r2, #16 addlts r2, #16
ldr r3, [from] ldr r3, [from]
cmp r2, #10 cmp r2, #10
blt cs_b2f_2_u_loop blt cs_b2f_2_u_loop
ldmdb from!, {r4 - r5} ldmdb from!, {r4 - r5}
mov r6, r4, lsr #16 mov r6, r4, lsr #16
@ -402,7 +410,7 @@ cs_b2f_16_loop_u_finished:
orr r7, r7, r3, lsl #16 orr r7, r7, r3, lsl #16
stmdb to!, {r6-r7} stmdb to!, {r6-r7}
sub r2, #8 sub r2, #8
.align 3 .align 3
cs_b2f_2_u_loop: cs_b2f_2_u_loop:
subs r2, #2 subs r2, #2
ldrh r3, [from], #-2 ldrh r3, [from], #-2
@ -426,7 +434,7 @@ _Copy_arrayof_conjoint_jshorts:
_Copy_conjoint_jints_atomic: _Copy_conjoint_jints_atomic:
_Copy_arrayof_conjoint_jints: _Copy_arrayof_conjoint_jints:
swi 0x9f0001 swi 0x9f0001
# Support for void Copy::conjoint_jlongs_atomic(jlong* from, # Support for void Copy::conjoint_jlongs_atomic(jlong* from,
# jlong* to, # jlong* to,
# size_t count) # size_t count)
@ -434,8 +442,8 @@ _Copy_conjoint_jlongs_atomic:
_Copy_arrayof_conjoint_jlongs: _Copy_arrayof_conjoint_jlongs:
stmdb sp!, {r3 - r9, ip} stmdb sp!, {r3 - r9, ip}
cmp r2, #0 cmp r2, #0
beq conjoint_longs_finish beq conjoint_longs_finish
pld [from, #0] pld [from, #0]
cmp r2, #24 cmp r2, #24
@ -447,10 +455,10 @@ _Copy_arrayof_conjoint_jlongs:
.align 3 .align 3
cl_f2b_loop_32: cl_f2b_loop_32:
subs r2, #32 subs r2, #32
blt cl_f2b_loop_32_finish blt cl_f2b_loop_32_finish
ldmia from!, {r3 - r9, ip} ldmia from!, {r3 - r9, ip}
nop nop
pld [from] pld [from]
stmia to!, {r3 - r9, ip} stmia to!, {r3 - r9, ip}
bgt cl_f2b_loop_32 bgt cl_f2b_loop_32
cl_f2b_loop_32_finish: cl_f2b_loop_32_finish:
@ -458,21 +466,21 @@ cl_f2b_loop_32_finish:
beq conjoint_longs_finish beq conjoint_longs_finish
conjoint_longs_small: conjoint_longs_small:
cmp r2, #16 cmp r2, #16
blt cl_f2b_copy_8 blt cl_f2b_copy_8
bgt cl_f2b_copy_24 bgt cl_f2b_copy_24
ldmia from!, {r3 - r6} ldmia from!, {r3 - r6}
stmia to!, {r3 - r6} stmia to!, {r3 - r6}
b conjoint_longs_finish b conjoint_longs_finish
cl_f2b_copy_8: cl_f2b_copy_8:
ldmia from!, {r3 - r4} ldmia from!, {r3 - r4}
stmia to!, {r3 - r4} stmia to!, {r3 - r4}
b conjoint_longs_finish b conjoint_longs_finish
cl_f2b_copy_24: cl_f2b_copy_24:
ldmia from!, {r3 - r8} ldmia from!, {r3 - r8}
stmia to!, {r3 - r8} stmia to!, {r3 - r8}
b conjoint_longs_finish b conjoint_longs_finish
# Src and dest overlap, copy in a descending order # Src and dest overlap, copy in a descending order
cl_b2f_copy: cl_b2f_copy:
add from, r2 add from, r2
pld [from, #-32] pld [from, #-32]
@ -480,31 +488,29 @@ cl_b2f_copy:
.align 3 .align 3
cl_b2f_loop_32: cl_b2f_loop_32:
subs r2, #32 subs r2, #32
blt cl_b2f_loop_32_finish blt cl_b2f_loop_32_finish
ldmdb from!, {r3 - r9, ip} ldmdb from!, {r3 - r9, ip}
nop nop
pld [from] pld [from]
stmdb to!, {r3 - r9, ip} stmdb to!, {r3 - r9, ip}
bgt cl_b2f_loop_32 bgt cl_b2f_loop_32
cl_b2f_loop_32_finish: cl_b2f_loop_32_finish:
addlts r2, #32 addlts r2, #32
beq conjoint_longs_finish beq conjoint_longs_finish
cmp r2, #16 cmp r2, #16
blt cl_b2f_copy_8 blt cl_b2f_copy_8
bgt cl_b2f_copy_24 bgt cl_b2f_copy_24
ldmdb from!, {r3 - r6} ldmdb from!, {r3 - r6}
stmdb to!, {r3 - r6} stmdb to!, {r3 - r6}
b conjoint_longs_finish b conjoint_longs_finish
cl_b2f_copy_8: cl_b2f_copy_8:
ldmdb from!, {r3 - r4} ldmdb from!, {r3 - r4}
stmdb to!, {r3 - r4} stmdb to!, {r3 - r4}
b conjoint_longs_finish b conjoint_longs_finish
cl_b2f_copy_24: cl_b2f_copy_24:
ldmdb from!, {r3 - r8} ldmdb from!, {r3 - r8}
stmdb to!, {r3 - r8} stmdb to!, {r3 - r8}
conjoint_longs_finish: conjoint_longs_finish:
ldmia sp!, {r3 - r9, ip} ldmia sp!, {r3 - r9, ip}
bx lr bx lr

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2022 SAP SE. All rights reserved. * Copyright (c) 2022 SAP SE. All rights reserved.
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -26,6 +26,11 @@
.globl SafeFetch32_impl .globl SafeFetch32_impl
.globl _SafeFetch32_fault .globl _SafeFetch32_fault
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.hidden SafeFetch32_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetch32_continuation
.type SafeFetch32_impl, %function .type SafeFetch32_impl, %function
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2022 SAP SE. All rights reserved. * Copyright (c) 2022 SAP SE. All rights reserved.
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,6 +30,13 @@
.globl _SafeFetch32_fault .globl _SafeFetch32_fault
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.hidden SafeFetchN_impl
.hidden _SafeFetchN_fault
.hidden _SafeFetchN_continuation
.hidden SafeFetch32_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetch32_continuation
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #
# r3 : address # r3 : address

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2022 SAP SE. All rights reserved. * Copyright (c) 2022 SAP SE. All rights reserved.
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,6 +30,13 @@
.globl _SafeFetch32_fault .globl _SafeFetch32_fault
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.hidden SafeFetchN_impl
.hidden _SafeFetchN_fault
.hidden _SafeFetchN_continuation
.hidden SafeFetch32_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetch32_continuation
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #
# x10 (a0) : address # x10 (a0) : address

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2022 SAP SE. All rights reserved. * Copyright (c) 2022 SAP SE. All rights reserved.
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -30,6 +30,13 @@
.globl _SafeFetch32_fault .globl _SafeFetch32_fault
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.hidden SafeFetchN_impl
.hidden _SafeFetchN_fault
.hidden _SafeFetchN_continuation
.hidden SafeFetch32_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetch32_continuation
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #
# r2 : address # r2 : address

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -21,28 +21,41 @@
# questions. # questions.
# #
.globl SpinPause
# NOTE WELL! The _Copy functions are called directly # NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP, # from server-compiler-generated code via CallLeafNoFP,
# which means that they *must* either not use floating # which means that they *must* either not use floating
# point or use it in the same manner as does the server # point or use it in the same manner as does the server
# compiler. # compiler.
.globl _Copy_arrayof_conjoint_bytes .globl _Copy_arrayof_conjoint_bytes
.globl _Copy_conjoint_jshorts_atomic .globl _Copy_conjoint_jshorts_atomic
.globl _Copy_arrayof_conjoint_jshorts .globl _Copy_arrayof_conjoint_jshorts
.globl _Copy_conjoint_jints_atomic .globl _Copy_conjoint_jints_atomic
.globl _Copy_arrayof_conjoint_jints .globl _Copy_arrayof_conjoint_jints
.globl _Copy_conjoint_jlongs_atomic .globl _Copy_conjoint_jlongs_atomic
.globl _mmx_Copy_arrayof_conjoint_jshorts .globl _mmx_Copy_arrayof_conjoint_jshorts
.globl _Atomic_cmpxchg_long .globl _Atomic_cmpxchg_long
.globl _Atomic_move_long .globl _Atomic_move_long
.text .hidden SpinPause
.globl SpinPause .hidden _Copy_arrayof_conjoint_bytes
.type SpinPause,@function .hidden _Copy_conjoint_jshorts_atomic
.hidden _Copy_arrayof_conjoint_jshorts
.hidden _Copy_conjoint_jints_atomic
.hidden _Copy_arrayof_conjoint_jints
.hidden _Copy_conjoint_jlongs_atomic
.hidden _mmx_Copy_arrayof_conjoint_jshorts
.hidden _Atomic_cmpxchg_long
.hidden _Atomic_move_long
.text
.type SpinPause,@function
.p2align 4,,15 .p2align 4,,15
SpinPause: SpinPause:
rep rep
@ -55,7 +68,7 @@ SpinPause:
# size_t count) # size_t count)
# #
.p2align 4,,15 .p2align 4,,15
.type _Copy_arrayof_conjoint_bytes,@function .type _Copy_arrayof_conjoint_bytes,@function
_Copy_arrayof_conjoint_bytes: _Copy_arrayof_conjoint_bytes:
pushl %esi pushl %esi
movl 4+12(%esp),%ecx # count movl 4+12(%esp),%ecx # count
@ -115,7 +128,7 @@ acb_CopyLeft:
jbe 2f # <= 32 dwords jbe 2f # <= 32 dwords
rep; smovl rep; smovl
jmp 4f jmp 4f
.space 8 .space 8
2: subl %esi,%edi 2: subl %esi,%edi
.p2align 4,,15 .p2align 4,,15
3: movl (%esi),%edx 3: movl (%esi),%edx
@ -131,7 +144,7 @@ acb_CopyLeft:
addl $3,%esi addl $3,%esi
6: movb (%esi),%dl 6: movb (%esi),%dl
movb %dl,(%edi,%esi,1) movb %dl,(%edi,%esi,1)
subl $1,%esi subl $1,%esi
subl $1,%ecx subl $1,%ecx
jnz 6b jnz 6b
7: cld 7: cld
@ -143,7 +156,7 @@ acb_CopyLeft:
# void* to, # void* to,
# size_t count) # size_t count)
.p2align 4,,15 .p2align 4,,15
.type _Copy_conjoint_jshorts_atomic,@function .type _Copy_conjoint_jshorts_atomic,@function
_Copy_conjoint_jshorts_atomic: _Copy_conjoint_jshorts_atomic:
pushl %esi pushl %esi
movl 4+12(%esp),%ecx # count movl 4+12(%esp),%ecx # count
@ -230,7 +243,7 @@ cs_CopyLeft:
# void* to, # void* to,
# size_t count) # size_t count)
.p2align 4,,15 .p2align 4,,15
.type _Copy_arrayof_conjoint_jshorts,@function .type _Copy_arrayof_conjoint_jshorts,@function
_Copy_arrayof_conjoint_jshorts: _Copy_arrayof_conjoint_jshorts:
pushl %esi pushl %esi
movl 4+12(%esp),%ecx # count movl 4+12(%esp),%ecx # count
@ -307,8 +320,8 @@ acs_CopyLeft:
# Equivalent to # Equivalent to
# arrayof_conjoint_jints # arrayof_conjoint_jints
.p2align 4,,15 .p2align 4,,15
.type _Copy_conjoint_jints_atomic,@function .type _Copy_conjoint_jints_atomic,@function
.type _Copy_arrayof_conjoint_jints,@function .type _Copy_arrayof_conjoint_jints,@function
_Copy_conjoint_jints_atomic: _Copy_conjoint_jints_atomic:
_Copy_arrayof_conjoint_jints: _Copy_arrayof_conjoint_jints:
pushl %esi pushl %esi
@ -384,7 +397,7 @@ ci_CopyLeft:
# } # }
*/ */
.p2align 4,,15 .p2align 4,,15
.type _Copy_conjoint_jlongs_atomic,@function .type _Copy_conjoint_jlongs_atomic,@function
_Copy_conjoint_jlongs_atomic: _Copy_conjoint_jlongs_atomic:
movl 4+8(%esp),%ecx # count movl 4+8(%esp),%ecx # count
movl 4+0(%esp),%eax # from movl 4+0(%esp),%eax # from
@ -413,7 +426,7 @@ cla_CopyLeft:
# void* to, # void* to,
# size_t count) # size_t count)
.p2align 4,,15 .p2align 4,,15
.type _mmx_Copy_arrayof_conjoint_jshorts,@function .type _mmx_Copy_arrayof_conjoint_jshorts,@function
_mmx_Copy_arrayof_conjoint_jshorts: _mmx_Copy_arrayof_conjoint_jshorts:
pushl %esi pushl %esi
movl 4+12(%esp),%ecx movl 4+12(%esp),%ecx
@ -465,8 +478,8 @@ mmx_acs_CopyRight:
cmpl $16,%ecx cmpl $16,%ecx
jge 4b jge 4b
emms emms
testl %ecx,%ecx testl %ecx,%ecx
ja 1b ja 1b
5: andl $1,%eax 5: andl $1,%eax
je 7f je 7f
6: movw (%esi),%dx 6: movw (%esi),%dx
@ -511,7 +524,7 @@ mmx_acs_CopyLeft:
# jlong exchange_value) # jlong exchange_value)
# #
.p2align 4,,15 .p2align 4,,15
.type _Atomic_cmpxchg_long,@function .type _Atomic_cmpxchg_long,@function
_Atomic_cmpxchg_long: _Atomic_cmpxchg_long:
# 8(%esp) : return PC # 8(%esp) : return PC
pushl %ebx # 4(%esp) : old %ebx pushl %ebx # 4(%esp) : old %ebx
@ -530,7 +543,7 @@ _Atomic_cmpxchg_long:
# Support for jlong Atomic::load and Atomic::store. # Support for jlong Atomic::load and Atomic::store.
# void _Atomic_move_long(const volatile jlong* src, volatile jlong* dst) # void _Atomic_move_long(const volatile jlong* src, volatile jlong* dst)
.p2align 4,,15 .p2align 4,,15
.type _Atomic_move_long,@function .type _Atomic_move_long,@function
_Atomic_move_long: _Atomic_move_long:
movl 4(%esp), %eax # src movl 4(%esp), %eax # src
fildll (%eax) fildll (%eax)

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -21,24 +21,34 @@
# questions. # questions.
# #
.globl SpinPause
# NOTE WELL! The _Copy functions are called directly # NOTE WELL! The _Copy functions are called directly
# from server-compiler-generated code via CallLeafNoFP, # from server-compiler-generated code via CallLeafNoFP,
# which means that they *must* either not use floating # which means that they *must* either not use floating
# point or use it in the same manner as does the server # point or use it in the same manner as does the server
# compiler. # compiler.
.globl _Copy_arrayof_conjoint_bytes .globl _Copy_arrayof_conjoint_bytes
.globl _Copy_arrayof_conjoint_jshorts .globl _Copy_arrayof_conjoint_jshorts
.globl _Copy_conjoint_jshorts_atomic .globl _Copy_conjoint_jshorts_atomic
.globl _Copy_arrayof_conjoint_jints .globl _Copy_arrayof_conjoint_jints
.globl _Copy_conjoint_jints_atomic .globl _Copy_conjoint_jints_atomic
.globl _Copy_arrayof_conjoint_jlongs .globl _Copy_arrayof_conjoint_jlongs
.globl _Copy_conjoint_jlongs_atomic .globl _Copy_conjoint_jlongs_atomic
.text .hidden SpinPause
.hidden _Copy_arrayof_conjoint_bytes
.hidden _Copy_arrayof_conjoint_jshorts
.hidden _Copy_conjoint_jshorts_atomic
.hidden _Copy_arrayof_conjoint_jints
.hidden _Copy_conjoint_jints_atomic
.hidden _Copy_arrayof_conjoint_jlongs
.hidden _Copy_conjoint_jlongs_atomic
.text
.globl SpinPause
.align 16 .align 16
.type SpinPause,@function .type SpinPause,@function
SpinPause: SpinPause:
@ -55,7 +65,7 @@ SpinPause:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
.type _Copy_arrayof_conjoint_bytes,@function .type _Copy_arrayof_conjoint_bytes,@function
_Copy_arrayof_conjoint_bytes: _Copy_arrayof_conjoint_bytes:
movq %rdx,%r8 # byte count movq %rdx,%r8 # byte count
shrq $3,%rdx # qword count shrq $3,%rdx # qword count
@ -63,7 +73,7 @@ _Copy_arrayof_conjoint_bytes:
leaq -1(%rdi,%r8,1),%rax # from + bcount*1 - 1 leaq -1(%rdi,%r8,1),%rax # from + bcount*1 - 1
jbe acb_CopyRight jbe acb_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe acb_CopyLeft jbe acb_CopyLeft
acb_CopyRight: acb_CopyRight:
leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
@ -157,8 +167,8 @@ acb_CopyLeft:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
.type _Copy_arrayof_conjoint_jshorts,@function .type _Copy_arrayof_conjoint_jshorts,@function
.type _Copy_conjoint_jshorts_atomic,@function .type _Copy_conjoint_jshorts_atomic,@function
_Copy_arrayof_conjoint_jshorts: _Copy_arrayof_conjoint_jshorts:
_Copy_conjoint_jshorts_atomic: _Copy_conjoint_jshorts_atomic:
movq %rdx,%r8 # word count movq %rdx,%r8 # word count
@ -167,7 +177,7 @@ _Copy_conjoint_jshorts_atomic:
leaq -2(%rdi,%r8,2),%rax # from + wcount*2 - 2 leaq -2(%rdi,%r8,2),%rax # from + wcount*2 - 2
jbe acs_CopyRight jbe acs_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe acs_CopyLeft jbe acs_CopyLeft
acs_CopyRight: acs_CopyRight:
leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
@ -247,8 +257,8 @@ acs_CopyLeft:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
.type _Copy_arrayof_conjoint_jints,@function .type _Copy_arrayof_conjoint_jints,@function
.type _Copy_conjoint_jints_atomic,@function .type _Copy_conjoint_jints_atomic,@function
_Copy_arrayof_conjoint_jints: _Copy_arrayof_conjoint_jints:
_Copy_conjoint_jints_atomic: _Copy_conjoint_jints_atomic:
movq %rdx,%r8 # dword count movq %rdx,%r8 # dword count
@ -257,7 +267,7 @@ _Copy_conjoint_jints_atomic:
leaq -4(%rdi,%r8,4),%rax # from + dcount*4 - 4 leaq -4(%rdi,%r8,4),%rax # from + dcount*4 - 4
jbe aci_CopyRight jbe aci_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe aci_CopyLeft jbe aci_CopyLeft
aci_CopyRight: aci_CopyRight:
leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
@ -326,15 +336,15 @@ aci_CopyLeft:
# rdx - count, treated as ssize_t # rdx - count, treated as ssize_t
# #
.p2align 4,,15 .p2align 4,,15
.type _Copy_arrayof_conjoint_jlongs,@function .type _Copy_arrayof_conjoint_jlongs,@function
.type _Copy_conjoint_jlongs_atomic,@function .type _Copy_conjoint_jlongs_atomic,@function
_Copy_arrayof_conjoint_jlongs: _Copy_arrayof_conjoint_jlongs:
_Copy_conjoint_jlongs_atomic: _Copy_conjoint_jlongs_atomic:
cmpq %rdi,%rsi cmpq %rdi,%rsi
leaq -8(%rdi,%rdx,8),%rax # from + count*8 - 8 leaq -8(%rdi,%rdx,8),%rax # from + count*8 - 8
jbe acl_CopyRight jbe acl_CopyRight
cmpq %rax,%rsi cmpq %rax,%rsi
jbe acl_CopyLeft jbe acl_CopyLeft
acl_CopyRight: acl_CopyRight:
leaq -8(%rsi,%rdx,8),%rcx # to + count*8 - 8 leaq -8(%rsi,%rdx,8),%rcx # to + count*8 - 8
negq %rdx negq %rdx

View File

@ -1,6 +1,6 @@
# #
# Copyright (c) 2022 SAP SE. All rights reserved. # Copyright (c) 2022 SAP SE. All rights reserved.
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -25,7 +25,11 @@
.globl _SafeFetch32_fault .globl _SafeFetch32_fault
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.text .hidden SafeFetch32_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetch32_continuation
.text
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);
# #

View File

@ -1,6 +1,6 @@
# #
# Copyright (c) 2022 SAP SE. All rights reserved. # Copyright (c) 2022 SAP SE. All rights reserved.
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -28,7 +28,14 @@
.globl _SafeFetch32_continuation .globl _SafeFetch32_continuation
.globl _SafeFetchN_continuation .globl _SafeFetchN_continuation
.text .hidden SafeFetch32_impl
.hidden SafeFetchN_impl
.hidden _SafeFetch32_fault
.hidden _SafeFetchN_fault
.hidden _SafeFetch32_continuation
.hidden _SafeFetchN_continuation
.text
# Support for int SafeFetch32(int* address, int defaultval); # Support for int SafeFetch32(int* address, int defaultval);

View File

@ -70,6 +70,11 @@
#include "jfr/jfr.hpp" #include "jfr/jfr.hpp"
#endif #endif
#if defined(TARGET_COMPILER_gcc)
#undef JNIEXPORT
#define JNIEXPORT
#endif
JVMCIKlassHandle::JVMCIKlassHandle(Thread* thread, Klass* klass) { JVMCIKlassHandle::JVMCIKlassHandle(Thread* thread, Klass* klass) {
_thread = thread; _thread = thread;
_klass = klass; _klass = klass;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -47,6 +47,11 @@
#include "gc/g1/g1ThreadLocalData.hpp" #include "gc/g1/g1ThreadLocalData.hpp"
#endif #endif
#if defined(TARGET_COMPILER_gcc)
#undef JNIEXPORT
#define JNIEXPORT
#endif
#define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \ #define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \
static_field(CompilerToVM::Data, Klass_vtable_start_offset, int) \ static_field(CompilerToVM::Data, Klass_vtable_start_offset, int) \
static_field(CompilerToVM::Data, Klass_vtable_length_offset, int) \ static_field(CompilerToVM::Data, Klass_vtable_length_offset, int) \

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -32,6 +32,12 @@
#include "utilities/debug.hpp" #include "utilities/debug.hpp"
#include "utilities/vmError.hpp" #include "utilities/vmError.hpp"
#if defined(TARGET_COMPILER_gcc)
#define HIDDEN __attribute__ ((visibility ("hidden")))
#else
#define HIDDEN
#endif
namespace AccessInternal { namespace AccessInternal {
// These forward copying calls to Copy without exposing the Copy type in headers unnecessarily // These forward copying calls to Copy without exposing the Copy type in headers unnecessarily
@ -58,102 +64,102 @@ namespace AccessInternal {
reinterpret_cast<HeapWord*>(dst), length); reinterpret_cast<HeapWord*>(dst), length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jboolean>(jboolean* src, jboolean* dst, size_t length) { void arraycopy_conjoint<jboolean>(jboolean* src, jboolean* dst, size_t length) {
Copy::conjoint_jbytes(reinterpret_cast<jbyte*>(src), reinterpret_cast<jbyte*>(dst), length); Copy::conjoint_jbytes(reinterpret_cast<jbyte*>(src), reinterpret_cast<jbyte*>(dst), length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jbyte>(jbyte* src, jbyte* dst, size_t length) { void arraycopy_conjoint<jbyte>(jbyte* src, jbyte* dst, size_t length) {
Copy::conjoint_jbytes(src, dst, length); Copy::conjoint_jbytes(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jchar>(jchar* src, jchar* dst, size_t length) { void arraycopy_conjoint<jchar>(jchar* src, jchar* dst, size_t length) {
Copy::conjoint_jshorts_atomic(reinterpret_cast<jshort*>(src), reinterpret_cast<jshort*>(dst), length); Copy::conjoint_jshorts_atomic(reinterpret_cast<jshort*>(src), reinterpret_cast<jshort*>(dst), length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jshort>(jshort* src, jshort* dst, size_t length) { void arraycopy_conjoint<jshort>(jshort* src, jshort* dst, size_t length) {
Copy::conjoint_jshorts_atomic(src, dst, length); Copy::conjoint_jshorts_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jint>(jint* src, jint* dst, size_t length) { void arraycopy_conjoint<jint>(jint* src, jint* dst, size_t length) {
Copy::conjoint_jints_atomic(src, dst, length); Copy::conjoint_jints_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jfloat>(jfloat* src, jfloat* dst, size_t length) { void arraycopy_conjoint<jfloat>(jfloat* src, jfloat* dst, size_t length) {
Copy::conjoint_jints_atomic(reinterpret_cast<jint*>(src), reinterpret_cast<jint*>(dst), length); Copy::conjoint_jints_atomic(reinterpret_cast<jint*>(src), reinterpret_cast<jint*>(dst), length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jlong>(jlong* src, jlong* dst, size_t length) { void arraycopy_conjoint<jlong>(jlong* src, jlong* dst, size_t length) {
Copy::conjoint_jlongs_atomic(src, dst, length); Copy::conjoint_jlongs_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<jdouble>(jdouble* src, jdouble* dst, size_t length) { void arraycopy_conjoint<jdouble>(jdouble* src, jdouble* dst, size_t length) {
Copy::conjoint_jlongs_atomic(reinterpret_cast<jlong*>(src), reinterpret_cast<jlong*>(dst), length); Copy::conjoint_jlongs_atomic(reinterpret_cast<jlong*>(src), reinterpret_cast<jlong*>(dst), length);
} }
template<> template<> HIDDEN
void arraycopy_arrayof_conjoint<jbyte>(jbyte* src, jbyte* dst, size_t length) { void arraycopy_arrayof_conjoint<jbyte>(jbyte* src, jbyte* dst, size_t length) {
Copy::arrayof_conjoint_jbytes(reinterpret_cast<HeapWord*>(src), Copy::arrayof_conjoint_jbytes(reinterpret_cast<HeapWord*>(src),
reinterpret_cast<HeapWord*>(dst), reinterpret_cast<HeapWord*>(dst),
length); length);
} }
template<> template<> HIDDEN
void arraycopy_arrayof_conjoint<jshort>(jshort* src, jshort* dst, size_t length) { void arraycopy_arrayof_conjoint<jshort>(jshort* src, jshort* dst, size_t length) {
Copy::arrayof_conjoint_jshorts(reinterpret_cast<HeapWord*>(src), Copy::arrayof_conjoint_jshorts(reinterpret_cast<HeapWord*>(src),
reinterpret_cast<HeapWord*>(dst), reinterpret_cast<HeapWord*>(dst),
length); length);
} }
template<> template<> HIDDEN
void arraycopy_arrayof_conjoint<jint>(jint* src, jint* dst, size_t length) { void arraycopy_arrayof_conjoint<jint>(jint* src, jint* dst, size_t length) {
Copy::arrayof_conjoint_jints(reinterpret_cast<HeapWord*>(src), Copy::arrayof_conjoint_jints(reinterpret_cast<HeapWord*>(src),
reinterpret_cast<HeapWord*>(dst), reinterpret_cast<HeapWord*>(dst),
length); length);
} }
template<> template<> HIDDEN
void arraycopy_arrayof_conjoint<jlong>(jlong* src, jlong* dst, size_t length) { void arraycopy_arrayof_conjoint<jlong>(jlong* src, jlong* dst, size_t length) {
Copy::arrayof_conjoint_jlongs(reinterpret_cast<HeapWord*>(src), Copy::arrayof_conjoint_jlongs(reinterpret_cast<HeapWord*>(src),
reinterpret_cast<HeapWord*>(dst), reinterpret_cast<HeapWord*>(dst),
length); length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint<void>(void* src, void* dst, size_t length) { void arraycopy_conjoint<void>(void* src, void* dst, size_t length) {
Copy::conjoint_jbytes(reinterpret_cast<jbyte*>(src), Copy::conjoint_jbytes(reinterpret_cast<jbyte*>(src),
reinterpret_cast<jbyte*>(dst), reinterpret_cast<jbyte*>(dst),
length); length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint_atomic<jbyte>(jbyte* src, jbyte* dst, size_t length) { void arraycopy_conjoint_atomic<jbyte>(jbyte* src, jbyte* dst, size_t length) {
Copy::conjoint_jbytes_atomic(src, dst, length); Copy::conjoint_jbytes_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint_atomic<jshort>(jshort* src, jshort* dst, size_t length) { void arraycopy_conjoint_atomic<jshort>(jshort* src, jshort* dst, size_t length) {
Copy::conjoint_jshorts_atomic(src, dst, length); Copy::conjoint_jshorts_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint_atomic<jint>(jint* src, jint* dst, size_t length) { void arraycopy_conjoint_atomic<jint>(jint* src, jint* dst, size_t length) {
Copy::conjoint_jints_atomic(src, dst, length); Copy::conjoint_jints_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint_atomic<jlong>(jlong* src, jlong* dst, size_t length) { void arraycopy_conjoint_atomic<jlong>(jlong* src, jlong* dst, size_t length) {
Copy::conjoint_jlongs_atomic(src, dst, length); Copy::conjoint_jlongs_atomic(src, dst, length);
} }
template<> template<> HIDDEN
void arraycopy_conjoint_atomic<void>(void* src, void* dst, size_t length) { void arraycopy_conjoint_atomic<void>(void* src, void* dst, size_t length) {
Copy::conjoint_memory_atomic(src, dst, length); Copy::conjoint_memory_atomic(src, dst, length);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -67,6 +67,11 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#if defined(TARGET_COMPILER_gcc)
#undef JNIEXPORT
#define JNIEXPORT
#endif
// Support for showing register content on asserts/guarantees. // Support for showing register content on asserts/guarantees.
#ifdef CAN_SHOW_REGISTERS_ON_ASSERT #ifdef CAN_SHOW_REGISTERS_ON_ASSERT
static char g_dummy; static char g_dummy;