This commit is contained in:
Phil Race 2018-07-19 10:53:38 -07:00
commit f921743302
437 changed files with 4422 additions and 5350 deletions

View file

@ -495,4 +495,7 @@ e1b3def126240d5433902f3cb0e91a4c27f6db50 jdk-11+18
9816d7cc655e53ba081f938b656e31971b8f097a jdk-11+20 9816d7cc655e53ba081f938b656e31971b8f097a jdk-11+20
14708e1acdc3974f4539027cbbcfa6d69f83cf51 jdk-11+21 14708e1acdc3974f4539027cbbcfa6d69f83cf51 jdk-11+21
00b16d0457e43d23f6ca5ade6b243edce62750a0 jdk-12+1 00b16d0457e43d23f6ca5ade6b243edce62750a0 jdk-12+1
9937ef7499dcd7673714517fd5e450410c14ba4e jdk-11+22
1edcf36fe15f79d6228d1a63eb680878e2386480 jdk-11+23
69b438908512d3dfef5852c6a843a5778333a309 jdk-12+2 69b438908512d3dfef5852c6a843a5778333a309 jdk-12+2
990db216e7199b2ba9989d8fa20b657e0ca7d969 jdk-12+3

View file

@ -106,11 +106,17 @@ AC_DEFUN([FLAGS_SETUP_SHARED_LIBS],
AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS], AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS],
[ [
# By default don't set any specific assembler debug
# info flags for toolchains unless we know they work.
# See JDK-8207057.
ASFLAGS_DEBUG_SYMBOLS=""
# Debug symbols # Debug symbols
if test "x$TOOLCHAIN_TYPE" = xgcc; then if test "x$TOOLCHAIN_TYPE" = xgcc; then
CFLAGS_DEBUG_SYMBOLS="-g" CFLAGS_DEBUG_SYMBOLS="-g"
ASFLAGS_DEBUG_SYMBOLS="-g"
elif test "x$TOOLCHAIN_TYPE" = xclang; then elif test "x$TOOLCHAIN_TYPE" = xclang; then
CFLAGS_DEBUG_SYMBOLS="-g" CFLAGS_DEBUG_SYMBOLS="-g"
ASFLAGS_DEBUG_SYMBOLS="-g"
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
# -g0 enables debug symbols without disabling inlining. # -g0 enables debug symbols without disabling inlining.
CFLAGS_DEBUG_SYMBOLS="-g0 -xs" CFLAGS_DEBUG_SYMBOLS="-g0 -xs"
@ -121,6 +127,7 @@ AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS],
fi fi
AC_SUBST(CFLAGS_DEBUG_SYMBOLS) AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
AC_SUBST(ASFLAGS_DEBUG_SYMBOLS)
]) ])
AC_DEFUN([FLAGS_SETUP_WARNINGS], AC_DEFUN([FLAGS_SETUP_WARNINGS],

View file

@ -500,7 +500,7 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
# Enable features depending on variant. # Enable features depending on variant.
JVM_FEATURES_server="compiler1 compiler2 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci $JVM_FEATURES_aot $JVM_FEATURES_graal" JVM_FEATURES_server="compiler1 compiler2 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci $JVM_FEATURES_aot $JVM_FEATURES_graal"
JVM_FEATURES_client="compiler1 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci" JVM_FEATURES_client="compiler1 $NON_MINIMAL_FEATURES $JVM_FEATURES"
JVM_FEATURES_core="$NON_MINIMAL_FEATURES $JVM_FEATURES" JVM_FEATURES_core="$NON_MINIMAL_FEATURES $JVM_FEATURES"
JVM_FEATURES_minimal="compiler1 minimal serialgc $JVM_FEATURES $JVM_FEATURES_link_time_opt" JVM_FEATURES_minimal="compiler1 minimal serialgc $JVM_FEATURES $JVM_FEATURES_link_time_opt"
JVM_FEATURES_zero="zero $NON_MINIMAL_FEATURES $JVM_FEATURES" JVM_FEATURES_zero="zero $NON_MINIMAL_FEATURES $JVM_FEATURES"

View file

@ -532,6 +532,7 @@ COPY_DEBUG_SYMBOLS := @COPY_DEBUG_SYMBOLS@
ZIP_EXTERNAL_DEBUG_SYMBOLS := @ZIP_EXTERNAL_DEBUG_SYMBOLS@ ZIP_EXTERNAL_DEBUG_SYMBOLS := @ZIP_EXTERNAL_DEBUG_SYMBOLS@
CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@ CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@
ASFLAGS_DEBUG_SYMBOLS:=@ASFLAGS_DEBUG_SYMBOLS@
# #
# Compress (or not) jars # Compress (or not) jars

View file

@ -1015,7 +1015,7 @@ ExecuteWithLog = \
$(call LogCmdlines, Exececuting: [$(strip $2)]) \ $(call LogCmdlines, Exececuting: [$(strip $2)]) \
$(call MakeDir, $(dir $(strip $1))) \ $(call MakeDir, $(dir $(strip $1))) \
$(call WriteFile, $2, $(strip $1).cmdline) \ $(call WriteFile, $2, $(strip $1).cmdline) \
( $(strip $2) > >($(TEE) $(strip $1).log) 2> >($(TEE) $(strip $1).log >&2) || \ ( $(RM) $(strip $1).log && $(strip $2) > >($(TEE) -a $(strip $1).log) 2> >($(TEE) -a $(strip $1).log >&2) || \
( exitcode=$(DOLLAR)? && \ ( exitcode=$(DOLLAR)? && \
$(CP) $(strip $1).log $(MAKESUPPORT_OUTPUTDIR)/failure-logs/$(subst /,_,$(patsubst $(OUTPUTDIR)/%,%,$(strip $1))).log && \ $(CP) $(strip $1).log $(MAKESUPPORT_OUTPUTDIR)/failure-logs/$(subst /,_,$(patsubst $(OUTPUTDIR)/%,%,$(strip $1))).log && \
$(CP) $(strip $1).cmdline $(MAKESUPPORT_OUTPUTDIR)/failure-logs/$(subst /,_,$(patsubst $(OUTPUTDIR)/%,%,$(strip $1))).cmdline && \ $(CP) $(strip $1).cmdline $(MAKESUPPORT_OUTPUTDIR)/failure-logs/$(subst /,_,$(patsubst $(OUTPUTDIR)/%,%,$(strip $1))).cmdline && \

View file

@ -251,6 +251,7 @@ define SetupCompileNativeFileBody
$$($$($1_BASE)_SYSROOT_CFLAGS) $$($$($1_BASE)_SYSROOT_CFLAGS)
$1_BASE_CXXFLAGS := $$($$($1_BASE)_CXXFLAGS) $$($$($1_BASE)_EXTRA_CXXFLAGS) \ $1_BASE_CXXFLAGS := $$($$($1_BASE)_CXXFLAGS) $$($$($1_BASE)_EXTRA_CXXFLAGS) \
$$($$($1_BASE)_SYSROOT_CFLAGS) $$($1_EXTRA_CXXFLAGS) $$($$($1_BASE)_SYSROOT_CFLAGS) $$($1_EXTRA_CXXFLAGS)
$1_BASE_ASFLAGS := $$($$($1_BASE)_ASFLAGS) $$($$($1_BASE)_EXTRA_ASFLAGS)
ifneq ($$(filter %.c, $$($1_FILENAME)), ) ifneq ($$(filter %.c, $$($1_FILENAME)), )
# Compile as a C file # Compile as a C file
@ -266,7 +267,7 @@ define SetupCompileNativeFileBody
$1_DEP_FLAG := $(C_FLAG_DEPS) $1_DEP_FLAG := $(C_FLAG_DEPS)
else ifneq ($$(filter %.s %.S, $$($1_FILENAME)), ) else ifneq ($$(filter %.s %.S, $$($1_FILENAME)), )
# Compile as assembler file # Compile as assembler file
$1_FLAGS := $$($$($1_BASE)_ASFLAGS) $1_FLAGS := $$($1_BASE_ASFLAGS)
$1_COMPILER := $(AS) $1_COMPILER := $(AS)
$1_DEP_FLAG := $1_DEP_FLAG :=
else ifneq ($$(filter %.cpp %.cc %.mm, $$($1_FILENAME)), ) else ifneq ($$(filter %.cpp %.cc %.mm, $$($1_FILENAME)), )
@ -576,6 +577,7 @@ define SetupNativeCompilationBody
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
$1_EXTRA_CFLAGS += $$(CFLAGS_DEBUG_SYMBOLS) $1_EXTRA_CFLAGS += $$(CFLAGS_DEBUG_SYMBOLS)
$1_EXTRA_CXXFLAGS += $$(CFLAGS_DEBUG_SYMBOLS) $1_EXTRA_CXXFLAGS += $$(CFLAGS_DEBUG_SYMBOLS)
$1_EXTRA_ASFLAGS += $$(ASFLAGS_DEBUG_SYMBOLS)
endif endif
ifneq ($$($1_REORDER), ) ifneq ($$($1_REORDER), )

View file

@ -1,890 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name java/io/Closeable
header extends java/lang/Object flags 601
class name java/io/File
-method name toPath descriptor ()Ljava/nio/file/Path;
class name java/io/FileOutputStream
-method name write descriptor (I)V
method name write descriptor (I)V thrownTypes java/io/IOException flags 101
class name java/io/ObjectInput
header extends java/lang/Object implements java/io/DataInput flags 601
class name java/io/ObjectOutput
header extends java/lang/Object implements java/io/DataOutput flags 601
class name java/lang/AssertionError
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V
-class name java/lang/AutoCloseable
class name java/lang/Boolean
-method name compare descriptor (ZZ)I
-class name java/lang/BootstrapMethodError
class name java/lang/Byte
-method name compare descriptor (BB)I
class name java/lang/Character
header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/Character;>;
innerclass innerClass java/lang/Character$Subset outerClass java/lang/Character innerClassName Subset flags 9
innerclass innerClass java/lang/Character$UnicodeBlock outerClass java/lang/Character innerClassName UnicodeBlock flags 19
-method name isBmpCodePoint descriptor (I)Z
-method name isSurrogate descriptor (C)Z
-method name highSurrogate descriptor (I)C
-method name lowSurrogate descriptor (I)C
-method name isAlphabetic descriptor (I)Z
-method name isIdeographic descriptor (I)Z
-method name compare descriptor (CC)I
-method name getName descriptor (I)Ljava/lang/String;
class name java/lang/Character$UnicodeBlock
-field name ARABIC_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name NKO descriptor Ljava/lang/Character$UnicodeBlock;
-field name SAMARITAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name MANDAIC descriptor Ljava/lang/Character$UnicodeBlock;
-field name ETHIOPIC_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED descriptor Ljava/lang/Character$UnicodeBlock;
-field name NEW_TAI_LUE descriptor Ljava/lang/Character$UnicodeBlock;
-field name BUGINESE descriptor Ljava/lang/Character$UnicodeBlock;
-field name TAI_THAM descriptor Ljava/lang/Character$UnicodeBlock;
-field name BALINESE descriptor Ljava/lang/Character$UnicodeBlock;
-field name SUNDANESE descriptor Ljava/lang/Character$UnicodeBlock;
-field name BATAK descriptor Ljava/lang/Character$UnicodeBlock;
-field name LEPCHA descriptor Ljava/lang/Character$UnicodeBlock;
-field name OL_CHIKI descriptor Ljava/lang/Character$UnicodeBlock;
-field name VEDIC_EXTENSIONS descriptor Ljava/lang/Character$UnicodeBlock;
-field name PHONETIC_EXTENSIONS_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name COMBINING_DIACRITICAL_MARKS_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name GLAGOLITIC descriptor Ljava/lang/Character$UnicodeBlock;
-field name LATIN_EXTENDED_C descriptor Ljava/lang/Character$UnicodeBlock;
-field name COPTIC descriptor Ljava/lang/Character$UnicodeBlock;
-field name GEORGIAN_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name TIFINAGH descriptor Ljava/lang/Character$UnicodeBlock;
-field name ETHIOPIC_EXTENDED descriptor Ljava/lang/Character$UnicodeBlock;
-field name CYRILLIC_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock;
-field name SUPPLEMENTAL_PUNCTUATION descriptor Ljava/lang/Character$UnicodeBlock;
-field name CJK_STROKES descriptor Ljava/lang/Character$UnicodeBlock;
-field name LISU descriptor Ljava/lang/Character$UnicodeBlock;
-field name VAI descriptor Ljava/lang/Character$UnicodeBlock;
-field name CYRILLIC_EXTENDED_B descriptor Ljava/lang/Character$UnicodeBlock;
-field name BAMUM descriptor Ljava/lang/Character$UnicodeBlock;
-field name MODIFIER_TONE_LETTERS descriptor Ljava/lang/Character$UnicodeBlock;
-field name LATIN_EXTENDED_D descriptor Ljava/lang/Character$UnicodeBlock;
-field name SYLOTI_NAGRI descriptor Ljava/lang/Character$UnicodeBlock;
-field name COMMON_INDIC_NUMBER_FORMS descriptor Ljava/lang/Character$UnicodeBlock;
-field name PHAGS_PA descriptor Ljava/lang/Character$UnicodeBlock;
-field name SAURASHTRA descriptor Ljava/lang/Character$UnicodeBlock;
-field name DEVANAGARI_EXTENDED descriptor Ljava/lang/Character$UnicodeBlock;
-field name KAYAH_LI descriptor Ljava/lang/Character$UnicodeBlock;
-field name REJANG descriptor Ljava/lang/Character$UnicodeBlock;
-field name HANGUL_JAMO_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock;
-field name JAVANESE descriptor Ljava/lang/Character$UnicodeBlock;
-field name CHAM descriptor Ljava/lang/Character$UnicodeBlock;
-field name MYANMAR_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock;
-field name TAI_VIET descriptor Ljava/lang/Character$UnicodeBlock;
-field name ETHIOPIC_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock;
-field name MEETEI_MAYEK descriptor Ljava/lang/Character$UnicodeBlock;
-field name HANGUL_JAMO_EXTENDED_B descriptor Ljava/lang/Character$UnicodeBlock;
-field name VERTICAL_FORMS descriptor Ljava/lang/Character$UnicodeBlock;
-field name ANCIENT_GREEK_NUMBERS descriptor Ljava/lang/Character$UnicodeBlock;
-field name ANCIENT_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock;
-field name PHAISTOS_DISC descriptor Ljava/lang/Character$UnicodeBlock;
-field name LYCIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name CARIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name OLD_PERSIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name IMPERIAL_ARAMAIC descriptor Ljava/lang/Character$UnicodeBlock;
-field name PHOENICIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name LYDIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name KHAROSHTHI descriptor Ljava/lang/Character$UnicodeBlock;
-field name OLD_SOUTH_ARABIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name AVESTAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name INSCRIPTIONAL_PARTHIAN descriptor Ljava/lang/Character$UnicodeBlock;
-field name INSCRIPTIONAL_PAHLAVI descriptor Ljava/lang/Character$UnicodeBlock;
-field name OLD_TURKIC descriptor Ljava/lang/Character$UnicodeBlock;
-field name RUMI_NUMERAL_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock;
-field name BRAHMI descriptor Ljava/lang/Character$UnicodeBlock;
-field name KAITHI descriptor Ljava/lang/Character$UnicodeBlock;
-field name CUNEIFORM descriptor Ljava/lang/Character$UnicodeBlock;
-field name CUNEIFORM_NUMBERS_AND_PUNCTUATION descriptor Ljava/lang/Character$UnicodeBlock;
-field name EGYPTIAN_HIEROGLYPHS descriptor Ljava/lang/Character$UnicodeBlock;
-field name BAMUM_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name KANA_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name ANCIENT_GREEK_MUSICAL_NOTATION descriptor Ljava/lang/Character$UnicodeBlock;
-field name COUNTING_ROD_NUMERALS descriptor Ljava/lang/Character$UnicodeBlock;
-field name MAHJONG_TILES descriptor Ljava/lang/Character$UnicodeBlock;
-field name DOMINO_TILES descriptor Ljava/lang/Character$UnicodeBlock;
-field name PLAYING_CARDS descriptor Ljava/lang/Character$UnicodeBlock;
-field name ENCLOSED_ALPHANUMERIC_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name ENCLOSED_IDEOGRAPHIC_SUPPLEMENT descriptor Ljava/lang/Character$UnicodeBlock;
-field name MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS descriptor Ljava/lang/Character$UnicodeBlock;
-field name EMOTICONS descriptor Ljava/lang/Character$UnicodeBlock;
-field name TRANSPORT_AND_MAP_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock;
-field name ALCHEMICAL_SYMBOLS descriptor Ljava/lang/Character$UnicodeBlock;
-field name CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C descriptor Ljava/lang/Character$UnicodeBlock;
-field name CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D descriptor Ljava/lang/Character$UnicodeBlock;
-class name java/lang/Character$UnicodeScript
class name java/lang/ClassLoader
-method name loadClass descriptor (Ljava/lang/String;Z)Ljava/lang/Class;
-method name getClassLoadingLock descriptor (Ljava/lang/String;)Ljava/lang/Object;
-method name setDefaultAssertionStatus descriptor (Z)V
-method name setPackageAssertionStatus descriptor (Ljava/lang/String;Z)V
-method name setClassAssertionStatus descriptor (Ljava/lang/String;Z)V
-method name clearAssertionStatus descriptor ()V
-method name registerAsParallelCapable descriptor ()Z
method name loadClass descriptor (Ljava/lang/String;Z)Ljava/lang/Class; thrownTypes java/lang/ClassNotFoundException flags 24 signature (Ljava/lang/String;Z)Ljava/lang/Class<*>;
method name setDefaultAssertionStatus descriptor (Z)V flags 21
method name setPackageAssertionStatus descriptor (Ljava/lang/String;Z)V flags 21
method name setClassAssertionStatus descriptor (Ljava/lang/String;Z)V flags 21
method name clearAssertionStatus descriptor ()V flags 21
class name java/lang/ClassNotFoundException
header extends java/lang/Exception flags 21
-class name java/lang/ClassValue
class name java/lang/Deprecated
header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)
class name java/lang/Error
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
class name java/lang/Exception
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
class name java/lang/IllegalAccessException
header extends java/lang/Exception flags 21
class name java/lang/InstantiationException
header extends java/lang/Exception flags 21
class name java/lang/Integer
-method name compare descriptor (II)I
class name java/lang/LinkageError
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V
class name java/lang/Long
-method name compare descriptor (JJ)I
class name java/lang/NoSuchFieldException
header extends java/lang/Exception flags 21
class name java/lang/NoSuchMethodException
header extends java/lang/Exception flags 21
class name java/lang/ProcessBuilder
header extends java/lang/Object flags 31
-method name redirectInput descriptor (Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;
-method name redirectOutput descriptor (Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;
-method name redirectError descriptor (Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;
-method name redirectInput descriptor (Ljava/io/File;)Ljava/lang/ProcessBuilder;
-method name redirectOutput descriptor (Ljava/io/File;)Ljava/lang/ProcessBuilder;
-method name redirectError descriptor (Ljava/io/File;)Ljava/lang/ProcessBuilder;
-method name redirectInput descriptor ()Ljava/lang/ProcessBuilder$Redirect;
-method name redirectOutput descriptor ()Ljava/lang/ProcessBuilder$Redirect;
-method name redirectError descriptor ()Ljava/lang/ProcessBuilder$Redirect;
-method name inheritIO descriptor ()Ljava/lang/ProcessBuilder;
-class name java/lang/ProcessBuilder$Redirect
-class name java/lang/ProcessBuilder$Redirect$Type
-class name java/lang/ReflectiveOperationException
class name java/lang/RuntimeException
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
-class name java/lang/SafeVarargs
class name java/lang/Short
-method name compare descriptor (SS)I
class name java/lang/StrictMath
-method name ceil descriptor (D)D
-method name floor descriptor (D)D
method name ceil descriptor (D)D flags 109
method name floor descriptor (D)D flags 109
class name java/lang/System
-method name lineSeparator descriptor ()Ljava/lang/String;
class name java/lang/Thread
-method name clone descriptor ()Ljava/lang/Object;
class name java/lang/Throwable
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
-method name getCause descriptor ()Ljava/lang/Throwable;
-method name fillInStackTrace descriptor ()Ljava/lang/Throwable;
-method name addSuppressed descriptor (Ljava/lang/Throwable;)V
-method name getSuppressed descriptor ()[Ljava/lang/Throwable;
method name getCause descriptor ()Ljava/lang/Throwable; flags 1
method name fillInStackTrace descriptor ()Ljava/lang/Throwable; flags 121
-class name java/lang/invoke/CallSite
-class name java/lang/invoke/ConstantCallSite
-class name java/lang/invoke/MethodHandle
-class name java/lang/invoke/MethodHandleProxies
-class name java/lang/invoke/MethodHandles
-class name java/lang/invoke/MethodHandles$Lookup
-class name java/lang/invoke/MethodType
-class name java/lang/invoke/MutableCallSite
-class name java/lang/invoke/SwitchPoint
-class name java/lang/invoke/VolatileCallSite
-class name java/lang/invoke/WrongMethodTypeException
class name java/lang/reflect/InvocationTargetException
header extends java/lang/Exception flags 21
class name java/lang/reflect/Modifier
-method name classModifiers descriptor ()I
-method name interfaceModifiers descriptor ()I
-method name constructorModifiers descriptor ()I
-method name methodModifiers descriptor ()I
-method name fieldModifiers descriptor ()I
class name java/net/DatagramSocket
header extends java/lang/Object flags 21
class name java/net/HttpCookie
-method name isHttpOnly descriptor ()Z
-method name setHttpOnly descriptor (Z)V
class name java/net/HttpURLConnection
-field name fixedContentLengthLong descriptor J
-method name setFixedLengthStreamingMode descriptor (J)V
class name java/net/InetAddress
-method name getLoopbackAddress descriptor ()Ljava/net/InetAddress;
class name java/net/InetSocketAddress
-method name getHostString descriptor ()Ljava/lang/String;
class name java/net/NetworkInterface
-method name getIndex descriptor ()I
-method name getByIndex descriptor (I)Ljava/net/NetworkInterface;
-class name java/net/ProtocolFamily
class name java/net/ServerSocket
header extends java/lang/Object flags 21
class name java/net/Socket
header extends java/lang/Object flags 21
-class name java/net/SocketOption
-class name java/net/StandardProtocolFamily
-class name java/net/StandardSocketOptions
class name java/net/URLClassLoader
header extends java/security/SecureClassLoader flags 21
-method name getResourceAsStream descriptor (Ljava/lang/String;)Ljava/io/InputStream;
-method name close descriptor ()V
class name java/net/URLConnection
-method name getContentLengthLong descriptor ()J
-method name getHeaderFieldLong descriptor (Ljava/lang/String;J)J
class name java/nio/CharBuffer
-method name subSequence descriptor (II)Ljava/nio/CharBuffer;
-method name subSequence descriptor (II)Ljava/lang/CharSequence;
method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 401
-class name java/nio/channels/AcceptPendingException
-class name java/nio/channels/AlreadyBoundException
-class name java/nio/channels/AsynchronousByteChannel
-class name java/nio/channels/AsynchronousChannel
-class name java/nio/channels/AsynchronousChannelGroup
-class name java/nio/channels/AsynchronousFileChannel
-class name java/nio/channels/AsynchronousServerSocketChannel
-class name java/nio/channels/AsynchronousSocketChannel
class name java/nio/channels/Channels
-method name newInputStream descriptor (Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/InputStream;
-method name newOutputStream descriptor (Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/OutputStream;
-class name java/nio/channels/CompletionHandler
class name java/nio/channels/DatagramChannel
header extends java/nio/channels/spi/AbstractSelectableChannel implements java/nio/channels/ByteChannel,java/nio/channels/ScatteringByteChannel,java/nio/channels/GatheringByteChannel flags 421
-method name open descriptor (Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;
-method name bind descriptor (Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;
-method name setOption descriptor (Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/DatagramChannel;
-method name getRemoteAddress descriptor ()Ljava/net/SocketAddress;
-method name setOption descriptor (Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/NetworkChannel;
-method name bind descriptor (Ljava/net/SocketAddress;)Ljava/nio/channels/NetworkChannel;
class name java/nio/channels/FileChannel
header extends java/nio/channels/spi/AbstractInterruptibleChannel implements java/nio/channels/ByteChannel,java/nio/channels/GatheringByteChannel,java/nio/channels/ScatteringByteChannel flags 421
innerclass innerClass java/nio/channels/FileChannel$MapMode outerClass java/nio/channels/FileChannel innerClassName MapMode flags 9
-method name open descriptor (Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;
-method name open descriptor (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/FileChannel;
-method name truncate descriptor (J)Ljava/nio/channels/SeekableByteChannel;
-method name position descriptor (J)Ljava/nio/channels/SeekableByteChannel;
class name java/nio/channels/FileLock
header extends java/lang/Object flags 421
-method name <init> descriptor (Ljava/nio/channels/AsynchronousFileChannel;JJZ)V
-method name acquiredBy descriptor ()Ljava/nio/channels/Channel;
-method name close descriptor ()V
-class name java/nio/channels/IllegalChannelGroupException
-class name java/nio/channels/InterruptedByTimeoutException
-class name java/nio/channels/MembershipKey
-class name java/nio/channels/MulticastChannel
-class name java/nio/channels/NetworkChannel
-class name java/nio/channels/ReadPendingException
-class name java/nio/channels/SeekableByteChannel
class name java/nio/channels/Selector
header extends java/lang/Object flags 421
class name java/nio/channels/ServerSocketChannel
header extends java/nio/channels/spi/AbstractSelectableChannel flags 421
-method name bind descriptor (Ljava/net/SocketAddress;)Ljava/nio/channels/ServerSocketChannel;
-method name bind descriptor (Ljava/net/SocketAddress;I)Ljava/nio/channels/ServerSocketChannel;
-method name setOption descriptor (Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/ServerSocketChannel;
-method name setOption descriptor (Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/NetworkChannel;
-method name bind descriptor (Ljava/net/SocketAddress;)Ljava/nio/channels/NetworkChannel;
-class name java/nio/channels/ShutdownChannelGroupException
class name java/nio/channels/SocketChannel
header extends java/nio/channels/spi/AbstractSelectableChannel implements java/nio/channels/ByteChannel,java/nio/channels/ScatteringByteChannel,java/nio/channels/GatheringByteChannel flags 421
-method name bind descriptor (Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;
-method name setOption descriptor (Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/SocketChannel;
-method name shutdownInput descriptor ()Ljava/nio/channels/SocketChannel;
-method name shutdownOutput descriptor ()Ljava/nio/channels/SocketChannel;
-method name getRemoteAddress descriptor ()Ljava/net/SocketAddress;
-method name setOption descriptor (Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/NetworkChannel;
-method name bind descriptor (Ljava/net/SocketAddress;)Ljava/nio/channels/NetworkChannel;
-class name java/nio/channels/WritePendingException
-class name java/nio/channels/spi/AsynchronousChannelProvider
class name java/nio/channels/spi/SelectorProvider
-method name openDatagramChannel descriptor (Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;
-class name java/nio/charset/StandardCharsets
-class name java/nio/file/AccessDeniedException
-class name java/nio/file/AccessMode
-class name java/nio/file/AtomicMoveNotSupportedException
-class name java/nio/file/ClosedDirectoryStreamException
-class name java/nio/file/ClosedFileSystemException
-class name java/nio/file/ClosedWatchServiceException
-class name java/nio/file/CopyOption
-class name java/nio/file/DirectoryIteratorException
-class name java/nio/file/DirectoryNotEmptyException
-class name java/nio/file/DirectoryStream
-class name java/nio/file/DirectoryStream$Filter
-class name java/nio/file/FileAlreadyExistsException
-class name java/nio/file/FileStore
-class name java/nio/file/FileSystem
-class name java/nio/file/FileSystemAlreadyExistsException
-class name java/nio/file/FileSystemException
-class name java/nio/file/FileSystemLoopException
-class name java/nio/file/FileSystemNotFoundException
-class name java/nio/file/FileSystems
-class name java/nio/file/FileVisitOption
-class name java/nio/file/FileVisitResult
-class name java/nio/file/FileVisitor
-class name java/nio/file/Files
-class name java/nio/file/InvalidPathException
-class name java/nio/file/LinkOption
-class name java/nio/file/LinkPermission
-class name java/nio/file/NoSuchFileException
-class name java/nio/file/NotDirectoryException
-class name java/nio/file/NotLinkException
-class name java/nio/file/OpenOption
-class name java/nio/file/Path
-class name java/nio/file/PathMatcher
-class name java/nio/file/Paths
-class name java/nio/file/ProviderMismatchException
-class name java/nio/file/ProviderNotFoundException
-class name java/nio/file/ReadOnlyFileSystemException
-class name java/nio/file/SecureDirectoryStream
-class name java/nio/file/SimpleFileVisitor
-class name java/nio/file/StandardCopyOption
-class name java/nio/file/StandardOpenOption
-class name java/nio/file/StandardWatchEventKinds
-class name java/nio/file/WatchEvent
-class name java/nio/file/WatchEvent$Kind
-class name java/nio/file/WatchEvent$Modifier
-class name java/nio/file/WatchKey
-class name java/nio/file/WatchService
-class name java/nio/file/Watchable
-class name java/nio/file/attribute/AclEntry
-class name java/nio/file/attribute/AclEntry$Builder
-class name java/nio/file/attribute/AclEntryFlag
-class name java/nio/file/attribute/AclEntryPermission
-class name java/nio/file/attribute/AclEntryType
-class name java/nio/file/attribute/AclFileAttributeView
-class name java/nio/file/attribute/AttributeView
-class name java/nio/file/attribute/BasicFileAttributeView
-class name java/nio/file/attribute/BasicFileAttributes
-class name java/nio/file/attribute/DosFileAttributeView
-class name java/nio/file/attribute/DosFileAttributes
-class name java/nio/file/attribute/FileAttribute
-class name java/nio/file/attribute/FileAttributeView
-class name java/nio/file/attribute/FileOwnerAttributeView
-class name java/nio/file/attribute/FileStoreAttributeView
-class name java/nio/file/attribute/FileTime
-class name java/nio/file/attribute/GroupPrincipal
-class name java/nio/file/attribute/PosixFileAttributeView
-class name java/nio/file/attribute/PosixFileAttributes
-class name java/nio/file/attribute/PosixFilePermission
-class name java/nio/file/attribute/PosixFilePermissions
-class name java/nio/file/attribute/UserDefinedFileAttributeView
-class name java/nio/file/attribute/UserPrincipal
-class name java/nio/file/attribute/UserPrincipalLookupService
-class name java/nio/file/attribute/UserPrincipalNotFoundException
-class name java/nio/file/spi/FileSystemProvider
-class name java/nio/file/spi/FileTypeDetector
-class name java/security/AlgorithmConstraints
-class name java/security/CryptoPrimitive
-class name java/security/cert/CRLReason
class name java/security/cert/CertPathValidatorException
header extends java/security/GeneralSecurityException flags 21
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;ILjava/security/cert/CertPathValidatorException$Reason;)V
-method name getReason descriptor ()Ljava/security/cert/CertPathValidatorException$Reason;
-class name java/security/cert/CertPathValidatorException$BasicReason
-class name java/security/cert/CertPathValidatorException$Reason
-class name java/security/cert/CertificateRevokedException
-class name java/security/cert/Extension
-class name java/security/cert/PKIXReason
class name java/security/cert/X509CRLEntry
-method name getRevocationReason descriptor ()Ljava/security/cert/CRLReason;
class name java/util/ArrayList
-method name removeAll descriptor (Ljava/util/Collection;)Z
-method name retainAll descriptor (Ljava/util/Collection;)Z
-method name listIterator descriptor (I)Ljava/util/ListIterator;
-method name listIterator descriptor ()Ljava/util/ListIterator;
-method name iterator descriptor ()Ljava/util/Iterator;
-method name subList descriptor (II)Ljava/util/List;
class name java/util/Arrays
-method name asList descriptor ([Ljava/lang/Object;)Ljava/util/List;
method name asList descriptor ([Ljava/lang/Object;)Ljava/util/List; flags 89 signature <T:Ljava/lang/Object;>([TT;)Ljava/util/List<TT;>;
class name java/util/BitSet
-method name valueOf descriptor ([J)Ljava/util/BitSet;
-method name valueOf descriptor (Ljava/nio/LongBuffer;)Ljava/util/BitSet;
-method name valueOf descriptor ([B)Ljava/util/BitSet;
-method name valueOf descriptor (Ljava/nio/ByteBuffer;)Ljava/util/BitSet;
-method name toByteArray descriptor ()[B
-method name toLongArray descriptor ()[J
-method name previousSetBit descriptor (I)I
-method name previousClearBit descriptor (I)I
class name java/util/Calendar
-method name isWeekDateSupported descriptor ()Z
-method name getWeekYear descriptor ()I
-method name setWeekDate descriptor (III)V
-method name getWeeksInWeekYear descriptor ()I
class name java/util/Collections
-method name emptyIterator descriptor ()Ljava/util/Iterator;
-method name emptyListIterator descriptor ()Ljava/util/ListIterator;
-method name emptyEnumeration descriptor ()Ljava/util/Enumeration;
-method name addAll descriptor (Ljava/util/Collection;[Ljava/lang/Object;)Z
method name addAll descriptor (Ljava/util/Collection;[Ljava/lang/Object;)Z flags 89 signature <T:Ljava/lang/Object;>(Ljava/util/Collection<-TT;>;[TT;)Z
class name java/util/ConcurrentModificationException
-method name <init> descriptor (Ljava/lang/Throwable;)V
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V
class name java/util/Currency
-method name getAvailableCurrencies descriptor ()Ljava/util/Set;
-method name getNumericCode descriptor ()I
-method name getDisplayName descriptor ()Ljava/lang/String;
-method name getDisplayName descriptor (Ljava/util/Locale;)Ljava/lang/String;
class name java/util/EnumMap
-method name hashCode descriptor ()I
class name java/util/EnumSet
-method name of descriptor (Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet;
method name of descriptor (Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet; flags 89 signature <E:Ljava/lang/Enum<TE;>;>(TE;[TE;)Ljava/util/EnumSet<TE;>;
class name java/util/EventListenerProxy
header extends java/lang/Object implements java/util/EventListener flags 421
-method name <init> descriptor (Ljava/util/EventListener;)V
-method name getListener descriptor ()Ljava/util/EventListener;
method name <init> descriptor (Ljava/util/EventListener;)V flags 1
method name getListener descriptor ()Ljava/util/EventListener; flags 1
class name java/util/GregorianCalendar
-method name isWeekDateSupported descriptor ()Z
-method name getWeekYear descriptor ()I
-method name setWeekDate descriptor (III)V
-method name getWeeksInWeekYear descriptor ()I
-class name java/util/IllformedLocaleException
class name java/util/Locale
header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 31
-field name PRIVATE_USE_EXTENSION descriptor C
-field name UNICODE_LOCALE_EXTENSION descriptor C
-method name getDefault descriptor (Ljava/util/Locale$Category;)Ljava/util/Locale;
-method name setDefault descriptor (Ljava/util/Locale$Category;Ljava/util/Locale;)V
-method name getScript descriptor ()Ljava/lang/String;
-method name getExtension descriptor (C)Ljava/lang/String;
-method name getExtensionKeys descriptor ()Ljava/util/Set;
-method name getUnicodeLocaleAttributes descriptor ()Ljava/util/Set;
-method name getUnicodeLocaleType descriptor (Ljava/lang/String;)Ljava/lang/String;
-method name getUnicodeLocaleKeys descriptor ()Ljava/util/Set;
-method name toLanguageTag descriptor ()Ljava/lang/String;
-method name forLanguageTag descriptor (Ljava/lang/String;)Ljava/util/Locale;
-method name getDisplayScript descriptor ()Ljava/lang/String;
-method name getDisplayScript descriptor (Ljava/util/Locale;)Ljava/lang/String;
-class name java/util/Locale$Builder
-class name java/util/Locale$Category
-class name java/util/Objects
class name java/util/Properties
-method name save descriptor (Ljava/io/OutputStream;Ljava/lang/String;)V
-method name storeToXML descriptor (Ljava/io/OutputStream;Ljava/lang/String;)V
-method name storeToXML descriptor (Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V
method name save descriptor (Ljava/io/OutputStream;Ljava/lang/String;)V flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;
method name storeToXML descriptor (Ljava/io/OutputStream;Ljava/lang/String;)V thrownTypes java/io/IOException flags 21
method name storeToXML descriptor (Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V thrownTypes java/io/IOException flags 21
class name java/util/Scanner
header extends java/lang/Object implements java/util/Iterator flags 31 signature Ljava/lang/Object;Ljava/util/Iterator<Ljava/lang/String;>;
-method name <init> descriptor (Ljava/nio/file/Path;)V
-method name <init> descriptor (Ljava/nio/file/Path;Ljava/lang/String;)V
class name java/util/SimpleTimeZone
-method name observesDaylightTime descriptor ()Z
class name java/util/TimeZone
-method name observesDaylightTime descriptor ()Z
class name java/util/Vector
-method name listIterator descriptor (I)Ljava/util/ListIterator;
-method name listIterator descriptor ()Ljava/util/ListIterator;
-method name iterator descriptor ()Ljava/util/Iterator;
-class name java/util/concurrent/ConcurrentLinkedDeque
class name java/util/concurrent/ConcurrentLinkedQueue
-method name addAll descriptor (Ljava/util/Collection;)Z
-class name java/util/concurrent/ForkJoinPool
-class name java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory
-class name java/util/concurrent/ForkJoinPool$ManagedBlocker
-class name java/util/concurrent/ForkJoinTask
-class name java/util/concurrent/ForkJoinWorkerThread
class name java/util/concurrent/LinkedBlockingQueue
-method name contains descriptor (Ljava/lang/Object;)Z
-class name java/util/concurrent/LinkedTransferQueue
-class name java/util/concurrent/Phaser
-class name java/util/concurrent/RecursiveAction
-class name java/util/concurrent/RecursiveTask
class name java/util/concurrent/ScheduledThreadPoolExecutor
-method name setRemoveOnCancelPolicy descriptor (Z)V
-method name getRemoveOnCancelPolicy descriptor ()Z
method name remove descriptor (Ljava/lang/Runnable;)Z flags 1
-class name java/util/concurrent/ThreadLocalRandom
class name java/util/concurrent/ThreadPoolExecutor
-method name toString descriptor ()Ljava/lang/String;
-class name java/util/concurrent/TransferQueue
class name java/util/concurrent/locks/AbstractQueuedLongSynchronizer
-method name hasQueuedPredecessors descriptor ()Z
class name java/util/concurrent/locks/AbstractQueuedSynchronizer
-method name hasQueuedPredecessors descriptor ()Z
class name java/util/regex/Matcher
-method name group descriptor (Ljava/lang/String;)Ljava/lang/String;
class name java/util/regex/Pattern
-field name UNICODE_CHARACTER_CLASS descriptor I
class name java/util/spi/CurrencyNameProvider
-method name getDisplayName descriptor (Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
class name java/util/spi/LocaleNameProvider
-method name getDisplayScript descriptor (Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
class name java/util/zip/Deflater
-field name NO_FLUSH descriptor I
-field name SYNC_FLUSH descriptor I
-field name FULL_FLUSH descriptor I
-method name setInput descriptor ([BII)V
-method name setDictionary descriptor ([BII)V
-method name setStrategy descriptor (I)V
-method name setLevel descriptor (I)V
-method name finish descriptor ()V
-method name finished descriptor ()Z
-method name deflate descriptor ([BII)I
-method name deflate descriptor ([BIII)I
-method name getAdler descriptor ()I
-method name getBytesRead descriptor ()J
-method name getBytesWritten descriptor ()J
-method name reset descriptor ()V
-method name end descriptor ()V
method name setInput descriptor ([BII)V flags 21
method name setDictionary descriptor ([BII)V flags 21
method name setStrategy descriptor (I)V flags 21
method name setLevel descriptor (I)V flags 21
method name finish descriptor ()V flags 21
method name finished descriptor ()Z flags 21
method name deflate descriptor ([BII)I flags 21
method name getAdler descriptor ()I flags 21
method name getBytesRead descriptor ()J flags 21
method name getBytesWritten descriptor ()J flags 21
method name reset descriptor ()V flags 21
method name end descriptor ()V flags 21
class name java/util/zip/DeflaterOutputStream
-method name <init> descriptor (Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V
-method name <init> descriptor (Ljava/io/OutputStream;Ljava/util/zip/Deflater;Z)V
-method name <init> descriptor (Ljava/io/OutputStream;Z)V
-method name flush descriptor ()V
class name java/util/zip/GZIPOutputStream
-method name <init> descriptor (Ljava/io/OutputStream;IZ)V
-method name <init> descriptor (Ljava/io/OutputStream;Z)V
class name java/util/zip/Inflater
-method name setInput descriptor ([BII)V
-method name setDictionary descriptor ([BII)V
-method name getRemaining descriptor ()I
-method name needsInput descriptor ()Z
-method name needsDictionary descriptor ()Z
-method name finished descriptor ()Z
-method name inflate descriptor ([BII)I
-method name getAdler descriptor ()I
-method name getBytesRead descriptor ()J
-method name getBytesWritten descriptor ()J
-method name reset descriptor ()V
-method name end descriptor ()V
method name setInput descriptor ([BII)V flags 21
method name setDictionary descriptor ([BII)V flags 21
method name getRemaining descriptor ()I flags 21
method name needsInput descriptor ()Z flags 21
method name needsDictionary descriptor ()Z flags 21
method name finished descriptor ()Z flags 21
method name inflate descriptor ([BII)I thrownTypes java/util/zip/DataFormatException flags 21
method name getAdler descriptor ()I flags 21
method name getBytesRead descriptor ()J flags 21
method name getBytesWritten descriptor ()J flags 21
method name reset descriptor ()V flags 21
method name end descriptor ()V flags 21
class name java/util/zip/ZipFile
header extends java/lang/Object implements java/util/zip/ZipConstants flags 21
-method name <init> descriptor (Ljava/io/File;ILjava/nio/charset/Charset;)V
-method name <init> descriptor (Ljava/lang/String;Ljava/nio/charset/Charset;)V
-method name <init> descriptor (Ljava/io/File;Ljava/nio/charset/Charset;)V
-method name getComment descriptor ()Ljava/lang/String;
class name java/util/zip/ZipInputStream
-method name <init> descriptor (Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
class name java/util/zip/ZipOutputStream
-method name <init> descriptor (Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V
-class name javax/crypto/AEADBadTagException
class name javax/crypto/Cipher
-method name updateAAD descriptor ([B)V
-method name updateAAD descriptor ([BII)V
-method name updateAAD descriptor (Ljava/nio/ByteBuffer;)V
class name javax/crypto/CipherSpi
-method name engineUpdateAAD descriptor ([BII)V
-method name engineUpdateAAD descriptor (Ljava/nio/ByteBuffer;)V
-class name javax/crypto/spec/GCMParameterSpec
-class name javax/net/ssl/ExtendedSSLSession
class name javax/net/ssl/SSLEngine
-method name getHandshakeSession descriptor ()Ljavax/net/ssl/SSLSession;
class name javax/net/ssl/SSLEngineResult
header extends java/lang/Object flags 21
innerclass innerClass javax/net/ssl/SSLEngineResult$HandshakeStatus outerClass javax/net/ssl/SSLEngineResult innerClassName HandshakeStatus flags 4019
innerclass innerClass javax/net/ssl/SSLEngineResult$Status outerClass javax/net/ssl/SSLEngineResult innerClassName Status flags 4019
class name javax/net/ssl/SSLParameters
-method name getAlgorithmConstraints descriptor ()Ljava/security/AlgorithmConstraints;
-method name setAlgorithmConstraints descriptor (Ljava/security/AlgorithmConstraints;)V
-method name getEndpointIdentificationAlgorithm descriptor ()Ljava/lang/String;
-method name setEndpointIdentificationAlgorithm descriptor (Ljava/lang/String;)V
class name javax/net/ssl/SSLServerSocket
-method name getSSLParameters descriptor ()Ljavax/net/ssl/SSLParameters;
-method name setSSLParameters descriptor (Ljavax/net/ssl/SSLParameters;)V
class name javax/net/ssl/SSLSocket
-method name getHandshakeSession descriptor ()Ljavax/net/ssl/SSLSession;
-class name javax/net/ssl/X509ExtendedTrustManager
class name javax/security/auth/login/Configuration
-method name getConfiguration descriptor ()Ljavax/security/auth/login/Configuration;
method name getConfiguration descriptor ()Ljavax/security/auth/login/Configuration; flags 29

View file

@ -1,102 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name javax/lang/model/SourceVersion
-field name RELEASE_7 descriptor Ljavax/lang/model/SourceVersion;
-class name javax/lang/model/UnknownEntityException
class name javax/lang/model/element/ElementKind
-field name RESOURCE_VARIABLE descriptor Ljavax/lang/model/element/ElementKind;
class name javax/lang/model/element/ExecutableElement
header extends java/lang/Object implements javax/lang/model/element/Element flags 601
-method name getSimpleName descriptor ()Ljavax/lang/model/element/Name;
class name javax/lang/model/element/PackageElement
header extends java/lang/Object implements javax/lang/model/element/Element flags 601
-method name getSimpleName descriptor ()Ljavax/lang/model/element/Name;
-method name getEnclosingElement descriptor ()Ljavax/lang/model/element/Element;
-class name javax/lang/model/element/Parameterizable
-class name javax/lang/model/element/QualifiedNameable
class name javax/lang/model/element/TypeElement
header extends java/lang/Object implements javax/lang/model/element/Element flags 601
-method name getEnclosedElements descriptor ()Ljava/util/List;
-method name getSimpleName descriptor ()Ljavax/lang/model/element/Name;
-method name getEnclosingElement descriptor ()Ljavax/lang/model/element/Element;
class name javax/lang/model/element/TypeParameterElement
-method name getEnclosingElement descriptor ()Ljavax/lang/model/element/Element;
class name javax/lang/model/element/UnknownAnnotationValueException
header extends java/lang/RuntimeException flags 21
class name javax/lang/model/element/UnknownElementException
header extends java/lang/RuntimeException flags 21
class name javax/lang/model/type/MirroredTypeException
header extends java/lang/RuntimeException flags 21
class name javax/lang/model/type/TypeKind
-field name UNION descriptor Ljavax/lang/model/type/TypeKind;
class name javax/lang/model/type/TypeVisitor
-method name visitUnion descriptor (Ljavax/lang/model/type/UnionType;Ljava/lang/Object;)Ljava/lang/Object;
-class name javax/lang/model/type/UnionType
class name javax/lang/model/type/UnknownTypeException
header extends java/lang/RuntimeException flags 21
-class name javax/lang/model/util/AbstractAnnotationValueVisitor7
-class name javax/lang/model/util/AbstractElementVisitor7
class name javax/lang/model/util/AbstractTypeVisitor6
-method name visitUnion descriptor (Ljavax/lang/model/type/UnionType;Ljava/lang/Object;)Ljava/lang/Object;
-class name javax/lang/model/util/AbstractTypeVisitor7
class name javax/lang/model/util/ElementKindVisitor6
-method name visitVariableAsResourceVariable descriptor (Ljavax/lang/model/element/VariableElement;Ljava/lang/Object;)Ljava/lang/Object;
-class name javax/lang/model/util/ElementKindVisitor7
-class name javax/lang/model/util/ElementScanner7
-class name javax/lang/model/util/SimpleAnnotationValueVisitor7
-class name javax/lang/model/util/SimpleElementVisitor7
-class name javax/lang/model/util/SimpleTypeVisitor7
-class name javax/lang/model/util/TypeKindVisitor7

File diff suppressed because it is too large Load diff

View file

@ -1,49 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name java/util/logging/Logger
-method name getGlobal descriptor ()Ljava/util/logging/Logger;
-method name getAnonymousLogger descriptor ()Ljava/util/logging/Logger;
-method name addHandler descriptor (Ljava/util/logging/Handler;)V
-method name removeHandler descriptor (Ljava/util/logging/Handler;)V
-method name getHandlers descriptor ()[Ljava/util/logging/Handler;
-method name setUseParentHandlers descriptor (Z)V
-method name getUseParentHandlers descriptor ()Z
-method name getLogger descriptor (Ljava/lang/String;)Ljava/util/logging/Logger;
-method name getLogger descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;
-method name getAnonymousLogger descriptor (Ljava/lang/String;)Ljava/util/logging/Logger;
method name getLogger descriptor (Ljava/lang/String;)Ljava/util/logging/Logger; flags 29
method name getLogger descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger; flags 29
method name getAnonymousLogger descriptor ()Ljava/util/logging/Logger; flags 29
method name getAnonymousLogger descriptor (Ljava/lang/String;)Ljava/util/logging/Logger; flags 29
method name addHandler descriptor (Ljava/util/logging/Handler;)V thrownTypes java/lang/SecurityException flags 21
method name removeHandler descriptor (Ljava/util/logging/Handler;)V thrownTypes java/lang/SecurityException flags 21
method name getHandlers descriptor ()[Ljava/util/logging/Handler; flags 21
method name setUseParentHandlers descriptor (Z)V flags 21
method name getUseParentHandlers descriptor ()Z flags 21

View file

@ -1,122 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
-class name java/lang/management/BufferPoolMXBean
class name java/lang/management/ClassLoadingMXBean
header extends java/lang/Object flags 601
class name java/lang/management/CompilationMXBean
header extends java/lang/Object flags 601
class name java/lang/management/ManagementFactory
-method name getPlatformMXBean descriptor (Ljava/lang/Class;)Ljava/lang/management/PlatformManagedObject;
-method name getPlatformMXBeans descriptor (Ljava/lang/Class;)Ljava/util/List;
-method name getPlatformMXBean descriptor (Ljavax/management/MBeanServerConnection;Ljava/lang/Class;)Ljava/lang/management/PlatformManagedObject;
-method name getPlatformMXBeans descriptor (Ljavax/management/MBeanServerConnection;Ljava/lang/Class;)Ljava/util/List;
-method name getPlatformManagementInterfaces descriptor ()Ljava/util/Set;
class name java/lang/management/MemoryMXBean
header extends java/lang/Object flags 601
class name java/lang/management/MemoryManagerMXBean
header extends java/lang/Object flags 601
class name java/lang/management/MemoryPoolMXBean
header extends java/lang/Object flags 601
class name java/lang/management/OperatingSystemMXBean
header extends java/lang/Object flags 601
-class name java/lang/management/PlatformLoggingMXBean
-class name java/lang/management/PlatformManagedObject
class name java/lang/management/RuntimeMXBean
header extends java/lang/Object flags 601
class name java/lang/management/ThreadMXBean
header extends java/lang/Object flags 601
class name javax/management/AttributeValueExp
-method name setMBeanServer descriptor (Ljavax/management/MBeanServer;)V
method name setMBeanServer descriptor (Ljavax/management/MBeanServer;)V flags 1
class name javax/management/DefaultLoaderRepository
-method name loadClass descriptor (Ljava/lang/String;)Ljava/lang/Class;
-method name loadClassWithout descriptor (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;
method name loadClass descriptor (Ljava/lang/String;)Ljava/lang/Class; thrownTypes java/lang/ClassNotFoundException flags 9
method name loadClassWithout descriptor (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class; thrownTypes java/lang/ClassNotFoundException flags 9
class name javax/management/MBeanConstructorInfo
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/reflect/Constructor;)V
method name <init> descriptor (Ljava/lang/String;Ljava/lang/reflect/Constructor;)V flags 1
class name javax/management/MBeanServerNotification
-method name toString descriptor ()Ljava/lang/String;
class name javax/management/ObjectName
-method name getInstance descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljavax/management/ObjectName;
-method name getInstance descriptor (Ljava/lang/String;Ljava/util/Hashtable;)Ljavax/management/ObjectName;
-method name getInstance descriptor (Ljavax/management/ObjectName;)Ljavax/management/ObjectName;
-method name <init> descriptor (Ljava/lang/String;)V
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-method name <init> descriptor (Ljava/lang/String;Ljava/util/Hashtable;)V
-method name isPropertyValuePattern descriptor (Ljava/lang/String;)Z
-method name getKeyProperty descriptor (Ljava/lang/String;)Ljava/lang/String;
-method name quote descriptor (Ljava/lang/String;)Ljava/lang/String;
-method name unquote descriptor (Ljava/lang/String;)Ljava/lang/String;
-method name apply descriptor (Ljavax/management/ObjectName;)Z
method name getInstance descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljavax/management/ObjectName; thrownTypes javax/management/MalformedObjectNameException,java/lang/NullPointerException flags 9
method name getInstance descriptor (Ljava/lang/String;Ljava/util/Hashtable;)Ljavax/management/ObjectName; thrownTypes javax/management/MalformedObjectNameException,java/lang/NullPointerException flags 9 signature (Ljava/lang/String;Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)Ljavax/management/ObjectName;
method name getInstance descriptor (Ljavax/management/ObjectName;)Ljavax/management/ObjectName; thrownTypes java/lang/NullPointerException flags 9
method name <init> descriptor (Ljava/lang/String;)V thrownTypes javax/management/MalformedObjectNameException,java/lang/NullPointerException flags 1
method name <init> descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V thrownTypes javax/management/MalformedObjectNameException,java/lang/NullPointerException flags 1
method name <init> descriptor (Ljava/lang/String;Ljava/util/Hashtable;)V thrownTypes javax/management/MalformedObjectNameException,java/lang/NullPointerException flags 1 signature (Ljava/lang/String;Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V
method name isPropertyValuePattern descriptor (Ljava/lang/String;)Z thrownTypes java/lang/NullPointerException,java/lang/IllegalArgumentException flags 1
method name getKeyProperty descriptor (Ljava/lang/String;)Ljava/lang/String; thrownTypes java/lang/NullPointerException flags 1
method name quote descriptor (Ljava/lang/String;)Ljava/lang/String; thrownTypes java/lang/NullPointerException flags 9
method name unquote descriptor (Ljava/lang/String;)Ljava/lang/String; thrownTypes java/lang/IllegalArgumentException,java/lang/NullPointerException flags 9
method name apply descriptor (Ljavax/management/ObjectName;)Z thrownTypes java/lang/NullPointerException flags 1
class name javax/management/StringValueExp
-method name setMBeanServer descriptor (Ljavax/management/MBeanServer;)V
method name setMBeanServer descriptor (Ljavax/management/MBeanServer;)V flags 1
class name javax/management/loading/DefaultLoaderRepository
-method name loadClass descriptor (Ljava/lang/String;)Ljava/lang/Class;
-method name loadClassWithout descriptor (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;
method name loadClass descriptor (Ljava/lang/String;)Ljava/lang/Class; thrownTypes java/lang/ClassNotFoundException flags 9
method name loadClassWithout descriptor (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class; thrownTypes java/lang/ClassNotFoundException flags 9
class name javax/management/modelmbean/ModelMBeanConstructorInfo
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/reflect/Constructor;)V
-method name <init> descriptor (Ljava/lang/String;Ljava/lang/reflect/Constructor;Ljavax/management/Descriptor;)V
method name <init> descriptor (Ljava/lang/String;Ljava/lang/reflect/Constructor;)V flags 1
method name <init> descriptor (Ljava/lang/String;Ljava/lang/reflect/Constructor;Ljavax/management/Descriptor;)V flags 1

View file

@ -1,31 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name javax/rmi/ssl/SslRMIServerSocketFactory
-method name <init> descriptor (Ljavax/net/ssl/SSLContext;[Ljava/lang/String;[Ljava/lang/String;Z)V

View file

@ -1,30 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
-class name javax/security/auth/kerberos/KeyTab

View file

@ -1,65 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name java/sql/CallableStatement
-method name getObject descriptor (ILjava/lang/Class;)Ljava/lang/Object;
-method name getObject descriptor (Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
class name java/sql/Connection
header extends java/lang/Object implements java/sql/Wrapper flags 601
-method name setSchema descriptor (Ljava/lang/String;)V
-method name getSchema descriptor ()Ljava/lang/String;
-method name abort descriptor (Ljava/util/concurrent/Executor;)V
-method name setNetworkTimeout descriptor (Ljava/util/concurrent/Executor;I)V
-method name getNetworkTimeout descriptor ()I
class name java/sql/DatabaseMetaData
-method name getPseudoColumns descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;
-method name generatedKeyAlwaysReturned descriptor ()Z
class name java/sql/Driver
-method name getParentLogger descriptor ()Ljava/util/logging/Logger;
-class name java/sql/PseudoColumnUsage
class name java/sql/ResultSet
header extends java/lang/Object implements java/sql/Wrapper flags 601
-method name getObject descriptor (ILjava/lang/Class;)Ljava/lang/Object;
-method name getObject descriptor (Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
class name java/sql/Statement
header extends java/lang/Object implements java/sql/Wrapper flags 601
-method name closeOnCompletion descriptor ()V
-method name isCloseOnCompletion descriptor ()Z
class name java/sql/Timestamp
-method name hashCode descriptor ()I
class name javax/sql/CommonDataSource
-method name getParentLogger descriptor ()Ljava/util/logging/Logger;

View file

@ -1,74 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name javax/sql/rowset/CachedRowSet
-field name COMMIT_ON_ACCEPT_CHANGES descriptor Z
field name COMMIT_ON_ACCEPT_CHANGES descriptor Z constantValue true flags 19
-class name javax/sql/rowset/RowSetFactory
-class name javax/sql/rowset/RowSetProvider
class name javax/sql/rowset/WebRowSet
-field name PUBLIC_XML_SCHEMA descriptor Ljava/lang/String;
field name PUBLIC_XML_SCHEMA descriptor Ljava/lang/String; constantValue --//Sun\u0020;Microsystems,\u0020;Inc.//XSD\u0020;Schema//EN flags 19
class name javax/sql/rowset/spi/SyncFactory
-field name ROWSET_SYNC_PROVIDER descriptor Ljava/lang/String;
-field name ROWSET_SYNC_VENDOR descriptor Ljava/lang/String;
-field name ROWSET_SYNC_PROVIDER_VERSION descriptor Ljava/lang/String;
field name ROWSET_SYNC_PROVIDER descriptor Ljava/lang/String; flags 9
field name ROWSET_SYNC_VENDOR descriptor Ljava/lang/String; flags 9
field name ROWSET_SYNC_PROVIDER_VERSION descriptor Ljava/lang/String; flags 9
-method name setJNDIContext descriptor (Ljavax/naming/Context;)V
method name setJNDIContext descriptor (Ljavax/naming/Context;)V thrownTypes javax/sql/rowset/spi/SyncFactoryException flags 9
class name javax/sql/rowset/spi/SyncProvider
-field name GRADE_NONE descriptor I
-field name GRADE_CHECK_MODIFIED_AT_COMMIT descriptor I
-field name GRADE_CHECK_ALL_AT_COMMIT descriptor I
-field name GRADE_LOCK_WHEN_MODIFIED descriptor I
-field name GRADE_LOCK_WHEN_LOADED descriptor I
-field name DATASOURCE_NO_LOCK descriptor I
-field name DATASOURCE_ROW_LOCK descriptor I
-field name DATASOURCE_TABLE_LOCK descriptor I
-field name DATASOURCE_DB_LOCK descriptor I
-field name UPDATABLE_VIEW_SYNC descriptor I
-field name NONUPDATABLE_VIEW_SYNC descriptor I
field name GRADE_NONE descriptor I flags 9
field name GRADE_CHECK_MODIFIED_AT_COMMIT descriptor I flags 9
field name GRADE_CHECK_ALL_AT_COMMIT descriptor I flags 9
field name GRADE_LOCK_WHEN_MODIFIED descriptor I flags 9
field name GRADE_LOCK_WHEN_LOADED descriptor I flags 9
field name DATASOURCE_NO_LOCK descriptor I flags 9
field name DATASOURCE_ROW_LOCK descriptor I flags 9
field name DATASOURCE_TABLE_LOCK descriptor I flags 9
field name DATASOURCE_DB_LOCK descriptor I flags 9
field name UPDATABLE_VIEW_SYNC descriptor I flags 9
field name NONUPDATABLE_VIEW_SYNC descriptor I flags 9

View file

@ -1,61 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name javax/xml/parsers/FactoryConfigurationError
-method name getCause descriptor ()Ljava/lang/Throwable;
class name javax/xml/stream/FactoryConfigurationError
-method name getCause descriptor ()Ljava/lang/Throwable;
class name javax/xml/stream/XMLEventFactory
-method name newFactory descriptor ()Ljavax/xml/stream/XMLEventFactory;
-method name newInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLEventFactory;
-method name newFactory descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLEventFactory;
method name newInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLEventFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
class name javax/xml/stream/XMLInputFactory
-method name newFactory descriptor ()Ljavax/xml/stream/XMLInputFactory;
-method name newInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLInputFactory;
-method name newFactory descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLInputFactory;
method name newInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
class name javax/xml/stream/XMLOutputFactory
-method name newFactory descriptor ()Ljavax/xml/stream/XMLOutputFactory;
-method name newInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLInputFactory;
-method name newFactory descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLOutputFactory;
method name newInstance descriptor (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/stream/XMLInputFactory; thrownTypes javax/xml/stream/FactoryConfigurationError flags 9
class name javax/xml/transform/TransformerFactoryConfigurationError
-method name getCause descriptor ()Ljava/lang/Throwable;
class name org/xml/sax/SAXException
-method name getCause descriptor ()Ljava/lang/Throwable;
class name org/xml/sax/SAXParseException
-method name toString descriptor ()Ljava/lang/String;

View file

@ -1,37 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
-class name javax/xml/bind/JAXBPermission
class name javax/xml/bind/annotation/XmlElement
header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;METHOD;})
innerclass innerClass javax/xml/bind/annotation/XmlElement$DEFAULT outerClass javax/xml/bind/annotation/XmlElement innerClassName DEFAULT flags 19
class name javax/xml/bind/annotation/XmlElementRef
-method name required descriptor ()Z

View file

@ -1,103 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name javax/xml/ws/Endpoint
-method name create descriptor (Ljava/lang/Object;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Endpoint;
-method name create descriptor (Ljava/lang/String;Ljava/lang/Object;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Endpoint;
-method name publish descriptor (Ljava/lang/String;Ljava/lang/Object;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Endpoint;
-method name publish descriptor (Ljavax/xml/ws/spi/http/HttpContext;)V
-method name setEndpointContext descriptor (Ljavax/xml/ws/EndpointContext;)V
-class name javax/xml/ws/EndpointContext
class name javax/xml/ws/FaultAction
-method name className descriptor ()Ljava/lang/Class;
method name className descriptor ()Ljava/lang/Class; flags 401
class name javax/xml/ws/Holder
header extends java/lang/Object flags 31 signature <T:Ljava/lang/Object;>Ljava/lang/Object;
class name javax/xml/ws/RequestWrapper
-method name partName descriptor ()Ljava/lang/String;
class name javax/xml/ws/RespectBinding
header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Documented;@Ljavax/xml/ws/spi/WebServiceFeatureAnnotation;(id="javax.xml.ws.RespectBindingFeature",bean=cLjavax/xml/ws/RespectBindingFeature;)
class name javax/xml/ws/ResponseWrapper
-method name partName descriptor ()Ljava/lang/String;
class name javax/xml/ws/Service
-method name <init> descriptor (Ljava/net/URL;Ljavax/xml/namespace/QName;[Ljavax/xml/ws/WebServiceFeature;)V
-method name create descriptor (Ljava/net/URL;Ljavax/xml/namespace/QName;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Service;
-method name create descriptor (Ljavax/xml/namespace/QName;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Service;
class name javax/xml/ws/WebFault
-method name messageName descriptor ()Ljava/lang/String;
class name javax/xml/ws/WebServiceRef
-method name type descriptor ()Ljava/lang/Class;
-method name value descriptor ()Ljava/lang/Class;
-method name lookup descriptor ()Ljava/lang/String;
method name type descriptor ()Ljava/lang/Class; annotationDefaultValue cLjava/lang/Object; flags 401
method name value descriptor ()Ljava/lang/Class; annotationDefaultValue cLjava/lang/Object; flags 401
class name javax/xml/ws/soap/Addressing
header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Documented;@Ljavax/xml/ws/spi/WebServiceFeatureAnnotation;(id="http://www.w3.org/2005/08/addressing/module",bean=cLjavax/xml/ws/soap/AddressingFeature;)
-method name responses descriptor ()Ljavax/xml/ws/soap/AddressingFeature$Responses;
class name javax/xml/ws/soap/AddressingFeature
header extends javax/xml/ws/WebServiceFeature flags 31
-method name <init> descriptor (ZZLjavax/xml/ws/soap/AddressingFeature$Responses;)V
-method name getResponses descriptor ()Ljavax/xml/ws/soap/AddressingFeature$Responses;
-class name javax/xml/ws/soap/AddressingFeature$Responses
class name javax/xml/ws/soap/MTOM
header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Documented;@Ljavax/xml/ws/spi/WebServiceFeatureAnnotation;(id="http://www.w3.org/2004/08/soap/features/http-optimization",bean=cLjavax/xml/ws/soap/MTOMFeature;)
-class name javax/xml/ws/spi/Invoker
class name javax/xml/ws/spi/Provider
-method name createServiceDelegate descriptor (Ljava/net/URL;Ljavax/xml/namespace/QName;Ljava/lang/Class;)Ljavax/xml/ws/spi/ServiceDelegate;
-method name createServiceDelegate descriptor (Ljava/net/URL;Ljavax/xml/namespace/QName;Ljava/lang/Class;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/spi/ServiceDelegate;
-method name createW3CEndpointReference descriptor (Ljava/lang/String;Ljavax/xml/namespace/QName;Ljavax/xml/namespace/QName;Ljavax/xml/namespace/QName;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/Map;)Ljavax/xml/ws/wsaddressing/W3CEndpointReference;
-method name createAndPublishEndpoint descriptor (Ljava/lang/String;Ljava/lang/Object;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Endpoint;
-method name createEndpoint descriptor (Ljava/lang/String;Ljava/lang/Object;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Endpoint;
-method name createEndpoint descriptor (Ljava/lang/String;Ljava/lang/Class;Ljavax/xml/ws/spi/Invoker;[Ljavax/xml/ws/WebServiceFeature;)Ljavax/xml/ws/Endpoint;
method name createServiceDelegate descriptor (Ljava/net/URL;Ljavax/xml/namespace/QName;Ljava/lang/Class;)Ljavax/xml/ws/spi/ServiceDelegate; flags 401
-class name javax/xml/ws/spi/http/HttpContext
-class name javax/xml/ws/spi/http/HttpExchange
-class name javax/xml/ws/spi/http/HttpHandler
-class name javax/xml/ws/wsaddressing/W3CEndpointReference
-class name javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder

View file

@ -1,31 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
class name javax/annotation/Resource
-method name lookup descriptor ()Ljava/lang/String;

View file

@ -1,39 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
-class name com/sun/management/GarbageCollectionNotificationInfo
class name com/sun/management/HotSpotDiagnosticMXBean
header extends java/lang/Object flags 601
class name com/sun/management/OperatingSystemMXBean
-method name getSystemCpuLoad descriptor ()D
-method name getProcessCpuLoad descriptor ()D
-class name com/sun/management/ThreadMXBean

View file

@ -1,70 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
-class name com/sun/nio/sctp/AbstractNotificationHandler
-class name com/sun/nio/sctp/Association
-class name com/sun/nio/sctp/AssociationChangeNotification
-class name com/sun/nio/sctp/AssociationChangeNotification$AssocChangeEvent
-class name com/sun/nio/sctp/HandlerResult
-class name com/sun/nio/sctp/IllegalReceiveException
-class name com/sun/nio/sctp/IllegalUnbindException
-class name com/sun/nio/sctp/InvalidStreamException
-class name com/sun/nio/sctp/MessageInfo
-class name com/sun/nio/sctp/Notification
-class name com/sun/nio/sctp/NotificationHandler
-class name com/sun/nio/sctp/PeerAddressChangeNotification
-class name com/sun/nio/sctp/PeerAddressChangeNotification$AddressChangeEvent
-class name com/sun/nio/sctp/SctpChannel
-class name com/sun/nio/sctp/SctpMultiChannel
-class name com/sun/nio/sctp/SctpServerChannel
-class name com/sun/nio/sctp/SctpSocketOption
-class name com/sun/nio/sctp/SctpStandardSocketOptions
-class name com/sun/nio/sctp/SctpStandardSocketOptions$InitMaxStreams
-class name com/sun/nio/sctp/SendFailedNotification
-class name com/sun/nio/sctp/ShutdownNotification

View file

@ -1,36 +0,0 @@
#
# Copyright (c) 2015, 2017, 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.
#
# ##########################################################
# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
# ##########################################################
#
-class name com/sun/security/jgss/AuthorizationDataEntry
-class name com/sun/security/jgss/ExtendedGSSContext
-class name com/sun/security/jgss/InquireSecContextPermission
-class name com/sun/security/jgss/InquireType

View file

@ -29,9 +29,8 @@
#command used to generate this file: #command used to generate this file:
#build.tools.symbolgenerator.CreateSymbols build-description-incremental symbols include.list #build.tools.symbolgenerator.CreateSymbols build-description-incremental symbols include.list
# #
generate platforms 6:7:8:9:A generate platforms 7:8:9:A
platform version 8 files java.activation-8.sym.txt:java.base-8.sym.txt:java.compiler-8.sym.txt:java.corba-8.sym.txt:java.datatransfer-8.sym.txt:java.desktop-8.sym.txt:java.instrument-8.sym.txt:java.logging-8.sym.txt:java.management-8.sym.txt:java.management.rmi-8.sym.txt:java.naming-8.sym.txt:java.prefs-8.sym.txt:java.rmi-8.sym.txt:java.scripting-8.sym.txt:java.security.jgss-8.sym.txt:java.security.sasl-8.sym.txt:java.sql-8.sym.txt:java.sql.rowset-8.sym.txt:java.transaction-8.sym.txt:java.xml-8.sym.txt:java.xml.bind-8.sym.txt:java.xml.crypto-8.sym.txt:java.xml.ws-8.sym.txt:java.xml.ws.annotation-8.sym.txt:jdk.httpserver-8.sym.txt:jdk.management-8.sym.txt:jdk.scripting.nashorn-8.sym.txt:jdk.sctp-8.sym.txt:jdk.security.auth-8.sym.txt:jdk.security.jgss-8.sym.txt platform version 8 files java.activation-8.sym.txt:java.base-8.sym.txt:java.compiler-8.sym.txt:java.corba-8.sym.txt:java.datatransfer-8.sym.txt:java.desktop-8.sym.txt:java.instrument-8.sym.txt:java.logging-8.sym.txt:java.management-8.sym.txt:java.management.rmi-8.sym.txt:java.naming-8.sym.txt:java.prefs-8.sym.txt:java.rmi-8.sym.txt:java.scripting-8.sym.txt:java.security.jgss-8.sym.txt:java.security.sasl-8.sym.txt:java.sql-8.sym.txt:java.sql.rowset-8.sym.txt:java.transaction-8.sym.txt:java.xml-8.sym.txt:java.xml.bind-8.sym.txt:java.xml.crypto-8.sym.txt:java.xml.ws-8.sym.txt:java.xml.ws.annotation-8.sym.txt:jdk.httpserver-8.sym.txt:jdk.management-8.sym.txt:jdk.scripting.nashorn-8.sym.txt:jdk.sctp-8.sym.txt:jdk.security.auth-8.sym.txt:jdk.security.jgss-8.sym.txt
platform version 7 base 8 files java.base-7.sym.txt:java.compiler-7.sym.txt:java.datatransfer-7.sym.txt:java.desktop-7.sym.txt:java.logging-7.sym.txt:java.management-7.sym.txt:java.naming-7.sym.txt:java.prefs-7.sym.txt:java.rmi-7.sym.txt:java.scripting-7.sym.txt:java.security.jgss-7.sym.txt:java.security.sasl-7.sym.txt:java.sql-7.sym.txt:java.sql.rowset-7.sym.txt:java.xml-7.sym.txt:java.xml.bind-7.sym.txt:java.xml.ws.annotation-7.sym.txt:jdk.httpserver-7.sym.txt:jdk.management-7.sym.txt:jdk.scripting.nashorn-7.sym.txt:jdk.sctp-7.sym.txt:jdk.security.auth-7.sym.txt:jdk.security.jgss-7.sym.txt platform version 7 base 8 files java.base-7.sym.txt:java.compiler-7.sym.txt:java.datatransfer-7.sym.txt:java.desktop-7.sym.txt:java.logging-7.sym.txt:java.management-7.sym.txt:java.naming-7.sym.txt:java.prefs-7.sym.txt:java.rmi-7.sym.txt:java.scripting-7.sym.txt:java.security.jgss-7.sym.txt:java.security.sasl-7.sym.txt:java.sql-7.sym.txt:java.sql.rowset-7.sym.txt:java.xml-7.sym.txt:java.xml.bind-7.sym.txt:java.xml.ws.annotation-7.sym.txt:jdk.httpserver-7.sym.txt:jdk.management-7.sym.txt:jdk.scripting.nashorn-7.sym.txt:jdk.sctp-7.sym.txt:jdk.security.auth-7.sym.txt:jdk.security.jgss-7.sym.txt
platform version 6 base 7 files java.base-6.sym.txt:java.compiler-6.sym.txt:java.desktop-6.sym.txt:java.logging-6.sym.txt:java.management-6.sym.txt:java.rmi-6.sym.txt:java.security.jgss-6.sym.txt:java.sql-6.sym.txt:java.sql.rowset-6.sym.txt:java.xml-6.sym.txt:java.xml.bind-6.sym.txt:java.xml.ws-6.sym.txt:java.xml.ws.annotation-6.sym.txt:jdk.management-6.sym.txt:jdk.sctp-6.sym.txt:jdk.security.jgss-6.sym.txt
platform version 9 base 8 files java.activation-9.sym.txt:java.base-9.sym.txt:java.compiler-9.sym.txt:java.corba-9.sym.txt:java.datatransfer-9.sym.txt:java.desktop-9.sym.txt:java.instrument-9.sym.txt:java.logging-9.sym.txt:java.management-9.sym.txt:java.management.rmi-9.sym.txt:java.naming-9.sym.txt:java.prefs-9.sym.txt:java.rmi-9.sym.txt:java.scripting-9.sym.txt:java.se-9.sym.txt:java.se.ee-9.sym.txt:java.security.jgss-9.sym.txt:java.security.sasl-9.sym.txt:java.smartcardio-9.sym.txt:java.sql-9.sym.txt:java.sql.rowset-9.sym.txt:java.transaction-9.sym.txt:java.xml-9.sym.txt:java.xml.bind-9.sym.txt:java.xml.crypto-9.sym.txt:java.xml.ws-9.sym.txt:java.xml.ws.annotation-9.sym.txt:jdk.accessibility-9.sym.txt:jdk.attach-9.sym.txt:jdk.charsets-9.sym.txt:jdk.compiler-9.sym.txt:jdk.crypto.cryptoki-9.sym.txt:jdk.crypto.ec-9.sym.txt:jdk.dynalink-9.sym.txt:jdk.editpad-9.sym.txt:jdk.hotspot.agent-9.sym.txt:jdk.httpserver-9.sym.txt:jdk.incubator.httpclient-9.sym.txt:jdk.jartool-9.sym.txt:jdk.javadoc-9.sym.txt:jdk.jcmd-9.sym.txt:jdk.jconsole-9.sym.txt:jdk.jdeps-9.sym.txt:jdk.jdi-9.sym.txt:jdk.jdwp.agent-9.sym.txt:jdk.jlink-9.sym.txt:jdk.jshell-9.sym.txt:jdk.jsobject-9.sym.txt:jdk.jstatd-9.sym.txt:jdk.localedata-9.sym.txt:jdk.management-9.sym.txt:jdk.management.agent-9.sym.txt:jdk.naming.dns-9.sym.txt:jdk.naming.rmi-9.sym.txt:jdk.net-9.sym.txt:jdk.pack-9.sym.txt:jdk.policytool-9.sym.txt:jdk.rmic-9.sym.txt:jdk.scripting.nashorn-9.sym.txt:jdk.sctp-9.sym.txt:jdk.security.auth-9.sym.txt:jdk.security.jgss-9.sym.txt:jdk.unsupported-9.sym.txt:jdk.xml.dom-9.sym.txt:jdk.zipfs-9.sym.txt platform version 9 base 8 files java.activation-9.sym.txt:java.base-9.sym.txt:java.compiler-9.sym.txt:java.corba-9.sym.txt:java.datatransfer-9.sym.txt:java.desktop-9.sym.txt:java.instrument-9.sym.txt:java.logging-9.sym.txt:java.management-9.sym.txt:java.management.rmi-9.sym.txt:java.naming-9.sym.txt:java.prefs-9.sym.txt:java.rmi-9.sym.txt:java.scripting-9.sym.txt:java.se-9.sym.txt:java.se.ee-9.sym.txt:java.security.jgss-9.sym.txt:java.security.sasl-9.sym.txt:java.smartcardio-9.sym.txt:java.sql-9.sym.txt:java.sql.rowset-9.sym.txt:java.transaction-9.sym.txt:java.xml-9.sym.txt:java.xml.bind-9.sym.txt:java.xml.crypto-9.sym.txt:java.xml.ws-9.sym.txt:java.xml.ws.annotation-9.sym.txt:jdk.accessibility-9.sym.txt:jdk.attach-9.sym.txt:jdk.charsets-9.sym.txt:jdk.compiler-9.sym.txt:jdk.crypto.cryptoki-9.sym.txt:jdk.crypto.ec-9.sym.txt:jdk.dynalink-9.sym.txt:jdk.editpad-9.sym.txt:jdk.hotspot.agent-9.sym.txt:jdk.httpserver-9.sym.txt:jdk.incubator.httpclient-9.sym.txt:jdk.jartool-9.sym.txt:jdk.javadoc-9.sym.txt:jdk.jcmd-9.sym.txt:jdk.jconsole-9.sym.txt:jdk.jdeps-9.sym.txt:jdk.jdi-9.sym.txt:jdk.jdwp.agent-9.sym.txt:jdk.jlink-9.sym.txt:jdk.jshell-9.sym.txt:jdk.jsobject-9.sym.txt:jdk.jstatd-9.sym.txt:jdk.localedata-9.sym.txt:jdk.management-9.sym.txt:jdk.management.agent-9.sym.txt:jdk.naming.dns-9.sym.txt:jdk.naming.rmi-9.sym.txt:jdk.net-9.sym.txt:jdk.pack-9.sym.txt:jdk.policytool-9.sym.txt:jdk.rmic-9.sym.txt:jdk.scripting.nashorn-9.sym.txt:jdk.sctp-9.sym.txt:jdk.security.auth-9.sym.txt:jdk.security.jgss-9.sym.txt:jdk.unsupported-9.sym.txt:jdk.xml.dom-9.sym.txt:jdk.zipfs-9.sym.txt
platform version A base 9 files java.activation-A.sym.txt:java.base-A.sym.txt:java.compiler-A.sym.txt:java.corba-A.sym.txt:java.datatransfer-A.sym.txt:java.desktop-A.sym.txt:java.instrument-A.sym.txt:java.logging-A.sym.txt:java.management-A.sym.txt:java.management.rmi-A.sym.txt:java.naming-A.sym.txt:java.prefs-A.sym.txt:java.rmi-A.sym.txt:java.scripting-A.sym.txt:java.se-A.sym.txt:java.se.ee-A.sym.txt:java.security.jgss-A.sym.txt:java.security.sasl-A.sym.txt:java.smartcardio-A.sym.txt:java.sql-A.sym.txt:java.sql.rowset-A.sym.txt:java.transaction-A.sym.txt:java.xml-A.sym.txt:java.xml.bind-A.sym.txt:java.xml.crypto-A.sym.txt:java.xml.ws-A.sym.txt:java.xml.ws.annotation-A.sym.txt:jdk.accessibility-A.sym.txt:jdk.attach-A.sym.txt:jdk.charsets-A.sym.txt:jdk.compiler-A.sym.txt:jdk.crypto.cryptoki-A.sym.txt:jdk.crypto.ec-A.sym.txt:jdk.dynalink-A.sym.txt:jdk.editpad-A.sym.txt:jdk.hotspot.agent-A.sym.txt:jdk.httpserver-A.sym.txt:jdk.incubator.httpclient-A.sym.txt:jdk.jartool-A.sym.txt:jdk.javadoc-A.sym.txt:jdk.jcmd-A.sym.txt:jdk.jconsole-A.sym.txt:jdk.jdeps-A.sym.txt:jdk.jdi-A.sym.txt:jdk.jdwp.agent-A.sym.txt:jdk.jlink-A.sym.txt:jdk.jshell-A.sym.txt:jdk.jsobject-A.sym.txt:jdk.jstatd-A.sym.txt:jdk.localedata-A.sym.txt:jdk.management-A.sym.txt:jdk.management.agent-A.sym.txt:jdk.naming.dns-A.sym.txt:jdk.naming.rmi-A.sym.txt:jdk.net-A.sym.txt:jdk.pack-A.sym.txt:jdk.policytool-A.sym.txt:jdk.rmic-A.sym.txt:jdk.scripting.nashorn-A.sym.txt:jdk.sctp-A.sym.txt:jdk.security.auth-A.sym.txt:jdk.security.jgss-A.sym.txt:jdk.unsupported-A.sym.txt:jdk.xml.dom-A.sym.txt:jdk.zipfs-A.sym.txt platform version A base 9 files java.activation-A.sym.txt:java.base-A.sym.txt:java.compiler-A.sym.txt:java.corba-A.sym.txt:java.datatransfer-A.sym.txt:java.desktop-A.sym.txt:java.instrument-A.sym.txt:java.logging-A.sym.txt:java.management-A.sym.txt:java.management.rmi-A.sym.txt:java.naming-A.sym.txt:java.prefs-A.sym.txt:java.rmi-A.sym.txt:java.scripting-A.sym.txt:java.se-A.sym.txt:java.se.ee-A.sym.txt:java.security.jgss-A.sym.txt:java.security.sasl-A.sym.txt:java.smartcardio-A.sym.txt:java.sql-A.sym.txt:java.sql.rowset-A.sym.txt:java.transaction-A.sym.txt:java.xml-A.sym.txt:java.xml.bind-A.sym.txt:java.xml.crypto-A.sym.txt:java.xml.ws-A.sym.txt:java.xml.ws.annotation-A.sym.txt:jdk.accessibility-A.sym.txt:jdk.attach-A.sym.txt:jdk.charsets-A.sym.txt:jdk.compiler-A.sym.txt:jdk.crypto.cryptoki-A.sym.txt:jdk.crypto.ec-A.sym.txt:jdk.dynalink-A.sym.txt:jdk.editpad-A.sym.txt:jdk.hotspot.agent-A.sym.txt:jdk.httpserver-A.sym.txt:jdk.incubator.httpclient-A.sym.txt:jdk.jartool-A.sym.txt:jdk.javadoc-A.sym.txt:jdk.jcmd-A.sym.txt:jdk.jconsole-A.sym.txt:jdk.jdeps-A.sym.txt:jdk.jdi-A.sym.txt:jdk.jdwp.agent-A.sym.txt:jdk.jlink-A.sym.txt:jdk.jshell-A.sym.txt:jdk.jsobject-A.sym.txt:jdk.jstatd-A.sym.txt:jdk.localedata-A.sym.txt:jdk.management-A.sym.txt:jdk.management.agent-A.sym.txt:jdk.naming.dns-A.sym.txt:jdk.naming.rmi-A.sym.txt:jdk.net-A.sym.txt:jdk.pack-A.sym.txt:jdk.policytool-A.sym.txt:jdk.rmic-A.sym.txt:jdk.scripting.nashorn-A.sym.txt:jdk.sctp-A.sym.txt:jdk.security.auth-A.sym.txt:jdk.security.jgss-A.sym.txt:jdk.unsupported-A.sym.txt:jdk.xml.dom-A.sym.txt:jdk.zipfs-A.sym.txt

View file

@ -27,7 +27,7 @@
# Build tools needed for the JFR source code generation # Build tools needed for the JFR source code generation
JFR_TOOLS_SRCDIR := $(TOPDIR)/make/src/classes JFR_TOOLS_SRCDIR := $(TOPDIR)/make/src/classes
JFR_TOOLS_OUTPUTDIR := $(OUTPUTDIR)/buildtools/tools_classes JFR_TOOLS_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/buildtools/tools_classes
$(eval $(call SetupJavaCompiler, GENERATE_JFRBYTECODE, \ $(eval $(call SetupJavaCompiler, GENERATE_JFRBYTECODE, \
JAVAC := $(JAVAC), \ JAVAC := $(JAVAC), \

View file

@ -24,9 +24,6 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "asm/macroAssembler.inline.hpp" #include "asm/macroAssembler.inline.hpp"
#include "c1/c1_LIRAssembler.hpp"
#include "c1/c1_MacroAssembler.hpp"
#include "gc/g1/c1/g1BarrierSetC1.hpp"
#include "gc/g1/g1BarrierSet.hpp" #include "gc/g1/g1BarrierSet.hpp"
#include "gc/g1/g1BarrierSetAssembler.hpp" #include "gc/g1/g1BarrierSetAssembler.hpp"
#include "gc/g1/g1BarrierSetRuntime.hpp" #include "gc/g1/g1BarrierSetRuntime.hpp"
@ -38,6 +35,11 @@
#include "runtime/thread.hpp" #include "runtime/thread.hpp"
#include "interpreter/interp_masm.hpp" #include "interpreter/interp_masm.hpp"
#include "runtime/sharedRuntime.hpp" #include "runtime/sharedRuntime.hpp"
#ifdef COMPILER1
#include "c1/c1_LIRAssembler.hpp"
#include "c1/c1_MacroAssembler.hpp"
#include "gc/g1/c1/g1BarrierSetC1.hpp"
#endif
#define __ masm-> #define __ masm->

View file

@ -164,7 +164,7 @@ define_pd_global(intx, InlineSmallCode, 1000);
product(int, SoftwarePrefetchHintDistance, -1, \ product(int, SoftwarePrefetchHintDistance, -1, \
"Use prfm hint with specified distance in compiled code." \ "Use prfm hint with specified distance in compiled code." \
"Value -1 means off.") \ "Value -1 means off.") \
range(-1, 32760) range(-1, 4096)
#endif #endif

View file

@ -739,13 +739,21 @@ address MacroAssembler::trampoline_call(Address entry, CodeBuffer *cbuf) {
|| entry.rspec().type() == relocInfo::static_call_type || entry.rspec().type() == relocInfo::static_call_type
|| entry.rspec().type() == relocInfo::virtual_call_type, "wrong reloc type"); || entry.rspec().type() == relocInfo::virtual_call_type, "wrong reloc type");
unsigned int start_offset = offset(); // We need a trampoline if branches are far.
if (far_branches() && !Compile::current()->in_scratch_emit_size()) { if (far_branches()) {
address stub = emit_trampoline_stub(start_offset, entry.target()); // We don't want to emit a trampoline if C2 is generating dummy
// code during its branch shortening phase.
CompileTask* task = ciEnv::current()->task();
bool in_scratch_emit_size =
(task != NULL && is_c2_compile(task->comp_level()) &&
Compile::current()->in_scratch_emit_size());
if (!in_scratch_emit_size) {
address stub = emit_trampoline_stub(offset(), entry.target());
if (stub == NULL) { if (stub == NULL) {
return NULL; // CodeCache is full return NULL; // CodeCache is full
} }
} }
}
if (cbuf) cbuf->set_insts_mark(); if (cbuf) cbuf->set_insts_mark();
relocate(entry.rspec()); relocate(entry.rspec());

View file

@ -1635,6 +1635,7 @@ class Assembler : public AbstractAssembler {
// TEXASR bit description // TEXASR bit description
enum transaction_failure_reason { enum transaction_failure_reason {
// Upper half (TEXASRU): // Upper half (TEXASRU):
tm_failure_code = 0, // The Failure Code is copied from tabort or treclaim operand.
tm_failure_persistent = 7, // The failure is likely to recur on each execution. tm_failure_persistent = 7, // The failure is likely to recur on each execution.
tm_disallowed = 8, // The instruction is not permitted. tm_disallowed = 8, // The instruction is not permitted.
tm_nesting_of = 9, // The maximum transaction level was exceeded. tm_nesting_of = 9, // The maximum transaction level was exceeded.
@ -1650,6 +1651,7 @@ class Assembler : public AbstractAssembler {
tm_failure_summary = 36, // Failure has been detected and recorded. tm_failure_summary = 36, // Failure has been detected and recorded.
tm_tfiar_exact = 37, // Value in the TFIAR is exact. tm_tfiar_exact = 37, // Value in the TFIAR is exact.
tm_rot = 38, // Rollback-only transaction. tm_rot = 38, // Rollback-only transaction.
tm_transaction_level = 52, // Transaction level (nesting depth + 1).
}; };
// PPC 1, section 2.4.1 Branch Instructions // PPC 1, section 2.4.1 Branch Instructions

View file

@ -2412,7 +2412,7 @@ void MacroAssembler::atomic_ori_int(Register addr, Register result, int uimm16)
// Update rtm_counters based on abort status // Update rtm_counters based on abort status
// input: abort_status // input: abort_status
// rtm_counters (RTMLockingCounters*) // rtm_counters_Reg (RTMLockingCounters*)
void MacroAssembler::rtm_counters_update(Register abort_status, Register rtm_counters_Reg) { void MacroAssembler::rtm_counters_update(Register abort_status, Register rtm_counters_Reg) {
// Mapping to keep PreciseRTMLockingStatistics similar to x86. // Mapping to keep PreciseRTMLockingStatistics similar to x86.
// x86 ppc (! means inverted, ? means not the same) // x86 ppc (! means inverted, ? means not the same)
@ -2422,52 +2422,96 @@ void MacroAssembler::rtm_counters_update(Register abort_status, Register rtm_cou
// 3 10 Set if an internal buffer overflowed. // 3 10 Set if an internal buffer overflowed.
// 4 ?12 Set if a debug breakpoint was hit. // 4 ?12 Set if a debug breakpoint was hit.
// 5 ?32 Set if an abort occurred during execution of a nested transaction. // 5 ?32 Set if an abort occurred during execution of a nested transaction.
const int tm_failure_bit[] = {Assembler::tm_tabort, // Note: Seems like signal handler sets this, too. const int failure_bit[] = {tm_tabort, // Signal handler will set this too.
Assembler::tm_failure_persistent, // inverted: transient tm_failure_persistent,
Assembler::tm_trans_cf, tm_non_trans_cf,
Assembler::tm_footprint_of, tm_trans_cf,
Assembler::tm_non_trans_cf, tm_footprint_of,
Assembler::tm_suspended}; tm_failure_code,
const bool tm_failure_inv[] = {false, true, false, false, false, false}; tm_transaction_level};
assert(sizeof(tm_failure_bit)/sizeof(int) == RTMLockingCounters::ABORT_STATUS_LIMIT, "adapt mapping!");
const Register addr_Reg = R0; const int num_failure_bits = sizeof(failure_bit) / sizeof(int);
// Keep track of offset to where rtm_counters_Reg had pointed to. const int num_counters = RTMLockingCounters::ABORT_STATUS_LIMIT;
const int bit2counter_map[][num_counters] =
// 0 = no map; 1 = mapped, no inverted logic; -1 = mapped, inverted logic
// Inverted logic means that if a bit is set don't count it, or vice-versa.
// Care must be taken when mapping bits to counters as bits for a given
// counter must be mutually exclusive. Otherwise, the counter will be
// incremented more than once.
// counters:
// 0 1 2 3 4 5
// abort , persist, conflict, overflow, debug , nested bits:
{{ 1 , 0 , 0 , 0 , 0 , 0 }, // abort
{ 0 , -1 , 0 , 0 , 0 , 0 }, // failure_persistent
{ 0 , 0 , 1 , 0 , 0 , 0 }, // non_trans_cf
{ 0 , 0 , 1 , 0 , 0 , 0 }, // trans_cf
{ 0 , 0 , 0 , 1 , 0 , 0 }, // footprint_of
{ 0 , 0 , 0 , 0 , -1 , 0 }, // failure_code = 0xD4
{ 0 , 0 , 0 , 0 , 0 , 1 }}; // transaction_level > 1
// ...
// Move abort_status value to R0 and use abort_status register as a
// temporary register because R0 as third operand in ld/std is treated
// as base address zero (value). Likewise, R0 as second operand in addi
// is problematic because it amounts to li.
const Register temp_Reg = abort_status;
const Register abort_status_R0 = R0;
mr(abort_status_R0, abort_status);
// Increment total abort counter.
int counters_offs = RTMLockingCounters::abort_count_offset(); int counters_offs = RTMLockingCounters::abort_count_offset();
addi(addr_Reg, rtm_counters_Reg, counters_offs); ld(temp_Reg, counters_offs, rtm_counters_Reg);
const Register temp_Reg = rtm_counters_Reg;
//atomic_inc_ptr(addr_Reg, temp_Reg); We don't increment atomically
ldx(temp_Reg, addr_Reg);
addi(temp_Reg, temp_Reg, 1); addi(temp_Reg, temp_Reg, 1);
stdx(temp_Reg, addr_Reg); std(temp_Reg, counters_offs, rtm_counters_Reg);
// Increment specific abort counters.
if (PrintPreciseRTMLockingStatistics) { if (PrintPreciseRTMLockingStatistics) {
int counters_offs_delta = RTMLockingCounters::abortX_count_offset() - counters_offs;
//mftexasr(abort_status); done by caller // #0 counter offset.
for (int i = 0; i < RTMLockingCounters::ABORT_STATUS_LIMIT; i++) { int abortX_offs = RTMLockingCounters::abortX_count_offset();
counters_offs += counters_offs_delta;
li(temp_Reg, counters_offs_delta); // can't use addi with R0
add(addr_Reg, addr_Reg, temp_Reg); // point to next counter
counters_offs_delta = sizeof(uintx);
for (int nbit = 0; nbit < num_failure_bits; nbit++) {
for (int ncounter = 0; ncounter < num_counters; ncounter++) {
if (bit2counter_map[nbit][ncounter] != 0) {
Label check_abort; Label check_abort;
rldicr_(temp_Reg, abort_status, tm_failure_bit[i], 0); int abort_counter_offs = abortX_offs + (ncounter << 3);
if (tm_failure_inv[i]) {
bne(CCR0, check_abort); if (failure_bit[nbit] == tm_transaction_level) {
// Don't check outer transaction, TL = 1 (bit 63). Hence only
// 11 bits in the TL field are checked to find out if failure
// occured in a nested transaction. This check also matches
// the case when nesting_of = 1 (nesting overflow).
rldicr_(temp_Reg, abort_status_R0, failure_bit[nbit], 10);
} else if (failure_bit[nbit] == tm_failure_code) {
// Check failure code for trap or illegal caught in TM.
// Bits 0:7 are tested as bit 7 (persistent) is copied from
// tabort or treclaim source operand.
// On Linux: trap or illegal is TM_CAUSE_SIGNAL (0xD4).
rldicl(temp_Reg, abort_status_R0, 8, 56);
cmpdi(CCR0, temp_Reg, 0xD4);
} else { } else {
beq(CCR0, check_abort); rldicr_(temp_Reg, abort_status_R0, failure_bit[nbit], 0);
} }
//atomic_inc_ptr(addr_Reg, temp_Reg); We don't increment atomically
ldx(temp_Reg, addr_Reg); if (bit2counter_map[nbit][ncounter] == 1) {
beq(CCR0, check_abort);
} else {
bne(CCR0, check_abort);
}
// We don't increment atomically.
ld(temp_Reg, abort_counter_offs, rtm_counters_Reg);
addi(temp_Reg, temp_Reg, 1); addi(temp_Reg, temp_Reg, 1);
stdx(temp_Reg, addr_Reg); std(temp_Reg, abort_counter_offs, rtm_counters_Reg);
bind(check_abort); bind(check_abort);
} }
} }
li(temp_Reg, -counters_offs); // can't use addi with R0 }
add(rtm_counters_Reg, addr_Reg, temp_Reg); // restore }
// Restore abort_status.
mr(abort_status, abort_status_R0);
} }
// Branch if (random & (count-1) != 0), count is 2^n // Branch if (random & (count-1) != 0), count is 2^n
@ -2569,8 +2613,28 @@ void MacroAssembler::rtm_profiling(Register abort_status_Reg, Register temp_Reg,
void MacroAssembler::rtm_retry_lock_on_abort(Register retry_count_Reg, Register abort_status_Reg, void MacroAssembler::rtm_retry_lock_on_abort(Register retry_count_Reg, Register abort_status_Reg,
Label& retryLabel, Label* checkRetry) { Label& retryLabel, Label* checkRetry) {
Label doneRetry; Label doneRetry;
// Don't retry if failure is persistent.
// The persistent bit is set when a (A) Disallowed operation is performed in
// transactional state, like for instance trying to write the TFHAR after a
// transaction is started; or when there is (B) a Nesting Overflow (too many
// nested transactions); or when (C) the Footprint overflows (too many
// addressess touched in TM state so there is no more space in the footprint
// area to track them); or in case of (D) a Self-Induced Conflict, i.e. a
// store is performed to a given address in TM state, then once in suspended
// state the same address is accessed. Failure (A) is very unlikely to occur
// in the JVM. Failure (D) will never occur because Suspended state is never
// used in the JVM. Thus mostly (B) a Nesting Overflow or (C) a Footprint
// Overflow will set the persistent bit.
rldicr_(R0, abort_status_Reg, tm_failure_persistent, 0); rldicr_(R0, abort_status_Reg, tm_failure_persistent, 0);
bne(CCR0, doneRetry); bne(CCR0, doneRetry);
// Don't retry if transaction was deliberately aborted, i.e. caused by a
// tabort instruction.
rldicr_(R0, abort_status_Reg, tm_tabort, 0);
bne(CCR0, doneRetry);
// Retry if transaction aborted due to a conflict with another thread.
if (checkRetry) { bind(*checkRetry); } if (checkRetry) { bind(*checkRetry); }
addic_(retry_count_Reg, retry_count_Reg, -1); addic_(retry_count_Reg, retry_count_Reg, -1);
blt(CCR0, doneRetry); blt(CCR0, doneRetry);

View file

@ -2029,6 +2029,13 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm,
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
vep_start_pc = (intptr_t)__ pc(); vep_start_pc = (intptr_t)__ pc();
if (UseRTMLocking) {
// Abort RTM transaction before calling JNI
// because critical section can be large and
// abort anyway. Also nmethod can be deoptimized.
__ tabort_();
}
__ save_LR_CR(r_temp_1); __ save_LR_CR(r_temp_1);
__ generate_stack_overflow_check(frame_size_in_bytes); // Check before creating frame. __ generate_stack_overflow_check(frame_size_in_bytes); // Check before creating frame.
__ mr(r_callers_sp, R1_SP); // Remember frame pointer. __ mr(r_callers_sp, R1_SP); // Remember frame pointer.
@ -2947,6 +2954,11 @@ void SharedRuntime::generate_uncommon_trap_blob() {
InterpreterMacroAssembler* masm = new InterpreterMacroAssembler(&buffer); InterpreterMacroAssembler* masm = new InterpreterMacroAssembler(&buffer);
address start = __ pc(); address start = __ pc();
if (UseRTMLocking) {
// Abort RTM transaction before possible nmethod deoptimization.
__ tabort_();
}
Register unroll_block_reg = R21_tmp1; Register unroll_block_reg = R21_tmp1;
Register klass_index_reg = R22_tmp2; Register klass_index_reg = R22_tmp2;
Register unc_trap_reg = R23_tmp3; Register unc_trap_reg = R23_tmp3;
@ -3090,6 +3102,13 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
return_pc_location = RegisterSaver::return_pc_is_thread_saved_exception_pc; return_pc_location = RegisterSaver::return_pc_is_thread_saved_exception_pc;
} }
if (UseRTMLocking) {
// Abort RTM transaction before calling runtime
// because critical section can be large and so
// will abort anyway. Also nmethod can be deoptimized.
__ tabort_();
}
// Save registers, fpu state, and flags. Set R31 = return pc. // Save registers, fpu state, and flags. Set R31 = return pc.
map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm,
&frame_size_in_bytes, &frame_size_in_bytes,

View file

@ -25,6 +25,7 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "jvm.h" #include "jvm.h"
#include "asm/macroAssembler.hpp" #include "asm/macroAssembler.hpp"
#include "compiler/disassembler.hpp"
#include "classfile/javaClasses.inline.hpp" #include "classfile/javaClasses.inline.hpp"
#include "interpreter/interpreter.hpp" #include "interpreter/interpreter.hpp"
#include "interpreter/interpreterRuntime.hpp" #include "interpreter/interpreterRuntime.hpp"
@ -35,7 +36,7 @@
#include "runtime/frame.inline.hpp" #include "runtime/frame.inline.hpp"
#include "utilities/preserveException.hpp" #include "utilities/preserveException.hpp"
#define __ _masm-> #define __ Disassembler::hook<MacroAssembler>(__FILE__, __LINE__, _masm)->
#ifdef PRODUCT #ifdef PRODUCT
#define BLOCK_COMMENT(str) /* nothing */ #define BLOCK_COMMENT(str) /* nothing */

View file

@ -24,6 +24,7 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "asm/macroAssembler.hpp" #include "asm/macroAssembler.hpp"
#include "compiler/disassembler.hpp"
#include "gc/shared/barrierSetAssembler.hpp" #include "gc/shared/barrierSetAssembler.hpp"
#include "interpreter/bytecodeHistogram.hpp" #include "interpreter/bytecodeHistogram.hpp"
#include "interpreter/interp_masm.hpp" #include "interpreter/interp_masm.hpp"
@ -48,7 +49,7 @@
#include "utilities/debug.hpp" #include "utilities/debug.hpp"
#include "utilities/macros.hpp" #include "utilities/macros.hpp"
#define __ _masm-> #define __ Disassembler::hook<InterpreterMacroAssembler>(__FILE__, __LINE__, _masm)->
// Size of interpreter code. Increase if too small. Interpreter will // Size of interpreter code. Increase if too small. Interpreter will
// fail with a guarantee ("not enough space for interpreter generation"); // fail with a guarantee ("not enough space for interpreter generation");
@ -1774,18 +1775,30 @@ void TemplateInterpreterGenerator::set_vtos_entry_points(Template* t,
address& vep) { address& vep) {
assert(t->is_valid() && t->tos_in() == vtos, "illegal template"); assert(t->is_valid() && t->tos_in() == vtos, "illegal template");
Label L; Label L;
aep = __ pc(); __ push_ptr(); __ jmp(L); aep = __ pc(); // atos entry point
__ push_ptr();
__ jmp(L);
#ifndef _LP64 #ifndef _LP64
fep = __ pc(); __ push(ftos); __ jmp(L); fep = __ pc(); // ftos entry point
dep = __ pc(); __ push(dtos); __ jmp(L); __ push(ftos);
__ jmp(L);
dep = __ pc(); // dtos entry point
__ push(dtos);
__ jmp(L);
#else #else
fep = __ pc(); __ push_f(xmm0); __ jmp(L); fep = __ pc(); // ftos entry point
dep = __ pc(); __ push_d(xmm0); __ jmp(L); __ push_f(xmm0);
__ jmp(L);
dep = __ pc(); // dtos entry point
__ push_d(xmm0);
__ jmp(L);
#endif // _LP64 #endif // _LP64
lep = __ pc(); __ push_l(); __ jmp(L); lep = __ pc(); // ltos entry point
bep = cep = sep = __ push_l();
iep = __ pc(); __ push_i(); __ jmp(L);
vep = __ pc(); bep = cep = sep = iep = __ pc(); // [bcsi]tos entry point
__ push_i();
vep = __ pc(); // vtos entry point
__ bind(L); __ bind(L);
generate_and_dispatch(t); generate_and_dispatch(t);
} }

View file

@ -24,6 +24,7 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "asm/macroAssembler.hpp" #include "asm/macroAssembler.hpp"
#include "compiler/disassembler.hpp"
#include "interpreter/interp_masm.hpp" #include "interpreter/interp_masm.hpp"
#include "interpreter/interpreter.hpp" #include "interpreter/interpreter.hpp"
#include "interpreter/interpreterRuntime.hpp" #include "interpreter/interpreterRuntime.hpp"
@ -31,7 +32,7 @@
#include "runtime/arguments.hpp" #include "runtime/arguments.hpp"
#include "runtime/sharedRuntime.hpp" #include "runtime/sharedRuntime.hpp"
#define __ _masm-> #define __ Disassembler::hook<InterpreterMacroAssembler>(__FILE__, __LINE__, _masm)->
address TemplateInterpreterGenerator::generate_slow_signature_handler() { address TemplateInterpreterGenerator::generate_slow_signature_handler() {

View file

@ -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. * 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
@ -24,6 +24,7 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "asm/macroAssembler.hpp" #include "asm/macroAssembler.hpp"
#include "compiler/disassembler.hpp"
#include "interpreter/interp_masm.hpp" #include "interpreter/interp_masm.hpp"
#include "interpreter/interpreter.hpp" #include "interpreter/interpreter.hpp"
#include "interpreter/interpreterRuntime.hpp" #include "interpreter/interpreterRuntime.hpp"
@ -31,7 +32,7 @@
#include "runtime/arguments.hpp" #include "runtime/arguments.hpp"
#include "runtime/sharedRuntime.hpp" #include "runtime/sharedRuntime.hpp"
#define __ _masm-> #define __ Disassembler::hook<InterpreterMacroAssembler>(__FILE__, __LINE__, _masm)->
#ifdef _WIN64 #ifdef _WIN64
address TemplateInterpreterGenerator::generate_slow_signature_handler() { address TemplateInterpreterGenerator::generate_slow_signature_handler() {

View file

@ -24,6 +24,7 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "asm/macroAssembler.hpp" #include "asm/macroAssembler.hpp"
#include "compiler/disassembler.hpp"
#include "interpreter/interpreter.hpp" #include "interpreter/interpreter.hpp"
#include "interpreter/interpreterRuntime.hpp" #include "interpreter/interpreterRuntime.hpp"
#include "interpreter/interp_masm.hpp" #include "interpreter/interp_masm.hpp"
@ -40,7 +41,7 @@
#include "runtime/synchronizer.hpp" #include "runtime/synchronizer.hpp"
#include "utilities/macros.hpp" #include "utilities/macros.hpp"
#define __ _masm-> #define __ Disassembler::hook<InterpreterMacroAssembler>(__FILE__, __LINE__, _masm)->
// Global Register Names // Global Register Names
static const Register rbcp = LP64_ONLY(r13) NOT_LP64(rsi); static const Register rbcp = LP64_ONLY(r13) NOT_LP64(rsi);

View file

@ -470,8 +470,8 @@ int VM_Version_Ext::cpu_extended_brand_string(char* const buf, size_t buf_len) {
} }
size_t VM_Version_Ext::cpu_write_support_string(char* const buf, size_t buf_len) { size_t VM_Version_Ext::cpu_write_support_string(char* const buf, size_t buf_len) {
assert(buf != NULL, "buffer is NULL!"); guarantee(buf != NULL, "buffer is NULL!");
assert(buf_len > 0, "buffer len not enough!"); guarantee(buf_len > 0, "buffer len not enough!");
unsigned int flag = 0; unsigned int flag = 0;
unsigned int fi = 0; unsigned int fi = 0;
@ -481,8 +481,7 @@ size_t VM_Version_Ext::cpu_write_support_string(char* const buf, size_t buf_len)
#define WRITE_TO_BUF(string) \ #define WRITE_TO_BUF(string) \
{ \ { \
int res = jio_snprintf(&buf[written], buf_len - written, "%s%s", prefix, string); \ int res = jio_snprintf(&buf[written], buf_len - written, "%s%s", prefix, string); \
if (res < 0 || (size_t) res >= buf_len - 1) { \ if (res < 0) { \
buf[buf_len-1] = '\0'; \
return buf_len - 1; \ return buf_len - 1; \
} \ } \
written += res; \ written += res; \
@ -592,7 +591,7 @@ int VM_Version_Ext::cpu_detailed_description(char* const buf, size_t buf_len) {
_cpuid_info.ext_cpuid1_edx); _cpuid_info.ext_cpuid1_edx);
if (outputLen < 0 || (size_t) outputLen >= buf_len - 1) { if (outputLen < 0 || (size_t) outputLen >= buf_len - 1) {
buf[buf_len-1] = '\0'; if (buf_len > 0) { buf[buf_len-1] = '\0'; }
return OS_ERR; return OS_ERR;
} }

View file

@ -63,6 +63,7 @@ class VM_Version_Ext : public VM_Version {
static bool cpu_is_em64t(void); static bool cpu_is_em64t(void);
static bool is_netburst(void); static bool is_netburst(void);
// Returns bytes written excluding termninating null byte.
static size_t cpu_write_support_string(char* const buf, size_t buf_len); static size_t cpu_write_support_string(char* const buf, size_t buf_len);
static void resolve_cpu_information_details(void); static void resolve_cpu_information_details(void);
static jlong max_qualified_cpu_freq_from_brand_string(void); static jlong max_qualified_cpu_freq_from_brand_string(void);

View file

@ -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. // 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
@ -1444,6 +1444,7 @@ const bool Matcher::match_rule_supported_vector(int opcode, int vlen) {
case Op_CMoveVF: case Op_CMoveVF:
if (vlen != 8) if (vlen != 8)
ret_value = false; ret_value = false;
break;
case Op_CMoveVD: case Op_CMoveVD:
if (vlen != 4) if (vlen != 4)
ret_value = false; ret_value = false;

View file

@ -49,16 +49,3 @@ void MiscUtils::leave_critsect(MiscUtils::critsect_t* cs) {
const int rc = pthread_mutex_unlock(cs); const int rc = pthread_mutex_unlock(cs);
assert0(rc == 0); assert0(rc == 0);
} }
bool MiscUtils::is_readable_pointer(const void* p) {
if (!CanUseSafeFetch32()) {
return true;
}
int* const aligned = (int*) align_down(p, 4);
int cafebabe = 0xcafebabe;
int deadbeef = 0xdeadbeef;
return (SafeFetch32(aligned, cafebabe) != cafebabe) ||
(SafeFetch32(aligned, deadbeef) != deadbeef);
}

View file

@ -88,13 +88,6 @@ namespace MiscUtils {
_pcsobj->leave(); _pcsobj->leave();
} }
}; };
// Returns true if pointer can be dereferenced without triggering a segment
// violation. Returns false if pointer is invalid.
// Note: Depends on stub routines; prior to stub routine generation, will
// always return true. Use CanUseSafeFetch32 to handle this case.
bool is_readable_pointer(const void* p);
} }
#endif // OS_AIX_VM_MISC_AIX_HPP #endif // OS_AIX_VM_MISC_AIX_HPP

View file

@ -3733,8 +3733,7 @@ bool os::dir_is_empty(const char* path) {
/* Scan the directory */ /* Scan the directory */
bool result = true; bool result = true;
char buf[sizeof(struct dirent) + MAX_PATH]; while (result && (ptr = readdir(dir)) != NULL) {
while (result && (ptr = ::readdir(dir)) != NULL) {
if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) {
result = false; result = false;
} }

View file

@ -74,17 +74,6 @@ inline void os::dll_unload(void *lib) {
inline const int os::default_file_open_flags() { return 0;} inline const int os::default_file_open_flags() { return 0;}
inline DIR* os::opendir(const char* dirname) {
assert(dirname != NULL, "just checking");
return ::opendir(dirname);
}
inline int os::readdir_buf_size(const char *path) {
// According to aix sys/limits, NAME_MAX must be retrieved at runtime.
const long my_NAME_MAX = pathconf(path, _PC_NAME_MAX);
return my_NAME_MAX + sizeof(dirent) + 1;
}
inline jlong os::lseek(int fd, jlong offset, int whence) { inline jlong os::lseek(int fd, jlong offset, int whence) {
return (jlong) ::lseek64(fd, offset, whence); return (jlong) ::lseek64(fd, offset, whence);
} }
@ -97,23 +86,6 @@ inline int os::ftruncate(int fd, jlong length) {
return ::ftruncate64(fd, length); return ::ftruncate64(fd, length);
} }
inline struct dirent* os::readdir(DIR* dirp, dirent *dbuf) {
dirent* p = NULL;
assert(dirp != NULL, "just checking");
// AIX: slightly different from POSIX.
// On AIX, readdir_r returns 0 or != 0 and error details in errno.
if (::readdir_r(dirp, dbuf, &p) != 0) {
return NULL;
}
return p;
}
inline int os::closedir(DIR *dirp) {
assert(dirp != NULL, "argument is NULL");
return ::closedir(dirp);
}
// macros for restartable system calls // macros for restartable system calls
#define RESTARTABLE(_cmd, _result) do { \ #define RESTARTABLE(_cmd, _result) do { \

View file

@ -893,21 +893,14 @@ int SystemProcessInterface::SystemProcesses::ProcessIterator::current(SystemProc
} }
int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() { int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() {
struct dirent* entry;
if (!is_valid()) { if (!is_valid()) {
return OS_ERR; return OS_ERR;
} }
do { do {
entry = os::readdir(_dir, _entry); _entry = os::readdir(_dir);
if (entry == NULL) {
// error
_valid = false;
return OS_ERR;
}
if (_entry == NULL) { if (_entry == NULL) {
// reached end // Error or reached end. Could use errno to distinguish those cases.
_valid = false; _valid = false;
return OS_ERR; return OS_ERR;
} }
@ -929,11 +922,8 @@ bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() {
} }
SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() { SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() {
if (_entry != NULL) {
FREE_C_HEAP_ARRAY(char, _entry);
}
if (_dir != NULL) { if (_dir != NULL) {
closedir(_dir); os::closedir(_dir);
} }
} }

View file

@ -617,9 +617,8 @@ static char* get_user_name_slow(int vmid, TRAPS) {
// to determine the user name for the process id. // to determine the user name for the process id.
// //
struct dirent* dentry; struct dirent* dentry;
char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal);
errno = 0; errno = 0;
while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { while ((dentry = os::readdir(tmpdirp)) != NULL) {
// check if the directory entry is a hsperfdata file // check if the directory entry is a hsperfdata file
if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) { if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) {
@ -653,9 +652,8 @@ static char* get_user_name_slow(int vmid, TRAPS) {
} }
struct dirent* udentry; struct dirent* udentry;
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
errno = 0; errno = 0;
while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { while ((udentry = os::readdir(subdirp)) != NULL) {
if (filename_to_pid(udentry->d_name) == vmid) { if (filename_to_pid(udentry->d_name) == vmid) {
struct stat statbuf; struct stat statbuf;
@ -699,11 +697,9 @@ static char* get_user_name_slow(int vmid, TRAPS) {
} }
} }
os::closedir(subdirp); os::closedir(subdirp);
FREE_C_HEAP_ARRAY(char, udbuf);
FREE_C_HEAP_ARRAY(char, usrdir_name); FREE_C_HEAP_ARRAY(char, usrdir_name);
} }
os::closedir(tmpdirp); os::closedir(tmpdirp);
FREE_C_HEAP_ARRAY(char, tdbuf);
return(oldest_user); return(oldest_user);
} }
@ -779,10 +775,8 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// loop under these conditions is dependent upon the implementation of // loop under these conditions is dependent upon the implementation of
// opendir/readdir. // opendir/readdir.
struct dirent* entry; struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
errno = 0; errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { while ((entry = os::readdir(dirp)) != NULL) {
pid_t pid = filename_to_pid(entry->d_name); pid_t pid = filename_to_pid(entry->d_name);
@ -820,8 +814,6 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// Close the directory and reset the current working directory. // Close the directory and reset the current working directory.
close_directory_secure_cwd(dirp, saved_cwd_fd); close_directory_secure_cwd(dirp, saved_cwd_fd);
FREE_C_HEAP_ARRAY(char, dbuf);
} }
// Make the user specific temporary directory. Returns true if // Make the user specific temporary directory. Returns true if

View file

@ -142,7 +142,7 @@ bool AixSymbols::get_function_name (
// in that case I try reading the traceback table unsafe - I rather risk secondary crashes in // in that case I try reading the traceback table unsafe - I rather risk secondary crashes in
// error files than not having a callstack.) // error files than not having a callstack.)
#define CHECK_POINTER_READABLE(p) \ #define CHECK_POINTER_READABLE(p) \
if (!MiscUtils::is_readable_pointer(p)) { \ if (!os::is_readable_pointer(p)) { \
trcVerbose("pc not readable"); \ trcVerbose("pc not readable"); \
return false; \ return false; \
} }
@ -230,7 +230,7 @@ bool AixSymbols::get_function_name (
const short l = MIN2<short>(*((short*)pc2), namelen - 1); const short l = MIN2<short>(*((short*)pc2), namelen - 1);
// Be very careful. // Be very careful.
int i = 0; char* const p = (char*)pc2 + sizeof(short); int i = 0; char* const p = (char*)pc2 + sizeof(short);
while (i < l && MiscUtils::is_readable_pointer(p + i)) { while (i < l && os::is_readable_pointer(p + i)) {
p_name[i] = p[i]; p_name[i] = p[i];
i++; i++;
} }
@ -489,7 +489,7 @@ static void print_info_for_pc (outputStream* st, codeptr_t pc, char* buf,
const struct tbtable* tb = NULL; const struct tbtable* tb = NULL;
int displacement = -1; int displacement = -1;
if (!MiscUtils::is_readable_pointer(pc)) { if (!os::is_readable_pointer(pc)) {
st->print("(invalid)"); st->print("(invalid)");
return; return;
} }
@ -697,7 +697,7 @@ void AixNativeCallstack::print_callstack_for_context(outputStream* st, const uco
print_info_for_pc(st, cur_iar, buf, buf_size, demangle); print_info_for_pc(st, cur_iar, buf, buf_size, demangle);
st->cr(); st->cr();
if (cur_iar && MiscUtils::is_readable_pointer(cur_iar)) { if (cur_iar && os::is_readable_pointer(cur_iar)) {
decode_instructions_at_pc( decode_instructions_at_pc(
"Decoded instructions at iar:", "Decoded instructions at iar:",
cur_iar, 32, 16, st); cur_iar, 32, 16, st);
@ -710,7 +710,7 @@ void AixNativeCallstack::print_callstack_for_context(outputStream* st, const uco
print_info_for_pc(st, cur_lr, buf, buf_size, demangle); print_info_for_pc(st, cur_lr, buf, buf_size, demangle);
st->cr(); st->cr();
if (cur_lr && MiscUtils::is_readable_pointer(cur_lr)) { if (cur_lr && os::is_readable_pointer(cur_lr)) {
decode_instructions_at_pc( decode_instructions_at_pc(
"Decoded instructions at lr:", "Decoded instructions at lr:",
cur_lr, 32, 16, st); cur_lr, 32, 16, st);
@ -729,7 +729,7 @@ void AixNativeCallstack::print_callstack_for_context(outputStream* st, const uco
// Check and print rtoc. // Check and print rtoc.
st->print("rtoc: " PTR64_FORMAT " ", p2i(cur_rtoc)); st->print("rtoc: " PTR64_FORMAT " ", p2i(cur_rtoc));
if (cur_rtoc == NULL || cur_rtoc == (codeptr_t)-1 || if (cur_rtoc == NULL || cur_rtoc == (codeptr_t)-1 ||
!MiscUtils::is_readable_pointer(cur_rtoc)) { !os::is_readable_pointer(cur_rtoc)) {
st->print("(invalid)"); st->print("(invalid)");
} else if (((uintptr_t)cur_rtoc) & 0x7) { } else if (((uintptr_t)cur_rtoc) & 0x7) {
st->print("(unaligned)"); st->print("(unaligned)");

View file

@ -3506,8 +3506,7 @@ bool os::dir_is_empty(const char* path) {
// Scan the directory // Scan the directory
bool result = true; bool result = true;
char buf[sizeof(struct dirent) + MAX_PATH]; while (result && (ptr = readdir(dir)) != NULL) {
while (result && (ptr = ::readdir(dir)) != NULL) {
if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) {
result = false; result = false;
} }

View file

@ -77,17 +77,6 @@ inline void os::dll_unload(void *lib) {
inline const int os::default_file_open_flags() { return 0;} inline const int os::default_file_open_flags() { return 0;}
inline DIR* os::opendir(const char* dirname)
{
assert(dirname != NULL, "just checking");
return ::opendir(dirname);
}
inline int os::readdir_buf_size(const char *path)
{
return NAME_MAX + sizeof(dirent) + 1;
}
inline jlong os::lseek(int fd, jlong offset, int whence) { inline jlong os::lseek(int fd, jlong offset, int whence) {
return (jlong) ::lseek(fd, offset, whence); return (jlong) ::lseek(fd, offset, whence);
} }
@ -100,28 +89,6 @@ inline int os::ftruncate(int fd, jlong length) {
return ::ftruncate(fd, length); return ::ftruncate(fd, length);
} }
inline struct dirent* os::readdir(DIR* dirp, dirent *dbuf)
{
dirent* p;
int status;
assert(dirp != NULL, "just checking");
// NOTE: Bsd readdir_r (on RH 6.2 and 7.2 at least) is NOT like the POSIX
// version. Here is the doc for this function:
// http://www.gnu.org/manual/glibc-2.2.3/html_node/libc_262.html
if((status = ::readdir_r(dirp, dbuf, &p)) != 0) {
errno = status;
return NULL;
} else
return p;
}
inline int os::closedir(DIR *dirp) {
assert(dirp != NULL, "argument is NULL");
return ::closedir(dirp);
}
// macros for restartable system calls // macros for restartable system calls
#define RESTARTABLE(_cmd, _result) do { \ #define RESTARTABLE(_cmd, _result) do { \

View file

@ -535,9 +535,8 @@ static char* get_user_name_slow(int vmid, TRAPS) {
// to determine the user name for the process id. // to determine the user name for the process id.
// //
struct dirent* dentry; struct dirent* dentry;
char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal);
errno = 0; errno = 0;
while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { while ((dentry = os::readdir(tmpdirp)) != NULL) {
// check if the directory entry is a hsperfdata file // check if the directory entry is a hsperfdata file
if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) { if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) {
@ -559,9 +558,8 @@ static char* get_user_name_slow(int vmid, TRAPS) {
} }
struct dirent* udentry; struct dirent* udentry;
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
errno = 0; errno = 0;
while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { while ((udentry = os::readdir(subdirp)) != NULL) {
if (filename_to_pid(udentry->d_name) == vmid) { if (filename_to_pid(udentry->d_name) == vmid) {
struct stat statbuf; struct stat statbuf;
@ -605,11 +603,9 @@ static char* get_user_name_slow(int vmid, TRAPS) {
} }
} }
os::closedir(subdirp); os::closedir(subdirp);
FREE_C_HEAP_ARRAY(char, udbuf);
FREE_C_HEAP_ARRAY(char, usrdir_name); FREE_C_HEAP_ARRAY(char, usrdir_name);
} }
os::closedir(tmpdirp); os::closedir(tmpdirp);
FREE_C_HEAP_ARRAY(char, tdbuf);
return(oldest_user); return(oldest_user);
} }
@ -688,10 +684,8 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// opendir/readdir. // opendir/readdir.
// //
struct dirent* entry; struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
errno = 0; errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { while ((entry = os::readdir(dirp)) != NULL) {
pid_t pid = filename_to_pid(entry->d_name); pid_t pid = filename_to_pid(entry->d_name);
@ -730,8 +724,6 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// close the directory and reset the current working directory // close the directory and reset the current working directory
close_directory_secure_cwd(dirp, saved_cwd_fd); close_directory_secure_cwd(dirp, saved_cwd_fd);
FREE_C_HEAP_ARRAY(char, dbuf);
} }
// make the user specific temporary directory. Returns true if // make the user specific temporary directory. Returns true if

View file

@ -2093,7 +2093,9 @@ void os::get_summary_os_info(char* buf, size_t buflen) {
// special case for debian // special case for debian
if (file_exists("/etc/debian_version")) { if (file_exists("/etc/debian_version")) {
strncpy(buf, "Debian ", buflen); strncpy(buf, "Debian ", buflen);
if (buflen > 7) {
parse_os_info(&buf[7], buflen-7, "/etc/debian_version"); parse_os_info(&buf[7], buflen-7, "/etc/debian_version");
}
} else { } else {
strncpy(buf, "Linux", buflen); strncpy(buf, "Linux", buflen);
} }
@ -2805,8 +2807,8 @@ int os::numa_get_group_id() {
} }
int os::Linux::get_existing_num_nodes() { int os::Linux::get_existing_num_nodes() {
size_t node; int node;
size_t highest_node_number = Linux::numa_max_node(); int highest_node_number = Linux::numa_max_node();
int num_nodes = 0; int num_nodes = 0;
// Get the total number of nodes in the system including nodes without memory. // Get the total number of nodes in the system including nodes without memory.
@ -2819,14 +2821,14 @@ int os::Linux::get_existing_num_nodes() {
} }
size_t os::numa_get_leaf_groups(int *ids, size_t size) { size_t os::numa_get_leaf_groups(int *ids, size_t size) {
size_t highest_node_number = Linux::numa_max_node(); int highest_node_number = Linux::numa_max_node();
size_t i = 0; size_t i = 0;
// Map all node ids in which is possible to allocate memory. Also nodes are // Map all node ids in which it is possible to allocate memory. Also nodes are
// not always consecutively available, i.e. available from 0 to the highest // not always consecutively available, i.e. available from 0 to the highest
// node number. // node number.
for (size_t node = 0; node <= highest_node_number; node++) { for (int node = 0; node <= highest_node_number; node++) {
if (Linux::isnode_in_configured_nodes(node)) { if (Linux::isnode_in_configured_nodes((unsigned int)node)) {
ids[i++] = node; ids[i++] = node;
} }
} }
@ -5373,8 +5375,7 @@ bool os::dir_is_empty(const char* path) {
// Scan the directory // Scan the directory
bool result = true; bool result = true;
char buf[sizeof(struct dirent) + MAX_PATH]; while (result && (ptr = readdir(dir)) != NULL) {
while (result && (ptr = ::readdir(dir)) != NULL) {
if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) {
result = false; result = false;
} }

View file

@ -69,17 +69,6 @@ inline void os::dll_unload(void *lib) {
inline const int os::default_file_open_flags() { return 0;} inline const int os::default_file_open_flags() { return 0;}
inline DIR* os::opendir(const char* dirname)
{
assert(dirname != NULL, "just checking");
return ::opendir(dirname);
}
inline int os::readdir_buf_size(const char *path)
{
return NAME_MAX + sizeof(dirent) + 1;
}
inline jlong os::lseek(int fd, jlong offset, int whence) { inline jlong os::lseek(int fd, jlong offset, int whence) {
return (jlong) ::lseek64(fd, offset, whence); return (jlong) ::lseek64(fd, offset, whence);
} }
@ -92,17 +81,6 @@ inline int os::ftruncate(int fd, jlong length) {
return ::ftruncate64(fd, length); return ::ftruncate64(fd, length);
} }
inline struct dirent* os::readdir(DIR* dirp, dirent *dbuf)
{
assert(dirp != NULL, "just checking");
return ::readdir(dirp);
}
inline int os::closedir(DIR *dirp) {
assert(dirp != NULL, "argument is NULL");
return ::closedir(dirp);
}
// macros for restartable system calls // macros for restartable system calls
#define RESTARTABLE(_cmd, _result) do { \ #define RESTARTABLE(_cmd, _result) do { \

View file

@ -895,21 +895,14 @@ int SystemProcessInterface::SystemProcesses::ProcessIterator::current(SystemProc
} }
int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() { int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() {
struct dirent* entry;
if (!is_valid()) { if (!is_valid()) {
return OS_ERR; return OS_ERR;
} }
do { do {
entry = os::readdir(_dir, _entry); _entry = os::readdir(_dir);
if (entry == NULL) {
// error
_valid = false;
return OS_ERR;
}
if (_entry == NULL) { if (_entry == NULL) {
// reached end // Error or reached end. Could use errno to distinguish those cases.
_valid = false; _valid = false;
return OS_ERR; return OS_ERR;
} }
@ -926,11 +919,8 @@ SystemProcessInterface::SystemProcesses::ProcessIterator::ProcessIterator() {
} }
bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() { bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() {
_dir = opendir("/proc"); _dir = os::opendir("/proc");
_entry = (struct dirent*)NEW_C_HEAP_ARRAY(char, sizeof(struct dirent) + NAME_MAX + 1, mtInternal); _entry = NULL;
if (NULL == _entry) {
return false;
}
_valid = true; _valid = true;
next_process(); next_process();
@ -938,11 +928,8 @@ bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() {
} }
SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() { SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() {
if (_entry != NULL) {
FREE_C_HEAP_ARRAY(char, _entry);
}
if (_dir != NULL) { if (_dir != NULL) {
closedir(_dir); os::closedir(_dir);
} }
} }

View file

@ -534,15 +534,14 @@ static char* get_user_name_slow(int vmid, int nspid, TRAPS) {
// directory search // directory search
char* oldest_user = NULL; char* oldest_user = NULL;
time_t oldest_ctime = 0; time_t oldest_ctime = 0;
char buffer[TMP_BUFFER_LEN]; char buffer[MAXPATHLEN + 1];
int searchpid; int searchpid;
char* tmpdirname = (char *)os::get_temp_directory(); char* tmpdirname = (char *)os::get_temp_directory();
assert(strlen(tmpdirname) == 4, "No longer using /tmp - update buffer size"); assert(strlen(tmpdirname) == 4, "No longer using /tmp - update buffer size");
if (nspid == -1) { if (nspid == -1) {
searchpid = vmid; searchpid = vmid;
} } else {
else {
jio_snprintf(buffer, MAXPATHLEN, "/proc/%d/root%s", vmid, tmpdirname); jio_snprintf(buffer, MAXPATHLEN, "/proc/%d/root%s", vmid, tmpdirname);
tmpdirname = buffer; tmpdirname = buffer;
searchpid = nspid; searchpid = nspid;
@ -562,9 +561,8 @@ static char* get_user_name_slow(int vmid, int nspid, TRAPS) {
// to determine the user name for the process id. // to determine the user name for the process id.
// //
struct dirent* dentry; struct dirent* dentry;
char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal);
errno = 0; errno = 0;
while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { while ((dentry = os::readdir(tmpdirp)) != NULL) {
// check if the directory entry is a hsperfdata file // check if the directory entry is a hsperfdata file
if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) { if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) {
@ -598,9 +596,8 @@ static char* get_user_name_slow(int vmid, int nspid, TRAPS) {
} }
struct dirent* udentry; struct dirent* udentry;
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
errno = 0; errno = 0;
while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { while ((udentry = os::readdir(subdirp)) != NULL) {
if (filename_to_pid(udentry->d_name) == searchpid) { if (filename_to_pid(udentry->d_name) == searchpid) {
struct stat statbuf; struct stat statbuf;
@ -644,11 +641,9 @@ static char* get_user_name_slow(int vmid, int nspid, TRAPS) {
} }
} }
os::closedir(subdirp); os::closedir(subdirp);
FREE_C_HEAP_ARRAY(char, udbuf);
FREE_C_HEAP_ARRAY(char, usrdir_name); FREE_C_HEAP_ARRAY(char, usrdir_name);
} }
os::closedir(tmpdirp); os::closedir(tmpdirp);
FREE_C_HEAP_ARRAY(char, tdbuf);
return(oldest_user); return(oldest_user);
} }
@ -770,10 +765,8 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// opendir/readdir. // opendir/readdir.
// //
struct dirent* entry; struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
errno = 0; errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { while ((entry = os::readdir(dirp)) != NULL) {
pid_t pid = filename_to_pid(entry->d_name); pid_t pid = filename_to_pid(entry->d_name);
@ -810,8 +803,6 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// close the directory and reset the current working directory // close the directory and reset the current working directory
close_directory_secure_cwd(dirp, saved_cwd_fd); close_directory_secure_cwd(dirp, saved_cwd_fd);
FREE_C_HEAP_ARRAY(char, dbuf);
} }
// make the user specific temporary directory. Returns true if // make the user specific temporary directory. Returns true if

View file

@ -35,6 +35,7 @@
#include "utilities/macros.hpp" #include "utilities/macros.hpp"
#include "utilities/vmError.hpp" #include "utilities/vmError.hpp"
#include <dirent.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <pthread.h> #include <pthread.h>
#include <signal.h> #include <signal.h>
@ -527,6 +528,21 @@ void os::funlockfile(FILE* fp) {
::funlockfile(fp); ::funlockfile(fp);
} }
DIR* os::opendir(const char* dirname) {
assert(dirname != NULL, "just checking");
return ::opendir(dirname);
}
struct dirent* os::readdir(DIR* dirp) {
assert(dirp != NULL, "just checking");
return ::readdir(dirp);
}
int os::closedir(DIR *dirp) {
assert(dirp != NULL, "just checking");
return ::closedir(dirp);
}
// Builds a platform dependent Agent_OnLoad_<lib_name> function name // Builds a platform dependent Agent_OnLoad_<lib_name> function name
// which is used to find statically linked in agents. // which is used to find statically linked in agents.
// Parameters: // Parameters:

View file

@ -604,15 +604,14 @@ int SystemProcessInterface::SystemProcesses::ProcessIterator::current(SystemProc
} }
int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() { int SystemProcessInterface::SystemProcesses::ProcessIterator::next_process() {
struct dirent* entry;
if (!is_valid()) { if (!is_valid()) {
return OS_ERR; return OS_ERR;
} }
do { do {
if ((entry = os::readdir(_dir, _entry)) == NULL) { _entry = os::readdir(_dir);
// error if (_entry == NULL) {
// Error or reached end. Could use errno to distinguish those cases.
_valid = false; _valid = false;
return OS_ERR; return OS_ERR;
} }
@ -629,11 +628,8 @@ SystemProcessInterface::SystemProcesses::ProcessIterator::ProcessIterator() {
} }
bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() { bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() {
_dir = opendir("/proc"); _dir = os::opendir("/proc");
_entry = (struct dirent*)NEW_C_HEAP_ARRAY(char, sizeof(struct dirent) + _PC_NAME_MAX + 1, mtInternal); _entry = NULL;
if (NULL == _entry) {
return false;
}
_valid = true; _valid = true;
next_process(); next_process();
@ -641,12 +637,8 @@ bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() {
} }
SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() { SystemProcessInterface::SystemProcesses::ProcessIterator::~ProcessIterator() {
if (_entry != NULL) {
FREE_C_HEAP_ARRAY(char, _entry);
}
if (_dir != NULL) { if (_dir != NULL) {
closedir(_dir); os::closedir(_dir);
} }
} }

View file

@ -4308,9 +4308,7 @@ bool os::dir_is_empty(const char* path) {
// Scan the directory // Scan the directory
bool result = true; bool result = true;
char buf[sizeof(struct dirent) + MAX_PATH]; while (result && (ptr = readdir(dir)) != NULL) {
struct dirent *dbuf = (struct dirent *) buf;
while (result && (ptr = readdir(dir, dbuf)) != NULL) {
if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) { if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) {
result = false; result = false;
} }

View file

@ -68,34 +68,6 @@ inline void os::dll_unload(void *lib) { ::dlclose(lib); }
inline const int os::default_file_open_flags() { return 0;} inline const int os::default_file_open_flags() { return 0;}
inline DIR* os::opendir(const char* dirname) {
assert(dirname != NULL, "just checking");
return ::opendir(dirname);
}
inline int os::readdir_buf_size(const char *path) {
int size = pathconf(path, _PC_NAME_MAX);
return (size < 0 ? MAXPATHLEN : size) + sizeof(dirent) + 1;
}
inline struct dirent* os::readdir(DIR* dirp, dirent* dbuf) {
assert(dirp != NULL, "just checking");
dirent* p;
int status;
if((status = ::readdir_r(dirp, dbuf, &p)) != 0) {
errno = status;
return NULL;
} else {
return p;
}
}
inline int os::closedir(DIR *dirp) {
assert(dirp != NULL, "argument is NULL");
return ::closedir(dirp);
}
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -523,9 +523,8 @@ static char* get_user_name_slow(int vmid, TRAPS) {
// to determine the user name for the process id. // to determine the user name for the process id.
// //
struct dirent* dentry; struct dirent* dentry;
char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal);
errno = 0; errno = 0;
while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { while ((dentry = os::readdir(tmpdirp)) != NULL) {
// check if the directory entry is a hsperfdata file // check if the directory entry is a hsperfdata file
if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) { if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) {
@ -559,9 +558,8 @@ static char* get_user_name_slow(int vmid, TRAPS) {
} }
struct dirent* udentry; struct dirent* udentry;
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
errno = 0; errno = 0;
while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { while ((udentry = os::readdir(subdirp)) != NULL) {
if (filename_to_pid(udentry->d_name) == vmid) { if (filename_to_pid(udentry->d_name) == vmid) {
struct stat statbuf; struct stat statbuf;
@ -605,11 +603,9 @@ static char* get_user_name_slow(int vmid, TRAPS) {
} }
} }
os::closedir(subdirp); os::closedir(subdirp);
FREE_C_HEAP_ARRAY(char, udbuf);
FREE_C_HEAP_ARRAY(char, usrdir_name); FREE_C_HEAP_ARRAY(char, usrdir_name);
} }
os::closedir(tmpdirp); os::closedir(tmpdirp);
FREE_C_HEAP_ARRAY(char, tdbuf);
return(oldest_user); return(oldest_user);
} }
@ -736,10 +732,8 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// opendir/readdir. // opendir/readdir.
// //
struct dirent* entry; struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
errno = 0; errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { while ((entry = os::readdir(dirp)) != NULL) {
pid_t pid = filename_to_pid(entry->d_name); pid_t pid = filename_to_pid(entry->d_name);
@ -778,8 +772,6 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// close the directory and reset the current working directory // close the directory and reset the current working directory
close_directory_secure_cwd(dirp, saved_cwd_fd); close_directory_secure_cwd(dirp, saved_cwd_fd);
FREE_C_HEAP_ARRAY(char, dbuf);
} }
// make the user specific temporary directory. Returns true if // make the user specific temporary directory. Returns true if

View file

@ -1170,11 +1170,10 @@ DIR * os::opendir(const char *dirname) {
return dirp; return dirp;
} }
// parameter dbuf unused on Windows struct dirent * os::readdir(DIR *dirp) {
struct dirent * os::readdir(DIR *dirp, dirent *dbuf) {
assert(dirp != NULL, "just checking"); // hotspot change assert(dirp != NULL, "just checking"); // hotspot change
if (dirp->handle == INVALID_HANDLE_VALUE) { if (dirp->handle == INVALID_HANDLE_VALUE) {
return 0; return NULL;
} }
strcpy(dirp->dirent.d_name, dirp->find_data.cFileName); strcpy(dirp->dirent.d_name, dirp->find_data.cFileName);
@ -1182,7 +1181,7 @@ struct dirent * os::readdir(DIR *dirp, dirent *dbuf) {
if (!FindNextFile(dirp->handle, &dirp->find_data)) { if (!FindNextFile(dirp->handle, &dirp->find_data)) {
if (GetLastError() == ERROR_INVALID_HANDLE) { if (GetLastError() == ERROR_INVALID_HANDLE) {
errno = EBADF; errno = EBADF;
return 0; return NULL;
} }
FindClose(dirp->handle); FindClose(dirp->handle);
dirp->handle = INVALID_HANDLE_VALUE; dirp->handle = INVALID_HANDLE_VALUE;

View file

@ -57,14 +57,6 @@ inline bool os::must_commit_stack_guard_pages() {
return true; return true;
} }
inline int os::readdir_buf_size(const char *path)
{
/* As Windows doesn't use the directory entry buffer passed to
os::readdir() this can be as short as possible */
return 1;
}
// Bang the shadow pages if they need to be touched to be mapped. // Bang the shadow pages if they need to be touched to be mapped.
inline void os::map_stack_shadow_pages(address sp) { inline void os::map_stack_shadow_pages(address sp) {
// Write to each page of our new frame to force OS mapping. // Write to each page of our new frame to force OS mapping.

View file

@ -318,9 +318,8 @@ static char* get_user_name_slow(int vmid) {
// to determine the user name for the process id. // to determine the user name for the process id.
// //
struct dirent* dentry; struct dirent* dentry;
char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal);
errno = 0; errno = 0;
while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { while ((dentry = os::readdir(tmpdirp)) != NULL) {
// check if the directory entry is a hsperfdata file // check if the directory entry is a hsperfdata file
if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) { if (strncmp(dentry->d_name, PERFDATA_NAME, strlen(PERFDATA_NAME)) != 0) {
@ -353,9 +352,8 @@ static char* get_user_name_slow(int vmid) {
} }
struct dirent* udentry; struct dirent* udentry;
char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal);
errno = 0; errno = 0;
while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { while ((udentry = os::readdir(subdirp)) != NULL) {
if (filename_to_pid(udentry->d_name) == vmid) { if (filename_to_pid(udentry->d_name) == vmid) {
struct stat statbuf; struct stat statbuf;
@ -407,11 +405,9 @@ static char* get_user_name_slow(int vmid) {
} }
} }
os::closedir(subdirp); os::closedir(subdirp);
FREE_C_HEAP_ARRAY(char, udbuf);
FREE_C_HEAP_ARRAY(char, usrdir_name); FREE_C_HEAP_ARRAY(char, usrdir_name);
} }
os::closedir(tmpdirp); os::closedir(tmpdirp);
FREE_C_HEAP_ARRAY(char, tdbuf);
return(latest_user); return(latest_user);
} }
@ -642,9 +638,8 @@ static void cleanup_sharedmem_resources(const char* dirname) {
// opendir/readdir. // opendir/readdir.
// //
struct dirent* entry; struct dirent* entry;
char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal);
errno = 0; errno = 0;
while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { while ((entry = os::readdir(dirp)) != NULL) {
int pid = filename_to_pid(entry->d_name); int pid = filename_to_pid(entry->d_name);
@ -685,7 +680,6 @@ static void cleanup_sharedmem_resources(const char* dirname) {
errno = 0; errno = 0;
} }
os::closedir(dirp); os::closedir(dirp);
FREE_C_HEAP_ARRAY(char, dbuf);
} }
// create a file mapping object with the requested name, and size // create a file mapping object with the requested name, and size

View file

@ -82,7 +82,7 @@ template<size_t byte_size>
struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE> struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE>
{ {
template <typename T> template <typename T>
T operator()(const volatile T* p) const { register T t = Atomic::load(p); inlasm_acquire_reg(t); return t; } T operator()(const volatile T* p) const { T t = Atomic::load(p); inlasm_acquire_reg(t); return t; }
}; };
#undef inlasm_sync #undef inlasm_sync

View file

@ -279,11 +279,11 @@
address os::current_stack_pointer() { address os::current_stack_pointer() {
#if defined(__clang__) || defined(__llvm__) #if defined(__clang__) || defined(__llvm__)
register void *esp; void *esp;
__asm__("mov %%" SPELL_REG_SP ", %0":"=r"(esp)); __asm__("mov %%" SPELL_REG_SP ", %0":"=r"(esp));
return (address) esp; return (address) esp;
#elif defined(SPARC_WORKS) #elif defined(SPARC_WORKS)
register void *esp; void *esp;
__asm__("mov %%" SPELL_REG_SP ", %0":"=r"(esp)); __asm__("mov %%" SPELL_REG_SP ", %0":"=r"(esp));
return (address) ((char*)esp + sizeof(long)*2); return (address) ((char*)esp + sizeof(long)*2);
#else #else
@ -415,7 +415,7 @@ frame os::get_sender_for_C_frame(frame* fr) {
intptr_t* _get_previous_fp() { intptr_t* _get_previous_fp() {
#if defined(SPARC_WORKS) || defined(__clang__) || defined(__llvm__) #if defined(SPARC_WORKS) || defined(__clang__) || defined(__llvm__)
register intptr_t **ebp; intptr_t **ebp;
__asm__("mov %%" SPELL_REG_FP ", %0":"=r"(ebp)); __asm__("mov %%" SPELL_REG_FP ", %0":"=r"(ebp));
#else #else
register intptr_t **ebp __asm__ (SPELL_REG_FP); register intptr_t **ebp __asm__ (SPELL_REG_FP);

View file

@ -85,7 +85,7 @@ template<size_t byte_size>
struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE> struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE>
{ {
template <typename T> template <typename T>
T operator()(const volatile T* p) const { register T t = Atomic::load(p); inlasm_acquire_reg(t); return t; } T operator()(const volatile T* p) const { T t = Atomic::load(p); inlasm_acquire_reg(t); return t; }
}; };
#undef inlasm_sync #undef inlasm_sync

View file

@ -603,7 +603,9 @@ void os::print_register_info(outputStream *st, const void *context) {
st->print_cr("Register to memory mapping:"); st->print_cr("Register to memory mapping:");
st->cr(); st->cr();
// this is only for the "general purpose" registers st->print("pc ="); print_location(st, (intptr_t)uc->uc_mcontext.regs->nip);
st->print("lr ="); print_location(st, (intptr_t)uc->uc_mcontext.regs->link);
st->print("ctr ="); print_location(st, (intptr_t)uc->uc_mcontext.regs->ctr);
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
st->print("r%-2d=", i); st->print("r%-2d=", i);
print_location(st, uc->uc_mcontext.regs->gpr[i]); print_location(st, uc->uc_mcontext.regs->gpr[i]);

View file

@ -79,7 +79,7 @@ template<size_t byte_size>
struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE> struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE>
{ {
template <typename T> template <typename T>
T operator()(const volatile T* p) const { register T t = *p; inlasm_zarch_acquire(); return t; } T operator()(const volatile T* p) const { T t = *p; inlasm_zarch_acquire(); return t; }
}; };
#undef inlasm_compiler_barrier #undef inlasm_compiler_barrier

View file

@ -628,7 +628,19 @@ void os::print_context(outputStream *st, const void *context) {
} }
void os::print_register_info(outputStream *st, const void *context) { void os::print_register_info(outputStream *st, const void *context) {
st->print("Not ported\n"); if (context == NULL) return;
const ucontext_t *uc = (const ucontext_t*)context;
st->print_cr("Register to memory mapping:");
st->cr();
st->print("pc ="); print_location(st, (intptr_t)uc->uc_mcontext.psw.addr);
for (int i = 0; i < 16; i++) {
st->print("r%-2d=", i);
print_location(st, uc->uc_mcontext.gregs[i]);
}
st->cr();
} }
#ifndef PRODUCT #ifndef PRODUCT

View file

@ -95,11 +95,11 @@
address os::current_stack_pointer() { address os::current_stack_pointer() {
#ifdef SPARC_WORKS #ifdef SPARC_WORKS
register void *esp; void *esp;
__asm__("mov %%" SPELL_REG_SP ", %0":"=r"(esp)); __asm__("mov %%" SPELL_REG_SP ", %0":"=r"(esp));
return (address) ((char*)esp + sizeof(long)*2); return (address) ((char*)esp + sizeof(long)*2);
#elif defined(__clang__) #elif defined(__clang__)
intptr_t* esp; void* esp;
__asm__ __volatile__ ("mov %%" SPELL_REG_SP ", %0":"=r"(esp):); __asm__ __volatile__ ("mov %%" SPELL_REG_SP ", %0":"=r"(esp):);
return (address) esp; return (address) esp;
#else #else
@ -233,7 +233,7 @@ frame os::get_sender_for_C_frame(frame* fr) {
intptr_t* _get_previous_fp() { intptr_t* _get_previous_fp() {
#ifdef SPARC_WORKS #ifdef SPARC_WORKS
register intptr_t **ebp; intptr_t **ebp;
__asm__("mov %%" SPELL_REG_FP ", %0":"=r"(ebp)); __asm__("mov %%" SPELL_REG_FP ", %0":"=r"(ebp));
#elif defined(__clang__) #elif defined(__clang__)
intptr_t **ebp; intptr_t **ebp;

View file

@ -4564,7 +4564,7 @@ char *ADLParser::get_paren_expr(const char *description, bool include_location)
// string(still inside the file buffer). Returns a pointer to the string or // string(still inside the file buffer). Returns a pointer to the string or
// NULL if some other token is found instead. // NULL if some other token is found instead.
char *ADLParser::get_ident_common(bool do_preproc) { char *ADLParser::get_ident_common(bool do_preproc) {
register char c; char c;
char *start; // Pointer to start of token char *start; // Pointer to start of token
char *end; // Pointer to end of token char *end; // Pointer to end of token
@ -4762,7 +4762,7 @@ char *ADLParser::get_unique_ident(FormDict& dict, const char* nameDescription){
// invokes a parse_err if the next token is not an integer. // invokes a parse_err if the next token is not an integer.
// This routine does not leave the integer null-terminated. // This routine does not leave the integer null-terminated.
int ADLParser::get_int(void) { int ADLParser::get_int(void) {
register char c; char c;
char *start; // Pointer to start of token char *start; // Pointer to start of token
char *end; // Pointer to end of token char *end; // Pointer to end of token
int result; // Storage for integer result int result; // Storage for integer result

View file

@ -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. // 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
@ -551,6 +551,10 @@ void ArchDesc::buildMList(MatchNode *node, const char *rootOp,
assert(0, "fatal error"); assert(0, "fatal error");
} }
if (node == NULL) {
fprintf(stderr, "error: node is NULL\n");
assert(0, "fatal error");
}
// Build MatchLists for children // Build MatchLists for children
// Check each child for an internal operand name, and use that name // Check each child for an internal operand name, and use that name
// for the parent's matchlist entry if it exists // for the parent's matchlist entry if it exists

View file

@ -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. * 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
@ -43,7 +43,7 @@ void Chunk::chop() {
while( k ) { while( k ) {
Chunk *tmp = k->_next; Chunk *tmp = k->_next;
// clear out this chunk (to detect allocation bugs) // clear out this chunk (to detect allocation bugs)
memset(k, 0xBAADBABE, k->_len); memset(k, 0xBE, k->_len);
free(k); // Free chunk (was malloc'd) free(k); // Free chunk (was malloc'd)
k = tmp; k = tmp;
} }
@ -79,7 +79,7 @@ Arena::Arena( Arena *a )
// Total of all Chunks in arena // Total of all Chunks in arena
size_t Arena::used() const { size_t Arena::used() const {
size_t sum = _chunk->_len - (_max-_hwm); // Size leftover in this Chunk size_t sum = _chunk->_len - (_max-_hwm); // Size leftover in this Chunk
register Chunk *k = _first; Chunk *k = _first;
while( k != _chunk) { // Whilst have Chunks in a row while( k != _chunk) { // Whilst have Chunks in a row
sum += k->_len; // Total size of this Chunk sum += k->_len; // Total size of this Chunk
k = k->_next; // Bump along to next Chunk k = k->_next; // Bump along to next Chunk
@ -93,7 +93,7 @@ void* Arena::grow( size_t x ) {
// Get minimal required size. Either real big, or even bigger for giant objs // Get minimal required size. Either real big, or even bigger for giant objs
size_t len = max(x, Chunk::size); size_t len = max(x, Chunk::size);
register Chunk *k = _chunk; // Get filled-up chunk address Chunk *k = _chunk; // Get filled-up chunk address
_chunk = new (len) Chunk(len); _chunk = new (len) Chunk(len);
if( k ) k->_next = _chunk; // Append new chunk to end of linked list if( k ) k->_next = _chunk; // Append new chunk to end of linked list

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2013, 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. * 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
@ -503,8 +503,10 @@ class dfa_shared_preds {
return true; return true;
case '|': case '|':
if (prev != pred && *(prev-1) == '|') return true; if (prev != pred && *(prev-1) == '|') return true;
break;
case '&': case '&':
if (prev != pred && *(prev-1) == '&') return true; if (prev != pred && *(prev-1) == '&') return true;
break;
default: default:
return false; return false;
} }
@ -719,19 +721,19 @@ const char *Expr::compute_external(const Expr *c1, const Expr *c2) {
if( c1->_external_name != NULL ) { if( c1->_external_name != NULL ) {
sprintf(string_buffer, "%s", c1->as_string()); sprintf(string_buffer, "%s", c1->as_string());
if( !c2->is_zero() ) { if( !c2->is_zero() ) {
strcat( string_buffer, "+"); strncat(string_buffer, "+", STRING_BUFFER_LENGTH);
strcat( string_buffer, c2->as_string()); strncat(string_buffer, c2->as_string(), STRING_BUFFER_LENGTH);
} }
result = strdup(string_buffer); result = strdup(string_buffer);
} }
else if( c2->_external_name != NULL ) { else if( c2->_external_name != NULL ) {
if( !c1->is_zero() ) { if( !c1->is_zero() ) {
sprintf(string_buffer, "%s", c1->as_string()); sprintf(string_buffer, "%s", c1->as_string());
strcat( string_buffer, " + "); strncat(string_buffer, " + ", STRING_BUFFER_LENGTH);
} else { } else {
string_buffer[0] = '\0'; string_buffer[0] = '\0';
} }
strcat( string_buffer, c2->_external_name ); strncat(string_buffer, c2->_external_name, STRING_BUFFER_LENGTH);
result = strdup(string_buffer); result = strdup(string_buffer);
} }
return result; return result;
@ -741,8 +743,8 @@ const char *Expr::compute_expr(const Expr *c1, const Expr *c2) {
if( !c1->is_zero() ) { if( !c1->is_zero() ) {
sprintf( string_buffer, "%s", c1->_expr); sprintf( string_buffer, "%s", c1->_expr);
if( !c2->is_zero() ) { if( !c2->is_zero() ) {
strcat( string_buffer, "+"); strncat(string_buffer, "+", STRING_BUFFER_LENGTH);
strcat( string_buffer, c2->_expr); strncat(string_buffer, c2->_expr, STRING_BUFFER_LENGTH);
} }
} }
else if( !c2->is_zero() ) { else if( !c2->is_zero() ) {

View file

@ -283,9 +283,9 @@ void Dict::print(PrintKeyOrValue print_key, PrintKeyOrValue print_value) {
// limited to MAXID characters in length. Experimental evidence on 150K of // limited to MAXID characters in length. Experimental evidence on 150K of
// C text shows excellent spreading of values for any size hash table. // C text shows excellent spreading of values for any size hash table.
int hashstr(const void *t) { int hashstr(const void *t) {
register char c, k = 0; char c, k = 0;
register int sum = 0; int sum = 0;
register const char *s = (const char *)t; const char *s = (const char *)t;
while (((c = s[k]) != '\0') && (k < MAXID-1)) { // Get characters till nul while (((c = s[k]) != '\0') && (k < MAXID-1)) { // Get characters till nul
c = (char) ((c << 1) + 1); // Characters are always odd! c = (char) ((c << 1) + 1); // Characters are always odd!

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2014, 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. * 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
@ -95,8 +95,11 @@ void FileBuff::file_error(int flag, int linenum, const char *fmt, ...)
va_start(args, fmt); va_start(args, fmt);
switch (flag) { switch (flag) {
case 0: _AD._warnings += _AD.emit_msg(0, flag, linenum, fmt, args); case 0: _AD._warnings += _AD.emit_msg(0, flag, linenum, fmt, args);
break;
case 1: _AD._syntax_errs += _AD.emit_msg(0, flag, linenum, fmt, args); case 1: _AD._syntax_errs += _AD.emit_msg(0, flag, linenum, fmt, args);
break;
case 2: _AD._semantic_errs += _AD.emit_msg(0, flag, linenum, fmt, args); case 2: _AD._semantic_errs += _AD.emit_msg(0, flag, linenum, fmt, args);
break;
default: assert(0, ""); break; default: assert(0, ""); break;
} }
va_end(args); va_end(args);

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1998, 2016, 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. * 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
@ -3634,7 +3634,7 @@ int MatchNode::cisc_spill_match(FormDict& globals, RegisterForm* registers, Matc
&& (is_load_from_memory(mRule2->_opType) == data_type) // reg vs. (load memory) && (is_load_from_memory(mRule2->_opType) == data_type) // reg vs. (load memory)
&& (name_left != NULL) // NOT (load) && (name_left != NULL) // NOT (load)
&& (name_right == NULL) ) { // NOT (load memory foo) && (name_right == NULL) ) { // NOT (load memory foo)
const Form *form2_left = name_left ? globals[name_left] : NULL; const Form *form2_left = globals[name_left];
if( form2_left && form2_left->is_cisc_mem(globals) ) { if( form2_left && form2_left->is_cisc_mem(globals) ) {
cisc_spillable = Is_cisc_spillable; cisc_spillable = Is_cisc_spillable;
operand = _name; operand = _name;
@ -3645,7 +3645,7 @@ int MatchNode::cisc_spill_match(FormDict& globals, RegisterForm* registers, Matc
} }
} }
// Detect reg vs memory // Detect reg vs memory
else if( form->is_cisc_reg(globals) && form2->is_cisc_mem(globals) ) { else if (form->is_cisc_reg(globals) && form2 != NULL && form2->is_cisc_mem(globals)) {
cisc_spillable = Is_cisc_spillable; cisc_spillable = Is_cisc_spillable;
operand = _name; operand = _name;
reg_type = _result; reg_type = _result;
@ -3710,8 +3710,12 @@ int MatchRule::matchrule_cisc_spill_match(FormDict& globals, RegisterForm* regi
} }
// Check right operands: recursive walk to identify reg->mem operand // Check right operands: recursive walk to identify reg->mem operand
if( (_rChild == NULL) && (mRule2->_rChild == NULL) ) { if (_rChild == NULL) {
if (mRule2->_rChild == NULL) {
right_spillable = Maybe_cisc_spillable; right_spillable = Maybe_cisc_spillable;
} else {
assert(0, "_rChild should not be NULL");
}
} else { } else {
right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type); right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type);
} }

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2015, 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. * 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
@ -58,7 +58,7 @@ int main(int argc, char *argv[])
// Read command line arguments and file names // Read command line arguments and file names
for( int i = 1; i < argc; i++ ) { // For all arguments for( int i = 1; i < argc; i++ ) { // For all arguments
register char *s = argv[i]; // Get option/filename char *s = argv[i]; // Get option/filename
if( *s++ == '-' ) { // It's a flag? (not a filename) if( *s++ == '-' ) { // It's a flag? (not a filename)
if( !*s ) { // Stand-alone `-' means stdin if( !*s ) { // Stand-alone `-' means stdin
@ -142,7 +142,7 @@ int main(int argc, char *argv[])
const char *base = strip_ext(strdup(argv[i])); const char *base = strip_ext(strdup(argv[i]));
char *temp = base_plus_suffix("dfa_",base); char *temp = base_plus_suffix("dfa_",base);
AD._DFA_file._name = base_plus_suffix(temp,".cpp"); AD._DFA_file._name = base_plus_suffix(temp,".cpp");
delete temp; delete[] temp;
temp = base_plus_suffix("ad_",base); temp = base_plus_suffix("ad_",base);
AD._CPP_file._name = base_plus_suffix(temp,".cpp"); AD._CPP_file._name = base_plus_suffix(temp,".cpp");
AD._CPP_CLONE_file._name = base_plus_suffix(temp,"_clone.cpp"); AD._CPP_CLONE_file._name = base_plus_suffix(temp,"_clone.cpp");
@ -153,13 +153,13 @@ int main(int argc, char *argv[])
AD._CPP_PEEPHOLE_file._name = base_plus_suffix(temp,"_peephole.cpp"); AD._CPP_PEEPHOLE_file._name = base_plus_suffix(temp,"_peephole.cpp");
AD._CPP_PIPELINE_file._name = base_plus_suffix(temp,"_pipeline.cpp"); AD._CPP_PIPELINE_file._name = base_plus_suffix(temp,"_pipeline.cpp");
AD._HPP_file._name = base_plus_suffix(temp,".hpp"); AD._HPP_file._name = base_plus_suffix(temp,".hpp");
delete temp; delete[] temp;
temp = base_plus_suffix("adGlobals_",base); temp = base_plus_suffix("adGlobals_",base);
AD._VM_file._name = base_plus_suffix(temp,".hpp"); AD._VM_file._name = base_plus_suffix(temp,".hpp");
delete temp; delete[] temp;
temp = base_plus_suffix("bugs_",base); temp = base_plus_suffix("bugs_",base);
AD._bug_file._name = base_plus_suffix(temp,".out"); AD._bug_file._name = base_plus_suffix(temp,".out");
delete temp; delete[] temp;
} // End of files vs options... } // End of files vs options...
} // End of while have command line arguments } // End of while have command line arguments

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1998, 2017, 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. * 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
@ -1936,6 +1936,7 @@ public:
_AD.syntax_err( _ins_encode._linenum, _AD.syntax_err( _ins_encode._linenum,
"Parameter %s not passed to enc_class %s from instruct %s.\n", "Parameter %s not passed to enc_class %s from instruct %s.\n",
rep_var, _encoding._name, _inst._ident); rep_var, _encoding._name, _inst._ident);
assert(false, "inst_rep_var == NULL, cannot continue.");
} }
// Check if instruction's actual parameter is a local name in the instruction // Check if instruction's actual parameter is a local name in the instruction
@ -1976,7 +1977,7 @@ public:
} }
else { else {
// Check for unimplemented functionality before hard failure // Check for unimplemented functionality before hard failure
assert( strcmp(opc->_ident,"label")==0, "Unimplemented() Label"); assert(opc != NULL && strcmp(opc->_ident, "label") == 0, "Unimplemented Label");
assert(false, "ShouldNotReachHere()"); assert(false, "ShouldNotReachHere()");
} }
} // done checking which operand this is. } // done checking which operand this is.
@ -2450,7 +2451,7 @@ private:
} }
else { else {
// Check for unimplemented functionality before hard failure // Check for unimplemented functionality before hard failure
assert( strcmp(opc->_ident,"label")==0, "Unimplemented() Label"); assert(opc != NULL && strcmp(opc->_ident, "label") == 0, "Unimplemented Label");
assert(false, "ShouldNotReachHere()"); assert(false, "ShouldNotReachHere()");
} }
// all done // all done
@ -3305,16 +3306,19 @@ void ArchDesc::defineClasses(FILE *fp) {
// Output the definitions for machine node specific pipeline data // Output the definitions for machine node specific pipeline data
_machnodes.reset(); _machnodes.reset();
if (_pipeline != NULL) {
for ( ; (machnode = (MachNodeForm*)_machnodes.iter()) != NULL; ) { for ( ; (machnode = (MachNodeForm*)_machnodes.iter()) != NULL; ) {
fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %sNode::pipeline() const { return (&pipeline_class_%03d); }\n", fprintf(_CPP_PIPELINE_file._fp, "const Pipeline * %sNode::pipeline() const { return (&pipeline_class_%03d); }\n",
machnode->_ident, ((class PipeClassForm *)_pipeline->_classdict[machnode->_machnode_pipe])->_num); machnode->_ident, ((class PipeClassForm *)_pipeline->_classdict[machnode->_machnode_pipe])->_num);
} }
}
fprintf(_CPP_PIPELINE_file._fp, "\n"); fprintf(_CPP_PIPELINE_file._fp, "\n");
// Output the definitions for instruction pipeline static data references // Output the definitions for instruction pipeline static data references
_instructions.reset(); _instructions.reset();
if (_pipeline != NULL) {
for ( ; (instr = (InstructForm*)_instructions.iter()) != NULL; ) { for ( ; (instr = (InstructForm*)_instructions.iter()) != NULL; ) {
if (instr->_ins_pipe && _pipeline->_classlist.search(instr->_ins_pipe)) { if (instr->_ins_pipe && _pipeline->_classlist.search(instr->_ins_pipe)) {
fprintf(_CPP_PIPELINE_file._fp, "\n"); fprintf(_CPP_PIPELINE_file._fp, "\n");
@ -3325,6 +3329,7 @@ void ArchDesc::defineClasses(FILE *fp) {
} }
} }
} }
}
// -------------------------------- maps ------------------------------------ // -------------------------------- maps ------------------------------------

View file

@ -450,6 +450,7 @@ void AOTCodeHeap::link_shared_runtime_symbols() {
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_object_notify", address, JVMCIRuntime::object_notify); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_object_notify", address, JVMCIRuntime::object_notify);
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_object_notifyAll", address, JVMCIRuntime::object_notifyAll); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_object_notifyAll", address, JVMCIRuntime::object_notifyAll);
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_OSR_migration_end", address, SharedRuntime::OSR_migration_end); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_OSR_migration_end", address, SharedRuntime::OSR_migration_end);
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_enable_stack_reserved_zone", address, SharedRuntime::enable_stack_reserved_zone);
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_resolve_dynamic_invoke", address, CompilerRuntime::resolve_dynamic_invoke); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_resolve_dynamic_invoke", address, CompilerRuntime::resolve_dynamic_invoke);
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_resolve_string_by_symbol", address, CompilerRuntime::resolve_string_by_symbol); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_resolve_string_by_symbol", address, CompilerRuntime::resolve_string_by_symbol);
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_resolve_klass_by_symbol", address, CompilerRuntime::resolve_klass_by_symbol); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_resolve_klass_by_symbol", address, CompilerRuntime::resolve_klass_by_symbol);
@ -549,7 +550,7 @@ void AOTCodeHeap::link_global_lib_symbols() {
_lib_symbols_initialized = true; _lib_symbols_initialized = true;
CollectedHeap* heap = Universe::heap(); CollectedHeap* heap = Universe::heap();
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_card_table_address", address, ci_card_table_address()); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_card_table_address", address, (BarrierSet::barrier_set()->is_a(BarrierSet::CardTableBarrierSet) ? ci_card_table_address() : NULL));
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_heap_top_address", address, (heap->supports_inline_contig_alloc() ? heap->top_addr() : NULL)); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_heap_top_address", address, (heap->supports_inline_contig_alloc() ? heap->top_addr() : NULL));
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_heap_end_address", address, (heap->supports_inline_contig_alloc() ? heap->end_addr() : NULL)); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_heap_end_address", address, (heap->supports_inline_contig_alloc() ? heap->end_addr() : NULL));
SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_polling_page", address, os::get_polling_page()); SET_AOT_GLOBAL_SYMBOL_VALUE("_aot_polling_page", address, os::get_polling_page());

View file

@ -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. * 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
@ -187,7 +187,7 @@ void CodeBuffer::freeze_section(CodeSection* cs) {
cs->_limit = new_limit; cs->_limit = new_limit;
cs->_locs_limit = new_locs_limit; cs->_locs_limit = new_locs_limit;
cs->_frozen = true; cs->_frozen = true;
if (!next_cs->is_allocated() && !next_cs->is_frozen()) { if (next_cs != NULL && !next_cs->is_allocated() && !next_cs->is_frozen()) {
// Give remaining buffer space to the following section. // Give remaining buffer space to the following section.
next_cs->initialize(new_limit, old_limit - new_limit); next_cs->initialize(new_limit, old_limit - new_limit);
next_cs->initialize_shared_locs(new_locs_limit, next_cs->initialize_shared_locs(new_locs_limit,
@ -494,11 +494,14 @@ void CodeBuffer::compute_final_layout(CodeBuffer* dest) const {
// Compute initial padding; assign it to the previous non-empty guy. // Compute initial padding; assign it to the previous non-empty guy.
// Cf. figure_expanded_capacities. // Cf. figure_expanded_capacities.
csize_t padding = cs->align_at_start(buf_offset) - buf_offset; csize_t padding = cs->align_at_start(buf_offset) - buf_offset;
if (prev_dest_cs != NULL) {
if (padding != 0) { if (padding != 0) {
buf_offset += padding; buf_offset += padding;
assert(prev_dest_cs != NULL, "sanity");
prev_dest_cs->_limit += padding; prev_dest_cs->_limit += padding;
} }
} else {
guarantee(padding == 0, "In first iteration no padding should be needed.");
}
#ifdef ASSERT #ifdef ASSERT
if (prev_cs != NULL && prev_cs->is_frozen() && n < (SECT_LIMIT - 1)) { if (prev_cs != NULL && prev_cs->is_frozen() && n < (SECT_LIMIT - 1)) {
// Make sure the ends still match up. // Make sure the ends still match up.

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2016, 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. * 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
@ -1386,7 +1386,7 @@ void SubstitutionResolver::block_do(BlockBegin* block) {
n->values_do(this); n->values_do(this);
// need to remove this instruction from the instruction stream // need to remove this instruction from the instruction stream
if (n->subst() != n) { if (n->subst() != n) {
assert(last != NULL, "must have last"); guarantee(last != NULL, "must have last");
last->set_next(n->next()); last->set_next(n->next());
} else { } else {
last = n; last = n;

View file

@ -2311,7 +2311,9 @@ void LIRGenerator::do_TableSwitch(TableSwitch* x) {
if (compilation()->env()->comp_level() == CompLevel_full_profile && UseSwitchProfiling) { if (compilation()->env()->comp_level() == CompLevel_full_profile && UseSwitchProfiling) {
ciMethod* method = x->state()->scope()->method(); ciMethod* method = x->state()->scope()->method();
ciMethodData* md = method->method_data_or_null(); ciMethodData* md = method->method_data_or_null();
assert(md != NULL, "Sanity");
ciProfileData* data = md->bci_to_data(x->state()->bci()); ciProfileData* data = md->bci_to_data(x->state()->bci());
assert(data != NULL, "must have profiling data");
assert(data->is_MultiBranchData(), "bad profile data?"); assert(data->is_MultiBranchData(), "bad profile data?");
int default_count_offset = md->byte_offset_of_slot(data, MultiBranchData::default_count_offset()); int default_count_offset = md->byte_offset_of_slot(data, MultiBranchData::default_count_offset());
LIR_Opr md_reg = new_register(T_METADATA); LIR_Opr md_reg = new_register(T_METADATA);
@ -2367,7 +2369,9 @@ void LIRGenerator::do_LookupSwitch(LookupSwitch* x) {
if (compilation()->env()->comp_level() == CompLevel_full_profile && UseSwitchProfiling) { if (compilation()->env()->comp_level() == CompLevel_full_profile && UseSwitchProfiling) {
ciMethod* method = x->state()->scope()->method(); ciMethod* method = x->state()->scope()->method();
ciMethodData* md = method->method_data_or_null(); ciMethodData* md = method->method_data_or_null();
assert(md != NULL, "Sanity");
ciProfileData* data = md->bci_to_data(x->state()->bci()); ciProfileData* data = md->bci_to_data(x->state()->bci());
assert(data != NULL, "must have profiling data");
assert(data->is_MultiBranchData(), "bad profile data?"); assert(data->is_MultiBranchData(), "bad profile data?");
int default_count_offset = md->byte_offset_of_slot(data, MultiBranchData::default_count_offset()); int default_count_offset = md->byte_offset_of_slot(data, MultiBranchData::default_count_offset());
LIR_Opr md_reg = new_register(T_METADATA); LIR_Opr md_reg = new_register(T_METADATA);
@ -3076,6 +3080,7 @@ void LIRGenerator::profile_arguments(ProfileCall* x) {
if (compilation()->profile_arguments()) { if (compilation()->profile_arguments()) {
int bci = x->bci_of_invoke(); int bci = x->bci_of_invoke();
ciMethodData* md = x->method()->method_data_or_null(); ciMethodData* md = x->method()->method_data_or_null();
assert(md != NULL, "Sanity");
ciProfileData* data = md->bci_to_data(bci); ciProfileData* data = md->bci_to_data(bci);
if (data != NULL) { if (data != NULL) {
if ((data->is_CallTypeData() && data->as_CallTypeData()->has_arguments()) || if ((data->is_CallTypeData() && data->as_CallTypeData()->has_arguments()) ||
@ -3212,6 +3217,7 @@ void LIRGenerator::do_ProfileCall(ProfileCall* x) {
void LIRGenerator::do_ProfileReturnType(ProfileReturnType* x) { void LIRGenerator::do_ProfileReturnType(ProfileReturnType* x) {
int bci = x->bci_of_invoke(); int bci = x->bci_of_invoke();
ciMethodData* md = x->method()->method_data_or_null(); ciMethodData* md = x->method()->method_data_or_null();
assert(md != NULL, "Sanity");
ciProfileData* data = md->bci_to_data(bci); ciProfileData* data = md->bci_to_data(bci);
if (data != NULL) { if (data != NULL) {
assert(data->is_CallTypeData() || data->is_VirtualCallTypeData(), "wrong profile data type"); assert(data->is_CallTypeData() || data->is_VirtualCallTypeData(), "wrong profile data type");

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2005, 2017, 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. * 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
@ -3954,7 +3954,7 @@ void MoveResolver::resolve_mappings() {
if (!processed_interval) { if (!processed_interval) {
// no move could be processed because there is a cycle in the move list // no move could be processed because there is a cycle in the move list
// (e.g. r1 -> r2, r2 -> r1), so one interval must be spilled to memory // (e.g. r1 -> r2, r2 -> r1), so one interval must be spilled to memory
assert(spill_candidate != -1, "no interval in register for spilling found"); guarantee(spill_candidate != -1, "no interval in register for spilling found");
// create a new spill interval and assign a stack slot to it // create a new spill interval and assign a stack slot to it
Interval* from_interval = _mapping_from.at(spill_candidate); Interval* from_interval = _mapping_from.at(spill_candidate);
@ -6301,7 +6301,8 @@ void ControlFlowOptimizer::delete_unnecessary_jumps(BlockList* code) {
assert(prev_branch->cond() == prev_cmp->condition(), "should be the same"); assert(prev_branch->cond() == prev_cmp->condition(), "should be the same");
} }
} }
assert(prev_cmp != NULL, "should have found comp instruction for branch"); // Guarantee because it is dereferenced below.
guarantee(prev_cmp != NULL, "should have found comp instruction for branch");
if (prev_branch->block() == code->at(i + 1) && prev_branch->info() == NULL) { if (prev_branch->block() == code->at(i + 1) && prev_branch->info() == NULL) {
TRACE_LINEAR_SCAN(3, tty->print_cr("Negating conditional branch and deleting unconditional branch at end of block B%d", block->block_id())); TRACE_LINEAR_SCAN(3, tty->print_cr("Negating conditional branch and deleting unconditional branch at end of block B%d", block->block_id()));

View file

@ -48,14 +48,13 @@ ClassListParser::ClassListParser(const char* file) {
_instance = this; _instance = this;
_classlist_file = file; _classlist_file = file;
_file = fopen(file, "r"); _file = fopen(file, "r");
_line_no = 0;
_interfaces = new (ResourceObj::C_HEAP, mtClass) GrowableArray<int>(10, true);
if (_file == NULL) { if (_file == NULL) {
char errmsg[JVM_MAXPATHLEN]; char errmsg[JVM_MAXPATHLEN];
os::lasterror(errmsg, JVM_MAXPATHLEN); os::lasterror(errmsg, JVM_MAXPATHLEN);
vm_exit_during_initialization("Loading classlist failed", errmsg); vm_exit_during_initialization("Loading classlist failed", errmsg);
} }
_line_no = 0;
_interfaces = new (ResourceObj::C_HEAP, mtClass) GrowableArray<int>(10, true);
} }
ClassListParser::~ClassListParser() { ClassListParser::~ClassListParser() {

View file

@ -4129,37 +4129,6 @@ oop java_lang_ClassLoader::unnamedModule(oop loader) {
return loader->obj_field(unnamedModule_offset); return loader->obj_field(unnamedModule_offset);
} }
// Caller needs ResourceMark.
const char* java_lang_ClassLoader::describe_external(const oop loader) {
ClassLoaderData *cld = ClassLoaderData::class_loader_data(loader);
const char* name = cld->loader_name_and_id();
// bootstrap loader
if (loader == NULL) {
return name;
}
bool well_known_loader = SystemDictionary::is_system_class_loader(loader) ||
SystemDictionary::is_platform_class_loader(loader);
stringStream ss;
ss.print("%s (instance of %s", name, loader->klass()->external_name());
if (!well_known_loader) {
oop pl = java_lang_ClassLoader::parent(loader);
ClassLoaderData *pl_cld = ClassLoaderData::class_loader_data(pl);
const char* parentName = pl_cld->loader_name_and_id();
if (pl != NULL) {
ss.print(", child of %s %s", parentName, pl->klass()->external_name());
} else {
// bootstrap loader
ss.print(", child of %s", parentName);
}
}
ss.print(")");
return ss.as_string();
}
// Support for java_lang_System // Support for java_lang_System
// //
#define SYSTEM_FIELDS_DO(macro) \ #define SYSTEM_FIELDS_DO(macro) \

View file

@ -1310,12 +1310,6 @@ class java_lang_ClassLoader : AllStatic {
// Debugging // Debugging
friend class JavaClasses; friend class JavaClasses;
friend class ClassFileParser; // access to number_of_fake_fields friend class ClassFileParser; // access to number_of_fake_fields
// Describe ClassLoader for exceptions, tracing ...
// Prints "<name>" (instance of <classname>, child of "<name>" <classname>).
// If a classloader has no name, it prints <unnamed> instead. The output
// for well known loaders (system/platform) is abbreviated.
static const char* describe_external(const oop loader);
}; };

View file

@ -387,7 +387,8 @@ ModuleEntry* ModuleEntryTable::new_entry(unsigned int hash, Handle module_handle
entry->set_is_patched(); entry->set_is_patched();
if (log_is_enabled(Trace, module, patch)) { if (log_is_enabled(Trace, module, patch)) {
ResourceMark rm; ResourceMark rm;
log_trace(module, patch)("Marked module %s as patched from --patch-module", name->as_C_string()); log_trace(module, patch)("Marked module %s as patched from --patch-module",
name != NULL ? name->as_C_string() : UNNAMED_MODULE);
} }
} }

View file

@ -1364,7 +1364,6 @@ InstanceKlass* SystemDictionary::load_shared_class(InstanceKlass* ik,
// notify a class loaded from shared object // notify a class loaded from shared object
ClassLoadingService::notify_class_loaded(ik, true /* shared class */); ClassLoadingService::notify_class_loaded(ik, true /* shared class */);
}
ik->set_has_passed_fingerprint_check(false); ik->set_has_passed_fingerprint_check(false);
if (UseAOT && ik->supers_have_passed_fingerprint_checks()) { if (UseAOT && ik->supers_have_passed_fingerprint_checks()) {
@ -1378,6 +1377,7 @@ InstanceKlass* SystemDictionary::load_shared_class(InstanceKlass* ik,
log_info(class, fingerprint)("%s : expected = " PTR64_FORMAT " actual = " PTR64_FORMAT, ik->external_name(), aot_fp, cds_fp); log_info(class, fingerprint)("%s : expected = " PTR64_FORMAT " actual = " PTR64_FORMAT, ik->external_name(), aot_fp, cds_fp);
} }
} }
}
return ik; return ik;
} }
@ -2084,9 +2084,9 @@ void SystemDictionary::check_constraints(unsigned int d_hash,
assert(check->is_instance_klass(), "noninstance in systemdictionary"); assert(check->is_instance_klass(), "noninstance in systemdictionary");
if ((defining == true) || (k != check)) { if ((defining == true) || (k != check)) {
throwException = true; throwException = true;
ss.print("loader %s", java_lang_ClassLoader::describe_external(class_loader())); ss.print("loader %s", loader_data->loader_name_and_id());
ss.print(" attempted duplicate %s definition for %s.", ss.print(" attempted duplicate %s definition for %s. (%s)",
k->external_kind(), k->external_name()); k->external_kind(), k->external_name(), k->class_in_module_of_loader(false, true));
} else { } else {
return; return;
} }
@ -2100,15 +2100,17 @@ void SystemDictionary::check_constraints(unsigned int d_hash,
if (throwException == false) { if (throwException == false) {
if (constraints()->check_or_update(k, class_loader, name) == false) { if (constraints()->check_or_update(k, class_loader, name) == false) {
throwException = true; throwException = true;
ss.print("loader constraint violation: loader %s", ss.print("loader constraint violation: loader %s", loader_data->loader_name_and_id());
java_lang_ClassLoader::describe_external(class_loader()));
ss.print(" wants to load %s %s.", ss.print(" wants to load %s %s.",
k->external_kind(), k->external_name()); k->external_kind(), k->external_name());
Klass *existing_klass = constraints()->find_constrained_klass(name, class_loader); Klass *existing_klass = constraints()->find_constrained_klass(name, class_loader);
if (existing_klass->class_loader() != class_loader()) { if (existing_klass->class_loader() != class_loader()) {
ss.print(" A different %s with the same name was previously loaded by %s.", ss.print(" A different %s with the same name was previously loaded by %s. (%s)",
existing_klass->external_kind(), existing_klass->external_kind(),
java_lang_ClassLoader::describe_external(existing_klass->class_loader())); existing_klass->class_loader_data()->loader_name_and_id(),
existing_klass->class_in_module_of_loader(false, true));
} else {
ss.print(" (%s)", k->class_in_module_of_loader(false, true));
} }
} }
} }

View file

@ -766,10 +766,11 @@ bool SystemDictionaryShared::add_verification_constraint(Klass* k, Symbol* name,
SharedDictionaryEntry* entry = ((SharedDictionary*)(k->class_loader_data()->dictionary()))->find_entry_for(k); SharedDictionaryEntry* entry = ((SharedDictionary*)(k->class_loader_data()->dictionary()))->find_entry_for(k);
ResourceMark rm; ResourceMark rm;
// Lambda classes are not archived and will be regenerated at runtime. // Lambda classes are not archived and will be regenerated at runtime.
if (entry == NULL && strstr(k->name()->as_C_string(), "Lambda$") != NULL) { if (entry == NULL) {
guarantee(strstr(k->name()->as_C_string(), "Lambda$") != NULL,
"class should be in dictionary before being verified");
return true; return true;
} }
assert(entry != NULL, "class should be in dictionary before being verified");
entry->add_verification_constraint(name, from_name, from_field_is_protected, entry->add_verification_constraint(name, from_name, from_field_is_protected,
from_is_array, from_is_object); from_is_array, from_is_object);
if (entry->is_builtin()) { if (entry->is_builtin()) {

View file

@ -719,7 +719,8 @@ void ClassVerifier::verify_method(const methodHandle& m, TRAPS) {
ResourceMark rm(THREAD); ResourceMark rm(THREAD);
LogStream ls(lt); LogStream ls(lt);
current_frame.print_on(&ls); current_frame.print_on(&ls);
lt.print("offset = %d, opcode = %s", bci, Bytecodes::name(opcode)); lt.print("offset = %d, opcode = %s", bci,
opcode == Bytecodes::_illegal ? "illegal" : Bytecodes::name(opcode));
} }
// Make sure wide instruction is in correct format // Make sure wide instruction is in correct format

View file

@ -1363,22 +1363,22 @@ void CodeCache::report_codemem_full(int code_blob_type, bool print) {
const char *msg1 = msg1_stream.as_string(); const char *msg1 = msg1_stream.as_string();
const char *msg2 = msg2_stream.as_string(); const char *msg2 = msg2_stream.as_string();
log_warning(codecache)(msg1); log_warning(codecache)("%s", msg1);
log_warning(codecache)(msg2); log_warning(codecache)("%s", msg2);
warning(msg1); warning("%s", msg1);
warning(msg2); warning("%s", msg2);
} else { } else {
const char *msg1 = "CodeCache is full. Compiler has been disabled."; const char *msg1 = "CodeCache is full. Compiler has been disabled.";
const char *msg2 = "Try increasing the code cache size using -XX:ReservedCodeCacheSize="; const char *msg2 = "Try increasing the code cache size using -XX:ReservedCodeCacheSize=";
log_warning(codecache)(msg1); log_warning(codecache)("%s", msg1);
log_warning(codecache)(msg2); log_warning(codecache)("%s", msg2);
warning(msg1); warning("%s", msg1);
warning(msg2); warning("%s", msg2);
} }
ResourceMark rm; ResourceMark rm;
stringStream s; stringStream s;
// Dump code cache into a buffer before locking the tty, // Dump code cache into a buffer before locking the tty.
{ {
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
print_summary(&s); print_summary(&s);

View file

@ -117,8 +117,9 @@
_outbuf->print("%s", termString); _outbuf->print("%s", termString);
#endif #endif
const char blobTypeChar[] = {' ', 'N', 'I', 'X', 'Z', 'U', 'R', '?', 'D', 'T', 'E', 'S', 'A', 'M', 'B', 'L' }; const char blobTypeChar[] = {' ', 'C', 'N', 'I', 'X', 'Z', 'U', 'R', '?', 'D', 'T', 'E', 'S', 'A', 'M', 'B', 'L' };
const char* blobTypeName[] = {"noType" const char* blobTypeName[] = {"noType"
, "nMethod (under construction)"
, "nMethod (active)" , "nMethod (active)"
, "nMethod (inactive)" , "nMethod (inactive)"
, "nMethod (deopt)" , "nMethod (deopt)"
@ -156,7 +157,8 @@ static unsigned int nBlocks_t1 = 0; // counting "in_use" nmethods on
static unsigned int nBlocks_t2 = 0; // counting "in_use" nmethods only. static unsigned int nBlocks_t2 = 0; // counting "in_use" nmethods only.
static unsigned int nBlocks_alive = 0; // counting "not_used" and "not_entrant" nmethods only. static unsigned int nBlocks_alive = 0; // counting "not_used" and "not_entrant" nmethods only.
static unsigned int nBlocks_dead = 0; // counting "zombie" and "unloaded" methods only. static unsigned int nBlocks_dead = 0; // counting "zombie" and "unloaded" methods only.
static unsigned int nBlocks_unloaded = 0; // counting "unloaded" nmethods only. This is a transien state. static unsigned int nBlocks_inconstr = 0; // counting "inconstruction" nmethods only. This is a transient state.
static unsigned int nBlocks_unloaded = 0; // counting "unloaded" nmethods only. This is a transient state.
static unsigned int nBlocks_stub = 0; static unsigned int nBlocks_stub = 0;
static struct FreeBlk* FreeArray = NULL; static struct FreeBlk* FreeArray = NULL;
@ -226,6 +228,7 @@ void CodeHeapState::get_HeapStatGlobals(outputStream* out, const char* heapName)
nBlocks_t2 = CodeHeapStatArray[ix].nBlocks_t2; nBlocks_t2 = CodeHeapStatArray[ix].nBlocks_t2;
nBlocks_alive = CodeHeapStatArray[ix].nBlocks_alive; nBlocks_alive = CodeHeapStatArray[ix].nBlocks_alive;
nBlocks_dead = CodeHeapStatArray[ix].nBlocks_dead; nBlocks_dead = CodeHeapStatArray[ix].nBlocks_dead;
nBlocks_inconstr = CodeHeapStatArray[ix].nBlocks_inconstr;
nBlocks_unloaded = CodeHeapStatArray[ix].nBlocks_unloaded; nBlocks_unloaded = CodeHeapStatArray[ix].nBlocks_unloaded;
nBlocks_stub = CodeHeapStatArray[ix].nBlocks_stub; nBlocks_stub = CodeHeapStatArray[ix].nBlocks_stub;
FreeArray = CodeHeapStatArray[ix].FreeArray; FreeArray = CodeHeapStatArray[ix].FreeArray;
@ -248,6 +251,7 @@ void CodeHeapState::get_HeapStatGlobals(outputStream* out, const char* heapName)
nBlocks_t2 = 0; nBlocks_t2 = 0;
nBlocks_alive = 0; nBlocks_alive = 0;
nBlocks_dead = 0; nBlocks_dead = 0;
nBlocks_inconstr = 0;
nBlocks_unloaded = 0; nBlocks_unloaded = 0;
nBlocks_stub = 0; nBlocks_stub = 0;
FreeArray = NULL; FreeArray = NULL;
@ -274,6 +278,7 @@ void CodeHeapState::set_HeapStatGlobals(outputStream* out, const char* heapName)
CodeHeapStatArray[ix].nBlocks_t2 = nBlocks_t2; CodeHeapStatArray[ix].nBlocks_t2 = nBlocks_t2;
CodeHeapStatArray[ix].nBlocks_alive = nBlocks_alive; CodeHeapStatArray[ix].nBlocks_alive = nBlocks_alive;
CodeHeapStatArray[ix].nBlocks_dead = nBlocks_dead; CodeHeapStatArray[ix].nBlocks_dead = nBlocks_dead;
CodeHeapStatArray[ix].nBlocks_inconstr = nBlocks_inconstr;
CodeHeapStatArray[ix].nBlocks_unloaded = nBlocks_unloaded; CodeHeapStatArray[ix].nBlocks_unloaded = nBlocks_unloaded;
CodeHeapStatArray[ix].nBlocks_stub = nBlocks_stub; CodeHeapStatArray[ix].nBlocks_stub = nBlocks_stub;
CodeHeapStatArray[ix].FreeArray = FreeArray; CodeHeapStatArray[ix].FreeArray = FreeArray;
@ -554,6 +559,7 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
nBlocks_t2 = 0; nBlocks_t2 = 0;
nBlocks_alive = 0; nBlocks_alive = 0;
nBlocks_dead = 0; nBlocks_dead = 0;
nBlocks_inconstr = 0;
nBlocks_unloaded = 0; nBlocks_unloaded = 0;
nBlocks_stub = 0; nBlocks_stub = 0;
@ -587,6 +593,7 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
size_t disconnSpace = 0; size_t disconnSpace = 0;
size_t notentrSpace = 0; size_t notentrSpace = 0;
size_t deadSpace = 0; size_t deadSpace = 0;
size_t inconstrSpace = 0;
size_t unloadedSpace = 0; size_t unloadedSpace = 0;
size_t stubSpace = 0; size_t stubSpace = 0;
size_t freeSpace = 0; size_t freeSpace = 0;
@ -692,6 +699,10 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
nBlocks_dead++; nBlocks_dead++;
deadSpace += hb_bytelen; deadSpace += hb_bytelen;
break; break;
case nMethod_inconstruction:
nBlocks_inconstr++;
inconstrSpace += hb_bytelen;
break;
default: default:
break; break;
} }
@ -846,6 +857,7 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
StatArray[ix_beg].level = comp_lvl; StatArray[ix_beg].level = comp_lvl;
StatArray[ix_beg].compiler = cType; StatArray[ix_beg].compiler = cType;
break; break;
case nMethod_inconstruction: // let's count "in construction" nmethods here.
case nMethod_alive: case nMethod_alive:
StatArray[ix_beg].tx_count++; StatArray[ix_beg].tx_count++;
StatArray[ix_beg].tx_space += (unsigned short)hb_len; StatArray[ix_beg].tx_space += (unsigned short)hb_len;
@ -902,6 +914,7 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
StatArray[ix_end].level = comp_lvl; StatArray[ix_end].level = comp_lvl;
StatArray[ix_end].compiler = cType; StatArray[ix_end].compiler = cType;
break; break;
case nMethod_inconstruction: // let's count "in construction" nmethods here.
case nMethod_alive: case nMethod_alive:
StatArray[ix_beg].tx_count++; StatArray[ix_beg].tx_count++;
StatArray[ix_beg].tx_space += (unsigned short)beg_space; StatArray[ix_beg].tx_space += (unsigned short)beg_space;
@ -949,6 +962,7 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
StatArray[ix].level = comp_lvl; StatArray[ix].level = comp_lvl;
StatArray[ix].compiler = cType; StatArray[ix].compiler = cType;
break; break;
case nMethod_inconstruction: // let's count "in construction" nmethods here.
case nMethod_alive: case nMethod_alive:
StatArray[ix].tx_count++; StatArray[ix].tx_count++;
StatArray[ix].tx_space += (unsigned short)(granule_size>>log2_seg_size); StatArray[ix].tx_space += (unsigned short)(granule_size>>log2_seg_size);
@ -971,11 +985,6 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
} }
} }
} }
if (n_methods > 0) {
avgTemp = hotnessAccumulator/n_methods;
} else {
avgTemp = 0;
}
done = true; done = true;
if (!insane) { if (!insane) {
@ -990,6 +999,7 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
ast->print_cr(" Alive Space = " SIZE_FORMAT_W(8) "k, nBlocks_alive = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", aliveSpace/(size_t)K, nBlocks_alive, (100.0*aliveSpace)/size, (100.0*aliveSpace)/res_size); ast->print_cr(" Alive Space = " SIZE_FORMAT_W(8) "k, nBlocks_alive = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", aliveSpace/(size_t)K, nBlocks_alive, (100.0*aliveSpace)/size, (100.0*aliveSpace)/res_size);
ast->print_cr(" disconnected = " SIZE_FORMAT_W(8) "k, nBlocks_disconn = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", disconnSpace/(size_t)K, nBlocks_disconn, (100.0*disconnSpace)/size, (100.0*disconnSpace)/res_size); ast->print_cr(" disconnected = " SIZE_FORMAT_W(8) "k, nBlocks_disconn = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", disconnSpace/(size_t)K, nBlocks_disconn, (100.0*disconnSpace)/size, (100.0*disconnSpace)/res_size);
ast->print_cr(" not entrant = " SIZE_FORMAT_W(8) "k, nBlocks_notentr = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", notentrSpace/(size_t)K, nBlocks_notentr, (100.0*notentrSpace)/size, (100.0*notentrSpace)/res_size); ast->print_cr(" not entrant = " SIZE_FORMAT_W(8) "k, nBlocks_notentr = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", notentrSpace/(size_t)K, nBlocks_notentr, (100.0*notentrSpace)/size, (100.0*notentrSpace)/res_size);
ast->print_cr(" inconstrSpace = " SIZE_FORMAT_W(8) "k, nBlocks_inconstr = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", inconstrSpace/(size_t)K, nBlocks_inconstr, (100.0*inconstrSpace)/size, (100.0*inconstrSpace)/res_size);
ast->print_cr(" unloadedSpace = " SIZE_FORMAT_W(8) "k, nBlocks_unloaded = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", unloadedSpace/(size_t)K, nBlocks_unloaded, (100.0*unloadedSpace)/size, (100.0*unloadedSpace)/res_size); ast->print_cr(" unloadedSpace = " SIZE_FORMAT_W(8) "k, nBlocks_unloaded = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", unloadedSpace/(size_t)K, nBlocks_unloaded, (100.0*unloadedSpace)/size, (100.0*unloadedSpace)/res_size);
ast->print_cr(" deadSpace = " SIZE_FORMAT_W(8) "k, nBlocks_dead = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", deadSpace/(size_t)K, nBlocks_dead, (100.0*deadSpace)/size, (100.0*deadSpace)/res_size); ast->print_cr(" deadSpace = " SIZE_FORMAT_W(8) "k, nBlocks_dead = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", deadSpace/(size_t)K, nBlocks_dead, (100.0*deadSpace)/size, (100.0*deadSpace)/res_size);
ast->print_cr(" stubSpace = " SIZE_FORMAT_W(8) "k, nBlocks_stub = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", stubSpace/(size_t)K, nBlocks_stub, (100.0*stubSpace)/size, (100.0*stubSpace)/res_size); ast->print_cr(" stubSpace = " SIZE_FORMAT_W(8) "k, nBlocks_stub = %6d, %10.3f%% of capacity, %10.3f%% of max_capacity", stubSpace/(size_t)K, nBlocks_stub, (100.0*stubSpace)/size, (100.0*stubSpace)/res_size);
@ -1009,9 +1019,15 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
printBox(ast, '-', "Method hotness information at time of this analysis", NULL); printBox(ast, '-', "Method hotness information at time of this analysis", NULL);
ast->print_cr("Highest possible method temperature: %12d", reset_val); ast->print_cr("Highest possible method temperature: %12d", reset_val);
ast->print_cr("Threshold for method to be considered 'cold': %12.3f", -reset_val + reverse_free_ratio * NmethodSweepActivity); ast->print_cr("Threshold for method to be considered 'cold': %12.3f", -reset_val + reverse_free_ratio * NmethodSweepActivity);
if (n_methods > 0) {
avgTemp = hotnessAccumulator/n_methods;
ast->print_cr("min. hotness = %6d", minTemp); ast->print_cr("min. hotness = %6d", minTemp);
ast->print_cr("avg. hotness = %6d", avgTemp); ast->print_cr("avg. hotness = %6d", avgTemp);
ast->print_cr("max. hotness = %6d", maxTemp); ast->print_cr("max. hotness = %6d", maxTemp);
} else {
avgTemp = 0;
ast->print_cr("No hotness data available");
}
STRINGSTREAM_FLUSH("\n") STRINGSTREAM_FLUSH("\n")
// This loop is intentionally printing directly to "out". // This loop is intentionally printing directly to "out".
@ -1024,6 +1040,9 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
if (StatArray[ix].t2_count > granule_segs) { if (StatArray[ix].t2_count > granule_segs) {
out->print_cr("t2_count[%d] = %d", ix, StatArray[ix].t2_count); out->print_cr("t2_count[%d] = %d", ix, StatArray[ix].t2_count);
} }
if (StatArray[ix].tx_count > granule_segs) {
out->print_cr("tx_count[%d] = %d", ix, StatArray[ix].tx_count);
}
if (StatArray[ix].stub_count > granule_segs) { if (StatArray[ix].stub_count > granule_segs) {
out->print_cr("stub_count[%d] = %d", ix, StatArray[ix].stub_count); out->print_cr("stub_count[%d] = %d", ix, StatArray[ix].stub_count);
} }
@ -1036,6 +1055,9 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
if (StatArray[ix].t2_space > granule_segs) { if (StatArray[ix].t2_space > granule_segs) {
out->print_cr("t2_space[%d] = %d", ix, StatArray[ix].t2_space); out->print_cr("t2_space[%d] = %d", ix, StatArray[ix].t2_space);
} }
if (StatArray[ix].tx_space > granule_segs) {
out->print_cr("tx_space[%d] = %d", ix, StatArray[ix].tx_space);
}
if (StatArray[ix].stub_space > granule_segs) { if (StatArray[ix].stub_space > granule_segs) {
out->print_cr("stub_space[%d] = %d", ix, StatArray[ix].stub_space); out->print_cr("stub_space[%d] = %d", ix, StatArray[ix].stub_space);
} }
@ -1043,11 +1065,11 @@ void CodeHeapState::aggregate(outputStream* out, CodeHeap* heap, const char* gra
out->print_cr("dead_space[%d] = %d", ix, StatArray[ix].dead_space); out->print_cr("dead_space[%d] = %d", ix, StatArray[ix].dead_space);
} }
// this cast is awful! I need it because NT/Intel reports a signed/unsigned mismatch. // this cast is awful! I need it because NT/Intel reports a signed/unsigned mismatch.
if ((size_t)(StatArray[ix].t1_count+StatArray[ix].t2_count+StatArray[ix].stub_count+StatArray[ix].dead_count) > granule_segs) { if ((size_t)(StatArray[ix].t1_count+StatArray[ix].t2_count+StatArray[ix].tx_count+StatArray[ix].stub_count+StatArray[ix].dead_count) > granule_segs) {
out->print_cr("t1_count[%d] = %d, t2_count[%d] = %d, stub_count[%d] = %d", ix, StatArray[ix].t1_count, ix, StatArray[ix].t2_count, ix, StatArray[ix].stub_count); out->print_cr("t1_count[%d] = %d, t2_count[%d] = %d, tx_count[%d] = %d, stub_count[%d] = %d", ix, StatArray[ix].t1_count, ix, StatArray[ix].t2_count, ix, StatArray[ix].tx_count, ix, StatArray[ix].stub_count);
} }
if ((size_t)(StatArray[ix].t1_space+StatArray[ix].t2_space+StatArray[ix].stub_space+StatArray[ix].dead_space) > granule_segs) { if ((size_t)(StatArray[ix].t1_space+StatArray[ix].t2_space+StatArray[ix].tx_space+StatArray[ix].stub_space+StatArray[ix].dead_space) > granule_segs) {
out->print_cr("t1_space[%d] = %d, t2_space[%d] = %d, stub_space[%d] = %d", ix, StatArray[ix].t1_space, ix, StatArray[ix].t2_space, ix, StatArray[ix].stub_space); out->print_cr("t1_space[%d] = %d, t2_space[%d] = %d, tx_space[%d] = %d, stub_space[%d] = %d", ix, StatArray[ix].t1_space, ix, StatArray[ix].t2_space, ix, StatArray[ix].tx_space, ix, StatArray[ix].stub_space);
} }
} }
@ -1263,7 +1285,8 @@ void CodeHeapState::print_usedSpace(outputStream* out, CodeHeap* heap) {
ast->fill_to(67+6); ast->fill_to(67+6);
if (nm->is_in_use()) {blob_name = nm->method()->name_and_sig_as_C_string(); } if (nm->is_in_use()) {blob_name = nm->method()->name_and_sig_as_C_string(); }
if (nm->is_not_entrant()) {blob_name = nm->method()->name_and_sig_as_C_string(); } if (nm->is_not_entrant()) {blob_name = nm->method()->name_and_sig_as_C_string(); }
if (nm->is_zombie()) {ast->print("%14s", " zombie method"); } if (nm->is_not_installed()) {ast->print("%s", " not (yet) installed method "); }
if (nm->is_zombie()) {ast->print("%s", " zombie method "); }
ast->print("%s", blob_name); ast->print("%s", blob_name);
} else { } else {
//---< block size in hex >--- //---< block size in hex >---
@ -1657,7 +1680,7 @@ void CodeHeapState::print_count(outputStream* out, CodeHeap* heap) {
{ {
if (nBlocks_alive > 0) { if (nBlocks_alive > 0) {
printBox(ast, '-', "not_used/not_entrant nMethod count only, 0x1..0xf. '*' indicates >= 16 blocks, ' ' indicates empty", NULL); printBox(ast, '-', "not_used/not_entrant/not_installed nMethod count only, 0x1..0xf. '*' indicates >= 16 blocks, ' ' indicates empty", NULL);
STRINGSTREAM_FLUSH_LOCKED("") STRINGSTREAM_FLUSH_LOCKED("")
granules_per_line = 128; granules_per_line = 128;
@ -1846,7 +1869,7 @@ void CodeHeapState::print_space(outputStream* out, CodeHeap* heap) {
{ {
if (nBlocks_alive > 0) { if (nBlocks_alive > 0) {
printBox(ast, '-', "not_used/not_entrant space consumption. ' ' indicates empty, '*' indicates full", NULL); printBox(ast, '-', "not_used/not_entrant/not_installed space consumption. ' ' indicates empty, '*' indicates full", NULL);
granules_per_line = 128; granules_per_line = 128;
for (unsigned int ix = 0; ix < alloc_granules; ix++) { for (unsigned int ix = 0; ix < alloc_granules; ix++) {
@ -2016,7 +2039,7 @@ void CodeHeapState::print_age(outputStream* out, CodeHeap* heap) {
{ {
if (nBlocks_alive > 0) { if (nBlocks_alive > 0) {
printBox(ast, '-', "not_used/not_entrant age distribution. '0' indicates youngest 1/256, '8': oldest half, ' ': no age information", NULL); printBox(ast, '-', "not_used/not_entrant/not_installed age distribution. '0' indicates youngest 1/256, '8': oldest half, ' ': no age information", NULL);
STRINGSTREAM_FLUSH_LOCKED("") STRINGSTREAM_FLUSH_LOCKED("")
granules_per_line = 128; granules_per_line = 128;
@ -2106,8 +2129,8 @@ void CodeHeapState::print_names(outputStream* out, CodeHeap* heap) {
bool blob_initialized = (this_blob != NULL) && (this_blob->header_size() >= 0) && (this_blob->relocation_size() >= 0) && bool blob_initialized = (this_blob != NULL) && (this_blob->header_size() >= 0) && (this_blob->relocation_size() >= 0) &&
((address)this_blob + this_blob->header_size() == (address)(this_blob->relocation_begin())) && ((address)this_blob + this_blob->header_size() == (address)(this_blob->relocation_begin())) &&
((address)this_blob + CodeBlob::align_code_offset(this_blob->header_size() + this_blob->relocation_size()) == (address)(this_blob->content_begin())) && ((address)this_blob + CodeBlob::align_code_offset(this_blob->header_size() + this_blob->relocation_size()) == (address)(this_blob->content_begin())) &&
is_readable_pointer((address)(this_blob->relocation_begin())) && os::is_readable_pointer((address)(this_blob->relocation_begin())) &&
is_readable_pointer(this_blob->content_begin()); os::is_readable_pointer(this_blob->content_begin());
// blob could have been flushed, freed, and merged. // blob could have been flushed, freed, and merged.
// this_blob < last_blob is an indicator for that. // this_blob < last_blob is an indicator for that.
if (blob_initialized && (this_blob > last_blob)) { if (blob_initialized && (this_blob > last_blob)) {
@ -2122,7 +2145,7 @@ void CodeHeapState::print_names(outputStream* out, CodeHeap* heap) {
} }
// this_blob->name() could return NULL if no name was given to CTOR. Inlined, maybe invisible on stack // this_blob->name() could return NULL if no name was given to CTOR. Inlined, maybe invisible on stack
const char* blob_name = this_blob->name(); const char* blob_name = this_blob->name();
if ((blob_name == NULL) || !is_readable_pointer(blob_name)) { if ((blob_name == NULL) || !os::is_readable_pointer(blob_name)) {
blob_name = "<unavailable>"; blob_name = "<unavailable>";
} }
@ -2146,8 +2169,8 @@ void CodeHeapState::print_names(outputStream* out, CodeHeap* heap) {
// this_blob->as_nmethod_or_null() is safe. Inlined, maybe invisible on stack. // this_blob->as_nmethod_or_null() is safe. Inlined, maybe invisible on stack.
nmethod* nm = this_blob->as_nmethod_or_null(); nmethod* nm = this_blob->as_nmethod_or_null();
Method* method = (nm == NULL) ? NULL : nm->method(); // may be uninitialized, i.e. != NULL, but invalid Method* method = (nm == NULL) ? NULL : nm->method(); // may be uninitialized, i.e. != NULL, but invalid
if ((nm != NULL) && (method != NULL) && (cbType != nMethod_dead) && if ((nm != NULL) && (method != NULL) && (cbType != nMethod_dead) && (cbType != nMethod_inconstruction) &&
is_readable_pointer(method) && is_readable_pointer(method->constants())) { os::is_readable_pointer(method) && os::is_readable_pointer(method->constants())) {
ResourceMark rm; ResourceMark rm;
//---< collect all data to locals as quickly as possible >--- //---< collect all data to locals as quickly as possible >---
unsigned int total_size = nm->total_size(); unsigned int total_size = nm->total_size();
@ -2346,7 +2369,7 @@ void CodeHeapState::print_line_delim(outputStream* out, bufferedStream* ast, cha
} }
CodeHeapState::blobType CodeHeapState::get_cbType(CodeBlob* cb) { CodeHeapState::blobType CodeHeapState::get_cbType(CodeBlob* cb) {
if ((cb != NULL) && is_readable_pointer(cb)) { if ((cb != NULL) && os::is_readable_pointer(cb)) {
if (cb->is_runtime_stub()) return runtimeStub; if (cb->is_runtime_stub()) return runtimeStub;
if (cb->is_deoptimization_stub()) return deoptimizationStub; if (cb->is_deoptimization_stub()) return deoptimizationStub;
if (cb->is_uncommon_trap_stub()) return uncommonTrapStub; if (cb->is_uncommon_trap_stub()) return uncommonTrapStub;
@ -2358,27 +2381,14 @@ CodeHeapState::blobType CodeHeapState::get_cbType(CodeBlob* cb) {
nmethod* nm = cb->as_nmethod_or_null(); nmethod* nm = cb->as_nmethod_or_null();
if (nm != NULL) { // no is_readable check required, nm = (nmethod*)cb. if (nm != NULL) { // no is_readable check required, nm = (nmethod*)cb.
if (nm->is_not_installed()) return nMethod_inconstruction;
if (nm->is_zombie()) return nMethod_dead; if (nm->is_zombie()) return nMethod_dead;
if (nm->is_unloaded()) return nMethod_unloaded; if (nm->is_unloaded()) return nMethod_unloaded;
if (nm->is_in_use()) return nMethod_inuse;
if (nm->is_alive() && !(nm->is_not_entrant())) return nMethod_notused; if (nm->is_alive() && !(nm->is_not_entrant())) return nMethod_notused;
if (nm->is_alive()) return nMethod_alive; if (nm->is_alive()) return nMethod_alive;
if (nm->is_in_use()) return nMethod_inuse;
return nMethod_dead; return nMethod_dead;
} }
} }
return noType; return noType;
} }
// Check if pointer can be read from (4-byte read access).
// Helps to prove validity of a not-NULL pointer.
// Returns true in very early stages of VM life when stub is not yet generated.
#define SAFEFETCH_DEFAULT true
bool CodeHeapState::is_readable_pointer(const void* p) {
if (!CanUseSafeFetch32()) {
return SAFEFETCH_DEFAULT;
}
int* const aligned = (int*) align_down((intptr_t)p, 4);
int cafebabe = 0xcafebabe; // tester value 1
int deadbeef = 0xdeadbeef; // tester value 2
return (SafeFetch32(aligned, cafebabe) != cafebabe) || (SafeFetch32(aligned, deadbeef) != deadbeef);
}

View file

@ -44,7 +44,9 @@ class CodeHeapState : public CHeapObj<mtCode> {
enum blobType { enum blobType {
noType = 0, // must be! due to initialization by memset to zero noType = 0, // must be! due to initialization by memset to zero
// The nMethod_* values correspond 1:1 to the CompiledMethod enum values. // The nMethod_* values correspond to the CompiledMethod enum values.
// We can't use the CompiledMethod values 1:1 because we depend on noType == 0.
nMethod_inconstruction, // under construction. Very soon, the type will transition to "in_use".
nMethod_inuse, // executable. This is the "normal" state for a nmethod. nMethod_inuse, // executable. This is the "normal" state for a nmethod.
nMethod_notused, // assumed inactive, marked not entrant. Could be revived if necessary. nMethod_notused, // assumed inactive, marked not entrant. Could be revived if necessary.
nMethod_notentrant, // no new activations allowed, marked for deoptimization. Old activations may still exist. nMethod_notentrant, // no new activations allowed, marked for deoptimization. Old activations may still exist.
@ -93,7 +95,6 @@ class CodeHeapState : public CHeapObj<mtCode> {
static void print_line_delim(outputStream* out, bufferedStream *sst, char* low_bound, unsigned int ix, unsigned int gpl); static void print_line_delim(outputStream* out, bufferedStream *sst, char* low_bound, unsigned int ix, unsigned int gpl);
static void print_line_delim(outputStream* out, outputStream *sst, char* low_bound, unsigned int ix, unsigned int gpl); static void print_line_delim(outputStream* out, outputStream *sst, char* low_bound, unsigned int ix, unsigned int gpl);
static blobType get_cbType(CodeBlob* cb); static blobType get_cbType(CodeBlob* cb);
static bool is_readable_pointer(const void* p);
public: public:
static void discard(outputStream* out, CodeHeap* heap); static void discard(outputStream* out, CodeHeap* heap);
@ -214,6 +215,7 @@ struct CodeHeapStat {
unsigned int nBlocks_t2; unsigned int nBlocks_t2;
unsigned int nBlocks_alive; unsigned int nBlocks_alive;
unsigned int nBlocks_dead; unsigned int nBlocks_dead;
unsigned int nBlocks_inconstr;
unsigned int nBlocks_unloaded; unsigned int nBlocks_unloaded;
unsigned int nBlocks_stub; unsigned int nBlocks_stub;
// FreeBlk data // FreeBlk data

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2018, 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
@ -217,14 +217,17 @@ void CompileLog::finish_log_on_error(outputStream* file, char* buf, int buflen)
file->print_raw_cr("'>"); file->print_raw_cr("'>");
size_t nr; // number read into buf from partial log size_t nr; // number read into buf from partial log
// In case of unsuccessful completion, read returns -1.
ssize_t bytes_read;
// Copy data up to the end of the last <event> element: // Copy data up to the end of the last <event> element:
julong to_read = log->_file_end; julong to_read = log->_file_end;
while (to_read > 0) { while (to_read > 0) {
if (to_read < (julong)buflen) if (to_read < (julong)buflen)
nr = (size_t)to_read; nr = (size_t)to_read;
else nr = buflen; else nr = buflen;
nr = read(partial_fd, buf, (int)nr); bytes_read = read(partial_fd, buf, (int)nr);
if (nr <= 0) break; if (bytes_read <= 0) break;
nr = bytes_read;
to_read -= (julong)nr; to_read -= (julong)nr;
file->write(buf, nr); file->write(buf, nr);
} }
@ -232,7 +235,8 @@ void CompileLog::finish_log_on_error(outputStream* file, char* buf, int buflen)
// Copy any remaining data inside a quote: // Copy any remaining data inside a quote:
bool saw_slop = false; bool saw_slop = false;
int end_cdata = 0; // state machine [0..2] watching for too many "]]" int end_cdata = 0; // state machine [0..2] watching for too many "]]"
while ((nr = read(partial_fd, buf, buflen-1)) > 0) { while ((bytes_read = read(partial_fd, buf, buflen-1)) > 0) {
nr = bytes_read;
buf[buflen-1] = '\0'; buf[buflen-1] = '\0';
if (!saw_slop) { if (!saw_slop) {
file->print_raw_cr("<fragment>"); file->print_raw_cr("<fragment>");

View file

@ -23,6 +23,7 @@
*/ */
#include "precompiled.hpp" #include "precompiled.hpp"
#include "asm/macroAssembler.hpp"
#include "ci/ciUtilities.hpp" #include "ci/ciUtilities.hpp"
#include "classfile/javaClasses.hpp" #include "classfile/javaClasses.hpp"
#include "code/codeCache.hpp" #include "code/codeCache.hpp"
@ -36,6 +37,7 @@
#include "runtime/os.hpp" #include "runtime/os.hpp"
#include "runtime/stubCodeGenerator.hpp" #include "runtime/stubCodeGenerator.hpp"
#include "runtime/stubRoutines.hpp" #include "runtime/stubRoutines.hpp"
#include "utilities/resourceHash.hpp"
#include CPU_HEADER(depChecker) #include CPU_HEADER(depChecker)
void* Disassembler::_library = NULL; void* Disassembler::_library = NULL;
@ -49,7 +51,7 @@ static const char hsdis_library_name[] = "hsdis-" HOTSPOT_LIB_ARCH;
static const char decode_instructions_virtual_name[] = "decode_instructions_virtual"; static const char decode_instructions_virtual_name[] = "decode_instructions_virtual";
static const char decode_instructions_name[] = "decode_instructions"; static const char decode_instructions_name[] = "decode_instructions";
static bool use_new_version = true; static bool use_new_version = true;
#define COMMENT_COLUMN 40 LP64_ONLY(+8) /*could be an option*/ #define COMMENT_COLUMN 52 LP64_ONLY(+8) /*could be an option*/
#define BYTES_COMMENT ";..." /* funky byte display comment */ #define BYTES_COMMENT ";..." /* funky byte display comment */
bool Disassembler::load_library() { bool Disassembler::load_library() {
@ -122,7 +124,7 @@ bool Disassembler::load_library() {
_decode_instructions_virtual = CAST_TO_FN_PTR(Disassembler::decode_func_virtual, _decode_instructions_virtual = CAST_TO_FN_PTR(Disassembler::decode_func_virtual,
os::dll_lookup(_library, decode_instructions_virtual_name)); os::dll_lookup(_library, decode_instructions_virtual_name));
} }
if (_decode_instructions_virtual == NULL) { if (_decode_instructions_virtual == NULL && _library != NULL) {
// could not spot in new version, try old version // could not spot in new version, try old version
_decode_instructions = CAST_TO_FN_PTR(Disassembler::decode_func, _decode_instructions = CAST_TO_FN_PTR(Disassembler::decode_func,
os::dll_lookup(_library, decode_instructions_name)); os::dll_lookup(_library, decode_instructions_name));
@ -163,6 +165,7 @@ class decode_env {
bool _print_bytes; bool _print_bytes;
address _cur_insn; address _cur_insn;
int _bytes_per_line; // arch-specific formatting option int _bytes_per_line; // arch-specific formatting option
bool _print_file_name;
static bool match(const char* event, const char* tag) { static bool match(const char* event, const char* tag) {
size_t taglen = strlen(tag); size_t taglen = strlen(tag);
@ -191,6 +194,51 @@ class decode_env {
void print_insn_bytes(address pc0, address pc); void print_insn_bytes(address pc0, address pc);
void print_address(address value); void print_address(address value);
struct SourceFileInfo {
struct Link : public CHeapObj<mtCode> {
const char* file;
int line;
Link* next;
Link(const char* f, int l) : file(f), line(l), next(NULL) {}
};
Link *head, *tail;
static unsigned hash(const address& a) {
return primitive_hash<address>(a);
}
static bool equals(const address& a0, const address& a1) {
return primitive_equals<address>(a0, a1);
}
void append(const char* file, int line) {
if (tail != NULL && tail->file == file && tail->line == line) {
// Don't print duplicated lines at the same address. This could happen with C
// macros that end up having multiple "__" tokens on the same __LINE__.
return;
}
Link *link = new Link(file, line);
if (head == NULL) {
head = tail = link;
} else {
tail->next = link;
tail = link;
}
}
SourceFileInfo(const char* file, int line) : head(NULL), tail(NULL) {
append(file, line);
}
};
typedef ResourceHashtable<
address, SourceFileInfo,
SourceFileInfo::hash,
SourceFileInfo::equals,
15889, // prime number
ResourceObj::C_HEAP> SourceFileInfoTable;
static SourceFileInfoTable _src_table;
static const char* _cached_src;
static GrowableArray<const char*>* _cached_src_lines;
public: public:
decode_env(CodeBlob* code, outputStream* output, decode_env(CodeBlob* code, outputStream* output,
CodeStrings c = CodeStrings(), ptrdiff_t offset = 0); CodeStrings c = CodeStrings(), ptrdiff_t offset = 0);
@ -212,6 +260,7 @@ class decode_env {
_nm->print_code_comment_on(st, COMMENT_COLUMN, pc0, pc); _nm->print_code_comment_on(st, COMMENT_COLUMN, pc0, pc);
// this calls reloc_string_for which calls oop::print_value_on // this calls reloc_string_for which calls oop::print_value_on
} }
print_hook_comments(pc0, _nm != NULL);
// follow each complete insn by a nice newline // follow each complete insn by a nice newline
st->cr(); st->cr();
} }
@ -221,8 +270,96 @@ class decode_env {
outputStream* output() { return _output; } outputStream* output() { return _output; }
address cur_insn() { return _cur_insn; } address cur_insn() { return _cur_insn; }
const char* options() { return _option_buf; } const char* options() { return _option_buf; }
static void hook(const char* file, int line, address pc);
void print_hook_comments(address pc, bool newline);
}; };
decode_env::SourceFileInfoTable decode_env::_src_table;
const char* decode_env::_cached_src = NULL;
GrowableArray<const char*>* decode_env::_cached_src_lines = NULL;
void decode_env::hook(const char* file, int line, address pc) {
// For simplication, we never free from this table. It's really not
// necessary as we add to the table only when PrintInterpreter is true,
// which means we are debugging the VM and a little bit of extra
// memory usage doesn't matter.
SourceFileInfo* found = _src_table.get(pc);
if (found != NULL) {
found->append(file, line);
} else {
SourceFileInfo sfi(file, line);
_src_table.put(pc, sfi); // sfi is copied by value
}
}
void decode_env::print_hook_comments(address pc, bool newline) {
SourceFileInfo* found = _src_table.get(pc);
outputStream* st = output();
if (found != NULL) {
for (SourceFileInfo::Link *link = found->head; link; link = link->next) {
const char* file = link->file;
int line = link->line;
if (_cached_src == NULL || strcmp(_cached_src, file) != 0) {
FILE* fp;
// _cached_src_lines is a single cache of the lines of a source file, and we refill this cache
// every time we need to print a line from a different source file. It's not the fastest,
// but seems bearable.
if (_cached_src_lines != NULL) {
for (int i=0; i<_cached_src_lines->length(); i++) {
os::free((void*)_cached_src_lines->at(i));
}
_cached_src_lines->clear();
} else {
_cached_src_lines = new (ResourceObj::C_HEAP, mtCode)GrowableArray<const char*>(0, true);
}
if ((fp = fopen(file, "r")) == NULL) {
_cached_src = NULL;
return;
}
_cached_src = file;
char line[500]; // don't write lines that are too long in your source files!
while (fgets(line, sizeof(line), fp) != NULL) {
size_t len = strlen(line);
if (len > 0 && line[len-1] == '\n') {
line[len-1] = '\0';
}
_cached_src_lines->append(os::strdup(line));
}
fclose(fp);
_print_file_name = true;
}
if (_print_file_name) {
// We print the file name whenever we switch to a new file, or when
// Disassembler::decode is called to disassemble a new block of code.
_print_file_name = false;
if (newline) {
st->cr();
}
st->move_to(COMMENT_COLUMN);
st->print(";;@FILE: %s", file);
newline = true;
}
int index = line - 1; // 1-based line number -> 0-based index.
if (index >= _cached_src_lines->length()) {
// This could happen if source file is mismatched.
} else {
const char* source_line = _cached_src_lines->at(index);
if (newline) {
st->cr();
}
st->move_to(COMMENT_COLUMN);
st->print(";;%5d: %s", line, source_line);
newline = true;
}
}
}
}
decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c, decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c,
ptrdiff_t offset) { ptrdiff_t offset) {
memset(this, 0, sizeof(*this)); // Beware, this zeroes bits of fields. memset(this, 0, sizeof(*this)); // Beware, this zeroes bits of fields.
@ -237,6 +374,7 @@ decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c,
_print_pc = true; _print_pc = true;
_print_bytes = false; _print_bytes = false;
_bytes_per_line = Disassembler::pd_instruction_alignment(); _bytes_per_line = Disassembler::pd_instruction_alignment();
_print_file_name= true;
// parse the global option string: // parse the global option string:
collect_options(Disassembler::pd_cpu_opts()); collect_options(Disassembler::pd_cpu_opts());
@ -558,3 +696,9 @@ void Disassembler::decode(nmethod* nm, outputStream* st) {
env.decode_instructions(p, end); env.decode_instructions(p, end);
} }
// To prevent excessive code expansion in the interpreter generator, we
// do not inline this function into Disassembler::hook().
void Disassembler::_hook(const char* file, int line, MacroAssembler* masm) {
decode_env::hook(file, line, masm->code_section()->end());
}

View file

@ -77,6 +77,17 @@ class Disassembler {
static void decode(nmethod* nm, outputStream* st = NULL); static void decode(nmethod* nm, outputStream* st = NULL);
static void decode(address begin, address end, outputStream* st = NULL, static void decode(address begin, address end, outputStream* st = NULL,
CodeStrings c = CodeStrings(), ptrdiff_t offset = 0); CodeStrings c = CodeStrings(), ptrdiff_t offset = 0);
static void _hook(const char* file, int line, class MacroAssembler* masm);
// This functions makes it easy to generate comments in the generated
// interpreter code, by riding on the customary __ macro in the interpreter generator.
// See templateTable_x86.cpp for an example.
template<class T> inline static T* hook(const char* file, int line, T* masm) {
if (PrintInterpreter) {
_hook(file, line, masm);
}
return masm;
}
}; };
#endif // SHARE_VM_COMPILER_DISASSEMBLER_HPP #endif // SHARE_VM_COMPILER_DISASSEMBLER_HPP

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1998, 2016, 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. * 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
@ -484,7 +484,7 @@ MethodLivenessResult MethodLiveness::get_liveness_at(int entry_bci) {
while (block == NULL && t > 0) { while (block == NULL && t > 0) {
block = _block_map->at(--t); block = _block_map->at(--t);
} }
assert( block != NULL, "invalid bytecode index; must be instruction index" ); guarantee(block != NULL, "invalid bytecode index; must be instruction index");
assert(bci >= block->start_bci() && bci < block->limit_bci(), "block must contain bci."); assert(bci >= block->start_bci() && bci < block->limit_bci(), "block must contain bci.");
answer = block->get_liveness_at(method(), bci); answer = block->get_liveness_at(method(), bci);

View file

@ -571,14 +571,14 @@ bool OopMap::equals(const OopMap* other) const {
const ImmutableOopMap* ImmutableOopMapSet::find_map_at_offset(int pc_offset) const { const ImmutableOopMap* ImmutableOopMapSet::find_map_at_offset(int pc_offset) const {
ImmutableOopMapPair* pairs = get_pairs(); ImmutableOopMapPair* pairs = get_pairs();
ImmutableOopMapPair* last = NULL;
for (int i = 0; i < _count; ++i) { int i;
for (i = 0; i < _count; ++i) {
if (pairs[i].pc_offset() >= pc_offset) { if (pairs[i].pc_offset() >= pc_offset) {
last = &pairs[i];
break; break;
} }
} }
ImmutableOopMapPair* last = &pairs[i];
assert(last->pc_offset() == pc_offset, "oopmap not found"); assert(last->pc_offset() == pc_offset, "oopmap not found");
return last->get_from(this); return last->get_from(this);

View file

@ -494,13 +494,13 @@ BytecodeInterpreter::run(interpreterState istate) {
interpreterState orig = istate; interpreterState orig = istate;
#endif #endif
register intptr_t* topOfStack = (intptr_t *)istate->stack(); /* access with STACK macros */ intptr_t* topOfStack = (intptr_t *)istate->stack(); /* access with STACK macros */
register address pc = istate->bcp(); address pc = istate->bcp();
register jubyte opcode; jubyte opcode;
register intptr_t* locals = istate->locals(); intptr_t* locals = istate->locals();
register ConstantPoolCache* cp = istate->constants(); // method()->constants()->cache() ConstantPoolCache* cp = istate->constants(); // method()->constants()->cache()
#ifdef LOTS_OF_REGS #ifdef LOTS_OF_REGS
register JavaThread* THREAD = istate->thread(); JavaThread* THREAD = istate->thread();
#else #else
#undef THREAD #undef THREAD
#define THREAD istate->thread() #define THREAD istate->thread()
@ -589,7 +589,7 @@ BytecodeInterpreter::run(interpreterState istate) {
/* 0xF8 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default, /* 0xF8 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,
/* 0xFC */ &&opc_default, &&opc_default, &&opc_default, &&opc_default /* 0xFC */ &&opc_default, &&opc_default, &&opc_default, &&opc_default
}; };
register uintptr_t *dispatch_table = (uintptr_t*)&opclabels_data[0]; uintptr_t *dispatch_table = (uintptr_t*)&opclabels_data[0];
#endif /* USELABELS */ #endif /* USELABELS */
#ifdef ASSERT #ifdef ASSERT

View file

@ -669,23 +669,28 @@ void LinkResolver::check_method_loader_constraints(const LinkInfo& link_info,
SystemDictionary::check_signature_loaders(link_info.signature(), current_loader, SystemDictionary::check_signature_loaders(link_info.signature(), current_loader,
resolved_loader, true, CHECK); resolved_loader, true, CHECK);
if (failed_type_symbol != NULL) { if (failed_type_symbol != NULL) {
const char* msg = "loader constraint violation: when resolving %s" Klass* current_class = link_info.current_klass();
ClassLoaderData* current_loader_data = current_class->class_loader_data();
assert(current_loader_data != NULL, "current class has no class loader data");
Klass* resolved_method_class = resolved_method->method_holder();
ClassLoaderData* target_loader_data = resolved_method_class->class_loader_data();
assert(target_loader_data != NULL, "resolved method's class has no class loader data");
stringStream ss;
ss.print("loader constraint violation: when resolving %s"
" \"%s\" the class loader %s of the current class, %s," " \"%s\" the class loader %s of the current class, %s,"
" and the class loader %s for the method's defining class, %s, have" " and the class loader %s for the method's defining class, %s, have"
" different Class objects for the type %s used in the signature"; " different Class objects for the type %s used in the signature (%s; %s)",
char* sig = link_info.method_string(); method_type,
const char* loader1_name = java_lang_ClassLoader::describe_external(current_loader()); link_info.method_string(),
char* current = link_info.current_klass()->name()->as_C_string(); current_loader_data->loader_name_and_id(),
const char* loader2_name = java_lang_ClassLoader::describe_external(resolved_loader()); current_class->name()->as_C_string(),
char* target = resolved_method->method_holder()->name()->as_C_string(); target_loader_data->loader_name_and_id(),
char* failed_type_name = failed_type_symbol->as_C_string(); resolved_method_class->name()->as_C_string(),
size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1_name) + failed_type_symbol->as_C_string(),
strlen(current) + strlen(loader2_name) + strlen(target) + current_class->class_in_module_of_loader(false, true),
strlen(failed_type_name) + strlen(method_type) + 1; resolved_method_class->class_in_module_of_loader(false, true));
char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen); THROW_MSG(vmSymbols::java_lang_LinkageError(), ss.as_string());
jio_snprintf(buf, buflen, msg, method_type, sig, loader1_name, current, loader2_name,
target, failed_type_name);
THROW_MSG(vmSymbols::java_lang_LinkageError(), buf);
} }
} }
@ -702,23 +707,23 @@ void LinkResolver::check_field_loader_constraints(Symbol* field, Symbol* sig,
false, false,
CHECK); CHECK);
if (failed_type_symbol != NULL) { if (failed_type_symbol != NULL) {
const char* msg = "loader constraint violation: when resolving field" stringStream ss;
const char* failed_type_name = failed_type_symbol->as_klass_external_name();
ss.print("loader constraint violation: when resolving field"
" \"%s\" of type %s, the class loader %s of the current class, " " \"%s\" of type %s, the class loader %s of the current class, "
"%s, and the class loader %s for the field's defining " "%s, and the class loader %s for the field's defining "
"type, %s, have different Class objects for type %s"; "type, %s, have different Class objects for type %s (%s; %s)",
const char* field_name = field->as_C_string(); field->as_C_string(),
const char* loader1_name = java_lang_ClassLoader::describe_external(ref_loader()); failed_type_name,
const char* sel = sel_klass->external_name(); current_klass->class_loader_data()->loader_name_and_id(),
const char* loader2_name = java_lang_ClassLoader::describe_external(sel_loader()); current_klass->external_name(),
const char* failed_type_name = failed_type_symbol->as_klass_external_name(); sel_klass->class_loader_data()->loader_name_and_id(),
const char* curr_klass_name = current_klass->external_name(); sel_klass->external_name(),
size_t buflen = strlen(msg) + strlen(field_name) + 2 * strlen(failed_type_name) + failed_type_name,
strlen(loader1_name) + strlen(curr_klass_name) + current_klass->class_in_module_of_loader(false, true),
strlen(loader2_name) + strlen(sel) + 1; sel_klass->class_in_module_of_loader(false, true));
char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen); THROW_MSG(vmSymbols::java_lang_LinkageError(), ss.as_string());
jio_snprintf(buf, buflen, msg, field_name, failed_type_name, loader1_name,
curr_klass_name, loader2_name, sel, failed_type_name);
THROW_MSG(vmSymbols::java_lang_LinkageError(), buf);
} }
} }

View file

@ -23,6 +23,7 @@
*/ */
#include "precompiled.hpp" #include "precompiled.hpp"
#include "compiler/disassembler.hpp"
#include "interpreter/interpreter.hpp" #include "interpreter/interpreter.hpp"
#include "interpreter/interpreterRuntime.hpp" #include "interpreter/interpreterRuntime.hpp"
#include "interpreter/interp_masm.hpp" #include "interpreter/interp_masm.hpp"
@ -33,7 +34,7 @@
#ifndef CC_INTERP #ifndef CC_INTERP
# define __ _masm-> #define __ Disassembler::hook<InterpreterMacroAssembler>(__FILE__, __LINE__, _masm)->
TemplateInterpreterGenerator::TemplateInterpreterGenerator(StubQueue* _code): AbstractInterpreterGenerator(_code) { TemplateInterpreterGenerator::TemplateInterpreterGenerator(StubQueue* _code): AbstractInterpreterGenerator(_code) {
_unimplemented_bytecode = NULL; _unimplemented_bytecode = NULL;

View file

@ -241,11 +241,7 @@ RepositoryIterator::RepositoryIterator(const char* repository, size_t repository
return; return;
} }
struct dirent* dentry; struct dirent* dentry;
char* dir_buffer = NEW_RESOURCE_ARRAY_RETURN_NULL(char, os::readdir_buf_size(_repo)); while ((dentry = os::readdir(dirp)) != NULL) {
if (dir_buffer == NULL) {
return;
}
while ((dentry = os::readdir(dirp, (struct dirent*)dir_buffer)) != NULL) {
const char* const entry_path = filter(dentry->d_name); const char* const entry_path = filter(dentry->d_name);
if (NULL != entry_path) { if (NULL != entry_path) {
_files->append(entry_path); _files->append(entry_path);

Some files were not shown because too many files have changed in this diff Show more