--- a/jdk/make/CompileDemos.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/CompileDemos.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -214,9 +214,12 @@
# Param 5 = libs for posix
# Param 6 = libs for windows
# Param 7 = libs for solaris
+ # Param 8 = libs for linux
+ # Param 9 = extra directories with required sources
BUILD_DEMO_JVMTI_$1_EXTRA_SRC := \
$$(wildcard $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/demo/jvmti/$1) \
- $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2))
+ $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)) \
+ $9
BUILD_DEMO_JVMTI_$1_EXTRA_SRC_EXCLUDE := \
$$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)/README.txt) \
$$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/, $2)/sample.makefile.txt)
@@ -308,9 +311,19 @@
$(eval $(call SetupJVMTIDemo,gctest, agent_util))
$(eval $(call SetupJVMTIDemo,heapTracker, agent_util java_crw_demo))
$(eval $(call SetupJVMTIDemo,heapViewer, agent_util))
+
+# On AIX, hprof requires 'dladdr' from src/aix/porting/porting_aix.cpp
+BUILD_LIBHPROF_AIX_EXTRA_SRC :=
+BUILD_LIBHPROF_AIX_EXTRA_CFLAGS :=
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ BUILD_LIBHPROF_AIX_EXTRA_SRC += $(JDK_TOPDIR)/src/aix/porting
+ BUILD_LIBHPROF_AIX_EXTRA_CFLAGS += -I$(JDK_TOPDIR)/src/aix/porting
+endif
+
$(eval $(call SetupJVMTIDemo,hprof, java_crw_demo, \
- -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt, C, \
- -ldl, ws2_32.lib winmm.lib, -lsocket -lnsl, -lpthread))
+ -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
+ $(BUILD_LIBHPROF_AIX_EXTRA_CFLAGS), C, \
+ -ldl, ws2_32.lib winmm.lib, -lsocket -lnsl, -lpthread, $(BUILD_LIBHPROF_AIX_EXTRA_SRC)))
$(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo))
$(eval $(call SetupJVMTIDemo,mtrace, agent_util java_crw_demo))
--- a/jdk/make/CompileJavaClasses.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/CompileJavaClasses.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -146,6 +146,17 @@
sun/tools/attach/BsdVirtualMachine.java
endif
+ifneq ($(OPENJDK_TARGET_OS),aix)
+ EXFILES+=sun/nio/ch/AixAsynchronousChannelProvider.java \
+ sun/nio/ch/AixPollPort.java \
+ sun/nio/fs/AixFileStore.java \
+ sun/nio/fs/AixFileSystem.java \
+ sun/nio/fs/AixFileSystemProvider.java \
+ sun/nio/fs/AixNativeDispatcher.java \
+ sun/tools/attach/AixAttachProvider.java \
+ sun/tools/attach/AixVirtualMachine.java
+endif
+
# Exclude BreakIterator classes that are just used in compile process to generate
# data files and shouldn't go in the product
EXFILES += sun/text/resources/BreakIteratorRules.java \
@@ -217,9 +228,9 @@
# Exclude another implicitly not included file.
EXFILES += sun/util/locale/AsciiUtil.java
-ifeq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx))
+ifeq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx aix))
#
- # only solaris and macosx
+ # only solaris, macosx and aix
#
EXFILES += sun/nio/fs/PollingWatchService.java
endif
@@ -289,6 +300,16 @@
sun/security/pkcs11 \
#
+AIX_SRC_DIRS :=
+ifeq ($(OPENJDK_TARGET_OS),aix)
+ AIX_SRC_DIRS += $(JDK_TOPDIR)/src/aix/classes
+
+ # these files are duplicated in AIX_SRC_DIRS
+ EXFILES += $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java \
+ $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \
+ $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java
+endif
+
# The exception handling of swing beaninfo
# These resources violates the convention of having code and resources together under
# $(JDK_TOPDIR)/src/.../classes directories
@@ -313,6 +334,7 @@
SRC:=$(JDK_TOPDIR)/src/share/classes \
$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes \
$(MACOSX_SRC_DIRS) \
+ $(AIX_SRC_DIRS) \
$(JDK_OUTPUTDIR)/gensrc \
$(JDK_OUTPUTDIR)/gensrc_no_srczip \
$(CLOSED_SRC_DIRS),\
--- a/jdk/make/CompileLaunchers.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/CompileLaunchers.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, 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
@@ -104,6 +104,10 @@
$1_LDFLAGS_SUFFIX += -pthread
endif
+ ifeq ($(OPENJDK_TARGET_OS), aix)
+ $1_LDFLAGS_SUFFIX += -L$(JDK_OUTPUTDIR)/objs -ljli_static
+ endif
+
ifeq ($(USE_EXTERNAL_LIBZ), true)
$1_LDFLAGS_SUFFIX += -lz
endif
@@ -126,10 +130,21 @@
$1_CFLAGS := $(filter-out -MD, $(CFLAGS_JDKEXE))
endif
- ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)), )
- $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)
+ # The linker on older SuSE distros (e.g. on SLES 10) complains with:
+ # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
+ # if feeded with a version script which contains named tags.
+ ifeq ($(USING_BROKEN_SUSE_LD),yes)
+ ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous), )
+ $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous
+ else
+ $1_MAPFILE :=
+ endif
else
- $1_MAPFILE :=
+ ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)), )
+ $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)
+ else
+ $1_MAPFILE :=
+ endif
endif
$(call SetupNativeCompilation,BUILD_LAUNCHER_$1, \
@@ -180,7 +195,7 @@
BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1)
- ifeq ($(OPENJDK_TARGET_OS), macosx)
+ ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix))
$$(BUILD_LAUNCHER_$1): $(JDK_OUTPUTDIR)/objs/libjli_static.a
endif
@@ -450,6 +465,16 @@
# anyway.
UNPACKEXE_DEBUG_SYMBOLS :=
endif
+
+# The linker on older SuSE distros (e.g. on SLES 10) complains with:
+# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
+# if feeded with a version script which contains named tags.
+ifeq ($(USING_BROKEN_SUSE_LD), yes)
+ UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous
+else
+ UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200
+endif
+
$(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \
SRC := $(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack, \
EXCLUDE_FILES := jni.cpp, \
@@ -461,7 +486,7 @@
CFLAGS_linux := -fPIC, \
CFLAGS_solaris := -KPIC, \
CFLAGS_macosx := -fPIC, \
- MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200, \
+ MAPFILE := $(UNPACK_MAPFILE),\
LDFLAGS := $(UNPACKEXE_ZIPOBJS), \
LDFLAGS_windows := $(CXXFLAGS_JDKEXE), \
LDFLAGS_posix := $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
@@ -605,7 +630,7 @@
LINK_JSPAWNHELPER_OBJECTS := $(JDK_OUTPUTDIR)/objs/libjava/childproc.o
LINK_JSPAWNHELPER_FLAGS :=
-ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris), )
+ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), )
BUILD_JSPAWNHELPER := 1
endif
@@ -614,7 +639,7 @@
endif
ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
- LINK_JSPAWNHELPER_FLAGS += -m64
+ LINK_JSPAWNHELPER_FLAGS += $(COMPILER_TARGET_BITS_FLAG)64
endif
ifeq ($(BUILD_JSPAWNHELPER), 1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/data/classlist/classlist.aix Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,2406 @@
+java/lang/Object
+java/lang/String
+java/io/Serializable
+java/lang/Comparable
+java/lang/CharSequence
+java/lang/Class
+java/lang/reflect/GenericDeclaration
+java/lang/reflect/Type
+java/lang/reflect/AnnotatedElement
+java/lang/Cloneable
+java/lang/ClassLoader
+java/lang/System
+java/lang/Throwable
+java/lang/Error
+java/lang/ThreadDeath
+java/lang/Exception
+java/lang/RuntimeException
+java/security/ProtectionDomain
+java/security/AccessControlContext
+java/lang/ClassNotFoundException
+java/lang/NoClassDefFoundError
+java/lang/LinkageError
+java/lang/ClassCastException
+java/lang/ArrayStoreException
+java/lang/VirtualMachineError
+java/lang/OutOfMemoryError
+java/lang/StackOverflowError
+java/lang/IllegalMonitorStateException
+java/lang/ref/Reference
+java/lang/ref/SoftReference
+java/lang/ref/WeakReference
+java/lang/ref/FinalReference
+java/lang/ref/PhantomReference
+java/lang/ref/Finalizer
+java/lang/Thread
+java/lang/Runnable
+java/lang/ThreadGroup
+java/lang/Thread$UncaughtExceptionHandler
+java/util/Properties
+java/util/Hashtable
+java/util/Map
+java/util/Dictionary
+java/lang/reflect/AccessibleObject
+java/lang/reflect/Field
+java/lang/reflect/Member
+java/lang/reflect/Method
+java/lang/reflect/Constructor
+sun/reflect/MagicAccessorImpl
+sun/reflect/MethodAccessorImpl
+sun/reflect/MethodAccessor
+sun/reflect/ConstructorAccessorImpl
+sun/reflect/ConstructorAccessor
+sun/reflect/DelegatingClassLoader
+sun/reflect/ConstantPool
+sun/reflect/UnsafeStaticFieldAccessorImpl
+sun/reflect/UnsafeFieldAccessorImpl
+sun/reflect/FieldAccessorImpl
+sun/reflect/FieldAccessor
+java/util/Vector
+java/util/List
+java/util/Collection
+java/lang/Iterable
+java/util/RandomAccess
+java/util/AbstractList
+java/util/AbstractCollection
+java/lang/StringBuffer
+java/lang/AbstractStringBuilder
+java/lang/Appendable
+java/lang/StackTraceElement
+java/nio/Buffer
+java/lang/Boolean
+java/lang/Character
+java/lang/Float
+java/lang/Number
+java/lang/Double
+java/lang/Byte
+java/lang/Short
+java/lang/Integer
+java/lang/Long
+java/lang/NullPointerException
+java/lang/ArithmeticException
+java/io/ObjectStreamField
+java/lang/String$CaseInsensitiveComparator
+java/util/Comparator
+java/lang/RuntimePermission
+java/security/BasicPermission
+java/security/Permission
+java/security/Guard
+sun/misc/SoftCache
+java/util/AbstractMap
+java/lang/ref/ReferenceQueue
+java/lang/ref/ReferenceQueue$Null
+java/lang/ref/ReferenceQueue$Lock
+java/util/HashMap
+java/lang/annotation/Annotation
+java/util/HashMap$Entry
+java/util/Map$Entry
+java/security/AccessController
+java/lang/reflect/ReflectPermission
+sun/reflect/ReflectionFactory$GetReflectionFactoryAction
+java/security/PrivilegedAction
+java/util/Stack
+sun/reflect/ReflectionFactory
+java/lang/ref/Reference$Lock
+java/lang/ref/Reference$ReferenceHandler
+java/lang/ref/Finalizer$FinalizerThread
+java/util/Hashtable$EmptyEnumerator
+java/util/Enumeration
+java/util/Hashtable$EmptyIterator
+java/util/Iterator
+java/util/Hashtable$Entry
+java/nio/charset/Charset
+sun/nio/cs/StandardCharsets
+sun/nio/cs/FastCharsetProvider
+java/nio/charset/spi/CharsetProvider
+sun/nio/cs/StandardCharsets$Aliases
+sun/util/PreHashedMap
+sun/nio/cs/StandardCharsets$Classes
+sun/nio/cs/StandardCharsets$Cache
+java/lang/ThreadLocal
+java/util/concurrent/atomic/AtomicInteger
+sun/misc/Unsafe
+java/lang/NoSuchMethodError
+java/lang/IncompatibleClassChangeError
+sun/reflect/Reflection
+java/util/Collections
+java/util/Collections$EmptySet
+java/util/AbstractSet
+java/util/Set
+java/util/Collections$EmptyList
+java/util/Collections$EmptyMap
+java/util/Collections$ReverseComparator
+java/util/Collections$SynchronizedMap
+java/lang/Class$3
+java/lang/reflect/Modifier
+java/lang/reflect/ReflectAccess
+sun/reflect/LangReflectAccess
+java/util/Arrays
+java/lang/Math
+sun/nio/cs/US_ASCII
+sun/nio/cs/HistoricallyNamedCharset
+sun/misc/VM
+java/lang/StringCoding
+java/lang/ThreadLocal$ThreadLocalMap
+java/lang/ThreadLocal$ThreadLocalMap$Entry
+java/lang/StringCoding$StringDecoder
+sun/nio/cs/US_ASCII$Decoder
+java/nio/charset/CharsetDecoder
+java/nio/charset/CodingErrorAction
+java/nio/ByteBuffer
+java/nio/HeapByteBuffer
+java/nio/Bits
+java/nio/ByteOrder
+java/nio/CharBuffer
+java/lang/Readable
+java/nio/HeapCharBuffer
+java/nio/charset/CoderResult
+java/nio/charset/CoderResult$1
+java/nio/charset/CoderResult$Cache
+java/nio/charset/CoderResult$2
+sun/misc/Version
+java/io/FileInputStream
+java/io/InputStream
+java/io/Closeable
+java/io/FileDescriptor
+java/io/FileOutputStream
+java/io/OutputStream
+java/io/Flushable
+java/io/BufferedInputStream
+java/io/FilterInputStream
+java/util/concurrent/atomic/AtomicReferenceFieldUpdater
+java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
+sun/reflect/misc/ReflectUtil
+java/io/PrintStream
+java/io/FilterOutputStream
+java/io/BufferedOutputStream
+java/io/OutputStreamWriter
+java/io/Writer
+sun/nio/cs/StreamEncoder
+sun/security/action/GetPropertyAction
+sun/nio/cs/US_ASCII$Encoder
+java/nio/charset/CharsetEncoder
+sun/nio/cs/Surrogate$Parser
+sun/nio/cs/Surrogate
+java/io/BufferedWriter
+java/lang/Runtime
+java/io/File
+java/io/FileSystem
+java/io/UnixFileSystem
+java/io/ExpiringCache
+java/io/ExpiringCache$1
+java/util/LinkedHashMap
+java/util/LinkedHashMap$Entry
+java/lang/StringBuilder
+java/io/File$1
+sun/misc/JavaIODeleteOnExitAccess
+sun/misc/SharedSecrets
+java/lang/ClassLoader$3
+java/lang/StringCoding$StringEncoder
+java/io/ExpiringCache$Entry
+java/lang/ClassLoader$NativeLibrary
+java/lang/Terminator
+java/lang/Terminator$1
+sun/misc/SignalHandler
+sun/misc/Signal
+sun/misc/NativeSignalHandler
+java/io/Console
+java/io/Console$1
+sun/misc/JavaIOAccess
+java/io/Console$1$1
+java/lang/Shutdown
+java/util/ArrayList
+java/lang/Shutdown$Lock
+java/lang/ApplicationShutdownHooks
+java/util/IdentityHashMap
+sun/misc/OSEnvironment
+java/lang/System$2
+sun/misc/JavaLangAccess
+java/lang/Compiler
+java/lang/Compiler$1
+sun/misc/Launcher
+sun/misc/Launcher$Factory
+java/net/URLStreamHandlerFactory
+sun/misc/Launcher$ExtClassLoader
+java/net/URLClassLoader
+java/security/SecureClassLoader
+sun/security/util/Debug
+java/net/URLClassLoader$7
+sun/misc/JavaNetAccess
+java/util/StringTokenizer
+sun/misc/Launcher$ExtClassLoader$1
+java/security/PrivilegedExceptionAction
+sun/misc/MetaIndex
+java/io/BufferedReader
+java/io/Reader
+java/io/FileReader
+java/io/InputStreamReader
+sun/nio/cs/StreamDecoder
+java/lang/reflect/Array
+sun/net/www/ParseUtil
+java/util/BitSet
+java/io/ObjectStreamClass
+java/net/URL
+java/util/Locale
+java/util/concurrent/ConcurrentHashMap
+java/util/concurrent/ConcurrentMap
+java/util/concurrent/ConcurrentHashMap$Segment
+java/util/concurrent/locks/ReentrantLock
+java/util/concurrent/locks/Lock
+java/util/concurrent/locks/ReentrantLock$NonfairSync
+java/util/concurrent/locks/ReentrantLock$Sync
+java/util/concurrent/locks/AbstractQueuedSynchronizer
+java/util/concurrent/locks/AbstractOwnableSynchronizer
+java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
+java/util/concurrent/ConcurrentHashMap$HashEntry
+java/lang/CharacterDataLatin1
+java/net/Parts
+sun/net/www/protocol/file/Handler
+java/net/URLStreamHandler
+java/lang/Class$1
+sun/reflect/ReflectionFactory$1
+sun/reflect/NativeConstructorAccessorImpl
+sun/reflect/DelegatingConstructorAccessorImpl
+java/util/HashSet
+sun/misc/URLClassPath
+sun/net/www/protocol/jar/Handler
+sun/misc/Launcher$AppClassLoader
+sun/misc/Launcher$AppClassLoader$1
+java/lang/SystemClassLoaderAction
+java/net/URLClassLoader$1
+sun/misc/URLClassPath$3
+sun/misc/URLClassPath$JarLoader
+sun/misc/URLClassPath$Loader
+java/security/PrivilegedActionException
+sun/misc/URLClassPath$FileLoader
+sun/misc/URLClassPath$FileLoader$1
+sun/misc/Resource
+sun/nio/ByteBuffered
+java/security/CodeSource
+java/security/Permissions
+java/security/PermissionCollection
+sun/net/www/protocol/file/FileURLConnection
+sun/net/www/URLConnection
+java/net/URLConnection
+java/net/UnknownContentHandler
+java/net/ContentHandler
+sun/net/www/MessageHeader
+java/io/FilePermission
+java/io/FilePermission$1
+sun/security/provider/PolicyFile
+java/security/Policy
+java/security/Policy$UnsupportedEmptyCollection
+java/io/FilePermissionCollection
+java/security/AllPermission
+java/security/UnresolvedPermission
+java/security/BasicPermissionCollection
+java/security/Principal
+java/security/cert/Certificate
+java/util/AbstractList$Itr
+java/util/IdentityHashMap$KeySet
+java/util/IdentityHashMap$KeyIterator
+java/util/IdentityHashMap$IdentityHashMapIterator
+java/io/DeleteOnExitHook
+java/util/LinkedHashSet
+java/util/HashMap$KeySet
+java/util/LinkedHashMap$KeyIterator
+java/util/LinkedHashMap$LinkedHashIterator
+java/awt/Frame
+java/awt/MenuContainer
+java/awt/Window
+javax/accessibility/Accessible
+java/awt/Container
+java/awt/Component
+java/awt/image/ImageObserver
+java/lang/InterruptedException
+java/awt/Label
+java/util/logging/Logger
+java/util/logging/Handler
+java/util/logging/Level
+java/util/logging/LogManager
+java/util/logging/LogManager$1
+java/beans/PropertyChangeSupport
+java/util/logging/LogManager$LogNode
+java/util/logging/LoggingPermission
+java/util/logging/LogManager$Cleaner
+java/util/logging/LogManager$RootLogger
+java/util/logging/LogManager$2
+java/util/Properties$LineReader
+java/util/Hashtable$Enumerator
+java/beans/PropertyChangeEvent
+java/util/EventObject
+java/awt/Component$AWTTreeLock
+sun/awt/DebugHelper
+sun/awt/NativeLibLoader
+sun/security/action/LoadLibraryAction
+java/awt/GraphicsEnvironment
+java/awt/GraphicsEnvironment$1
+java/lang/ProcessEnvironment
+java/lang/ProcessEnvironment$Variable
+java/lang/ProcessEnvironment$ExternalData
+java/lang/ProcessEnvironment$Value
+java/lang/ProcessEnvironment$StringEnvironment
+java/util/Collections$UnmodifiableMap
+sun/awt/DebugHelperStub
+java/awt/Toolkit
+java/awt/Toolkit$3
+sun/util/CoreResourceBundleControl
+java/util/ResourceBundle$Control
+java/util/Arrays$ArrayList
+java/util/Collections$UnmodifiableRandomAccessList
+java/util/Collections$UnmodifiableList
+java/util/Collections$UnmodifiableCollection
+java/util/ResourceBundle
+java/util/ResourceBundle$1
+java/util/ResourceBundle$RBClassLoader
+java/util/ResourceBundle$RBClassLoader$1
+java/util/ResourceBundle$CacheKey
+java/util/ResourceBundle$LoaderReference
+java/util/ResourceBundle$CacheKeyReference
+java/util/ResourceBundle$SingleFormatControl
+sun/awt/resources/awt
+java/util/ListResourceBundle
+java/awt/Toolkit$1
+java/io/FileNotFoundException
+java/io/IOException
+java/awt/event/KeyEvent
+java/awt/event/InputEvent
+java/awt/event/ComponentEvent
+java/awt/AWTEvent
+java/awt/event/NativeLibLoader
+java/util/WeakHashMap
+java/util/WeakHashMap$Entry
+java/awt/Component$DummyRequestFocusController
+sun/awt/RequestFocusController
+java/awt/LayoutManager
+java/awt/LightweightDispatcher
+java/awt/event/AWTEventListener
+java/util/EventListener
+java/awt/Dimension
+java/awt/geom/Dimension2D
+java/util/concurrent/atomic/AtomicBoolean
+java/awt/ComponentOrientation
+java/awt/Component$2
+java/lang/NoSuchMethodException
+sun/awt/AppContext
+sun/awt/AppContext$1
+sun/awt/AppContext$2
+sun/awt/MostRecentKeyValue
+java/awt/Cursor
+sun/awt/X11GraphicsEnvironment
+sun/java2d/SunGraphicsEnvironment
+sun/java2d/FontSupport
+sun/awt/DisplayChangedListener
+sun/java2d/SunGraphicsEnvironment$TTFilter
+java/io/FilenameFilter
+sun/java2d/SunGraphicsEnvironment$T1Filter
+sun/awt/X11GraphicsEnvironment$1
+sun/awt/SunToolkit
+sun/awt/WindowClosingSupport
+sun/awt/WindowClosingListener
+sun/awt/ComponentFactory
+sun/awt/InputMethodSupport
+java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
+java/util/concurrent/locks/Condition
+sun/awt/AWTAutoShutdown
+sun/awt/AWTAutoShutdown$PeerMap
+sun/awt/SunToolkit$6
+java/awt/Dialog$ModalExclusionType
+java/lang/Enum
+java/awt/Dialog
+java/awt/Dialog$ModalityType
+java/awt/ModalEventFilter
+java/awt/EventFilter
+sun/reflect/UnsafeFieldAccessorFactory
+sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
+sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
+sun/awt/SunDisplayChanger
+sun/java2d/SunGraphicsEnvironment$1
+java/io/StreamTokenizer
+sun/font/FontManager
+sun/font/FileFont
+sun/font/PhysicalFont
+sun/font/Font2D
+sun/font/CompositeFont
+java/util/HashMap$Values
+java/util/HashMap$ValueIterator
+java/util/HashMap$HashIterator
+sun/font/FontManager$1
+java/awt/Font
+java/awt/geom/AffineTransform
+sun/font/AttributeValues
+sun/font/EAttribute
+java/text/AttributedCharacterIterator$Attribute
+java/lang/Class$4
+sun/reflect/NativeMethodAccessorImpl
+sun/reflect/DelegatingMethodAccessorImpl
+java/awt/font/TextAttribute
+java/lang/Integer$IntegerCache
+sun/font/TrueTypeFont
+java/awt/font/FontRenderContext
+java/awt/RenderingHints
+sun/awt/SunHints
+sun/awt/SunHints$Key
+java/awt/RenderingHints$Key
+sun/awt/SunHints$Value
+sun/awt/SunHints$LCDContrastKey
+sun/font/Type1Font
+java/awt/geom/Point2D$Float
+java/awt/geom/Point2D
+sun/font/StrikeMetrics
+java/awt/geom/Rectangle2D$Float
+java/awt/geom/Rectangle2D
+java/awt/geom/RectangularShape
+java/awt/Shape
+java/awt/geom/GeneralPath
+java/awt/geom/Path2D$Float
+java/awt/geom/Path2D
+sun/font/CharToGlyphMapper
+sun/font/PhysicalStrike
+sun/font/FontStrike
+sun/font/GlyphList
+sun/font/StrikeCache
+sun/java2d/Disposer
+sun/java2d/Disposer$1
+sun/font/StrikeCache$1
+sun/font/FontManager$FontRegistrationInfo
+sun/awt/motif/MFontConfiguration
+sun/awt/FontConfiguration
+sun/awt/FontDescriptor
+java/util/Scanner
+java/util/regex/Pattern
+java/util/regex/Pattern$8
+java/util/regex/Pattern$Node
+java/util/regex/Pattern$LastNode
+java/util/regex/Pattern$GroupHead
+java/util/regex/Pattern$CharPropertyNames
+java/util/regex/Pattern$CharPropertyNames$1
+java/util/regex/Pattern$CharPropertyNames$CharPropertyFactory
+java/util/regex/Pattern$CharPropertyNames$2
+java/util/regex/Pattern$CharPropertyNames$5
+java/util/regex/Pattern$CharPropertyNames$3
+java/util/regex/Pattern$CharPropertyNames$6
+java/util/regex/Pattern$CharPropertyNames$CloneableProperty
+java/util/regex/Pattern$CharProperty
+java/util/regex/Pattern$CharPropertyNames$4
+java/util/regex/Pattern$CharPropertyNames$7
+java/util/regex/Pattern$CharPropertyNames$8
+java/util/regex/Pattern$CharPropertyNames$9
+java/util/regex/Pattern$CharPropertyNames$10
+java/util/regex/Pattern$CharPropertyNames$11
+java/util/regex/Pattern$CharPropertyNames$12
+java/util/regex/Pattern$CharPropertyNames$13
+java/util/regex/Pattern$CharPropertyNames$14
+java/util/regex/Pattern$CharPropertyNames$15
+java/util/regex/Pattern$CharPropertyNames$16
+java/util/regex/Pattern$CharPropertyNames$17
+java/util/regex/Pattern$CharPropertyNames$18
+java/util/regex/Pattern$CharPropertyNames$19
+java/util/regex/Pattern$CharPropertyNames$20
+java/util/regex/Pattern$CharPropertyNames$21
+java/util/regex/Pattern$Curly
+java/util/regex/Pattern$Slice
+java/util/regex/Pattern$Begin
+java/util/regex/Pattern$First
+java/util/regex/Pattern$Start
+java/util/regex/Pattern$TreeInfo
+java/util/regex/Pattern$All
+java/util/regex/Pattern$BitClass
+java/util/regex/Pattern$BmpCharProperty
+java/util/regex/Pattern$6
+java/util/regex/Pattern$CharProperty$1
+java/util/regex/Pattern$10
+sun/nio/ch/FileChannelImpl
+java/nio/channels/FileChannel
+java/nio/channels/ByteChannel
+java/nio/channels/ReadableByteChannel
+java/nio/channels/Channel
+java/nio/channels/WritableByteChannel
+java/nio/channels/GatheringByteChannel
+java/nio/channels/ScatteringByteChannel
+java/nio/channels/spi/AbstractInterruptibleChannel
+java/nio/channels/InterruptibleChannel
+sun/nio/ch/Util
+sun/nio/ch/IOUtil
+sun/nio/ch/FileDispatcher
+sun/nio/ch/NativeDispatcher
+sun/nio/ch/Reflect
+java/nio/MappedByteBuffer
+sun/nio/ch/Reflect$1
+sun/nio/ch/NativeThreadSet
+java/nio/channels/Channels
+java/util/Scanner$1
+sun/misc/LRUCache
+java/util/regex/Matcher
+java/util/regex/MatchResult
+java/text/NumberFormat
+java/text/Format
+java/text/spi/NumberFormatProvider
+java/util/spi/LocaleServiceProvider
+sun/util/LocaleServiceProviderPool
+sun/util/LocaleServiceProviderPool$1
+java/util/ServiceLoader
+java/util/ServiceLoader$LazyIterator
+java/util/ServiceLoader$1
+java/util/HashMap$EntrySet
+java/util/LinkedHashMap$EntryIterator
+sun/misc/Launcher$1
+sun/misc/URLClassPath$2
+java/lang/ClassLoader$2
+sun/misc/URLClassPath$1
+java/net/URLClassLoader$3
+sun/misc/CompoundEnumeration
+sun/misc/URLClassPath$JarLoader$1
+sun/misc/FileURLMapper
+java/net/URLClassLoader$3$1
+sun/util/resources/LocaleData
+sun/util/resources/LocaleData$1
+sun/util/resources/LocaleData$LocaleDataResourceBundleControl
+sun/util/LocaleDataMetaInfo
+sun/text/resources/FormatData
+java/util/ResourceBundle$BundleReference
+sun/text/resources/FormatData_en
+sun/text/resources/FormatData_en_US
+java/text/DecimalFormatSymbols
+java/text/spi/DecimalFormatSymbolsProvider
+java/util/Currency
+java/util/Currency$1
+java/util/CurrencyData
+java/util/spi/CurrencyNameProvider
+sun/util/resources/CurrencyNames
+sun/util/resources/LocaleNamesBundle
+sun/util/resources/OpenListResourceBundle
+sun/util/resources/CurrencyNames_en_US
+java/text/DecimalFormat
+java/text/FieldPosition
+java/text/DigitList
+java/math/RoundingMode
+java/util/regex/Pattern$GroupTail
+java/util/regex/Pattern$Ctype
+java/util/regex/Pattern$Ques
+java/util/regex/Pattern$GroupCurly
+java/util/regex/Pattern$5
+java/util/regex/Pattern$Loop
+java/util/regex/Pattern$Prolog
+java/util/regex/Pattern$9
+java/util/regex/Pattern$BranchConn
+java/util/regex/Pattern$Branch
+java/nio/channels/spi/AbstractInterruptibleChannel$1
+sun/nio/ch/Interruptible
+sun/nio/ch/NativeThread
+sun/nio/ch/DirectBuffer
+java/nio/DirectByteBuffer
+java/nio/DirectByteBuffer$Deallocator
+sun/misc/Cleaner
+sun/nio/ch/IOStatus
+java/util/regex/ASCII
+java/io/DataInputStream
+java/io/DataInput
+java/lang/Short$ShortCache
+java/util/HashMap$KeyIterator
+sun/font/CompositeFontDescriptor
+sun/font/Font2DHandle
+sun/font/FontFamily
+java/awt/GraphicsDevice
+sun/awt/X11GraphicsDevice
+sun/awt/X11GraphicsConfig
+java/awt/GraphicsConfiguration
+java/awt/ImageCapabilities
+sun/java2d/x11/X11SurfaceData
+sun/java2d/SurfaceData
+java/awt/Transparency
+sun/java2d/DisposerTarget
+sun/java2d/InvalidPipeException
+java/lang/IllegalStateException
+sun/java2d/NullSurfaceData
+sun/java2d/loops/SurfaceType
+sun/awt/image/PixelConverter
+sun/awt/image/PixelConverter$Xrgb
+sun/awt/image/PixelConverter$Argb
+sun/awt/image/PixelConverter$ArgbPre
+sun/awt/image/PixelConverter$Xbgr
+sun/awt/image/PixelConverter$Rgba
+sun/awt/image/PixelConverter$RgbaPre
+sun/awt/image/PixelConverter$Ushort565Rgb
+sun/awt/image/PixelConverter$Ushort555Rgb
+sun/awt/image/PixelConverter$Ushort555Rgbx
+sun/awt/image/PixelConverter$Ushort4444Argb
+sun/awt/image/PixelConverter$ByteGray
+sun/awt/image/PixelConverter$UshortGray
+sun/awt/image/PixelConverter$Rgbx
+sun/awt/image/PixelConverter$Bgrx
+sun/awt/image/PixelConverter$ArgbBm
+java/awt/image/ColorModel
+java/awt/image/DirectColorModel
+java/awt/image/PackedColorModel
+java/awt/color/ColorSpace
+java/awt/color/ICC_Profile
+sun/awt/color/ProfileDeferralInfo
+sun/awt/color/ProfileDeferralMgr
+java/awt/color/ICC_ProfileRGB
+java/awt/color/ICC_Profile$1
+sun/awt/color/ProfileActivator
+java/awt/color/ICC_ColorSpace
+sun/java2d/pipe/NullPipe
+sun/java2d/pipe/PixelDrawPipe
+sun/java2d/pipe/PixelFillPipe
+sun/java2d/pipe/ShapeDrawPipe
+sun/java2d/pipe/TextPipe
+sun/java2d/pipe/DrawImagePipe
+java/awt/image/IndexColorModel
+sun/java2d/pipe/LoopPipe
+sun/java2d/pipe/OutlineTextRenderer
+sun/java2d/pipe/SolidTextRenderer
+sun/java2d/pipe/GlyphListLoopPipe
+sun/java2d/pipe/GlyphListPipe
+sun/java2d/pipe/AATextRenderer
+sun/java2d/pipe/LCDTextRenderer
+sun/java2d/pipe/AlphaColorPipe
+sun/java2d/pipe/CompositePipe
+sun/java2d/pipe/PixelToShapeConverter
+sun/java2d/pipe/TextRenderer
+sun/java2d/pipe/SpanClipRenderer
+sun/java2d/pipe/Region
+sun/java2d/pipe/RegionIterator
+sun/java2d/pipe/DuctusShapeRenderer
+sun/java2d/pipe/DuctusRenderer
+sun/java2d/pipe/AlphaPaintPipe
+sun/java2d/pipe/SpanShapeRenderer$Composite
+sun/java2d/pipe/SpanShapeRenderer
+sun/java2d/pipe/GeneralCompositePipe
+sun/java2d/pipe/DrawImage
+sun/java2d/loops/RenderCache
+sun/java2d/loops/RenderCache$Entry
+sun/java2d/loops/XORComposite
+java/awt/Composite
+sun/font/X11TextRenderer
+sun/java2d/loops/GraphicsPrimitive
+sun/java2d/x11/X11PMBlitLoops
+sun/java2d/loops/Blit
+sun/java2d/loops/GraphicsPrimitiveMgr
+sun/java2d/loops/CompositeType
+sun/java2d/SunGraphics2D
+sun/awt/ConstrainableGraphics
+java/awt/Graphics2D
+java/awt/Graphics
+java/awt/Color
+java/awt/Paint
+java/awt/AlphaComposite
+sun/java2d/loops/BlitBg
+sun/java2d/loops/ScaledBlit
+sun/java2d/loops/FillRect
+sun/java2d/loops/FillSpans
+sun/java2d/loops/DrawLine
+sun/java2d/loops/DrawRect
+sun/java2d/loops/DrawPolygons
+sun/java2d/loops/DrawPath
+sun/java2d/loops/FillPath
+sun/java2d/loops/MaskBlit
+sun/java2d/loops/MaskFill
+sun/java2d/loops/DrawGlyphList
+sun/java2d/loops/DrawGlyphListAA
+sun/java2d/loops/DrawGlyphListLCD
+sun/java2d/loops/TransformHelper
+java/awt/BasicStroke
+java/awt/Stroke
+sun/misc/PerformanceLogger
+sun/misc/PerformanceLogger$TimeData
+sun/java2d/pipe/ValidatePipe
+sun/java2d/loops/CustomComponent
+sun/java2d/loops/GraphicsPrimitiveProxy
+sun/java2d/loops/GeneralRenderer
+sun/java2d/loops/GraphicsPrimitiveMgr$1
+sun/java2d/loops/GraphicsPrimitiveMgr$2
+sun/java2d/x11/X11PMBlitLoops$DelegateBlitLoop
+sun/java2d/x11/X11PMBlitBgLoops
+sun/java2d/x11/X11SurfaceData$LazyPipe
+sun/awt/X11GraphicsConfig$X11GCDisposerRecord
+sun/java2d/DisposerRecord
+java/awt/BorderLayout
+java/awt/LayoutManager2
+java/awt/Rectangle
+java/awt/Toolkit$2
+sun/awt/X11/XToolkit
+sun/awt/X11/XConstants
+sun/awt/UNIXToolkit
+java/util/TreeMap
+java/util/NavigableMap
+java/util/SortedMap
+sun/awt/X11/XlibWrapper
+sun/awt/X11/XUtilConstants
+sun/awt/X11/XProtocolConstants
+sun/awt/X11/XCursorFontConstants
+sun/awt/X11/XlibWrapper$1
+sun/awt/X11/XToolkit$4
+sun/awt/X11/XModifierKeymap
+sun/awt/X11/XWrapperBase
+sun/awt/X11/Native
+sun/awt/X11/Native$1
+java/awt/EventQueue
+sun/awt/X11/XToolkit$7
+java/util/EmptyStackException
+java/lang/reflect/InvocationTargetException
+java/awt/EventDispatchThread
+java/awt/event/PaintEvent
+java/awt/event/MouseEvent
+sun/awt/PeerEvent
+java/awt/event/InvocationEvent
+java/awt/ActiveEvent
+java/awt/EventQueueItem
+sun/awt/X11/XToolkit$1
+sun/awt/X11/XToolkit$XErrorHandler
+sun/awt/X11/XToolkit$5
+sun/awt/X11/XEventDispatcher
+sun/awt/SunToolkit$ModalityListenerList
+sun/awt/ModalityListener
+sun/awt/SunToolkit$1
+java/util/MissingResourceException
+java/awt/Queue
+sun/awt/PostEventQueue
+java/util/LinkedList
+java/util/Deque
+java/util/Queue
+java/util/AbstractSequentialList
+java/util/LinkedList$Entry
+sun/awt/X11/AwtScreenData
+sun/awt/X11/XWM
+sun/awt/X11/MWMConstants
+sun/awt/X11/XAtom
+java/awt/Insets
+sun/awt/X11/XWM$1
+sun/awt/X11/XWM$2
+sun/awt/X11/XSetWindowAttributes
+sun/awt/X11/XErrorEvent
+sun/awt/X11/XNETProtocol
+sun/awt/X11/XStateProtocol
+sun/awt/X11/XLayerProtocol
+sun/awt/X11/XProtocol
+sun/awt/X11/XProtocol$1
+sun/awt/X11/WindowPropertyGetter
+sun/awt/X11/UnsafeXDisposerRecord
+sun/awt/X11/XPropertyCache
+sun/awt/X11/XWINProtocol
+sun/awt/X11/XAtomList
+sun/awt/X11/XToolkit$3
+sun/awt/X11/XAnyEvent
+sun/awt/X11/IXAnyEvent
+java/awt/Window$WindowDisposerRecord
+java/awt/KeyboardFocusManager
+java/awt/KeyEventDispatcher
+java/awt/KeyEventPostProcessor
+java/awt/AWTKeyStroke
+java/awt/AWTKeyStroke$1
+java/awt/DefaultKeyboardFocusManager
+java/awt/DefaultFocusTraversalPolicy
+java/awt/ContainerOrderFocusTraversalPolicy
+java/awt/FocusTraversalPolicy
+java/awt/MutableBoolean
+java/util/Collections$UnmodifiableSet
+sun/awt/HeadlessToolkit
+sun/awt/X11/XKeyboardFocusManagerPeer
+java/awt/peer/KeyboardFocusManagerPeer
+sun/awt/X11/XKeyboardFocusManagerPeer$1
+sun/awt/X11/XFramePeer
+java/awt/peer/FramePeer
+java/awt/peer/WindowPeer
+java/awt/peer/ContainerPeer
+java/awt/peer/ComponentPeer
+sun/awt/X11/XDecoratedPeer
+sun/awt/X11/XWindowPeer
+sun/awt/X11/XPanelPeer
+java/awt/peer/PanelPeer
+sun/awt/X11/XCanvasPeer
+java/awt/peer/CanvasPeer
+sun/awt/X11/XComponentPeer
+java/awt/dnd/peer/DropTargetPeer
+sun/awt/X11/XWindow
+sun/awt/X11ComponentPeer
+sun/awt/X11/XBaseWindow
+sun/awt/X11/XCreateWindowParams
+java/lang/Long$LongCache
+sun/awt/X11/XBaseWindow$InitialiseState
+sun/awt/X11/XBaseWindow$StateLock
+sun/awt/X11/AwtGraphicsConfigData
+sun/awt/X11/XVisualInfo
+java/awt/SystemColor
+sun/awt/X11/MotifColorUtilities
+java/lang/StrictMath
+sun/awt/X11/XRepaintArea
+sun/awt/RepaintArea
+sun/awt/X11/XWindowAttributesData
+java/util/concurrent/locks/LockSupport
+sun/awt/X11/WindowDimensions
+java/awt/Point
+java/util/TreeMap$Entry
+sun/nio/cs/UTF_8
+sun/nio/cs/Unicode
+sun/nio/cs/UTF_8$Encoder
+sun/nio/cs/UTF_8$Decoder
+sun/nio/cs/Surrogate$Generator
+sun/awt/X11/XPropertyEvent
+sun/awt/X11/XDropTargetEventProcessor
+sun/awt/X11/XDragSourceContextPeer
+sun/awt/X11/XDragSourceProtocolListener
+sun/awt/dnd/SunDragSourceContextPeer
+java/awt/dnd/peer/DragSourceContextPeer
+sun/awt/X11/XAwtState
+sun/awt/X11/XBaseWindow$1
+sun/awt/X11/XRootWindow
+sun/nio/cs/ISO_8859_1
+sun/nio/cs/ISO_8859_1$Encoder
+sun/nio/cs/ISO_8859_1$Decoder
+sun/java2d/x11/X11SurfaceData$X11WindowSurfaceData
+sun/java2d/loops/RenderLoops
+sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
+sun/java2d/DefaultDisposerRecord
+sun/java2d/x11/X11Renderer
+sun/awt/X11/XGlobalCursorManager
+sun/awt/GlobalCursorManager
+sun/awt/X11/XToolkit$6
+java/awt/Cursor$CursorDisposer
+java/awt/AWTException
+java/awt/HeadlessException
+java/lang/UnsupportedOperationException
+sun/reflect/UnsafeLongFieldAccessorImpl
+sun/reflect/UnsafeIntegerFieldAccessorImpl
+sun/awt/X11/XClientMessageEvent
+sun/awt/X11/XIconInfo
+sun/awt/X11/XAWTIcon32_java_icon16_png
+sun/awt/X11/XAWTIcon32_java_icon24_png
+sun/awt/X11/XAWTIcon32_java_icon32_png
+sun/awt/X11/XAWTIcon32_java_icon48_png
+sun/awt/X11/XSizeHints
+sun/awt/X11/XContentWindow
+sun/awt/X11/XFocusProxyWindow
+sun/awt/X11/XWMHints
+java/util/LinkedList$ListItr
+java/util/ListIterator
+sun/awt/SunToolkit$2
+java/awt/image/BufferStrategy
+java/awt/dnd/DropTarget
+java/awt/dnd/DropTargetListener
+java/awt/event/ComponentListener
+java/awt/event/FocusListener
+java/awt/event/HierarchyListener
+java/awt/event/HierarchyBoundsListener
+java/awt/event/KeyListener
+java/awt/event/MouseListener
+java/awt/event/MouseMotionListener
+java/awt/event/MouseWheelListener
+java/awt/event/InputMethodListener
+java/awt/Component$NativeInLightFixer
+java/awt/event/ContainerListener
+javax/accessibility/AccessibleContext
+sun/reflect/UnsafeObjectFieldAccessorImpl
+java/awt/peer/LightweightPeer
+sun/awt/X11/XLabelPeer
+java/awt/peer/LabelPeer
+sun/awt/X11/XMapEvent
+sun/awt/X11/XQueryTree
+sun/awt/X11/XConfigureEvent
+sun/awt/X11/PropMwmHints
+sun/awt/GlobalCursorManager$NativeUpdater
+javax/swing/JFrame
+javax/swing/WindowConstants
+javax/swing/RootPaneContainer
+javax/swing/TransferHandler$HasGetTransferHandler
+javax/swing/JLabel
+javax/swing/SwingConstants
+javax/swing/JComponent
+javax/swing/JComponent$1
+javax/swing/SwingUtilities
+javax/swing/JRootPane
+sun/security/action/GetBooleanAction
+javax/swing/event/EventListenerList
+javax/swing/JPanel
+java/awt/FlowLayout
+javax/swing/UIManager
+javax/swing/UIManager$LookAndFeelInfo
+sun/swing/SwingUtilities2
+sun/swing/SwingUtilities2$LSBCacheEntry
+javax/swing/UIManager$LAFState
+javax/swing/UIDefaults
+javax/swing/MultiUIDefaults
+javax/swing/UIManager$1
+javax/swing/plaf/metal/MetalLookAndFeel
+javax/swing/plaf/basic/BasicLookAndFeel
+javax/swing/LookAndFeel
+sun/swing/DefaultLookup
+javax/swing/plaf/metal/OceanTheme
+javax/swing/plaf/metal/DefaultMetalTheme
+javax/swing/plaf/metal/MetalTheme
+javax/swing/plaf/ColorUIResource
+javax/swing/plaf/UIResource
+sun/swing/PrintColorUIResource
+javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
+javax/swing/plaf/FontUIResource
+sun/swing/SwingLazyValue
+javax/swing/UIDefaults$LazyValue
+javax/swing/UIDefaults$ActiveValue
+javax/swing/plaf/InsetsUIResource
+sun/swing/SwingUtilities2$2
+javax/swing/plaf/basic/BasicLookAndFeel$2
+javax/swing/plaf/DimensionUIResource
+javax/swing/UIDefaults$LazyInputMap
+java/lang/Character$CharacterCache
+javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
+javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue
+java/awt/print/PrinterJob
+sun/swing/SwingUtilities2$AATextInfo
+sun/awt/X11/XAWTXSettings
+sun/awt/X11/XMSelectionListener
+sun/awt/XSettings
+sun/awt/X11/XMSelection
+sun/awt/X11/XMSelection$1
+javax/swing/plaf/metal/MetalLookAndFeel$AATextListener
+java/beans/PropertyChangeListener
+java/beans/PropertyChangeListenerProxy
+java/util/EventListenerProxy
+sun/awt/EventListenerAggregate
+javax/swing/UIDefaults$ProxyLazyValue
+javax/swing/plaf/metal/OceanTheme$1
+javax/swing/plaf/metal/OceanTheme$2
+javax/swing/plaf/metal/OceanTheme$3
+javax/swing/plaf/metal/OceanTheme$4
+javax/swing/plaf/metal/OceanTheme$5
+javax/swing/plaf/metal/OceanTheme$6
+javax/swing/RepaintManager
+javax/swing/RepaintManager$DisplayChangedHandler
+javax/swing/SwingPaintEventDispatcher
+sun/awt/PaintEventDispatcher
+javax/swing/UIManager$2
+javax/swing/UIManager$3
+java/awt/PopupMenu
+java/awt/Menu
+java/awt/MenuItem
+java/awt/MenuComponent
+java/io/ObjectOutputStream
+java/io/ObjectOutput
+java/io/DataOutput
+java/io/ObjectStreamConstants
+java/io/PrintWriter
+java/io/ObjectInputStream
+java/io/ObjectInput
+java/awt/Event
+java/awt/im/InputContext
+java/awt/event/MouseWheelEvent
+java/awt/BufferCapabilities
+sun/awt/CausedFocusEvent$Cause
+java/awt/PointerInfo
+java/awt/Component$BaselineResizeBehavior
+java/awt/FontMetrics
+java/awt/Image
+java/awt/image/ImageProducer
+java/awt/image/VolatileImage
+java/awt/im/InputMethodRequests
+java/awt/event/FocusEvent
+java/awt/event/InputMethodEvent
+java/awt/event/HierarchyEvent
+javax/accessibility/AccessibleStateSet
+com/sun/swing/internal/plaf/metal/resources/metal
+sun/util/ResourceBundleEnumeration
+com/sun/swing/internal/plaf/basic/resources/basic
+javax/swing/plaf/basic/BasicPanelUI
+javax/swing/plaf/PanelUI
+javax/swing/plaf/ComponentUI
+sun/reflect/misc/MethodUtil
+sun/reflect/misc/MethodUtil$1
+java/util/jar/JarFile
+java/util/zip/ZipFile
+java/util/zip/ZipConstants
+java/util/jar/JavaUtilJarAccessImpl
+sun/misc/JavaUtilJarAccess
+sun/misc/JarIndex
+java/util/zip/ZipEntry
+java/util/jar/JarFile$JarFileEntry
+java/util/jar/JarEntry
+sun/misc/URLClassPath$JarLoader$2
+sun/net/www/protocol/jar/JarURLConnection
+java/net/JarURLConnection
+sun/net/www/protocol/jar/JarFileFactory
+sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
+java/net/HttpURLConnection
+sun/net/www/protocol/jar/URLJarFile
+sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
+sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
+java/util/zip/ZipFile$ZipFileInputStream
+java/security/AllPermissionCollection
+java/lang/IllegalAccessException
+javax/swing/JPasswordField
+javax/swing/JTextField
+javax/swing/text/JTextComponent
+javax/swing/Scrollable
+javax/swing/JLayeredPane
+javax/swing/JRootPane$1
+javax/swing/ArrayTable
+javax/swing/JInternalFrame
+javax/swing/JRootPane$RootLayout
+javax/swing/BufferStrategyPaintManager
+javax/swing/RepaintManager$PaintManager
+javax/swing/plaf/metal/MetalRootPaneUI
+javax/swing/plaf/basic/BasicRootPaneUI
+javax/swing/plaf/RootPaneUI
+javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
+javax/swing/plaf/ComponentInputMapUIResource
+javax/swing/ComponentInputMap
+javax/swing/InputMap
+javax/swing/plaf/InputMapUIResource
+javax/swing/KeyStroke
+java/awt/VKCollection
+sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
+javax/swing/plaf/basic/LazyActionMap
+javax/swing/plaf/ActionMapUIResource
+javax/swing/ActionMap
+javax/swing/LayoutFocusTraversalPolicy
+javax/swing/SortingFocusTraversalPolicy
+javax/swing/InternalFrameFocusTraversalPolicy
+javax/swing/SwingContainerOrderFocusTraversalPolicy
+javax/swing/SwingDefaultFocusTraversalPolicy
+javax/swing/LayoutComparator
+javax/swing/plaf/metal/MetalLabelUI
+javax/swing/plaf/basic/BasicLabelUI
+javax/swing/plaf/LabelUI
+javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
+javax/swing/plaf/basic/BasicHTML
+javax/swing/SystemEventQueueUtilities
+javax/swing/SystemEventQueueUtilities$SystemEventQueue
+sun/awt/NullComponentPeer
+java/awt/event/WindowEvent
+java/awt/EventQueue$1
+java/awt/EventDispatchThread$1
+java/awt/Conditional
+java/awt/EventDispatchThread$HierarchyEventFilter
+java/awt/EventFilter$FilterAction
+sun/awt/dnd/SunDropTargetEvent
+java/awt/event/ActionEvent
+java/util/jar/Manifest
+java/io/ByteArrayInputStream
+java/util/jar/Attributes
+java/util/jar/Manifest$FastInputStream
+java/util/jar/Attributes$Name
+sun/misc/ASCIICaseInsensitiveComparator
+java/util/jar/JarVerifier
+java/io/ByteArrayOutputStream
+sun/misc/ExtensionDependency
+java/lang/Package
+sun/security/util/ManifestEntryVerifier
+sun/security/provider/Sun
+java/security/Provider
+java/security/Provider$ServiceKey
+java/security/Provider$EngineDescription
+sun/security/provider/Sun$1
+java/security/Security
+java/security/Security$1
+sun/misc/FloatingDecimal
+sun/misc/FloatingDecimal$1
+sun/security/provider/NativePRNG
+java/security/SecureRandomSpi
+sun/security/provider/NativePRNG$1
+sun/security/provider/NativePRNG$RandomIO
+sun/misc/BASE64Decoder
+sun/misc/CharacterDecoder
+sun/security/util/SignatureFileVerifier
+java/awt/event/KeyAdapter
+java/lang/NumberFormatException
+java/lang/IllegalArgumentException
+java/io/FileWriter
+java/net/Authenticator
+java/net/MalformedURLException
+javax/swing/text/Element
+javax/swing/text/Document
+javax/swing/text/PlainDocument
+javax/swing/text/AbstractDocument
+javax/swing/text/GapContent
+javax/swing/text/AbstractDocument$Content
+javax/swing/text/GapVector
+javax/swing/text/GapContent$MarkVector
+javax/swing/text/GapContent$MarkData
+javax/swing/text/StyleContext
+javax/swing/text/AbstractDocument$AttributeContext
+javax/swing/text/StyleConstants
+javax/swing/text/StyleConstants$CharacterConstants
+javax/swing/text/AttributeSet$CharacterAttribute
+javax/swing/text/StyleConstants$FontConstants
+javax/swing/text/AttributeSet$FontAttribute
+javax/swing/text/StyleConstants$ColorConstants
+javax/swing/text/AttributeSet$ColorAttribute
+javax/swing/text/StyleConstants$ParagraphConstants
+javax/swing/text/AttributeSet$ParagraphAttribute
+javax/swing/text/StyleContext$FontKey
+javax/swing/text/SimpleAttributeSet
+javax/swing/text/MutableAttributeSet
+javax/swing/text/AttributeSet
+javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
+javax/swing/text/StyleContext$NamedStyle
+javax/swing/text/Style
+javax/swing/text/SimpleAttributeSet$1
+javax/swing/text/StyleContext$SmallAttributeSet
+javax/swing/text/AbstractDocument$BidiRootElement
+javax/swing/text/AbstractDocument$BranchElement
+javax/swing/text/AbstractDocument$AbstractElement
+javax/swing/tree/TreeNode
+javax/swing/text/AbstractDocument$1
+javax/swing/text/AbstractDocument$BidiElement
+javax/swing/text/AbstractDocument$LeafElement
+javax/swing/text/GapContent$StickyPosition
+javax/swing/text/Position
+javax/swing/text/StyleContext$KeyEnumeration
+javax/swing/text/GapContent$InsertUndo
+javax/swing/undo/AbstractUndoableEdit
+javax/swing/undo/UndoableEdit
+javax/swing/text/AbstractDocument$DefaultDocumentEvent
+javax/swing/event/DocumentEvent
+javax/swing/undo/CompoundEdit
+javax/swing/event/DocumentEvent$EventType
+javax/swing/text/Segment
+java/text/CharacterIterator
+javax/swing/text/Utilities
+javax/swing/text/SegmentCache
+javax/swing/text/SegmentCache$CachedSegment
+javax/swing/event/UndoableEditEvent
+javax/swing/text/AbstractDocument$ElementEdit
+javax/swing/event/DocumentEvent$ElementChange
+java/net/Socket
+java/net/InetAddress
+java/net/InetAddress$Cache
+java/net/InetAddress$Cache$Type
+java/net/InetAddressImplFactory
+java/net/Inet4AddressImpl
+java/net/InetAddressImpl
+java/net/InetAddress$1
+sun/net/spi/nameservice/NameService
+sun/net/util/IPAddressUtil
+java/util/RandomAccessSubList
+java/util/SubList
+java/util/SubList$1
+java/util/AbstractList$ListItr
+java/net/Inet4Address
+java/net/InetSocketAddress
+java/net/SocketAddress
+java/net/SocksSocketImpl
+java/net/SocksConsts
+java/net/PlainSocketImpl
+java/net/SocketImpl
+java/net/SocketOptions
+java/net/SocketException
+java/net/SocksSocketImpl$5
+java/net/ProxySelector
+sun/net/spi/DefaultProxySelector
+sun/net/spi/DefaultProxySelector$1
+sun/net/NetProperties
+sun/net/NetProperties$1
+sun/net/spi/DefaultProxySelector$NonProxyInfo
+java/net/Inet6Address
+java/net/URI
+java/net/URI$Parser
+java/net/Proxy
+java/net/Proxy$Type
+java/net/ConnectException
+javax/swing/JMenu
+javax/swing/MenuElement
+javax/swing/JMenuItem
+javax/swing/AbstractButton
+java/awt/ItemSelectable
+javax/swing/event/MenuListener
+javax/swing/JCheckBoxMenuItem
+javax/swing/Icon
+javax/swing/JButton
+java/awt/event/WindowListener
+java/net/URLClassLoader$2
+javax/swing/ImageIcon
+javax/swing/ImageIcon$1
+java/awt/MediaTracker
+sun/misc/SoftCache$ValueCell
+sun/awt/image/URLImageSource
+sun/awt/image/InputStreamImageSource
+sun/awt/image/ImageFetchable
+sun/awt/image/ToolkitImage
+java/awt/Image$1
+sun/awt/image/SurfaceManager$ImageAccessor
+sun/awt/image/SurfaceManager
+sun/awt/image/NativeLibLoader
+java/awt/ImageMediaEntry
+java/awt/MediaEntry
+sun/awt/image/ImageRepresentation
+java/awt/image/ImageConsumer
+sun/awt/image/ImageWatched
+sun/awt/image/ImageWatched$Link
+sun/awt/image/ImageWatched$WeakLink
+sun/awt/image/ImageConsumerQueue
+sun/awt/image/ImageFetcher
+sun/awt/image/FetcherInfo
+sun/awt/image/ImageFetcher$1
+sun/awt/image/GifImageDecoder
+sun/awt/image/ImageDecoder
+sun/awt/image/GifFrame
+java/awt/image/Raster
+java/awt/image/DataBufferByte
+java/awt/image/DataBuffer
+java/awt/image/PixelInterleavedSampleModel
+java/awt/image/ComponentSampleModel
+java/awt/image/SampleModel
+sun/awt/image/ByteInterleavedRaster
+sun/awt/image/ByteComponentRaster
+sun/awt/image/SunWritableRaster
+java/awt/image/WritableRaster
+java/awt/image/BufferedImage
+java/awt/image/WritableRenderedImage
+java/awt/image/RenderedImage
+sun/awt/image/IntegerComponentRaster
+sun/awt/image/BytePackedRaster
+java/awt/Canvas
+sun/font/FontDesignMetrics
+sun/font/FontStrikeDesc
+sun/font/CompositeStrike
+sun/font/FontStrikeDisposer
+sun/font/StrikeCache$SoftDisposerRef
+sun/font/StrikeCache$DisposableStrike
+sun/font/TrueTypeFont$TTDisposerRecord
+sun/font/TrueTypeFont$1
+java/io/RandomAccessFile
+java/nio/ByteBufferAsIntBufferB
+java/nio/IntBuffer
+sun/font/TrueTypeFont$DirectoryEntry
+java/nio/ByteBufferAsShortBufferB
+java/nio/ShortBuffer
+sun/nio/cs/UTF_16
+sun/nio/cs/UTF_16$Decoder
+sun/nio/cs/UnicodeDecoder
+sun/font/FileFontStrike
+sun/font/FileFont$FileFontDisposer
+sun/font/TrueTypeGlyphMapper
+sun/font/CMap
+sun/font/CMap$NullCMapClass
+sun/font/CMap$CMapFormat4
+java/nio/ByteBufferAsCharBufferB
+sun/font/FontDesignMetrics$KeyReference
+sun/awt/image/PNGImageDecoder
+sun/awt/image/PNGFilterInputStream
+java/util/zip/InflaterInputStream
+java/util/zip/Inflater
+sun/awt/EventQueueItem
+sun/awt/SunToolkit$3
+sun/awt/X11/XExposeEvent
+sun/awt/X11/ComponentAccessor
+sun/awt/X11/ComponentAccessor$1
+sun/reflect/UnsafeBooleanFieldAccessorImpl
+sun/awt/event/IgnorePaintEvent
+java/awt/image/DataBufferInt
+java/awt/image/SinglePixelPackedSampleModel
+sun/awt/image/IntegerInterleavedRaster
+sun/java2d/x11/X11RemoteOffScreenImage
+sun/awt/image/RemoteOffScreenImage
+sun/awt/image/OffScreenImage
+sun/java2d/x11/X11RemoteOffScreenImage$X11RemoteSurfaceManager
+sun/awt/image/OffScreenSurfaceManager
+sun/awt/image/CachingSurfaceManager
+sun/awt/image/RasterListener
+sun/awt/image/BufImgSurfaceData
+sun/java2d/opengl/GLXGraphicsConfig
+sun/java2d/opengl/OGLGraphicsConfig
+sun/java2d/x11/X11SurfaceData$X11PixmapSurfaceData
+sun/awt/image/WritableRasterNative
+sun/awt/image/DataBufferNative
+sun/java2d/SurfaceManagerFactory
+sun/java2d/x11/X11CachingSurfaceManager
+sun/java2d/opengl/GLXSurfaceData
+sun/java2d/opengl/OGLSurfaceData
+sun/font/CompositeGlyphMapper
+sun/java2d/loops/FontInfo
+java/util/Date
+sun/util/calendar/CalendarSystem
+sun/util/calendar/Gregorian
+sun/util/calendar/BaseCalendar
+sun/util/calendar/AbstractCalendar
+java/util/TimeZone
+java/lang/InheritableThreadLocal
+sun/util/calendar/ZoneInfo
+sun/util/calendar/ZoneInfoFile
+sun/util/calendar/ZoneInfoFile$1
+java/util/TimeZone$1
+sun/util/calendar/Gregorian$Date
+sun/util/calendar/BaseCalendar$Date
+sun/util/calendar/CalendarDate
+sun/util/calendar/CalendarUtils
+java/util/TimeZone$DisplayNames
+sun/util/TimeZoneNameUtility
+sun/util/resources/TimeZoneNames
+sun/util/resources/TimeZoneNamesBundle
+sun/util/resources/TimeZoneNames_en
+java/util/spi/TimeZoneNameProvider
+java/lang/ProcessBuilder
+java/lang/ProcessImpl
+java/lang/UNIXProcess
+java/lang/Process
+java/lang/UNIXProcess$Gate
+java/lang/UNIXProcess$1
+java/lang/UNIXProcess$1$1
+java/lang/UNIXProcess$1$1$1
+java/net/ServerSocket
+java/util/Random
+java/util/concurrent/atomic/AtomicLong
+java/lang/InternalError
+java/io/StringReader
+java/lang/SecurityException
+java/io/FilterReader
+java/lang/reflect/Proxy
+java/lang/reflect/InvocationHandler
+java/lang/NoSuchFieldException
+java/lang/InstantiationException
+java/lang/ArrayIndexOutOfBoundsException
+java/lang/IndexOutOfBoundsException
+javax/swing/JDialog
+sun/awt/X11/XClipboard
+sun/awt/datatransfer/SunClipboard
+java/awt/datatransfer/Clipboard
+java/awt/datatransfer/SystemFlavorMap
+java/awt/datatransfer/FlavorMap
+java/awt/datatransfer/FlavorTable
+java/awt/datatransfer/SystemFlavorMap$1
+sun/net/ProgressMonitor
+sun/net/DefaultProgressMeteringPolicy
+sun/net/ProgressMeteringPolicy
+java/awt/datatransfer/SystemFlavorMap$2
+java/awt/datatransfer/MimeType
+java/io/Externalizable
+java/awt/datatransfer/MimeTypeParameterList
+sun/awt/datatransfer/DataTransferer
+java/util/Collections$SynchronizedSet
+java/util/Collections$SynchronizedCollection
+java/awt/datatransfer/DataFlavor
+java/awt/datatransfer/DataFlavor$1
+sun/awt/datatransfer/DataTransferer$CharsetComparator
+sun/awt/datatransfer/DataTransferer$IndexedComparator
+sun/nio/cs/UTF_16LE
+sun/nio/cs/UTF_16BE
+sun/awt/datatransfer/DataTransferer$DataFlavorComparator
+java/rmi/Remote
+sun/awt/datatransfer/DataTransferer$1
+sun/awt/X11/XDataTransferer
+sun/awt/datatransfer/ToolkitThreadBlockedHandler
+javax/imageio/ImageTypeSpecifier
+sun/awt/X11/XSelection
+sun/security/action/GetIntegerAction
+sun/awt/X11/XSelection$IncrementalTransferHandler
+sun/awt/X11/XSelection$SelectionEventHandler
+java/awt/datatransfer/Transferable
+java/io/EOFException
+java/util/Vector$1
+java/util/zip/ZipFile$1
+java/util/zip/ZipFile$2
+java/util/jar/JarFile$1
+java/util/PropertyResourceBundle
+java/util/ResourceBundle$Control$1
+java/util/Hashtable$EntrySet
+java/lang/IllegalAccessError
+java/text/MessageFormat
+java/text/MessageFormat$Field
+java/text/Format$Field
+java/lang/CloneNotSupportedException
+sun/reflect/MethodAccessorGenerator
+sun/reflect/AccessorGenerator
+sun/reflect/ClassFileConstants
+java/lang/Void
+sun/reflect/ByteVectorFactory
+sun/reflect/ByteVectorImpl
+sun/reflect/ByteVector
+sun/reflect/ClassFileAssembler
+sun/reflect/UTF8
+sun/reflect/Label
+sun/reflect/Label$PatchInfo
+sun/reflect/MethodAccessorGenerator$1
+sun/reflect/ClassDefiner
+sun/reflect/ClassDefiner$1
+sun/reflect/BootstrapConstructorAccessorImpl
+java/awt/event/ActionListener
+javax/swing/Timer
+javax/swing/Timer$DoPostEvent
+javax/swing/TimerQueue
+javax/swing/TimerQueue$1
+javax/swing/ToolTipManager
+java/awt/event/MouseAdapter
+javax/swing/ToolTipManager$insideTimerAction
+javax/swing/ToolTipManager$outsideTimerAction
+javax/swing/ToolTipManager$stillInsideTimerAction
+javax/swing/ToolTipManager$Actions
+sun/swing/UIAction
+javax/swing/Action
+javax/swing/ToolTipManager$MoveBeforeEnterListener
+java/awt/event/MouseMotionAdapter
+java/util/Hashtable$ValueCollection
+javax/swing/event/CaretListener
+javax/swing/JToolBar
+javax/swing/JSplitPane
+javax/swing/border/Border
+javax/swing/JToggleButton
+javax/swing/border/EmptyBorder
+javax/swing/border/AbstractBorder
+javax/swing/DefaultButtonModel
+javax/swing/ButtonModel
+javax/swing/AbstractButton$Handler
+javax/swing/event/ChangeListener
+java/awt/event/ItemListener
+javax/swing/plaf/metal/MetalButtonUI
+javax/swing/plaf/basic/BasicButtonUI
+javax/swing/plaf/ButtonUI
+javax/swing/plaf/metal/MetalBorders
+javax/swing/plaf/BorderUIResource$CompoundBorderUIResource
+javax/swing/border/CompoundBorder
+javax/swing/plaf/metal/MetalBorders$ButtonBorder
+javax/swing/plaf/basic/BasicBorders$MarginBorder
+javax/swing/plaf/basic/BasicButtonListener
+java/awt/AWTEventMulticaster
+java/awt/event/WindowFocusListener
+java/awt/event/WindowStateListener
+java/awt/event/AdjustmentListener
+java/awt/event/TextListener
+javax/swing/event/AncestorListener
+java/beans/VetoableChangeListener
+javax/swing/ButtonGroup
+javax/swing/JToggleButton$ToggleButtonModel
+javax/swing/plaf/metal/MetalToggleButtonUI
+javax/swing/plaf/basic/BasicToggleButtonUI
+javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
+java/awt/CardLayout
+javax/swing/Box
+javax/swing/plaf/metal/MetalBorders$TextFieldBorder
+javax/swing/plaf/metal/MetalBorders$Flush3DBorder
+javax/swing/BoxLayout
+javax/swing/JMenuBar
+javax/swing/DefaultSingleSelectionModel
+javax/swing/SingleSelectionModel
+javax/swing/plaf/basic/BasicMenuBarUI
+javax/swing/plaf/MenuBarUI
+javax/swing/plaf/basic/DefaultMenuLayout
+javax/swing/plaf/metal/MetalBorders$MenuBarBorder
+javax/swing/plaf/basic/BasicMenuBarUI$Handler
+javax/swing/KeyboardManager
+javax/swing/event/MenuEvent
+javax/swing/JMenu$MenuChangeListener
+javax/swing/JMenuItem$MenuItemFocusListener
+javax/swing/plaf/basic/BasicMenuUI
+javax/swing/plaf/basic/BasicMenuItemUI
+javax/swing/plaf/MenuItemUI
+javax/swing/plaf/metal/MetalBorders$MenuItemBorder
+javax/swing/plaf/metal/MetalIconFactory
+javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon
+javax/swing/plaf/basic/BasicMenuUI$Handler
+javax/swing/event/MenuKeyListener
+javax/swing/plaf/basic/BasicMenuItemUI$Handler
+javax/swing/event/MenuDragMouseListener
+javax/swing/event/MouseInputListener
+javax/swing/event/ChangeEvent
+java/awt/event/ContainerEvent
+javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon
+javax/swing/JPopupMenu
+javax/swing/plaf/basic/BasicPopupMenuUI
+javax/swing/plaf/PopupMenuUI
+javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
+java/awt/event/AWTEventListenerProxy
+java/awt/Toolkit$SelectiveAWTEventListener
+java/awt/Toolkit$ToolkitEventMulticaster
+javax/swing/plaf/basic/BasicLookAndFeel$1
+javax/swing/plaf/metal/MetalBorders$PopupMenuBorder
+javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
+javax/swing/event/PopupMenuListener
+javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
+javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
+javax/swing/MenuSelectionManager
+javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
+javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
+java/awt/event/FocusAdapter
+javax/swing/JMenu$WinListener
+java/awt/event/WindowAdapter
+javax/swing/JPopupMenu$Separator
+javax/swing/JSeparator
+javax/swing/plaf/metal/MetalPopupMenuSeparatorUI
+javax/swing/plaf/metal/MetalSeparatorUI
+javax/swing/plaf/basic/BasicSeparatorUI
+javax/swing/plaf/SeparatorUI
+javax/swing/JComboBox
+javax/swing/event/ListDataListener
+javax/swing/event/CaretEvent
+javax/swing/text/TabExpander
+javax/swing/JScrollBar
+java/awt/Adjustable
+javax/swing/event/MouseInputAdapter
+javax/swing/JScrollBar$ModelListener
+javax/swing/DefaultBoundedRangeModel
+javax/swing/BoundedRangeModel
+javax/swing/plaf/metal/MetalScrollBarUI
+javax/swing/plaf/basic/BasicScrollBarUI
+javax/swing/plaf/ScrollBarUI
+javax/swing/plaf/metal/MetalBumps
+javax/swing/plaf/metal/MetalScrollButton
+javax/swing/plaf/basic/BasicArrowButton
+javax/swing/plaf/basic/BasicScrollBarUI$TrackListener
+javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener
+javax/swing/plaf/basic/BasicScrollBarUI$ModelListener
+javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener
+javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler
+javax/swing/plaf/basic/BasicScrollBarUI$Handler
+javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener
+javax/swing/CellRendererPane
+java/util/HashMap$EntryIterator
+javax/swing/border/MatteBorder
+sun/font/StandardGlyphVector
+java/awt/font/GlyphVector
+sun/font/StandardGlyphVector$GlyphStrike
+sun/font/CoreMetrics
+sun/font/FontLineMetrics
+java/awt/font/LineMetrics
+javax/swing/ComboBoxModel
+javax/swing/ListModel
+javax/swing/ListCellRenderer
+javax/swing/DefaultComboBoxModel
+javax/swing/MutableComboBoxModel
+javax/swing/AbstractListModel
+javax/swing/JComboBox$1
+javax/swing/AncestorNotifier
+javax/swing/plaf/metal/MetalComboBoxUI
+javax/swing/plaf/basic/BasicComboBoxUI
+javax/swing/plaf/ComboBoxUI
+javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager
+javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
+javax/swing/plaf/basic/BasicComboPopup
+javax/swing/plaf/basic/ComboPopup
+javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
+javax/swing/border/LineBorder
+javax/swing/plaf/basic/BasicComboPopup$1
+javax/swing/JList
+javax/swing/DropMode
+javax/swing/DefaultListSelectionModel
+javax/swing/ListSelectionModel
+javax/swing/plaf/basic/BasicListUI
+javax/swing/plaf/ListUI
+javax/swing/plaf/basic/BasicListUI$ListTransferHandler
+javax/swing/TransferHandler
+javax/swing/TransferHandler$TransferAction
+javax/swing/DefaultListCellRenderer$UIResource
+javax/swing/DefaultListCellRenderer
+javax/swing/TransferHandler$SwingDropTarget
+java/awt/dnd/DropTargetContext
+javax/swing/TransferHandler$DropHandler
+javax/swing/TransferHandler$TransferSupport
+javax/swing/plaf/basic/BasicListUI$Handler
+javax/swing/event/ListSelectionListener
+javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
+javax/swing/plaf/basic/BasicComboPopup$Handler
+javax/swing/JScrollPane
+javax/swing/ScrollPaneConstants
+javax/swing/ScrollPaneLayout$UIResource
+javax/swing/ScrollPaneLayout
+javax/swing/JViewport
+javax/swing/ViewportLayout
+javax/swing/plaf/basic/BasicViewportUI
+javax/swing/plaf/ViewportUI
+javax/swing/JScrollPane$ScrollBar
+javax/swing/JViewport$ViewListener
+java/awt/event/ComponentAdapter
+javax/swing/plaf/metal/MetalScrollPaneUI
+javax/swing/plaf/basic/BasicScrollPaneUI
+javax/swing/plaf/ScrollPaneUI
+javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder
+javax/swing/plaf/basic/BasicScrollPaneUI$Handler
+javax/swing/plaf/metal/MetalScrollPaneUI$1
+javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource
+javax/swing/plaf/basic/BasicComboBoxRenderer
+javax/swing/plaf/metal/MetalComboBoxEditor$UIResource
+javax/swing/plaf/metal/MetalComboBoxEditor
+javax/swing/plaf/basic/BasicComboBoxEditor
+javax/swing/ComboBoxEditor
+javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
+javax/swing/JTextField$NotifyAction
+javax/swing/text/TextAction
+javax/swing/AbstractAction
+javax/swing/text/JTextComponent$MutableCaretEvent
+javax/swing/plaf/metal/MetalTextFieldUI
+javax/swing/plaf/basic/BasicTextFieldUI
+javax/swing/plaf/basic/BasicTextUI
+javax/swing/text/ViewFactory
+javax/swing/plaf/TextUI
+javax/swing/plaf/basic/BasicTextUI$BasicCursor
+javax/swing/text/DefaultEditorKit
+javax/swing/text/EditorKit
+javax/swing/text/DefaultEditorKit$InsertContentAction
+javax/swing/text/DefaultEditorKit$DeletePrevCharAction
+javax/swing/text/DefaultEditorKit$DeleteNextCharAction
+javax/swing/text/DefaultEditorKit$ReadOnlyAction
+javax/swing/text/DefaultEditorKit$DeleteWordAction
+javax/swing/text/DefaultEditorKit$WritableAction
+javax/swing/text/DefaultEditorKit$CutAction
+javax/swing/text/DefaultEditorKit$CopyAction
+javax/swing/text/DefaultEditorKit$PasteAction
+javax/swing/text/DefaultEditorKit$VerticalPageAction
+javax/swing/text/DefaultEditorKit$PageAction
+javax/swing/text/DefaultEditorKit$InsertBreakAction
+javax/swing/text/DefaultEditorKit$BeepAction
+javax/swing/text/DefaultEditorKit$NextVisualPositionAction
+javax/swing/text/DefaultEditorKit$BeginWordAction
+javax/swing/text/DefaultEditorKit$EndWordAction
+javax/swing/text/DefaultEditorKit$PreviousWordAction
+javax/swing/text/DefaultEditorKit$NextWordAction
+javax/swing/text/DefaultEditorKit$BeginLineAction
+javax/swing/text/DefaultEditorKit$EndLineAction
+javax/swing/text/DefaultEditorKit$BeginParagraphAction
+javax/swing/text/DefaultEditorKit$EndParagraphAction
+javax/swing/text/DefaultEditorKit$BeginAction
+javax/swing/text/DefaultEditorKit$EndAction
+javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
+javax/swing/text/DefaultEditorKit$InsertTabAction
+javax/swing/text/DefaultEditorKit$SelectWordAction
+javax/swing/text/DefaultEditorKit$SelectLineAction
+javax/swing/text/DefaultEditorKit$SelectParagraphAction
+javax/swing/text/DefaultEditorKit$SelectAllAction
+javax/swing/text/DefaultEditorKit$UnselectAction
+javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
+javax/swing/text/DefaultEditorKit$DumpModelAction
+javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
+javax/swing/text/Position$Bias
+javax/swing/plaf/basic/BasicTextUI$RootView
+javax/swing/text/View
+javax/swing/plaf/basic/BasicTextUI$UpdateHandler
+javax/swing/event/DocumentListener
+javax/swing/plaf/basic/BasicTextUI$DragListener
+javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
+javax/swing/plaf/basic/BasicTextUI$BasicCaret
+javax/swing/text/DefaultCaret
+javax/swing/text/Caret
+javax/swing/text/DefaultCaret$Handler
+java/awt/datatransfer/ClipboardOwner
+javax/swing/plaf/basic/BasicTextUI$BasicHighlighter
+javax/swing/text/DefaultHighlighter
+javax/swing/text/LayeredHighlighter
+javax/swing/text/Highlighter
+javax/swing/text/Highlighter$Highlight
+javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
+javax/swing/text/LayeredHighlighter$LayerPainter
+javax/swing/text/Highlighter$HighlightPainter
+javax/swing/text/DefaultHighlighter$SafeDamager
+javax/swing/text/FieldView
+javax/swing/text/PlainView
+javax/swing/text/JTextComponent$DefaultKeymap
+javax/swing/text/Keymap
+javax/swing/text/JTextComponent$KeymapWrapper
+javax/swing/text/JTextComponent$KeymapActionMap
+javax/swing/plaf/basic/BasicTextUI$FocusAction
+javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
+javax/swing/JTextArea
+javax/swing/JEditorPane
+javax/swing/JTextField$ScrollRepainter
+javax/swing/plaf/metal/MetalComboBoxEditor$1
+javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder
+javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener
+javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler
+javax/swing/plaf/basic/BasicComboBoxUI$Handler
+javax/swing/plaf/metal/MetalComboBoxButton
+javax/swing/plaf/metal/MetalComboBoxIcon
+javax/swing/plaf/metal/MetalComboBoxButton$1
+javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
+javax/swing/JComboBox$KeySelectionManager
+javax/swing/JToolBar$DefaultToolBarLayout
+javax/swing/plaf/metal/MetalToolBarUI
+javax/swing/plaf/basic/BasicToolBarUI
+javax/swing/plaf/ToolBarUI
+javax/swing/plaf/metal/MetalBorders$ToolBarBorder
+javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
+javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
+javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder
+javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
+javax/swing/plaf/basic/BasicBorders$ButtonBorder
+javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
+javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener
+javax/swing/plaf/basic/BasicToolBarUI$DockingListener
+javax/swing/plaf/basic/BasicToolBarUI$Handler
+javax/swing/border/EtchedBorder
+javax/swing/JToolBar$Separator
+javax/swing/plaf/basic/BasicToolBarSeparatorUI
+sun/awt/color/CMM
+java/applet/Applet
+java/awt/Panel
+com/sun/awt/AWTUtilities
+javax/swing/KeyboardManager$ComponentKeyStrokePair
+sun/awt/EmbeddedFrame
+sun/awt/im/InputMethodContext
+java/awt/im/spi/InputMethodContext
+sun/awt/im/InputContext
+sun/awt/im/InputMethodManager
+sun/awt/im/ExecutableInputMethodManager
+sun/awt/X11/XInputMethodDescriptor
+sun/awt/X11InputMethodDescriptor
+java/awt/im/spi/InputMethodDescriptor
+sun/awt/im/InputMethodLocator
+sun/awt/im/ExecutableInputMethodManager$2
+sun/misc/Service
+sun/misc/Service$LazyIterator
+java/util/TreeSet
+java/util/NavigableSet
+java/util/SortedSet
+javax/swing/SizeRequirements
+javax/swing/plaf/basic/BasicGraphicsUtils
+java/awt/event/AdjustmentEvent
+java/awt/MenuBar
+sun/awt/X11/XComponentPeer$2
+java/awt/SequencedEvent
+java/beans/PropertyVetoException
+java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
+java/awt/KeyboardFocusManager$HeavyweightFocusRequest
+java/awt/KeyboardFocusManager$LightweightFocusRequest
+sun/awt/KeyboardFocusManagerPeerImpl
+sun/awt/SunToolkit$7
+java/awt/Window$1DisposeAction
+java/awt/LightweightDispatcher$2
+sun/awt/X11/XReparentEvent
+sun/awt/X11/XWindowAttributes
+javax/swing/SystemEventQueueUtilities$ComponentWorkRequest
+sun/awt/X11/XFocusChangeEvent
+sun/awt/X11/XComponentPeer$1
+sun/awt/X11/XUnmapEvent
+java/io/StringWriter
+javax/swing/JWindow
+java/io/UnsupportedEncodingException
+java/net/UnknownHostException
+java/nio/channels/SocketChannel
+java/nio/channels/spi/AbstractSelectableChannel
+java/nio/channels/SelectableChannel
+java/net/SocketImplFactory
+javax/swing/UnsupportedLookAndFeelException
+java/lang/UnsatisfiedLinkError
+javax/swing/Box$Filler
+javax/swing/JComponent$2
+sun/net/www/MimeTable
+java/net/FileNameMap
+sun/net/www/MimeTable$1
+sun/net/www/MimeTable$2
+sun/net/www/MimeEntry
+java/net/URLConnection$1
+java/text/SimpleDateFormat
+java/text/DateFormat
+java/text/DateFormat$Field
+java/util/Calendar
+java/util/GregorianCalendar
+sun/util/resources/CalendarData
+sun/util/resources/CalendarData_en
+java/text/DateFormatSymbols
+java/text/spi/DateFormatSymbolsProvider
+java/text/DontCareFieldPosition
+java/text/DontCareFieldPosition$1
+java/text/Format$FieldDelegate
+javax/swing/plaf/BorderUIResource
+javax/swing/BorderFactory
+javax/swing/border/BevelBorder
+javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
+javax/swing/plaf/metal/MetalIconFactory$FolderIcon16
+java/util/zip/ZipInputStream
+java/io/PushbackInputStream
+java/util/zip/CRC32
+java/util/zip/Checksum
+java/lang/Thread$State
+javax/swing/SwingUtilities$SharedOwnerFrame
+javax/swing/JTable
+javax/swing/event/TableModelListener
+javax/swing/event/TableColumnModelListener
+javax/swing/event/CellEditorListener
+javax/swing/event/RowSorterListener
+javax/swing/BufferStrategyPaintManager$BufferInfo
+java/awt/Component$BltSubRegionBufferStrategy
+sun/awt/SubRegionShowable
+java/awt/Component$BltBufferStrategy
+sun/awt/image/SunVolatileImage
+sun/awt/image/BufferedImageGraphicsConfig
+sun/print/PrinterGraphicsConfig
+sun/java2d/x11/X11VolatileSurfaceManager
+sun/awt/image/VolatileSurfaceManager
+java/awt/print/PrinterGraphics
+java/awt/PrintGraphics
+java/awt/GraphicsCallback$PaintCallback
+java/awt/GraphicsCallback
+sun/awt/SunGraphicsCallback
+javax/swing/JRadioButton
+java/lang/ClassFormatError
+javax/swing/JTabbedPane
+javax/swing/JTabbedPane$ModelListener
+javax/swing/plaf/metal/MetalTabbedPaneUI
+javax/swing/plaf/basic/BasicTabbedPaneUI
+javax/swing/plaf/TabbedPaneUI
+javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout
+javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout
+javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout
+javax/swing/plaf/basic/BasicTabbedPaneUI$Handler
+sun/swing/ImageIconUIResource
+javax/swing/GrayFilter
+java/awt/image/RGBImageFilter
+java/awt/image/ImageFilter
+java/awt/image/FilteredImageSource
+org/w3c/dom/Node
+org/xml/sax/SAXException
+javax/xml/parsers/ParserConfigurationException
+org/xml/sax/EntityResolver
+java/security/NoSuchAlgorithmException
+java/security/GeneralSecurityException
+java/util/zip/GZIPInputStream
+java/util/zip/DeflaterOutputStream
+org/xml/sax/InputSource
+javax/xml/parsers/DocumentBuilderFactory
+javax/xml/parsers/FactoryFinder
+javax/xml/parsers/SecuritySupport
+javax/xml/parsers/SecuritySupport$2
+javax/xml/parsers/SecuritySupport$5
+javax/xml/parsers/SecuritySupport$1
+javax/xml/parsers/SecuritySupport$4
+javax/xml/parsers/DocumentBuilder
+org/w3c/dom/Document
+org/xml/sax/helpers/DefaultHandler
+org/xml/sax/DTDHandler
+org/xml/sax/ContentHandler
+org/xml/sax/ErrorHandler
+org/xml/sax/SAXNotSupportedException
+org/xml/sax/Locator
+org/xml/sax/SAXNotRecognizedException
+org/xml/sax/SAXParseException
+org/w3c/dom/NodeList
+org/w3c/dom/events/EventTarget
+org/w3c/dom/traversal/DocumentTraversal
+org/w3c/dom/events/DocumentEvent
+org/w3c/dom/ranges/DocumentRange
+org/w3c/dom/Entity
+org/w3c/dom/Element
+org/w3c/dom/CharacterData
+org/w3c/dom/CDATASection
+org/w3c/dom/Text
+org/xml/sax/AttributeList
+org/w3c/dom/DOMException
+org/w3c/dom/Notation
+org/w3c/dom/DocumentType
+org/w3c/dom/Attr
+org/w3c/dom/EntityReference
+org/w3c/dom/ProcessingInstruction
+org/w3c/dom/Comment
+org/w3c/dom/DocumentFragment
+org/w3c/dom/events/Event
+org/w3c/dom/events/MutationEvent
+org/w3c/dom/traversal/TreeWalker
+org/w3c/dom/ranges/Range
+org/w3c/dom/traversal/NodeIterator
+org/w3c/dom/events/EventException
+org/w3c/dom/NamedNodeMap
+java/lang/StringIndexOutOfBoundsException
+java/awt/GridLayout
+javax/swing/plaf/metal/MetalRadioButtonUI
+javax/swing/plaf/basic/BasicRadioButtonUI
+javax/swing/plaf/basic/BasicBorders
+javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon
+java/awt/event/ItemEvent
+java/awt/CardLayout$Card
+javax/swing/JCheckBox
+javax/swing/event/ListSelectionEvent
+javax/swing/plaf/metal/MetalCheckBoxUI
+javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon
+java/lang/ExceptionInInitializerError
+com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI
+javax/swing/JProgressBar
+javax/swing/JProgressBar$ModelListener
+javax/swing/plaf/metal/MetalProgressBarUI
+javax/swing/plaf/basic/BasicProgressBarUI
+javax/swing/plaf/ProgressBarUI
+javax/swing/plaf/BorderUIResource$LineBorderUIResource
+javax/swing/plaf/basic/BasicProgressBarUI$Handler
+javax/swing/tree/TreeModel
+javax/swing/table/TableCellRenderer
+javax/swing/table/JTableHeader
+javax/swing/event/TreeExpansionListener
+javax/swing/table/AbstractTableModel
+javax/swing/table/TableModel
+javax/swing/table/DefaultTableCellRenderer
+javax/swing/JTree
+javax/swing/tree/TreeSelectionModel
+javax/swing/tree/DefaultTreeCellRenderer
+javax/swing/tree/TreeCellRenderer
+javax/swing/table/TableCellEditor
+javax/swing/CellEditor
+javax/swing/JToolTip
+javax/swing/table/TableColumn
+javax/swing/table/DefaultTableColumnModel
+javax/swing/table/TableColumnModel
+javax/swing/table/DefaultTableModel
+javax/swing/event/TableModelEvent
+sun/swing/table/DefaultTableCellHeaderRenderer
+javax/swing/plaf/basic/BasicTableHeaderUI
+javax/swing/plaf/TableHeaderUI
+javax/swing/plaf/basic/BasicTableHeaderUI$1
+javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler
+javax/swing/DefaultCellEditor
+javax/swing/tree/TreeCellEditor
+javax/swing/AbstractCellEditor
+javax/swing/plaf/basic/BasicTableUI
+javax/swing/plaf/TableUI
+javax/swing/plaf/basic/BasicTableUI$TableTransferHandler
+javax/swing/plaf/basic/BasicTableUI$Handler
+javax/swing/tree/DefaultTreeSelectionModel
+javax/swing/tree/TreePath
+javax/swing/plaf/metal/MetalTreeUI
+javax/swing/plaf/basic/BasicTreeUI
+javax/swing/plaf/TreeUI
+javax/swing/plaf/basic/BasicTreeUI$Actions
+javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler
+javax/swing/plaf/metal/MetalTreeUI$LineListener
+javax/swing/plaf/basic/BasicTreeUI$Handler
+javax/swing/event/TreeModelListener
+javax/swing/event/TreeSelectionListener
+javax/swing/event/SwingPropertyChangeSupport
+javax/swing/tree/VariableHeightLayoutCache
+javax/swing/tree/AbstractLayoutCache
+javax/swing/tree/RowMapper
+javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler
+javax/swing/tree/AbstractLayoutCache$NodeDimensions
+javax/swing/JTree$TreeModelHandler
+javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
+javax/swing/tree/DefaultMutableTreeNode
+javax/swing/tree/MutableTreeNode
+javax/swing/tree/DefaultMutableTreeNode$1
+javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
+javax/swing/event/TableColumnModelEvent
+java/text/ParseException
+java/text/NumberFormat$Field
+javax/swing/event/UndoableEditListener
+javax/swing/filechooser/FileFilter
+javax/swing/tree/DefaultTreeModel
+javax/swing/tree/DefaultTreeCellEditor
+javax/swing/tree/DefaultTreeCellEditor$1
+javax/swing/tree/DefaultTreeCellEditor$DefaultTextField
+javax/swing/DefaultCellEditor$1
+javax/swing/DefaultCellEditor$EditorDelegate
+javax/swing/tree/DefaultTreeCellEditor$EditorContainer
+javax/swing/JTree$TreeSelectionRedirector
+javax/swing/event/TreeModelEvent
+javax/swing/plaf/metal/MetalSplitPaneUI
+javax/swing/plaf/basic/BasicSplitPaneUI
+javax/swing/plaf/SplitPaneUI
+javax/swing/plaf/basic/BasicSplitPaneDivider
+javax/swing/plaf/basic/BasicBorders$SplitPaneBorder
+javax/swing/plaf/metal/MetalSplitPaneDivider
+javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout
+javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler
+javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder
+javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager
+javax/swing/plaf/basic/BasicSplitPaneUI$1
+javax/swing/plaf/basic/BasicSplitPaneUI$Handler
+javax/swing/plaf/metal/MetalSplitPaneDivider$1
+javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler
+javax/swing/plaf/metal/MetalSplitPaneDivider$2
+javax/swing/border/TitledBorder
+javax/swing/plaf/basic/BasicTextAreaUI
+java/util/Collections$UnmodifiableCollection$1
+java/io/InterruptedIOException
+java/net/NoRouteToHostException
+java/net/BindException
+javax/swing/tree/PathPlaceHolder
+javax/swing/event/TreeSelectionEvent
+javax/swing/JList$3
+javax/swing/JList$ListSelectionHandler
+javax/swing/JSlider
+javax/swing/JSlider$ModelListener
+javax/swing/plaf/metal/MetalSliderUI
+javax/swing/plaf/basic/BasicSliderUI
+javax/swing/plaf/SliderUI
+javax/swing/plaf/basic/BasicSliderUI$Actions
+javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon
+javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon
+javax/swing/plaf/basic/BasicSliderUI$TrackListener
+javax/swing/plaf/basic/BasicSliderUI$Handler
+javax/swing/plaf/basic/BasicSliderUI$ScrollListener
+javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
+javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
+sun/java2d/HeadlessGraphicsEnvironment
+java/util/Hashtable$KeySet
+java/awt/FontFormatException
+sun/java2d/SunGraphicsEnvironment$2
+sun/font/Type1Font$1
+java/nio/channels/FileChannel$MapMode
+sun/nio/ch/FileChannelImpl$Unmapper
+sun/nio/ch/Util$3
+java/nio/DirectByteBufferR
+java/nio/charset/Charset$3
+sun/nio/cs/ext/ExtendedCharsets
+sun/nio/cs/AbstractCharsetProvider
+sun/nio/cs/ext/SJIS
+sun/nio/cs/ext/SJIS$Decoder
+sun/nio/cs/ext/DelegatableDecoder
+sun/nio/cs/ext/JIS_X_0208_Decoder
+sun/nio/cs/ext/DoubleByteDecoder
+sun/nio/cs/ext/JIS_X_0201$Decoder
+sun/nio/cs/SingleByteDecoder
+java/lang/CharacterData00
+javax/swing/DefaultListModel
+javax/swing/event/ListDataEvent
+javax/sound/sampled/DataLine
+javax/sound/sampled/Line
+javax/sound/sampled/Line$Info
+javax/sound/sampled/DataLine$Info
+javax/sound/sampled/Control$Type
+javax/sound/sampled/FloatControl$Type
+javax/sound/sampled/LineUnavailableException
+javax/sound/sampled/UnsupportedAudioFileException
+javax/swing/JRadioButtonMenuItem
+javax/swing/JMenuItem$AccessibleJMenuItem
+javax/swing/AbstractButton$AccessibleAbstractButton
+javax/accessibility/AccessibleAction
+javax/accessibility/AccessibleValue
+javax/accessibility/AccessibleText
+javax/accessibility/AccessibleExtendedComponent
+javax/accessibility/AccessibleComponent
+javax/swing/JComponent$AccessibleJComponent
+java/awt/Container$AccessibleAWTContainer
+java/awt/Component$AccessibleAWTComponent
+javax/accessibility/AccessibleRelationSet
+javax/accessibility/AccessibleState
+javax/accessibility/AccessibleBundle
+javax/swing/plaf/basic/BasicCheckBoxMenuItemUI
+javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon
+javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem
+javax/swing/plaf/basic/BasicRadioButtonMenuItemUI
+javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon
+sun/awt/image/ImageDecoder$1
+javax/swing/JTabbedPane$Page
+java/net/DatagramSocket
+java/net/MulticastSocket
+java/net/DatagramPacket
+sun/net/InetAddressCachePolicy
+sun/net/InetAddressCachePolicy$1
+sun/net/InetAddressCachePolicy$2
+java/net/InetAddress$CacheEntry
+java/net/PlainDatagramSocketImpl
+java/net/DatagramSocketImpl
+java/net/NetworkInterface
+java/net/InterfaceAddress
+java/text/Collator
+java/text/spi/CollatorProvider
+sun/text/resources/CollationData
+sun/text/resources/CollationData_en
+sun/util/EmptyListResourceBundle
+java/text/RuleBasedCollator
+java/text/CollationRules
+java/text/RBCollationTables
+java/text/RBTableBuilder
+java/text/RBCollationTables$BuildAPI
+sun/text/IntHashtable
+sun/text/UCompactIntArray
+sun/text/normalizer/NormalizerImpl
+sun/text/normalizer/ICUData
+sun/text/normalizer/NormalizerDataReader
+sun/text/normalizer/ICUBinary$Authenticate
+sun/text/normalizer/ICUBinary
+sun/text/normalizer/NormalizerImpl$FCDTrieImpl
+sun/text/normalizer/Trie$DataManipulate
+sun/text/normalizer/NormalizerImpl$NormTrieImpl
+sun/text/normalizer/NormalizerImpl$AuxTrieImpl
+sun/text/normalizer/IntTrie
+sun/text/normalizer/Trie
+sun/text/normalizer/CharTrie
+sun/text/normalizer/CharTrie$FriendAgent
+sun/text/normalizer/UnicodeSet
+sun/text/normalizer/UnicodeMatcher
+sun/text/normalizer/NormalizerImpl$DecomposeArgs
+java/text/MergeCollation
+java/text/PatternEntry$Parser
+java/text/PatternEntry
+java/text/EntryPair
+sun/text/ComposedCharIter
+sun/text/normalizer/UTF16
+sun/net/www/protocol/http/Handler
+java/io/ObjectInputStream$BlockDataInputStream
+java/io/ObjectInputStream$PeekInputStream
+java/io/ObjectInputStream$HandleTable
+java/io/ObjectInputStream$ValidationList
+java/io/Bits
+java/io/ObjectStreamClass$Caches
+java/io/ObjectStreamClass$WeakClassKey
+java/io/ObjectStreamClass$EntryFuture
+java/io/ObjectStreamClass$2
+sun/reflect/SerializationConstructorAccessorImpl
+java/io/ObjectStreamClass$FieldReflectorKey
+java/io/ObjectStreamClass$FieldReflector
+java/io/ObjectStreamClass$1
+java/io/DataOutputStream
+java/io/ObjectStreamClass$MemberSignature
+java/io/ObjectStreamClass$3
+java/io/ObjectStreamClass$4
+java/io/ObjectStreamClass$5
+java/security/MessageDigest
+java/security/MessageDigestSpi
+sun/security/jca/GetInstance
+sun/security/jca/Providers
+sun/security/jca/ProviderList
+sun/security/jca/ProviderConfig
+sun/security/jca/ProviderList$3
+sun/security/jca/ProviderList$1
+sun/security/jca/ProviderList$2
+sun/security/jca/ProviderConfig$1
+sun/security/jca/ProviderConfig$3
+java/security/Provider$Service
+java/security/Provider$UString
+sun/security/provider/SHA
+sun/security/provider/DigestBase
+sun/security/jca/GetInstance$Instance
+java/security/MessageDigest$Delegate
+sun/security/provider/ByteArrayAccess
+java/io/ObjectStreamClass$ClassDataSlot
+java/io/ObjectInputStream$CallbackContext
+sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
+java/security/SignatureException
+java/security/InvalidKeyException
+java/security/KeyException
+java/security/Signature
+java/security/SignatureSpi
+java/io/ObjectOutputStream$BlockDataOutputStream
+sun/security/provider/DSAPublicKey
+java/security/interfaces/DSAPublicKey
+java/security/interfaces/DSAKey
+java/security/PublicKey
+java/security/Key
+sun/security/x509/X509Key
+java/io/ObjectOutputStream$HandleTable
+java/io/ObjectOutputStream$ReplaceTable
+sun/security/x509/AlgorithmId
+sun/security/util/DerEncoder
+sun/security/util/BitArray
+sun/security/util/DerOutputStream
+sun/security/util/DerValue
+java/math/BigInteger
+java/security/interfaces/DSAParams
+sun/security/util/DerInputStream
+sun/security/util/DerInputBuffer
+sun/security/util/ObjectIdentifier
+java/security/AlgorithmParameters
+java/security/AlgorithmParametersSpi
+sun/security/provider/DSAParameters
+sun/security/util/ByteArrayLexOrder
+sun/security/util/ByteArrayTagOrder
+sun/security/util/DerIndefLenConverter
+java/io/InvalidClassException
+java/io/ObjectStreamException
+java/io/ObjectInputStream$GetFieldImpl
+java/io/ObjectInputStream$GetField
+sun/security/jca/ServiceId
+sun/security/jca/ProviderList$ServiceList
+sun/security/jca/ProviderList$ServiceList$1
+java/security/Signature$Delegate
+java/security/interfaces/DSAPrivateKey
+java/security/PrivateKey
+sun/security/provider/DSA$SHA1withDSA
+sun/security/provider/DSA
+java/security/spec/DSAParameterSpec
+java/security/spec/AlgorithmParameterSpec
+java/math/MutableBigInteger
+java/math/SignedMutableBigInteger
+java/awt/EventQueue$1AWTInvocationLock
+javax/swing/SystemEventQueueUtilities$RunnableCanvas
+javax/swing/SystemEventQueueUtilities$RunnableCanvasGraphics
+java/awt/Component$FlipBufferStrategy
+java/awt/SentEvent
+sun/awt/X11/XDestroyWindowEvent
+sun/awt/X11/XDropTargetRegistry
+sun/awt/X11/XEmbeddedFramePeer
+sun/awt/X11/XDragAndDropProtocols
+sun/awt/X11/XDropTargetContextPeer
+sun/awt/dnd/SunDropTargetContextPeer
+java/awt/dnd/peer/DropTargetContextPeer
+sun/awt/X11/XDropTargetContextPeer$XDropTargetProtocolListenerImpl
+sun/awt/X11/XDropTargetProtocolListener
+sun/awt/X11/XDnDDragSourceProtocol
+sun/awt/X11/XDragSourceProtocol
+sun/awt/X11/MotifDnDDragSourceProtocol
+sun/awt/X11/XDnDDropTargetProtocol
+sun/awt/X11/XDropTargetProtocol
+sun/awt/X11/MotifDnDDropTargetProtocol
+sun/awt/X11/XDnDConstants
+sun/awt/X11/MotifDnDConstants
+javax/swing/JTable$2
+javax/swing/JTable$Resizable3
+javax/swing/JTable$Resizable2
+javax/swing/JTable$5
+javax/swing/event/AncestorEvent
+sun/font/FontDesignMetrics$MetricsKey
+java/awt/geom/Line2D$Float
+java/awt/geom/Line2D
+com/sun/java/swing/plaf/gtk/GTKLookAndFeel
+javax/swing/plaf/synth/SynthLookAndFeel
+javax/swing/plaf/synth/DefaultSynthStyleFactory
+javax/swing/plaf/synth/SynthStyleFactory
+sun/swing/BakedArrayList
+javax/swing/plaf/synth/SynthLookAndFeel$Handler
+javax/swing/plaf/synth/SynthDefaultLookup
+com/sun/java/swing/plaf/gtk/GTKEngine
+com/sun/java/swing/plaf/gtk/GTKDefaultEngine
+com/sun/java/swing/plaf/gtk/GTKEngine$Settings
+com/sun/java/swing/plaf/gtk/GTKStyleFactory
+com/sun/java/swing/plaf/gtk/PangoFonts
+sun/font/FontManager$FontConfigInfo
+com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL
+javax/swing/plaf/synth/Region
+javax/swing/plaf/synth/SynthLookAndFeel$AATextListener
+com/sun/java/swing/plaf/gtk/GTKNativeEngine
+com/sun/java/swing/plaf/gtk/GTKNativeEngine$WidgetType
+com/sun/java/swing/plaf/gtk/GTKRegion
+com/sun/java/swing/plaf/gtk/GTKDefaultStyle
+com/sun/java/swing/plaf/gtk/GTKStyle
+com/sun/java/swing/plaf/gtk/GTKConstants
+javax/swing/plaf/synth/SynthStyle
+javax/swing/plaf/synth/SynthGraphicsUtils
+com/sun/java/swing/plaf/gtk/GTKGraphicsUtils
+com/sun/java/swing/plaf/gtk/GTKStyle$GTKStockIcon
+sun/swing/plaf/synth/SynthIcon
+com/sun/java/swing/plaf/gtk/GTKColorType
+javax/swing/plaf/synth/ColorType
+com/sun/java/swing/plaf/gtk/resources/gtk
+com/sun/swing/internal/plaf/synth/resources/synth
+com/sun/java/swing/plaf/gtk/GTKStyle$GTKLazyValue
+com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1FontLazyValue
+com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
+com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
+javax/swing/plaf/synth/SynthPanelUI
+javax/swing/plaf/synth/SynthConstants
+javax/swing/plaf/synth/SynthContext
+javax/swing/plaf/synth/SynthBorder
+javax/swing/plaf/synth/SynthRootPaneUI
+javax/swing/plaf/synth/SynthLabelUI
+javax/swing/plaf/synth/SynthButtonUI
+javax/swing/plaf/synth/SynthToggleButtonUI
+javax/swing/plaf/basic/BasicBorders$FieldBorder
+javax/swing/plaf/synth/SynthMenuBarUI
+javax/swing/plaf/synth/DefaultMenuLayout
+javax/swing/plaf/synth/SynthMenuUI
+javax/swing/plaf/synth/SynthUI
+com/sun/java/swing/plaf/gtk/GTKIconFactory
+com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
+com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
+com/sun/java/swing/plaf/gtk/GTKConstants$ArrowType
+javax/swing/plaf/basic/BasicIconFactory
+javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon
+javax/swing/plaf/synth/SynthMenuItemUI
+javax/swing/plaf/synth/SynthPopupMenuUI
+javax/swing/plaf/synth/SynthSeparatorUI
+javax/swing/plaf/synth/SynthScrollBarUI
+javax/swing/plaf/synth/SynthArrowButton
+javax/swing/plaf/synth/SynthArrowButton$SynthArrowButtonUI
+javax/swing/plaf/synth/SynthComboBoxUI
+javax/swing/plaf/synth/SynthComboPopup
+javax/swing/plaf/synth/SynthListUI
+javax/swing/plaf/synth/SynthListUI$SynthListCellRenderer
+javax/swing/plaf/synth/SynthViewportUI
+javax/swing/plaf/synth/SynthScrollPaneUI
+javax/swing/plaf/synth/SynthScrollPaneUI$ViewportBorder
+javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxRenderer
+javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxEditor
+javax/swing/plaf/synth/SynthTextFieldUI
+javax/swing/plaf/synth/SynthToolBarUI
+javax/swing/plaf/synth/SynthToolBarUI$SynthToolBarLayoutManager
+com/sun/java/swing/plaf/gtk/GTKIconFactory$ToolBarHandleIcon
+com/sun/java/swing/plaf/gtk/GTKConstants$Orientation
+sun/awt/X11/XTranslateCoordinates
+com/sun/java/swing/plaf/gtk/GTKPainter
+javax/swing/plaf/synth/SynthPainter
+javax/swing/plaf/synth/SynthPainter$1
+com/sun/java/swing/plaf/gtk/GTKConstants$PositionType
+com/sun/java/swing/plaf/gtk/GTKConstants$ShadowType
+java/io/ObjectInputStream$HandleTable$HandleList
+sun/java2d/pipe/ShapeSpanIterator
+sun/java2d/pipe/SpanIterator
+sun/dc/path/PathConsumer
+sun/dc/pr/PathStroker
+sun/dc/pr/PathDasher
+java/awt/geom/LineIterator
+java/awt/geom/PathIterator
+sun/applet/Main
+sun/applet/AppletMessageHandler
+sun/applet/resources/MsgAppletViewer
+sun/applet/AppletSecurity
+sun/awt/AWTSecurityManager
+java/lang/SecurityManager
+java/security/DomainCombiner
+sun/applet/AppletSecurity$1
+java/lang/SecurityManager$1
+java/security/SecurityPermission
+java/util/PropertyPermission
+sun/applet/AppletViewer
+java/applet/AppletContext
+java/awt/print/Printable
+sun/security/util/SecurityConstants
+java/awt/AWTPermission
+java/net/NetPermission
+java/net/SocketPermission
+javax/security/auth/AuthPermission
+java/lang/Thread$1
+java/util/logging/LogManager$5
+java/util/logging/LogManager$6
+sun/applet/StdAppletViewerFactory
+sun/applet/AppletViewerFactory
+sun/applet/AppletViewer$UserActionListener
+sun/applet/AppletViewerPanel
+sun/applet/AppletPanel
+java/applet/AppletStub
+sun/misc/MessageUtils
+sun/applet/AppletPanel$10
+java/security/Policy$1
+sun/security/provider/PolicyFile$1
+sun/security/provider/PolicyInfo
+sun/security/provider/PolicyFile$3
+sun/security/util/PropertyExpander
+sun/security/provider/PolicyParser
+sun/security/util/PolicyUtil
+sun/security/provider/PolicyParser$GrantEntry
+sun/security/provider/PolicyParser$PermissionEntry
+sun/security/provider/PolicyFile$PolicyEntry
+sun/security/provider/PolicyFile$6
+sun/security/provider/PolicyFile$7
+sun/security/provider/SelfPermission
+java/net/SocketPermissionCollection
+java/util/PropertyPermissionCollection
+sun/applet/AppletPanel$9
+sun/applet/AppletClassLoader
+sun/applet/AppletClassLoader$4
+sun/applet/AppletThreadGroup
+sun/applet/AppContextCreator
+sun/applet/AppletPanel$1
+sun/awt/X11/XMenuBarPeer
+java/awt/peer/MenuBarPeer
+java/awt/peer/MenuComponentPeer
+sun/awt/X11/XBaseMenuWindow
+sun/awt/X11/XMenuPeer
+java/awt/peer/MenuPeer
+java/awt/peer/MenuItemPeer
+sun/awt/X11/XMenuItemPeer
+java/awt/MenuShortcut
+sun/awt/X11/XMenuWindow
+sun/awt/X11/XMenuBarPeer$1
+sun/awt/X11/XMenuItemPeer$TextMetrics
+sun/awt/AppContext$3
+sun/awt/MostRecentThreadAppContext
+sun/awt/X11/XMenuBarPeer$MappingData
+sun/awt/X11/XBaseMenuWindow$MappingData
+sun/applet/AppletViewer$1
+sun/applet/AppletViewer$1AppletEventListener
+sun/applet/AppletListener
+sun/applet/AppletEventMulticaster
+sun/misc/Queue
+sun/misc/QueueElement
+sun/applet/AppletEvent
+sun/applet/AppletClassLoader$1
+sun/awt/X11/XBaseMenuWindow$3
+java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
+sun/awt/CausedFocusEvent
+sun/awt/X11/XWindow$1
+java/net/URLClassLoader$4
+sun/applet/AppletClassLoader$2
+javax/swing/JApplet
+java/lang/ClassLoader$1
+sun/security/provider/PolicyFile$5
+java/security/PermissionsEnumerator
+java/util/Collections$1
+sun/applet/AppletPanel$11
+sun/applet/AppletPanel$8
+sun/applet/AppletPanel$2
+sun/applet/AppletPanel$3
+sun/applet/AppletPanel$6
+javax/swing/BufferStrategyPaintManager$1
+# f3ac8b467e7f8c49
--- a/jdk/make/gendata/GendataFontConfig.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/gendata/GendataFontConfig.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, 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
@@ -66,6 +66,13 @@
GENDATA_FONT_CONFIG_SRC_PREFIX := macosx.
endif
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ GENDATA_FONT_CONFIG_SRC_DIR := \
+ $(JDK_TOPDIR)/src/aix/classes/sun/awt/fontconfigs
+ GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties
+ GENDATA_FONT_CONFIG_SRC_PREFIX := aix.
+endif
+
###
$(GENDATA_FONT_CONFIG_DST)/%.src: \
--- a/jdk/make/gensrc/GensrcX11Wrappers.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/gensrc/GensrcX11Wrappers.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -88,7 +88,7 @@
# use -m32/-m64 only if the compiler supports it
ifeq ($(COMPILER_SUPPORTS_TARGET_BITS_FLAG), true)
- MEMORY_MODEL_FLAG = "-m$*"
+ MEMORY_MODEL_FLAG="$(COMPILER_TARGET_BITS_FLAG)$*"
endif
# Compile the C code into an executable.
--- a/jdk/make/lib/Awt2dLibraries.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/lib/Awt2dLibraries.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -231,6 +231,10 @@
$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/java2d/x11
endif
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ LIBAWT_DIRS += $(JDK_TOPDIR)/src/aix/porting
+endif
+
LIBAWT_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \
$(X_CFLAGS) \
$(foreach dir, $(LIBAWT_DIRS), -I$(dir))
@@ -305,10 +309,14 @@
debug_trace.c \
debug_util.c
-ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris linux))
+ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris linux aix))
LIBAWT_FILES += awt_LoadLibrary.c initIDs.c img_colors.c
endif
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ LIBAWT_FILES += porting_aix.c
+endif
+
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBAWT_FILES += awt_LoadLibrary.c img_colors.c
LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks
@@ -473,6 +481,7 @@
LDFLAGS_solaris := -R/usr/dt/lib$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \
LDFLAGS_SUFFIX_linux := -ljvm $(LIBM) $(LIBDL) -ljava, \
LDFLAGS_SUFFIX_solaris := -ljvm $(LIBM) $(LIBDL) -ljava -lc, \
+ LDFLAGS_SUFFIX_aix :=-ljvm $(LIBM) $(LIBDL) -ljava -lm,\
LDFLAGS_SUFFIX_macosx := -lmlib_image -ljvm $(LIBM) \
-framework Cocoa \
-framework OpenGL \
@@ -681,6 +690,7 @@
LDFLAGS_SUFFIX_solaris := -lawt -ljava -ljvm -lc, \
LDFLAGS_SUFFIX_macosx := $(LIBM) -lawt -ljava -ljvm, \
LDFLAGS_SUFFIX_linux := -lm -lawt -ljava -ljvm, \
+ LDFLAGS_SUFFIX_aix := -lm -lawt -ljava -ljvm,\
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=lcms.dll" \
@@ -819,6 +829,7 @@
LDFLAGS_SUFFIX := $(BUILD_LIBFONTMANAGER_FONTLIB), \
LDFLAGS_SUFFIX_linux := -lawt $(LIBM) $(LIBCXX) -ljava -ljvm -lc, \
LDFLAGS_SUFFIX_solaris := -lawt -lawt_xawt -lc $(LIBM) $(LIBCXX) -ljava -ljvm, \
+ LDFLAGS_SUFFIX_aix := -lawt -lawt_xawt $(LIBM) $(LIBCXX) -ljava -ljvm,\
LDFLAGS_SUFFIX_macosx := -lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup \
-ljava -ljvm, \
LDFLAGS_SUFFIX_windows := $(WIN_JAVA_LIB) advapi32.lib user32.lib gdi32.lib \
@@ -833,7 +844,7 @@
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
-ifeq ($(OPENJDK_TARGET_OS), solaris)
+ifneq (, $(findstring $(OPENJDK_TARGET_OS), solaris aix))
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT_XAWT)
endif
@@ -968,6 +979,7 @@
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_solaris := -L$(OPENWIN_HOME)/sfw/lib$(OPENJDK_TARGET_CPU_ISADIR) -L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR), \
LDFLAGS_SUFFIX_linux := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX), \
+ LDFLAGS_SUFFIX_aix := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX),\
LDFLAGS_SUFFIX_solaris := $(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX) -lXrender, \
LDFLAGS_SUFFIX_macosx := -Xlinker -rpath -Xlinker @loader_path $(JAWT_LIBS) \
-framework Cocoa $(LDFLAGS_JDKLIB_SUFFIX), \
@@ -1168,6 +1180,7 @@
LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_ORIGIN)., \
REORDER := $(LIBAWT_HEADLESS_REORDER), \
LDFLAGS_SUFFIX_linux := -ljvm -lawt -lm $(LIBDL) -ljava, \
+ LDFLAGS_SUFFIX_aix := -ljvm -lawt -ljava,\
LDFLAGS_SUFFIX_solaris := $(LIBDL) -ljvm -lawt -lm -ljava $(LIBCXX) -lc, \
OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libawt_headless, \
DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
--- a/jdk/make/lib/CoreLibraries.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/lib/CoreLibraries.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -43,6 +43,7 @@
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include, \
CFLAGS_windows_debug := -DLOGGING, \
+ CFLAGS_aix := -qfloat=nomaf, \
ARFLAGS := $(ARFLAGS), \
OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \
DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
@@ -198,6 +199,7 @@
LDFLAGS_SUFFIX_posix := -ljvm -lverify, \
LDFLAGS_SUFFIX_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc, \
LDFLAGS_SUFFIX_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \
+ LDFLAGS_SUFFIX_aix := $(LIBDL) $(BUILD_LIBFDLIBM) -lm,\
LDFLAGS_SUFFIX_macosx := -L$(JDK_OUTPUTDIR)/objs/ -lfdlibm \
-framework CoreFoundation \
-framework Foundation \
@@ -266,6 +268,7 @@
$(WIN_JAVA_LIB), \
LDFLAGS_SUFFIX_linux := -ljvm -ljava $(LIBZ), \
LDFLAGS_SUFFIX_solaris := -ljvm -ljava $(LIBZ) -lc, \
+ LDFLAGS_SUFFIX_aix := -ljvm -ljava $(LIBZ),\
LDFLAGS_SUFFIX_macosx := $(LIBZ) -ljava -ljvm, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
@@ -404,6 +407,7 @@
LDFLAGS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \
LDFLAGS_SUFFIX_solaris := $(LIBZ) $(LIBDL) -lc, \
LDFLAGS_SUFFIX_linux := $(LIBZ) $(LIBDL) -lc -lpthread, \
+ LDFLAGS_SUFFIX_aix := $(LIBZ) $(LIBDL),\
LDFLAGS_SUFFIX_macosx := $(LIBZ), \
LDFLAGS_SUFFIX_windows := \
-export:JLI_Launch \
@@ -469,6 +473,22 @@
$(call install-file)
BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a
+
+else ifeq ($(OPENJDK_TARGET_OS), aix)
+ # AIX also requires a static libjli because the compiler doesn't support '-rpath'
+ $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\
+ STATIC_LIBRARY:=jli_static,\
+ OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\
+ SRC:=$(BUILD_LIBJLI_SRC_DIRS),\
+ INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\
+ LANG:=C,\
+ OPTIMIZATION:=HIGH, \
+ CFLAGS:=$(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS),\
+ ARFLAGS:=$(ARFLAGS),\
+ OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static))
+
+ BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a
+
endif
##########################################################################################
--- a/jdk/make/lib/NetworkingLibraries.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/lib/NetworkingLibraries.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -46,6 +46,10 @@
LIBNET_EXCLUDE_FILES += bsd_close.c
endif
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ LIBNET_SRC_DIRS += $(JDK_TOPDIR)/src/aix/native/java/net/
+endif
+
ifeq ($(OPENJDK_TARGET_OS), windows)
LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c
else
@@ -69,6 +73,7 @@
LDFLAGS_SUFFIX_macosx := -ljvm -ljava, \
LDFLAGS_SUFFIX_solaris := -ljvm -ljava -lnsl -lsocket $(LIBDL) -lc, \
LDFLAGS_SUFFIX_linux := $(LIBDL) -ljvm -lpthread -ljava, \
+ LDFLAGS_SUFFIX_aix := $(LIBDL) -ljvm -ljava,\
LDFLAGS_SUFFIX_windows := ws2_32.lib jvm.lib secur32.lib iphlpapi.lib \
delayimp.lib $(WIN_JAVA_LIB) advapi32.lib \
-DELAYLOAD:secur32.dll -DELAYLOAD:iphlpapi.dll, \
--- a/jdk/make/lib/NioLibraries.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/lib/NioLibraries.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -112,6 +112,24 @@
UnixNativeDispatcher.c
endif
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/make/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
+ BUILD_LIBNIO_SRC += \
+ $(JDK_TOPDIR)/src/aix/native/sun/nio/ch \
+ $(JDK_TOPDIR)/src/aix/native/sun/nio/fs
+ BUILD_LIBNIO_FILES += \
+ AixPollPort.c \
+ InheritedChannel.c \
+ NativeThread.c \
+ PollArrayWrapper.c \
+ UnixAsynchronousServerSocketChannelImpl.c \
+ UnixAsynchronousSocketChannelImpl.c \
+ GnomeFileTypeDetector.c \
+ UnixCopyFile.c \
+ AixNativeDispatcher.c \
+ UnixNativeDispatcher.c
+endif
+
$(eval $(call SetupNativeCompilation,BUILD_LIBNIO, \
LIBRARY := nio, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
@@ -125,6 +143,7 @@
LDFLAGS := $(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_linux := -ljava -lnet -lpthread $(LIBDL), \
+ LDFLAGS_SUFFIX_aix := -ljava -lnet $(LIBDL),\
LDFLAGS_SUFFIX_solaris := -ljvm -lsocket -lposix4 $(LIBDL) \
-lsendfile -ljava -lnet -lc, \
LDFLAGS_SUFFIX_windows := jvm.lib ws2_32.lib $(WIN_JAVA_LIB) \
@@ -148,7 +167,7 @@
ifeq ($(OPENJDK_TARGET_OS_API), posix)
- ifneq ($(OPENJDK_TARGET_OS), macosx)
+ ifeq (, $(filter $(OPENJDK_TARGET_OS), macosx aix))
# Suppress unused parameters required by exported JNI functions.
SCTP_WERROR := -Werror -Wno-error=unused-parameter
--- a/jdk/make/lib/ServiceabilityLibraries.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/lib/ServiceabilityLibraries.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -33,11 +33,19 @@
ifneq ($(OPENJDK_TARGET_OS), macosx)
LIBATTACH_EXCLUDE_FILES += BsdVirtualMachine.c
endif
+ifneq ($(OPENJDK_TARGET_OS),aix)
+ LIBATTACH_EXCLUDE_FILES += AixVirtualMachine.c
+endif
+
+LIBATTACH_SRC_FILES := $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/tools/attach
+ifeq ($(OPENJDK_TARGET_OS),aix)
+ LIBATTACH_SRC_FILES += $(JDK_TOPDIR)/src/aix/native/sun/tools/attach
+endif
$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH, \
LIBRARY := attach, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
- SRC := $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/tools/attach, \
+ SRC := $(LIBATTACH_SRC_FILES), \
EXCLUDE_FILES := $(LIBATTACH_EXCLUDE_FILES), \
LANG := C, \
OPTIMIZATION := LOW, \
@@ -255,6 +263,7 @@
LDFLAGS_SUFFIX_macosx := -liconv $(LIBZ), \
LDFLAGS_SUFFIX_solaris := $(LIBZ) -L $(INSTALL_LIBRARIES_HERE)/jli -ljli $(LIBDL) -lc, \
LDFLAGS_SUFFIX_linux := $(LIBZ) -L $(INSTALL_LIBRARIES_HERE)/jli -ljli $(LIBDL), \
+ LDFLAGS_SUFFIX_aix := $(LIBZ) -L$(JDK_OUTPUTDIR)/objs -ljli_static $(LIBDL),\
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=instrument.dll" \
@@ -263,7 +272,7 @@
OBJECT_DIR := $(LIBINSTRUMENT_DIR), \
DEBUG_SYMBOLS := true))
-ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows))
+ifneq (, $(findstring $(OPENJDK_TARGET_OS), macosx windows aix))
$(BUILD_LIBINSTRUMENT): $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX)
else
$(BUILD_LIBINSTRUMENT): $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX)
@@ -314,6 +323,7 @@
LDFLAGS_solaris := -lkstat, \
LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX), \
LDFLAGS_SUFFIX_windows := jvm.lib psapi.lib $(WIN_JAVA_LIB) advapi32.lib, \
+ LDFLAGS_SUFFIX_aix := -lperfstat,\
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=management.dll" \
@@ -334,6 +344,11 @@
-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt \
-I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ BUILD_LIBHPROF_SRC += $(JDK_TOPDIR)/src/aix/porting
+ BUILD_LIBHPROF_CFLAGS += -I$(JDK_TOPDIR)/src/aix/porting
+endif
+
BUILD_LIBHPROF_LDFLAGS :=
LIBHPROF_OPTIMIZATION := HIGHEST
--- a/jdk/make/lib/SoundLibraries.gmk Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/lib/SoundLibraries.gmk Tue Jan 28 14:57:41 2014 -0800
@@ -71,6 +71,10 @@
LIBJSOUND_CFLAGS += -DX_PLATFORM=X_LINUX
endif # OPENJDK_TARGET_OS linux
+ifeq ($(OPENJDK_TARGET_OS), aix)
+ LIBJSOUND_CFLAGS += -DX_PLATFORM=X_AIX
+endif # OPENJDK_TARGET_OS aix
+
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBJSOUND_LANG := C++
LIBJSOUND_CFLAGS += -DX_PLATFORM=X_MACOSX \
@@ -131,6 +135,10 @@
ifeq ($(OPENJDK_TARGET_CPU), ppc)
LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC
endif
+
+ ifeq ($(OPENJDK_TARGET_CPU), ppc64)
+ LIBJSOUND_CFLAGS += -DX_ARCH=X_PPC64
+ endif
endif
LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/launchers/mapfile-ppc64 Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2004, 2012, 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.
+#
+#
+# Specify what global symbols we export. Note that we're not really
+# interested in declaring a version, simply scoping the file is sufficient.
+#
+
+SUNWprivate_1.1 {
+ global:
+ main; # Provides basic adb symbol offsets
+ environ; # Public symbols and required by Java run time
+ _environ;
+ __environ_lock;
+
+ local:
+ *;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/launchers/mapfile-ppc64.anonymous Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2004, 2012, 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.
+#
+#
+# Define anonymous library interface (i.e. without a version tag) for broken SuSE ld because
+# the linker on older SuSE distros (e.g. on SLES 10) complains with:
+# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
+# if feeded with a version script which contains named tags.
+
+{
+ global:
+ main; # Provides basic adb symbol offsets
+ environ; # Public symbols and required by Java run time
+ _environ;
+ __environ_lock;
+
+ local:
+ *;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/launchers/mapfile-x86.anonymous Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2004, 2012, 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.
+#
+#
+# Define anonymous library interface (i.e. without a version tag) for broken SuSE ld because
+# the linker on older SuSE distros (e.g. on SLES 10) complains with:
+# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
+# if feeded with a version script which contains named tags.
+
+{
+ global:
+ main; # Provides basic adb symbol offsets
+ environ; # Public symbols and required by Java run time
+ _environ;
+ __environ_lock;
+ ___Argv; # The following are private, but as they are
+ _start; # exported from ctr1/crtn, the clever hacker
+ _init; # might know about them. However note, that
+ _fini; # their use is strictly not supported.
+ _lib_version;
+# _mcount;
+ __fsr;
+ __fsr_init_value;
+ __longdouble_used;
+
+ local:
+ *;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/launchers/mapfile-x86_64.anonymous Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2004, 2012, 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.
+#
+#
+# Define anonymous library interface (i.e. without a version tag) for broken SuSE ld because
+# the linker on older SuSE distros (e.g. on SLES 10) complains with:
+# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
+# if feeded with a version script which contains named tags.
+
+{
+ global:
+ main; # Provides basic adb symbol offsets
+ environ; # Public symbols and required by Java run time
+ _environ;
+ __environ_lock;
+
+ local:
+ *;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/libattach/mapfile-aix Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2005, 2012, 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.
+#
+
+# Define public interface.
+
+SUNWprivate_1.1 {
+ global:
+ Java_sun_tools_attach_AixVirtualMachine_socket
+ Java_sun_tools_attach_AixVirtualMachine_connect
+ Java_sun_tools_attach_AixVirtualMachine_sendQuitTo
+ Java_sun_tools_attach_AixVirtualMachine_checkPermissions
+ Java_sun_tools_attach_AixVirtualMachine_close
+ Java_sun_tools_attach_AixVirtualMachine_read
+ Java_sun_tools_attach_AixVirtualMachine_write
+ local:
+ *;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/libnio/mapfile-aix Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2001, 2012, 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.
+#
+
+# TODO: implement for AIX
+
+SUNWprivate_1.1 {
+ global:
+
+ local:
+ *;
+};
--- a/jdk/make/mapfiles/libnio/mapfile-linux Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/mapfiles/libnio/mapfile-linux Tue Jan 28 14:57:41 2014 -0800
@@ -117,6 +117,12 @@
Java_sun_nio_ch_Net_getInterface6;
Java_sun_nio_ch_Net_shutdown;
Java_sun_nio_ch_Net_poll;
+ Java_sun_nio_ch_Net_pollinValue;
+ Java_sun_nio_ch_Net_polloutValue;
+ Java_sun_nio_ch_Net_pollerrValue;
+ Java_sun_nio_ch_Net_pollhupValue;
+ Java_sun_nio_ch_Net_pollnvalValue;
+ Java_sun_nio_ch_Net_pollconnValue;
Java_sun_nio_ch_Net_isExclusiveBindAvailable;
Java_sun_nio_ch_PollArrayWrapper_interrupt;
Java_sun_nio_ch_PollArrayWrapper_poll0;
--- a/jdk/make/mapfiles/libnio/mapfile-macosx Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/mapfiles/libnio/mapfile-macosx Tue Jan 28 14:57:41 2014 -0800
@@ -109,6 +109,12 @@
Java_sun_nio_ch_Net_getInterface6;
Java_sun_nio_ch_Net_shutdown;
Java_sun_nio_ch_Net_poll;
+ Java_sun_nio_ch_Net_pollinValue;
+ Java_sun_nio_ch_Net_polloutValue;
+ Java_sun_nio_ch_Net_pollerrValue;
+ Java_sun_nio_ch_Net_pollhupValue;
+ Java_sun_nio_ch_Net_pollnvalValue;
+ Java_sun_nio_ch_Net_pollconnValue;
Java_sun_nio_ch_Net_isExclusiveBindAvailable;
Java_sun_nio_ch_PollArrayWrapper_interrupt;
Java_sun_nio_ch_PollArrayWrapper_poll0;
--- a/jdk/make/mapfiles/libnio/mapfile-solaris Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/make/mapfiles/libnio/mapfile-solaris Tue Jan 28 14:57:41 2014 -0800
@@ -105,6 +105,12 @@
Java_sun_nio_ch_Net_getInterface6;
Java_sun_nio_ch_Net_shutdown;
Java_sun_nio_ch_Net_poll;
+ Java_sun_nio_ch_Net_pollinValue;
+ Java_sun_nio_ch_Net_polloutValue;
+ Java_sun_nio_ch_Net_pollerrValue;
+ Java_sun_nio_ch_Net_pollhupValue;
+ Java_sun_nio_ch_Net_pollnvalValue;
+ Java_sun_nio_ch_Net_pollconnValue;
Java_sun_nio_ch_Net_isExclusiveBindAvailable;
Java_sun_nio_ch_PollArrayWrapper_interrupt;
Java_sun_nio_ch_PollArrayWrapper_poll0;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,34 @@
+#
+# Copyright (c) 2011, 2012, 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.
+#
+
+# Define anonymous library interface (i.e. without a version tag) for broken SuSE ld because
+# the linker on older SuSE distros (e.g. on SLES 10) complains with:
+# "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
+# if feeded with a version script which contains named tags.
+
+{
+ local:
+ *;
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,77 @@
+#
+#
+# Copyright 2013 SAP AG. 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.
+#
+
+# Minimal version for AIX using the standard Latin Type1 Fonts from the
+# package X11.fnt.iso_T1. These fonts are installed by default into
+# "/usr/lpp/X11/lib/X11/fonts/Type1" and sym-linked to "/usr/lib/X11/fonts/Type1"
+
+# Version
+
+version=1
+
+# Component Font Mappings
+
+dialog.plain.latin-1=-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1
+dialog.bold.latin-1=-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1
+dialog.italic.latin-1=-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1
+dialog.bolditalic.latin-1=-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1
+
+dialoginput.plain.latin-1=-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1
+dialoginput.bold.latin-1=-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1
+dialoginput.italic.latin-1=-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1
+dialoginput.bolditalic.latin-1=-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1
+
+sansserif.plain.latin-1=-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1
+sansserif.bold.latin-1=-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1
+sansserif.italic.latin-1=-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1
+sansserif.bolditalic.latin-1=-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1
+
+serif.plain.latin-1=-*-times new roman-medium-r-normal--*-%d-100-100-p-*-iso10646-1
+serif.bold.latin-1=-*-times new roman-bold-r-normal--*-%d-100-100-p-*-iso10646-1
+serif.italic.latin-1=-*-times new roman-medium-i-normal--*-%d-100-100-p-*-iso10646-1
+serif.bolditalic.latin-1=-*-times new roman-bold-i-normal--*-%d-100-100-p-*-iso10646-1
+
+monospaced.plain.latin-1=-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1
+monospaced.bold.latin-1=-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1
+monospaced.italic.latin-1=-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1
+monospaced.bolditalic.latin-1=-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1
+
+# Search Sequences
+
+sequence.allfonts=latin-1
+
+filename.-*-courier-medium-r-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/cour.pfa
+filename.-*-courier-bold-r-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/courb.pfa
+filename.-*-courier-medium-o-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/couri.pfa
+filename.-*-courier-bold-o-normal--*-%d-100-100-m-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/courbi.pfa
+filename.-*-helvetica-medium-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helv.pfa
+filename.-*-helvetica-bold-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvb.pfa
+filename.-*-helvetica-medium-o-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvi.pfa
+filename.-*-helvetica-bold-o-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/helvbi.pfa
+filename.-*-times_new_roman-medium-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnr.pfa
+filename.-*-times_new_roman-bold-r-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnrb.pfa
+filename.-*-times_new_roman-medium-i-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnri.pfa
+filename.-*-times_new_roman-bold-i-normal--*-%d-100-100-p-*-iso10646-1=/usr/lpp/X11/lib/X11/fonts/Type1/tnrbi.pfa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2012 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.ch;
+
+import java.nio.channels.*;
+import java.nio.channels.spi.AsynchronousChannelProvider;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.io.IOException;
+
+public class AixAsynchronousChannelProvider
+ extends AsynchronousChannelProvider
+{
+ private static volatile AixPollPort defaultPort;
+
+ private AixPollPort defaultEventPort() throws IOException {
+ if (defaultPort == null) {
+ synchronized (AixAsynchronousChannelProvider.class) {
+ if (defaultPort == null) {
+ defaultPort = new AixPollPort(this, ThreadPool.getDefault()).start();
+ }
+ }
+ }
+ return defaultPort;
+ }
+
+ public AixAsynchronousChannelProvider() {
+ }
+
+ @Override
+ public AsynchronousChannelGroup openAsynchronousChannelGroup(int nThreads, ThreadFactory factory)
+ throws IOException
+ {
+ return new AixPollPort(this, ThreadPool.create(nThreads, factory)).start();
+ }
+
+ @Override
+ public AsynchronousChannelGroup openAsynchronousChannelGroup(ExecutorService executor, int initialSize)
+ throws IOException
+ {
+ return new AixPollPort(this, ThreadPool.wrap(executor, initialSize)).start();
+ }
+
+ private Port toPort(AsynchronousChannelGroup group) throws IOException {
+ if (group == null) {
+ return defaultEventPort();
+ } else {
+ if (!(group instanceof AixPollPort))
+ throw new IllegalChannelGroupException();
+ return (Port)group;
+ }
+ }
+
+ @Override
+ public AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(AsynchronousChannelGroup group)
+ throws IOException
+ {
+ return new UnixAsynchronousServerSocketChannelImpl(toPort(group));
+ }
+
+ @Override
+ public AsynchronousSocketChannel openAsynchronousSocketChannel(AsynchronousChannelGroup group)
+ throws IOException
+ {
+ return new UnixAsynchronousSocketChannelImpl(toPort(group));
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/ch/AixPollPort.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,536 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2012 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.ch;
+
+import java.nio.channels.spi.AsynchronousChannelProvider;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.locks.ReentrantLock;
+import sun.misc.Unsafe;
+
+/**
+ * AsynchronousChannelGroup implementation based on the AIX pollset framework.
+ */
+final class AixPollPort
+ extends Port
+{
+ private static final Unsafe unsafe = Unsafe.getUnsafe();
+
+ static {
+ IOUtil.load();
+ init();
+ }
+
+ /**
+ * struct pollfd {
+ * int fd;
+ * short events;
+ * short revents;
+ * }
+ */
+ private static final int SIZEOF_POLLFD = eventSize();
+ private static final int OFFSETOF_EVENTS = eventsOffset();
+ private static final int OFFSETOF_REVENTS = reventsOffset();
+ private static final int OFFSETOF_FD = fdOffset();
+
+ // opcodes
+ private static final int PS_ADD = 0x0;
+ private static final int PS_MOD = 0x1;
+ private static final int PS_DELETE = 0x2;
+
+ // maximum number of events to poll at a time
+ private static final int MAX_POLL_EVENTS = 512;
+
+ // pollset ID
+ private final int pollset;
+
+ // true if port is closed
+ private boolean closed;
+
+ // socket pair used for wakeup
+ private final int sp[];
+
+ // socket pair used to indicate pending pollsetCtl calls
+ // Background info: pollsetCtl blocks when another thread is in a pollsetPoll call.
+ private final int ctlSp[];
+
+ // number of wakeups pending
+ private final AtomicInteger wakeupCount = new AtomicInteger();
+
+ // address of the poll array passed to pollset_poll
+ private final long address;
+
+ // encapsulates an event for a channel
+ static class Event {
+ final PollableChannel channel;
+ final int events;
+
+ Event(PollableChannel channel, int events) {
+ this.channel = channel;
+ this.events = events;
+ }
+
+ PollableChannel channel() { return channel; }
+ int events() { return events; }
+ }
+
+ // queue of events for cases that a polling thread dequeues more than one
+ // event
+ private final ArrayBlockingQueue<Event> queue;
+ private final Event NEED_TO_POLL = new Event(null, 0);
+ private final Event EXECUTE_TASK_OR_SHUTDOWN = new Event(null, 0);
+
+ // encapsulates a pollset control event for a file descriptor
+ static class ControlEvent {
+ final int fd;
+ final int events;
+ final boolean removeOnly;
+ int error = 0;
+
+ ControlEvent(int fd, int events, boolean removeOnly) {
+ this.fd = fd;
+ this.events = events;
+ this.removeOnly = removeOnly;
+ }
+
+ int fd() { return fd; }
+ int events() { return events; }
+ boolean removeOnly() { return removeOnly; }
+ int error() { return error; }
+ void setError(int error) { this.error = error; }
+ }
+
+ // queue of control events that need to be processed
+ // (this object is also used for synchronization)
+ private final HashSet<ControlEvent> controlQueue = new HashSet<ControlEvent>();
+
+ // lock used to check whether a poll operation is ongoing
+ private final ReentrantLock controlLock = new ReentrantLock();
+
+ AixPollPort(AsynchronousChannelProvider provider, ThreadPool pool)
+ throws IOException
+ {
+ super(provider, pool);
+
+ // open pollset
+ this.pollset = pollsetCreate();
+
+ // create socket pair for wakeup mechanism
+ int[] sv = new int[2];
+ try {
+ socketpair(sv);
+ // register one end with pollset
+ pollsetCtl(pollset, PS_ADD, sv[0], Net.POLLIN);
+ } catch (IOException x) {
+ pollsetDestroy(pollset);
+ throw x;
+ }
+ this.sp = sv;
+
+ // create socket pair for pollset control mechanism
+ sv = new int[2];
+ try {
+ socketpair(sv);
+ // register one end with pollset
+ pollsetCtl(pollset, PS_ADD, sv[0], Net.POLLIN);
+ } catch (IOException x) {
+ pollsetDestroy(pollset);
+ throw x;
+ }
+ this.ctlSp = sv;
+
+ // allocate the poll array
+ this.address = allocatePollArray(MAX_POLL_EVENTS);
+
+ // create the queue and offer the special event to ensure that the first
+ // threads polls
+ this.queue = new ArrayBlockingQueue<Event>(MAX_POLL_EVENTS);
+ this.queue.offer(NEED_TO_POLL);
+ }
+
+ AixPollPort start() {
+ startThreads(new EventHandlerTask());
+ return this;
+ }
+
+ /**
+ * Release all resources
+ */
+ private void implClose() {
+ synchronized (this) {
+ if (closed)
+ return;
+ closed = true;
+ }
+ freePollArray(address);
+ close0(sp[0]);
+ close0(sp[1]);
+ close0(ctlSp[0]);
+ close0(ctlSp[1]);
+ pollsetDestroy(pollset);
+ }
+
+ private void wakeup() {
+ if (wakeupCount.incrementAndGet() == 1) {
+ // write byte to socketpair to force wakeup
+ try {
+ interrupt(sp[1]);
+ } catch (IOException x) {
+ throw new AssertionError(x);
+ }
+ }
+ }
+
+ @Override
+ void executeOnHandlerTask(Runnable task) {
+ synchronized (this) {
+ if (closed)
+ throw new RejectedExecutionException();
+ offerTask(task);
+ wakeup();
+ }
+ }
+
+ @Override
+ void shutdownHandlerTasks() {
+ /*
+ * If no tasks are running then just release resources; otherwise
+ * write to the one end of the socketpair to wakeup any polling threads.
+ */
+ int nThreads = threadCount();
+ if (nThreads == 0) {
+ implClose();
+ } else {
+ // send interrupt to each thread
+ while (nThreads-- > 0) {
+ wakeup();
+ }
+ }
+ }
+
+ // invoke by clients to register a file descriptor
+ @Override
+ void startPoll(int fd, int events) {
+ queueControlEvent(new ControlEvent(fd, events, false));
+ }
+
+ // Callback method for implementations that need special handling when fd is removed
+ @Override
+ protected void preUnregister(int fd) {
+ queueControlEvent(new ControlEvent(fd, 0, true));
+ }
+
+ // Add control event into queue and wait for completion.
+ // In case the control lock is free, this method also tries to apply the control change directly.
+ private void queueControlEvent(ControlEvent ev) {
+ // pollsetCtl blocks when a poll call is ongoing. This is very probable.
+ // Therefore we let the polling thread do the pollsetCtl call.
+ synchronized (controlQueue) {
+ controlQueue.add(ev);
+ // write byte to socketpair to force wakeup
+ try {
+ interrupt(ctlSp[1]);
+ } catch (IOException x) {
+ throw new AssertionError(x);
+ }
+ do {
+ // Directly empty queue if no poll call is ongoing.
+ if (controlLock.tryLock()) {
+ try {
+ processControlQueue();
+ } finally {
+ controlLock.unlock();
+ }
+ } else {
+ try {
+ // Do not starve in case the polling thread returned before
+ // we could write to ctlSp[1] but the polling thread did not
+ // release the control lock until we checked. Therefore, use
+ // a timed wait for the time being.
+ controlQueue.wait(100);
+ } catch (InterruptedException e) {
+ // ignore exception and try again
+ }
+ }
+ } while (controlQueue.contains(ev));
+ }
+ if (ev.error() != 0) {
+ throw new AssertionError();
+ }
+ }
+
+ // Process all events currently stored in the control queue.
+ private void processControlQueue() {
+ synchronized (controlQueue) {
+ // On Aix it is only possible to set the event
+ // bits on the first call of pollsetCtl. Later
+ // calls only add bits, but cannot remove them.
+ // Therefore, we always remove the file
+ // descriptor ignoring the error and then add it.
+ Iterator<ControlEvent> iter = controlQueue.iterator();
+ while (iter.hasNext()) {
+ ControlEvent ev = iter.next();
+ pollsetCtl(pollset, PS_DELETE, ev.fd(), 0);
+ if (!ev.removeOnly()) {
+ ev.setError(pollsetCtl(pollset, PS_MOD, ev.fd(), ev.events()));
+ }
+ iter.remove();
+ }
+ controlQueue.notifyAll();
+ }
+ }
+
+ /*
+ * Task to process events from pollset and dispatch to the channel's
+ * onEvent handler.
+ *
+ * Events are retreived from pollset in batch and offered to a BlockingQueue
+ * where they are consumed by handler threads. A special "NEED_TO_POLL"
+ * event is used to signal one consumer to re-poll when all events have
+ * been consumed.
+ */
+ private class EventHandlerTask implements Runnable {
+ private Event poll() throws IOException {
+ try {
+ for (;;) {
+ int n;
+ controlLock.lock();
+ try {
+ n = pollsetPoll(pollset, address, MAX_POLL_EVENTS);
+ } finally {
+ controlLock.unlock();
+ }
+ /*
+ * 'n' events have been read. Here we map them to their
+ * corresponding channel in batch and queue n-1 so that
+ * they can be handled by other handler threads. The last
+ * event is handled by this thread (and so is not queued).
+ */
+ fdToChannelLock.readLock().lock();
+ try {
+ while (n-- > 0) {
+ long eventAddress = getEvent(address, n);
+ int fd = getDescriptor(eventAddress);
+
+ // To emulate one shot semantic we need to remove
+ // the file descriptor here.
+ pollsetCtl(pollset, PS_DELETE, fd, 0);
+
+ // wakeup
+ if (fd == sp[0]) {
+ if (wakeupCount.decrementAndGet() == 0) {
+ // no more wakeups so drain pipe
+ drain1(sp[0]);
+ }
+
+ // This is the only file descriptor without
+ // one shot semantic => register it again.
+ pollsetCtl(pollset, PS_ADD, sp[0], Net.POLLIN);
+
+ // queue special event if there are more events
+ // to handle.
+ if (n > 0) {
+ queue.offer(EXECUTE_TASK_OR_SHUTDOWN);
+ continue;
+ }
+ return EXECUTE_TASK_OR_SHUTDOWN;
+ }
+
+ // wakeup to process control event
+ if (fd == ctlSp[0]) {
+ synchronized (controlQueue) {
+ drain1(ctlSp[0]);
+ // This file descriptor does not have
+ // one shot semantic => register it again.
+ pollsetCtl(pollset, PS_ADD, ctlSp[0], Net.POLLIN);
+ processControlQueue();
+ }
+ continue;
+ }
+
+ PollableChannel channel = fdToChannel.get(fd);
+ if (channel != null) {
+ int events = getRevents(eventAddress);
+ Event ev = new Event(channel, events);
+
+ // n-1 events are queued; This thread handles
+ // the last one except for the wakeup
+ if (n > 0) {
+ queue.offer(ev);
+ } else {
+ return ev;
+ }
+ }
+ }
+ } finally {
+ fdToChannelLock.readLock().unlock();
+ }
+ }
+ } finally {
+ // to ensure that some thread will poll when all events have
+ // been consumed
+ queue.offer(NEED_TO_POLL);
+ }
+ }
+
+ public void run() {
+ Invoker.GroupAndInvokeCount myGroupAndInvokeCount =
+ Invoker.getGroupAndInvokeCount();
+ final boolean isPooledThread = (myGroupAndInvokeCount != null);
+ boolean replaceMe = false;
+ Event ev;
+ try {
+ for (;;) {
+ // reset invoke count
+ if (isPooledThread)
+ myGroupAndInvokeCount.resetInvokeCount();
+
+ try {
+ replaceMe = false;
+ ev = queue.take();
+
+ // no events and this thread has been "selected" to
+ // poll for more.
+ if (ev == NEED_TO_POLL) {
+ try {
+ ev = poll();
+ } catch (IOException x) {
+ x.printStackTrace();
+ return;
+ }
+ }
+ } catch (InterruptedException x) {
+ continue;
+ }
+
+ // handle wakeup to execute task or shutdown
+ if (ev == EXECUTE_TASK_OR_SHUTDOWN) {
+ Runnable task = pollTask();
+ if (task == null) {
+ // shutdown request
+ return;
+ }
+ // run task (may throw error/exception)
+ replaceMe = true;
+ task.run();
+ continue;
+ }
+
+ // process event
+ try {
+ ev.channel().onEvent(ev.events(), isPooledThread);
+ } catch (Error x) {
+ replaceMe = true; throw x;
+ } catch (RuntimeException x) {
+ replaceMe = true; throw x;
+ }
+ }
+ } finally {
+ // last handler to exit when shutdown releases resources
+ int remaining = threadExit(this, replaceMe);
+ if (remaining == 0 && isShutdown()) {
+ implClose();
+ }
+ }
+ }
+ }
+
+ /**
+ * Allocates a poll array to handle up to {@code count} events.
+ */
+ private static long allocatePollArray(int count) {
+ return unsafe.allocateMemory(count * SIZEOF_POLLFD);
+ }
+
+ /**
+ * Free a poll array
+ */
+ private static void freePollArray(long address) {
+ unsafe.freeMemory(address);
+ }
+
+ /**
+ * Returns event[i];
+ */
+ private static long getEvent(long address, int i) {
+ return address + (SIZEOF_POLLFD*i);
+ }
+
+ /**
+ * Returns event->fd
+ */
+ private static int getDescriptor(long eventAddress) {
+ return unsafe.getInt(eventAddress + OFFSETOF_FD);
+ }
+
+ /**
+ * Returns event->events
+ */
+ private static int getEvents(long eventAddress) {
+ return unsafe.getChar(eventAddress + OFFSETOF_EVENTS);
+ }
+
+ /**
+ * Returns event->revents
+ */
+ private static int getRevents(long eventAddress) {
+ return unsafe.getChar(eventAddress + OFFSETOF_REVENTS);
+ }
+
+ // -- Native methods --
+
+ private static native void init();
+
+ private static native int eventSize();
+
+ private static native int eventsOffset();
+
+ private static native int reventsOffset();
+
+ private static native int fdOffset();
+
+ private static native int pollsetCreate() throws IOException;
+
+ private static native int pollsetCtl(int pollset, int opcode, int fd, int events);
+
+ private static native int pollsetPoll(int pollset, long pollAddress, int numfds)
+ throws IOException;
+
+ private static native void pollsetDestroy(int pollset);
+
+ private static native void socketpair(int[] sv) throws IOException;
+
+ private static native void interrupt(int fd) throws IOException;
+
+ private static native void drain1(int fd) throws IOException;
+
+ private static native void close0(int fd);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.nio.ch.sctp;
+
+import java.net.SocketAddress;
+import java.net.InetAddress;
+import java.io.IOException;
+import java.util.Set;
+import java.nio.ByteBuffer;
+import java.nio.channels.spi.SelectorProvider;
+import com.sun.nio.sctp.Association;
+import com.sun.nio.sctp.MessageInfo;
+import com.sun.nio.sctp.NotificationHandler;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.SctpSocketOption;
+
+/**
+ * Unimplemented.
+ */
+public class SctpChannelImpl extends SctpChannel
+{
+ private static final String message = "SCTP not supported on this platform";
+
+ public SctpChannelImpl(SelectorProvider provider) {
+ super(provider);
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Association association() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel bind(SocketAddress local)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel bindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel unbindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean connect(SocketAddress remote) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean connect(SocketAddress remote, int maxOutStreams,
+ int maxInStreams) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean isConnectionPending() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public boolean finishConnect() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getAllLocalAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getRemoteAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel shutdown() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> T getOption(SctpSocketOption<T> name)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> SctpChannel setOption(SctpSocketOption<T> name, T value)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SctpSocketOption<?>> supportedOptions() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> MessageInfo receive(ByteBuffer dst, T attachment,
+ NotificationHandler<T> handler) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public int send(ByteBuffer src, MessageInfo messageInfo)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ protected void implConfigureBlocking(boolean block) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public void implCloseSelectableChannel() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.nio.ch.sctp;
+
+import java.net.SocketAddress;
+import java.net.InetAddress;
+import java.io.IOException;
+import java.util.Set;
+import java.nio.ByteBuffer;
+import java.nio.channels.spi.SelectorProvider;
+import com.sun.nio.sctp.Association;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.MessageInfo;
+import com.sun.nio.sctp.NotificationHandler;
+import com.sun.nio.sctp.SctpMultiChannel;
+import com.sun.nio.sctp.SctpSocketOption;
+
+/**
+ * Unimplemented.
+ */
+public class SctpMultiChannelImpl extends SctpMultiChannel
+{
+ private static final String message = "SCTP not supported on this platform";
+
+ public SctpMultiChannelImpl(SelectorProvider provider) {
+ super(provider);
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<Association> associations() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel bind(SocketAddress local,
+ int backlog) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel bindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel unbindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getAllLocalAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getRemoteAddresses
+ (Association association) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpMultiChannel shutdown(Association association)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> T getOption(SctpSocketOption<T> name,
+ Association association) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> SctpMultiChannel setOption(SctpSocketOption<T> name,
+ T value, Association association) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SctpSocketOption<?>> supportedOptions() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> MessageInfo receive(ByteBuffer buffer, T attachment,
+ NotificationHandler<T> handler) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public int send(ByteBuffer buffer, MessageInfo messageInfo)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel branch(Association association)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ protected void implConfigureBlocking(boolean block) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public void implCloseSelectableChannel() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.nio.ch.sctp;
+
+import java.net.SocketAddress;
+import java.net.InetAddress;
+import java.io.IOException;
+import java.util.Set;
+import java.nio.channels.spi.SelectorProvider;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.SctpServerChannel;
+import com.sun.nio.sctp.SctpSocketOption;
+
+/**
+ * Unimplemented.
+ */
+public class SctpServerChannelImpl extends SctpServerChannel
+{
+ private static final String message = "SCTP not supported on this platform";
+
+ public SctpServerChannelImpl(SelectorProvider provider) {
+ super(provider);
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpChannel accept() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpServerChannel bind(SocketAddress local,
+ int backlog) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpServerChannel bindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public SctpServerChannel unbindAddress(InetAddress address)
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SocketAddress> getAllLocalAddresses()
+ throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> T getOption(SctpSocketOption<T> name) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public <T> SctpServerChannel setOption(SctpSocketOption<T> name,
+ T value) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public Set<SctpSocketOption<?>> supportedOptions() {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ protected void implConfigureBlocking(boolean block) throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+
+ @Override
+ public void implCloseSelectableChannel() throws IOException {
+ throw new UnsupportedOperationException(message);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/fs/AixFileStore.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.fs;
+
+import java.nio.file.attribute.*;
+import java.util.*;
+import java.io.IOException;
+
+/**
+ * AIX implementation of FileStore
+ */
+
+class AixFileStore
+ extends UnixFileStore
+{
+
+ AixFileStore(UnixPath file) throws IOException {
+ super(file);
+ }
+
+ AixFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException {
+ super(fs, entry);
+ }
+
+ /**
+ * Finds, and returns, the mount entry for the file system where the file
+ * resides.
+ */
+ @Override
+ UnixMountEntry findMountEntry() throws IOException {
+ AixFileSystem fs = (AixFileSystem)file().getFileSystem();
+
+ // step 1: get realpath
+ UnixPath path = null;
+ try {
+ byte[] rp = UnixNativeDispatcher.realpath(file());
+ path = new UnixPath(fs, rp);
+ } catch (UnixException x) {
+ x.rethrowAsIOException(file());
+ }
+
+ // step 2: find mount point
+ UnixPath parent = path.getParent();
+ while (parent != null) {
+ UnixFileAttributes attrs = null;
+ try {
+ attrs = UnixFileAttributes.get(parent, true);
+ } catch (UnixException x) {
+ x.rethrowAsIOException(parent);
+ }
+ if (attrs.dev() != dev())
+ break;
+ path = parent;
+ parent = parent.getParent();
+ }
+
+ // step 3: lookup mounted file systems
+ byte[] dir = path.asByteArray();
+ for (UnixMountEntry entry: fs.getMountEntries()) {
+ if (Arrays.equals(dir, entry.dir()))
+ return entry;
+ }
+
+ throw new IOException("Mount point not found");
+ }
+
+ // returns true if extended attributes enabled on file system where given
+ // file resides, returns false if disabled or unable to determine.
+ private boolean isExtendedAttributesEnabled(UnixPath path) {
+ return false;
+ }
+
+ @Override
+ public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) {
+ return super.supportsFileAttributeView(type);
+ }
+
+ @Override
+ public boolean supportsFileAttributeView(String name) {
+ return super.supportsFileAttributeView(name);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/fs/AixFileSystem.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.fs;
+
+import java.nio.file.*;
+import java.nio.file.attribute.*;
+import java.io.IOException;
+import java.util.*;
+import static sun.nio.fs.AixNativeDispatcher.*;
+
+/**
+ * AIX implementation of FileSystem
+ */
+
+class AixFileSystem extends UnixFileSystem {
+
+ AixFileSystem(UnixFileSystemProvider provider, String dir) {
+ super(provider, dir);
+ }
+
+ @Override
+ public WatchService newWatchService()
+ throws IOException
+ {
+ return new PollingWatchService();
+ }
+
+ // lazy initialization of the list of supported attribute views
+ private static class SupportedFileFileAttributeViewsHolder {
+ static final Set<String> supportedFileAttributeViews =
+ supportedFileAttributeViews();
+ private static Set<String> supportedFileAttributeViews() {
+ Set<String> result = new HashSet<String>();
+ result.addAll(UnixFileSystem.standardFileAttributeViews());
+ return Collections.unmodifiableSet(result);
+ }
+ }
+
+ @Override
+ public Set<String> supportedFileAttributeViews() {
+ return SupportedFileFileAttributeViewsHolder.supportedFileAttributeViews;
+ }
+
+ @Override
+ void copyNonPosixAttributes(int ofd, int nfd) {
+ // TODO: Implement if needed.
+ }
+
+ /**
+ * Returns object to iterate over the mount entries returned by mntctl
+ */
+ @Override
+ Iterable<UnixMountEntry> getMountEntries() {
+ UnixMountEntry[] entries = null;
+ try {
+ entries = getmntctl();
+ } catch (UnixException x) {
+ // nothing we can do
+ }
+ if (entries == null) {
+ return Collections.emptyList();
+ }
+ return Arrays.asList(entries);
+ }
+
+ @Override
+ FileStore getFileStore(UnixMountEntry entry) throws IOException {
+ return new AixFileStore(this, entry);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/fs/AixFileSystemProvider.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.fs;
+
+import java.io.IOException;
+
+/**
+ * AIX implementation of FileSystemProvider
+ */
+
+public class AixFileSystemProvider extends UnixFileSystemProvider {
+ public AixFileSystemProvider() {
+ super();
+ }
+
+ @Override
+ AixFileSystem newFileSystem(String dir) {
+ return new AixFileSystem(this, dir);
+ }
+
+ /**
+ * @see sun.nio.fs.UnixFileSystemProvider#getFileStore(sun.nio.fs.UnixPath)
+ */
+ @Override
+ AixFileStore getFileStore(UnixPath path) throws IOException {
+ return new AixFileStore(path);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/nio/fs/AixNativeDispatcher.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.nio.fs;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+/**
+ * AIX specific system calls.
+ */
+
+class AixNativeDispatcher extends UnixNativeDispatcher {
+ private AixNativeDispatcher() { }
+
+ /**
+ * Special implementation of 'getextmntent' (see SolarisNativeDispatcher)
+ * that returns all entries at once.
+ */
+ static native UnixMountEntry[] getmntctl() throws UnixException;
+
+ // initialize
+ private static native int init();
+
+ static {
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ public Void run() {
+ System.loadLibrary("nio");
+ return null;
+ }});
+ init();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/tools/attach/AixAttachProvider.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.tools.attach;
+
+import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.VirtualMachineDescriptor;
+import com.sun.tools.attach.AttachNotSupportedException;
+import com.sun.tools.attach.spi.AttachProvider;
+
+import java.io.IOException;
+
+// Based on 'LinuxAttachProvider.java'. All occurrences of the string
+// "Linux" have been textually replaced by "Aix" to avoid confusion.
+
+/*
+ * An AttachProvider implementation for Aix that uses a UNIX domain
+ * socket.
+ */
+public class AixAttachProvider extends HotSpotAttachProvider {
+
+ // perf counter for the JVM version
+ private static final String JVM_VERSION = "java.property.java.vm.version";
+
+ public AixAttachProvider() {
+ }
+
+ public String name() {
+ return "sun";
+ }
+
+ public String type() {
+ return "socket";
+ }
+
+ public VirtualMachine attachVirtualMachine(String vmid)
+ throws AttachNotSupportedException, IOException
+ {
+ checkAttachPermission();
+
+ // AttachNotSupportedException will be thrown if the target VM can be determined
+ // to be not attachable.
+ testAttachable(vmid);
+
+ return new AixVirtualMachine(this, vmid);
+ }
+
+ public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd)
+ throws AttachNotSupportedException, IOException
+ {
+ if (vmd.provider() != this) {
+ throw new AttachNotSupportedException("provider mismatch");
+ }
+ // To avoid re-checking if the VM if attachable, we check if the descriptor
+ // is for a hotspot VM - these descriptors are created by the listVirtualMachines
+ // implementation which only returns a list of attachable VMs.
+ if (vmd instanceof HotSpotVirtualMachineDescriptor) {
+ assert ((HotSpotVirtualMachineDescriptor)vmd).isAttachable();
+ checkAttachPermission();
+ return new AixVirtualMachine(this, vmd.id());
+ } else {
+ return attachVirtualMachine(vmd.id());
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/classes/sun/tools/attach/AixVirtualMachine.java Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,317 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.tools.attach;
+
+import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.AgentLoadException;
+import com.sun.tools.attach.AttachNotSupportedException;
+import com.sun.tools.attach.spi.AttachProvider;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.File;
+import java.util.Properties;
+
+// Based on 'LinuxVirtualMachine.java'. All occurrences of the string
+// "Linux" have been textually replaced by "Aix" to avoid confusion.
+
+/*
+ * Aix implementation of HotSpotVirtualMachine
+ */
+public class AixVirtualMachine extends HotSpotVirtualMachine {
+ // "/tmp" is used as a global well-known location for the files
+ // .java_pid<pid>. and .attach_pid<pid>. It is important that this
+ // location is the same for all processes, otherwise the tools
+ // will not be able to find all Hotspot processes.
+ // Any changes to this needs to be synchronized with HotSpot.
+ private static final String tmpdir = "/tmp";
+
+ // The patch to the socket file created by the target VM
+ String path;
+
+ /**
+ * Attaches to the target VM
+ */
+ AixVirtualMachine(AttachProvider provider, String vmid)
+ throws AttachNotSupportedException, IOException
+ {
+ super(provider, vmid);
+
+ // This provider only understands pids
+ int pid;
+ try {
+ pid = Integer.parseInt(vmid);
+ } catch (NumberFormatException x) {
+ throw new AttachNotSupportedException("Invalid process identifier");
+ }
+
+ // Find the socket file. If not found then we attempt to start the
+ // attach mechanism in the target VM by sending it a QUIT signal.
+ // Then we attempt to find the socket file again.
+ path = findSocketFile(pid);
+ if (path == null) {
+ File f = createAttachFile(pid);
+ try {
+ sendQuitTo(pid);
+
+ // give the target VM time to start the attach mechanism
+ int i = 0;
+ long delay = 200;
+ int retries = (int)(attachTimeout() / delay);
+ do {
+ try {
+ Thread.sleep(delay);
+ } catch (InterruptedException x) { }
+ path = findSocketFile(pid);
+ i++;
+ } while (i <= retries && path == null);
+ if (path == null) {
+ throw new AttachNotSupportedException(
+ "Unable to open socket file: target process not responding " +
+ "or HotSpot VM not loaded");
+ }
+ } finally {
+ f.delete();
+ }
+ }
+
+ // Check that the file owner/permission to avoid attaching to
+ // bogus process
+ checkPermissions(path);
+
+ // Check that we can connect to the process
+ // - this ensures we throw the permission denied error now rather than
+ // later when we attempt to enqueue a command.
+ int s = socket();
+ try {
+ connect(s, path);
+ } finally {
+ close(s);
+ }
+ }
+
+ /**
+ * Detach from the target VM
+ */
+ public void detach() throws IOException {
+ synchronized (this) {
+ if (this.path != null) {
+ this.path = null;
+ }
+ }
+ }
+
+ // protocol version
+ private final static String PROTOCOL_VERSION = "1";
+
+ // known errors
+ private final static int ATTACH_ERROR_BADVERSION = 101;
+
+ /**
+ * Execute the given command in the target VM.
+ */
+ InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException {
+ assert args.length <= 3; // includes null
+
+ // did we detach?
+ String p;
+ synchronized (this) {
+ if (this.path == null) {
+ throw new IOException("Detached from target VM");
+ }
+ p = this.path;
+ }
+
+ // create UNIX socket
+ int s = socket();
+
+ // connect to target VM
+ try {
+ connect(s, p);
+ } catch (IOException x) {
+ close(s);
+ throw x;
+ }
+
+ IOException ioe = null;
+
+ // connected - write request
+ // <ver> <cmd> <args...>
+ try {
+ writeString(s, PROTOCOL_VERSION);
+ writeString(s, cmd);
+
+ for (int i=0; i<3; i++) {
+ if (i < args.length && args[i] != null) {
+ writeString(s, (String)args[i]);
+ } else {
+ writeString(s, "");
+ }
+ }
+ } catch (IOException x) {
+ ioe = x;
+ }
+
+
+ // Create an input stream to read reply
+ SocketInputStream sis = new SocketInputStream(s);
+
+ // Read the command completion status
+ int completionStatus;
+ try {
+ completionStatus = readInt(sis);
+ } catch (IOException x) {
+ sis.close();
+ if (ioe != null) {
+ throw ioe;
+ } else {
+ throw x;
+ }
+ }
+
+ if (completionStatus != 0) {
+ sis.close();
+
+ // In the event of a protocol mismatch then the target VM
+ // returns a known error so that we can throw a reasonable
+ // error.
+ if (completionStatus == ATTACH_ERROR_BADVERSION) {
+ throw new IOException("Protocol mismatch with target VM");
+ }
+
+ // Special-case the "load" command so that the right exception is
+ // thrown.
+ if (cmd.equals("load")) {
+ throw new AgentLoadException("Failed to load agent library");
+ } else {
+ throw new IOException("Command failed in target VM");
+ }
+ }
+
+ // Return the input stream so that the command output can be read
+ return sis;
+ }
+
+ /*
+ * InputStream for the socket connection to get target VM
+ */
+ private class SocketInputStream extends InputStream {
+ int s;
+
+ public SocketInputStream(int s) {
+ this.s = s;
+ }
+
+ public synchronized int read() throws IOException {
+ byte b[] = new byte[1];
+ int n = this.read(b, 0, 1);
+ if (n == 1) {
+ return b[0] & 0xff;
+ } else {
+ return -1;
+ }
+ }
+
+ public synchronized int read(byte[] bs, int off, int len) throws IOException {
+ if ((off < 0) || (off > bs.length) || (len < 0) ||
+ ((off + len) > bs.length) || ((off + len) < 0)) {
+ throw new IndexOutOfBoundsException();
+ } else if (len == 0)
+ return 0;
+
+ return AixVirtualMachine.read(s, bs, off, len);
+ }
+
+ public void close() throws IOException {
+ AixVirtualMachine.close(s);
+ }
+ }
+
+ // Return the socket file for the given process.
+ private String findSocketFile(int pid) {
+ File f = new File(tmpdir, ".java_pid" + pid);
+ if (!f.exists()) {
+ return null;
+ }
+ return f.getPath();
+ }
+
+ // On Solaris/Linux/Aix a simple handshake is used to start the attach mechanism
+ // if not already started. The client creates a .attach_pid<pid> file in the
+ // target VM's working directory (or temp directory), and the SIGQUIT handler
+ // checks for the file.
+ private File createAttachFile(int pid) throws IOException {
+ String fn = ".attach_pid" + pid;
+ String path = "/proc/" + pid + "/cwd/" + fn;
+ File f = new File(path);
+ try {
+ f.createNewFile();
+ } catch (IOException x) {
+ f = new File(tmpdir, fn);
+ f.createNewFile();
+ }
+ return f;
+ }
+
+ /*
+ * Write/sends the given to the target VM. String is transmitted in
+ * UTF-8 encoding.
+ */
+ private void writeString(int fd, String s) throws IOException {
+ if (s.length() > 0) {
+ byte b[];
+ try {
+ b = s.getBytes("UTF-8");
+ } catch (java.io.UnsupportedEncodingException x) {
+ throw new InternalError(x);
+ }
+ AixVirtualMachine.write(fd, b, 0, b.length);
+ }
+ byte b[] = new byte[1];
+ b[0] = 0;
+ write(fd, b, 0, 1);
+ }
+
+
+ //-- native methods
+
+ static native void sendQuitTo(int pid) throws IOException;
+
+ static native void checkPermissions(String path) throws IOException;
+
+ static native int socket() throws IOException;
+
+ static native void connect(int fd, String path) throws IOException;
+
+ static native void close(int fd) throws IOException;
+
+ static native int read(int fd, byte buf[], int off, int bufLen) throws IOException;
+
+ static native void write(int fd, byte buf[], int off, int bufLen) throws IOException;
+
+ static {
+ System.loadLibrary("attach");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/native/java/net/aix_close.c Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,438 @@
+/*
+ * Copyright (c) 2001, 2013, 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 contains implementations of NET_... functions. The NET_.. functions are
+ * wrappers for common file- and socket functions plus provisions for non-blocking IO.
+ *
+ * (basically, the layers remember all file descriptors waiting for a particular fd;
+ * all threads waiting on a certain fd can be woken up by sending them a signal; this
+ * is done e.g. when the fd is closed.)
+ *
+ * This was originally copied from the linux_close.c implementation.
+ *
+ * Side Note: This coding needs initialization. Under Linux this is done
+ * automatically via __attribute((constructor)), on AIX this is done manually
+ * (see aix_close_init).
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/uio.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <sys/poll.h>
+
+/*
+ * Stack allocated by thread when doing blocking operation
+ */
+typedef struct threadEntry {
+ pthread_t thr; /* this thread */
+ struct threadEntry *next; /* next thread */
+ int intr; /* interrupted */
+} threadEntry_t;
+
+/*
+ * Heap allocated during initialized - one entry per fd
+ */
+typedef struct {
+ pthread_mutex_t lock; /* fd lock */
+ threadEntry_t *threads; /* threads blocked on fd */
+} fdEntry_t;
+
+/*
+ * Signal to unblock thread
+ */
+static int sigWakeup = (SIGRTMAX - 1);
+
+/*
+ * The fd table and the number of file descriptors
+ */
+static fdEntry_t *fdTable = NULL;
+static int fdCount = 0;
+
+/*
+ * Null signal handler
+ */
+static void sig_wakeup(int sig) {
+}
+
+/*
+ * Initialization routine (executed when library is loaded)
+ * Allocate fd tables and sets up signal handler.
+ *
+ * On AIX we don't have __attribute((constructor)) so we need to initialize
+ * manually (from JNI_OnLoad() in 'src/share/native/java/net/net_util.c')
+ */
+void aix_close_init() {
+ struct rlimit nbr_files;
+ sigset_t sigset;
+ struct sigaction sa;
+
+ /* Check already initialized */
+ if (fdCount > 0 && fdTable != NULL) {
+ return;
+ }
+
+ /*
+ * Allocate table based on the maximum number of
+ * file descriptors.
+ */
+ if (-1 == getrlimit(RLIMIT_NOFILE, &nbr_files)) {
+ fprintf(stderr, "library initialization failed - "
+ "unable to get max # of allocated fds\n");
+ abort();
+ }
+ fdCount = nbr_files.rlim_max;
+ /*
+ * We have a conceptual problem here, when the number of files is
+ * unlimited. As a kind of workaround, we ensure the table is big
+ * enough for handle even a large number of files. Since SAP itself
+ * recommends a limit of 32000 files, we just use 64000 as 'infinity'.
+ */
+ if (nbr_files.rlim_max == RLIM_INFINITY) {
+ fdCount = 64000;
+ }
+ fdTable = (fdEntry_t *)calloc(fdCount, sizeof(fdEntry_t));
+ if (fdTable == NULL) {
+ fprintf(stderr, "library initialization failed - "
+ "unable to allocate file descriptor table - out of memory");
+ abort();
+ }
+
+ {
+ int i;
+ for (i=0; i < fdCount; i++) {
+ pthread_mutex_init(&fdTable[i].lock, NULL);
+ }
+ }
+
+ /*
+ * Setup the signal handler
+ */
+ sa.sa_handler = sig_wakeup;
+ sa.sa_flags = 0;
+ sigemptyset(&sa.sa_mask);
+ sigaction(sigWakeup, &sa, NULL);
+
+ sigemptyset(&sigset);
+ sigaddset(&sigset, sigWakeup);
+ sigprocmask(SIG_UNBLOCK, &sigset, NULL);
+}
+
+/*
+ * Return the fd table for this fd or NULL is fd out
+ * of range.
+ */
+static inline fdEntry_t *getFdEntry(int fd)
+{
+ if (fd < 0 || fd >= fdCount) {
+ return NULL;
+ }
+ return &fdTable[fd];
+}
+
+/*
+ * Start a blocking operation :-
+ * Insert thread onto thread list for the fd.
+ */
+static inline void startOp(fdEntry_t *fdEntry, threadEntry_t *self)
+{
+ self->thr = pthread_self();
+ self->intr = 0;
+
+ pthread_mutex_lock(&(fdEntry->lock));
+ {
+ self->next = fdEntry->threads;
+ fdEntry->threads = self;
+ }
+ pthread_mutex_unlock(&(fdEntry->lock));
+}
+
+/*
+ * End a blocking operation :-
+ * Remove thread from thread list for the fd
+ * If fd has been interrupted then set errno to EBADF
+ */
+static inline void endOp
+ (fdEntry_t *fdEntry, threadEntry_t *self)
+{
+ int orig_errno = errno;
+ pthread_mutex_lock(&(fdEntry->lock));
+ {
+ threadEntry_t *curr, *prev=NULL;
+ curr = fdEntry->threads;
+ while (curr != NULL) {
+ if (curr == self) {
+ if (curr->intr) {
+ orig_errno = EBADF;
+ }
+ if (prev == NULL) {
+ fdEntry->threads = curr->next;
+ } else {
+ prev->next = curr->next;
+ }
+ break;
+ }
+ prev = curr;
+ curr = curr->next;
+ }
+ }
+ pthread_mutex_unlock(&(fdEntry->lock));
+ errno = orig_errno;
+}
+
+/*
+ * Close or dup2 a file descriptor ensuring that all threads blocked on
+ * the file descriptor are notified via a wakeup signal.
+ *
+ * fd1 < 0 => close(fd2)
+ * fd1 >= 0 => dup2(fd1, fd2)
+ *
+ * Returns -1 with errno set if operation fails.
+ */
+static int closefd(int fd1, int fd2) {
+ int rv, orig_errno;
+ fdEntry_t *fdEntry = getFdEntry(fd2);
+ if (fdEntry == NULL) {
+ errno = EBADF;
+ return -1;
+ }
+
+ /*
+ * Lock the fd to hold-off additional I/O on this fd.
+ */
+ pthread_mutex_lock(&(fdEntry->lock));
+
+ {
+ /* On fast machines we see that we enter dup2 before the
+ * accepting thread had a chance to get and process the signal.
+ * So in case we woke a thread up, give it some time to cope.
+ * Also see https://bugs.openjdk.java.net/browse/JDK-8006395 */
+ int num_woken = 0;
+
+ /*
+ * Send a wakeup signal to all threads blocked on this
+ * file descriptor.
+ */
+ threadEntry_t *curr = fdEntry->threads;
+ while (curr != NULL) {
+ curr->intr = 1;
+ pthread_kill( curr->thr, sigWakeup );
+ num_woken ++;
+ curr = curr->next;
+ }
+
+ if (num_woken > 0) {
+ usleep(num_woken * 50);
+ }
+
+ /*
+ * And close/dup the file descriptor
+ * (restart if interrupted by signal)
+ */
+ do {
+ if (fd1 < 0) {
+ rv = close(fd2);
+ } else {
+ rv = dup2(fd1, fd2);
+ }
+ } while (rv == -1 && errno == EINTR);
+ }
+
+ /*
+ * Unlock without destroying errno
+ */
+ orig_errno = errno;
+ pthread_mutex_unlock(&(fdEntry->lock));
+ errno = orig_errno;
+
+ return rv;
+}
+
+/*
+ * Wrapper for dup2 - same semantics as dup2 system call except
+ * that any threads blocked in an I/O system call on fd2 will be
+ * preempted and return -1/EBADF;
+ */
+int NET_Dup2(int fd, int fd2) {
+ if (fd < 0) {
+ errno = EBADF;
+ return -1;
+ }
+ return closefd(fd, fd2);
+}
+
+/*
+ * Wrapper for close - same semantics as close system call
+ * except that any threads blocked in an I/O on fd will be
+ * preempted and the I/O system call will return -1/EBADF.
+ */
+int NET_SocketClose(int fd) {
+ return closefd(-1, fd);
+}
+
+/************** Basic I/O operations here ***************/
+
+/*
+ * Macro to perform a blocking IO operation. Restarts
+ * automatically if interrupted by signal (other than
+ * our wakeup signal)
+ */
+#define BLOCKING_IO_RETURN_INT(FD, FUNC) { \
+ int ret; \
+ threadEntry_t self; \
+ fdEntry_t *fdEntry = getFdEntry(FD); \
+ if (fdEntry == NULL) { \
+ errno = EBADF; \
+ return -1; \
+ } \
+ do { \
+ startOp(fdEntry, &self); \
+ ret = FUNC; \
+ endOp(fdEntry, &self); \
+ } while (ret == -1 && errno == EINTR); \
+ return ret; \
+}
+
+int NET_Read(int s, void* buf, size_t len) {
+ BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) );
+}
+
+int NET_ReadV(int s, const struct iovec * vector, int count) {
+ BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) );
+}
+
+int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
+ struct sockaddr *from, int *fromlen) {
+ socklen_t socklen = *fromlen;
+ BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) );
+ *fromlen = socklen;
+}
+
+int NET_Send(int s, void *msg, int len, unsigned int flags) {
+ BLOCKING_IO_RETURN_INT( s, send(s, msg, len, flags) );
+}
+
+int NET_WriteV(int s, const struct iovec * vector, int count) {
+ BLOCKING_IO_RETURN_INT( s, writev(s, vector, count) );
+}
+
+int NET_SendTo(int s, const void *msg, int len, unsigned int
+ flags, const struct sockaddr *to, int tolen) {
+ BLOCKING_IO_RETURN_INT( s, sendto(s, msg, len, flags, to, tolen) );
+}
+
+int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
+ socklen_t socklen = *addrlen;
+ BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) );
+ *addrlen = socklen;
+}
+
+int NET_Connect(int s, struct sockaddr *addr, int addrlen) {
+ BLOCKING_IO_RETURN_INT( s, connect(s, addr, addrlen) );
+}
+
+#ifndef USE_SELECT
+int NET_Poll(struct pollfd *ufds, unsigned int nfds, int timeout) {
+ BLOCKING_IO_RETURN_INT( ufds[0].fd, poll(ufds, nfds, timeout) );
+}
+#else
+int NET_Select(int s, fd_set *readfds, fd_set *writefds,
+ fd_set *exceptfds, struct timeval *timeout) {
+ BLOCKING_IO_RETURN_INT( s-1,
+ select(s, readfds, writefds, exceptfds, timeout) );
+}
+#endif
+
+/*
+ * Wrapper for poll(s, timeout).
+ * Auto restarts with adjusted timeout if interrupted by
+ * signal other than our wakeup signal.
+ */
+int NET_Timeout(int s, long timeout) {
+ long prevtime = 0, newtime;
+ struct timeval t;
+ fdEntry_t *fdEntry = getFdEntry(s);
+
+ /*
+ * Check that fd hasn't been closed.
+ */
+ if (fdEntry == NULL) {
+ errno = EBADF;
+ return -1;
+ }
+
+ /*
+ * Pick up current time as may need to adjust timeout
+ */
+ if (timeout > 0) {
+ gettimeofday(&t, NULL);
+ prevtime = t.tv_sec * 1000 + t.tv_usec / 1000;
+ }
+
+ for(;;) {
+ struct pollfd pfd;
+ int rv;
+ threadEntry_t self;
+
+ /*
+ * Poll the fd. If interrupted by our wakeup signal
+ * errno will be set to EBADF.
+ */
+ pfd.fd = s;
+ pfd.events = POLLIN | POLLERR;
+
+ startOp(fdEntry, &self);
+ rv = poll(&pfd, 1, timeout);
+ endOp(fdEntry, &self);
+
+ /*
+ * If interrupted then adjust timeout. If timeout
+ * has expired return 0 (indicating timeout expired).
+ */
+ if (rv < 0 && errno == EINTR) {
+ if (timeout > 0) {
+ gettimeofday(&t, NULL);
+ newtime = t.tv_sec * 1000 + t.tv_usec / 1000;
+ timeout -= newtime - prevtime;
+ if (timeout <= 0) {
+ return 0;
+ }
+ prevtime = newtime;
+ }
+ } else {
+ return rv;
+ }
+
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/native/sun/nio/ch/AixPollPort.c Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2012 SAP AG. 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.
+ */
+
+#include "jni.h"
+#include "jni_util.h"
+#include "jvm.h"
+#include "jlong.h"
+
+#include "sun_nio_ch_AixPollPort.h"
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/poll.h>
+#include <sys/pollset.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <dlfcn.h>
+#include <errno.h>
+
+/* Initially copied from src/solaris/native/sun/nio/ch/nio_util.h */
+#define RESTARTABLE(_cmd, _result) do { \
+ do { \
+ _result = _cmd; \
+ } while((_result == -1) && (errno == EINTR)); \
+} while(0)
+
+typedef pollset_t pollset_create_func(int maxfd);
+typedef int pollset_destroy_func(pollset_t ps);
+typedef int pollset_ctl_func(pollset_t ps, struct poll_ctl *pollctl_array, int array_length);
+typedef int pollset_poll_func(pollset_t ps, struct pollfd *polldata_array, int array_length, int timeout);
+static pollset_create_func* _pollset_create = NULL;
+static pollset_destroy_func* _pollset_destroy = NULL;
+static pollset_ctl_func* _pollset_ctl = NULL;
+static pollset_poll_func* _pollset_poll = NULL;
+
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_AixPollPort_init(JNIEnv* env, jclass this) {
+ _pollset_create = (pollset_create_func*) dlsym(RTLD_DEFAULT, "pollset_create");
+ _pollset_destroy = (pollset_destroy_func*) dlsym(RTLD_DEFAULT, "pollset_destroy");
+ _pollset_ctl = (pollset_ctl_func*) dlsym(RTLD_DEFAULT, "pollset_ctl");
+ _pollset_poll = (pollset_poll_func*) dlsym(RTLD_DEFAULT, "pollset_poll");
+ if (_pollset_create == NULL || _pollset_destroy == NULL ||
+ _pollset_ctl == NULL || _pollset_poll == NULL) {
+ JNU_ThrowInternalError(env, "unable to get address of pollset functions");
+ }
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_eventSize(JNIEnv* env, jclass this) {
+ return sizeof(struct pollfd);
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_eventsOffset(JNIEnv* env, jclass this) {
+ return offsetof(struct pollfd, events);
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_reventsOffset(JNIEnv* env, jclass this) {
+ return offsetof(struct pollfd, revents);
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_fdOffset(JNIEnv* env, jclass this) {
+ return offsetof(struct pollfd, fd);
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_pollsetCreate(JNIEnv *env, jclass c) {
+ /* pollset_create can take the maximum number of fds, but we
+ * cannot predict this number so we leave it at OPEN_MAX. */
+ pollset_t ps = _pollset_create(-1);
+ if (ps < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "pollset_create failed");
+ }
+ return (int)ps;
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_pollsetCtl(JNIEnv *env, jclass c, jint ps,
+ jint opcode, jint fd, jint events) {
+ struct poll_ctl event;
+ int res;
+
+ event.cmd = opcode;
+ event.events = events;
+ event.fd = fd;
+
+ RESTARTABLE(_pollset_ctl((pollset_t)ps, &event, 1 /* length */), res);
+
+ return (res == 0) ? 0 : errno;
+}
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_AixPollPort_pollsetPoll(JNIEnv *env, jclass c,
+ jint ps, jlong address, jint numfds) {
+ struct pollfd *events = jlong_to_ptr(address);
+ int res;
+
+ RESTARTABLE(_pollset_poll(ps, events, numfds, -1), res);
+ if (res < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "pollset_poll failed");
+ }
+ return res;
+}
+
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_AixPollPort_pollsetDestroy(JNIEnv *env, jclass c, jint ps) {
+ int res;
+ RESTARTABLE(_pollset_destroy((pollset_t)ps), res);
+}
+
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_AixPollPort_socketpair(JNIEnv* env, jclass clazz, jintArray sv) {
+ int sp[2];
+ if (socketpair(PF_UNIX, SOCK_STREAM, 0, sp) == -1) {
+ JNU_ThrowIOExceptionWithLastError(env, "socketpair failed");
+ } else {
+ jint res[2];
+ res[0] = (jint)sp[0];
+ res[1] = (jint)sp[1];
+ (*env)->SetIntArrayRegion(env, sv, 0, 2, &res[0]);
+ }
+}
+
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_AixPollPort_interrupt(JNIEnv *env, jclass c, jint fd) {
+ int res;
+ int buf[1];
+ buf[0] = 1;
+ RESTARTABLE(write(fd, buf, 1), res);
+ if (res < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "write failed");
+ }
+}
+
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_AixPollPort_drain1(JNIEnv *env, jclass cl, jint fd) {
+ int res;
+ char buf[1];
+ RESTARTABLE(read(fd, buf, 1), res);
+ if (res < 0) {
+ JNU_ThrowIOExceptionWithLastError(env, "drain1 failed");
+ }
+}
+
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_AixPollPort_close0(JNIEnv *env, jclass c, jint fd) {
+ int res;
+ RESTARTABLE(close(fd), res);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/native/sun/nio/fs/AixNativeDispatcher.c Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. 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.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/mntctl.h>
+
+#include "jni.h"
+#include "jni_util.h"
+
+#include "sun_nio_fs_AixNativeDispatcher.h"
+
+static jfieldID entry_name;
+static jfieldID entry_dir;
+static jfieldID entry_fstype;
+static jfieldID entry_options;
+
+static jclass entry_cls;
+
+/**
+ * Call this to throw an internal UnixException when a system/library
+ * call fails
+ */
+static void throwUnixException(JNIEnv* env, int errnum) {
+ jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
+ "(I)V", errnum);
+ if (x != NULL) {
+ (*env)->Throw(env, x);
+ }
+}
+
+/**
+ * Initialization
+ */
+JNIEXPORT jint JNICALL
+Java_sun_nio_fs_AixNativeDispatcher_init(JNIEnv* env, jclass this)
+{
+ jint flags = 0;
+ jclass clazz;
+
+ clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry");
+ if (clazz == NULL) {
+ return 0;
+ }
+ entry_name = (*env)->GetFieldID(env, clazz, "name", "[B");
+ entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B");
+ entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B");
+ entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B");
+ entry_cls = (*env)->NewGlobalRef(env, clazz);
+
+ return 0;
+}
+
+/**
+ * Special implementation of getextmntent (see SolarisNativeDispatcher.c)
+ * that returns all entries at once.
+ */
+JNIEXPORT jobjectArray JNICALL
+Java_sun_nio_fs_AixNativeDispatcher_getmntctl(JNIEnv* env, jclass this)
+{
+ int must_free_buf = 0;
+ char stack_buf[1024];
+ char* buffer = stack_buf;
+ size_t buffer_size = 1024;
+ int num_entries;
+ int i;
+ jobjectArray ret;
+ struct vmount * vm;
+
+ for (i = 0; i < 5; i++) {
+ num_entries = mntctl(MCTL_QUERY, buffer_size, buffer);
+ if (num_entries != 0) {
+ break;
+ }
+ if (must_free_buf) {
+ free(buffer);
+ }
+ buffer_size *= 8;
+ buffer = malloc(buffer_size);
+ must_free_buf = 1;
+ }
+ /* Treat zero entries like errors. */
+ if (num_entries <= 0) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ throwUnixException(env, errno);
+ return NULL;
+ }
+ ret = (*env)->NewObjectArray(env, num_entries, entry_cls, NULL);
+ if (ret == NULL) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return NULL;
+ }
+ vm = (struct vmount*)buffer;
+ for (i = 0; i < num_entries; i++) {
+ jsize len;
+ jbyteArray bytes;
+ const char* fstype;
+ /* We set all relevant attributes so there is no need to call constructor. */
+ jobject entry = (*env)->AllocObject(env, entry_cls);
+ if (entry == NULL) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return NULL;
+ }
+ (*env)->SetObjectArrayElement(env, ret, i, entry);
+
+ /* vm->vmt_data[...].vmt_size is 32 bit aligned and also includes NULL byte. */
+ /* Since we only need the characters, it is necessary to check string size manually. */
+ len = strlen((char*)vm + vm->vmt_data[VMT_OBJECT].vmt_off);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return NULL;
+ }
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_OBJECT].vmt_off));
+ (*env)->SetObjectField(env, entry, entry_name, bytes);
+
+ len = strlen((char*)vm + vm->vmt_data[VMT_STUB].vmt_off);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return NULL;
+ }
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_STUB].vmt_off));
+ (*env)->SetObjectField(env, entry, entry_dir, bytes);
+
+ switch (vm->vmt_gfstype) {
+ case MNT_J2:
+ fstype = "jfs2";
+ break;
+ case MNT_NAMEFS:
+ fstype = "namefs";
+ break;
+ case MNT_NFS:
+ fstype = "nfs";
+ break;
+ case MNT_JFS:
+ fstype = "jfs";
+ break;
+ case MNT_CDROM:
+ fstype = "cdrom";
+ break;
+ case MNT_PROCFS:
+ fstype = "procfs";
+ break;
+ case MNT_NFS3:
+ fstype = "nfs3";
+ break;
+ case MNT_AUTOFS:
+ fstype = "autofs";
+ break;
+ case MNT_UDF:
+ fstype = "udfs";
+ break;
+ case MNT_NFS4:
+ fstype = "nfs4";
+ break;
+ case MNT_CIFS:
+ fstype = "smbfs";
+ break;
+ default:
+ fstype = "unknown";
+ }
+ len = strlen(fstype);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return NULL;
+ }
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)fstype);
+ (*env)->SetObjectField(env, entry, entry_fstype, bytes);
+
+ len = strlen((char*)vm + vm->vmt_data[VMT_ARGS].vmt_off);
+ bytes = (*env)->NewByteArray(env, len);
+ if (bytes == NULL) {
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return NULL;
+ }
+ (*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte*)((char *)vm + vm->vmt_data[VMT_ARGS].vmt_off));
+ (*env)->SetObjectField(env, entry, entry_options, bytes);
+
+ /* goto the next vmount structure: */
+ vm = (struct vmount *)((char *)vm + vm->vmt_length);
+ }
+
+ if (must_free_buf) {
+ free(buffer);
+ }
+ return ret;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/native/sun/tools/attach/AixVirtualMachine.c Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 SAP AG. 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.
+ */
+
+#include "jni.h"
+#include "jni_util.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <signal.h>
+#include <dirent.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/un.h>
+
+/*
+ * Based on 'LinuxVirtualMachine.c'. Non-relevant code has been removed and all
+ * occurrences of the string "Linux" have been replaced by "Aix".
+ */
+
+#include "sun_tools_attach_AixVirtualMachine.h"
+
+#define RESTARTABLE(_cmd, _result) do { \
+ do { \
+ _result = _cmd; \
+ } while((_result == -1) && (errno == EINTR)); \
+} while(0)
+
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: socket
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_sun_tools_attach_AixVirtualMachine_socket
+ (JNIEnv *env, jclass cls)
+{
+ int fd = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (fd == -1) {
+ JNU_ThrowIOExceptionWithLastError(env, "socket");
+ }
+ /* added time out values */
+ else {
+ struct timeval tv;
+ tv.tv_sec = 2 * 60;
+ tv.tv_usec = 0;
+
+ setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(tv));
+ setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (char*)&tv, sizeof(tv));
+ }
+ return (jint)fd;
+}
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: connect
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_connect
+ (JNIEnv *env, jclass cls, jint fd, jstring path)
+{
+ jboolean isCopy;
+ const char* p = GetStringPlatformChars(env, path, &isCopy);
+ if (p != NULL) {
+ struct sockaddr_un addr;
+ int err = 0;
+
+ /* added missing structure initialization */
+ memset(&addr,0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strcpy(addr.sun_path, p);
+ /* We must call bind with the actual socketaddr length. This is obligatory for AS400. */
+ if (connect(fd, (struct sockaddr*)&addr, SUN_LEN(&addr)) == -1) {
+ err = errno;
+ }
+
+ if (isCopy) {
+ JNU_ReleaseStringPlatformChars(env, path, p);
+ }
+
+ /*
+ * If the connect failed then we throw the appropriate exception
+ * here (can't throw it before releasing the string as can't call
+ * JNI with pending exception)
+ */
+ if (err != 0) {
+ if (err == ENOENT) {
+ JNU_ThrowByName(env, "java/io/FileNotFoundException", NULL);
+ } else {
+ char* msg = strdup(strerror(err));
+ JNU_ThrowIOException(env, msg);
+ if (msg != NULL) {
+ free(msg);
+ }
+ }
+ }
+ }
+}
+
+
+/*
+ * Structure and callback function used to send a QUIT signal to all
+ * children of a given process
+ */
+typedef struct {
+ pid_t ppid;
+} SendQuitContext;
+
+static void SendQuitCallback(const pid_t pid, void* user_data) {
+ SendQuitContext* context = (SendQuitContext*)user_data;
+ pid_t parent = getParent(pid);
+ if (parent == context->ppid) {
+ kill(pid, SIGQUIT);
+ }
+}
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: sendQuitTo
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_sendQuitTo
+ (JNIEnv *env, jclass cls, jint pid)
+{
+ if (kill((pid_t)pid, SIGQUIT)) {
+ JNU_ThrowIOExceptionWithLastError(env, "kill");
+ }
+}
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: checkPermissions
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_checkPermissions
+ (JNIEnv *env, jclass cls, jstring path)
+{
+ jboolean isCopy;
+ const char* p = GetStringPlatformChars(env, path, &isCopy);
+ if (p != NULL) {
+ struct stat64 sb;
+ uid_t uid, gid;
+ int res;
+ /* added missing initialization of the stat64 buffer */
+ memset(&sb, 0, sizeof(struct stat64));
+
+ /*
+ * Check that the path is owned by the effective uid/gid of this
+ * process. Also check that group/other access is not allowed.
+ */
+ uid = geteuid();
+ gid = getegid();
+
+ res = stat64(p, &sb);
+ if (res != 0) {
+ /* save errno */
+ res = errno;
+ }
+
+ /* release p here before we throw an I/O exception */
+ if (isCopy) {
+ JNU_ReleaseStringPlatformChars(env, path, p);
+ }
+
+ if (res == 0) {
+ if ( (sb.st_uid != uid) || (sb.st_gid != gid) ||
+ ((sb.st_mode & (S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) != 0) ) {
+ JNU_ThrowIOException(env, "well-known file is not secure");
+ }
+ } else {
+ char* msg = strdup(strerror(res));
+ JNU_ThrowIOException(env, msg);
+ if (msg != NULL) {
+ free(msg);
+ }
+ }
+ }
+}
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: close
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_close
+ (JNIEnv *env, jclass cls, jint fd)
+{
+ int res;
+ /* Fixed deadlock when this call of close by the client is not seen by the attach server
+ * which has accepted the (very short) connection already and is waiting for the request. But read don't get a byte,
+ * because the close is lost without shutdown.
+ */
+ shutdown(fd, 2);
+ RESTARTABLE(close(fd), res);
+}
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: read
+ * Signature: (I[BI)I
+ */
+JNIEXPORT jint JNICALL Java_sun_tools_attach_AixVirtualMachine_read
+ (JNIEnv *env, jclass cls, jint fd, jbyteArray ba, jint off, jint baLen)
+{
+ unsigned char buf[128];
+ size_t len = sizeof(buf);
+ ssize_t n;
+
+ size_t remaining = (size_t)(baLen - off);
+ if (len > remaining) {
+ len = remaining;
+ }
+
+ RESTARTABLE(read(fd, buf+off, len), n);
+ if (n == -1) {
+ JNU_ThrowIOExceptionWithLastError(env, "read");
+ } else {
+ if (n == 0) {
+ n = -1; // EOF
+ } else {
+ (*env)->SetByteArrayRegion(env, ba, off, (jint)n, (jbyte *)(buf+off));
+ }
+ }
+ return n;
+}
+
+/*
+ * Class: sun_tools_attach_AixVirtualMachine
+ * Method: write
+ * Signature: (I[B)V
+ */
+JNIEXPORT void JNICALL Java_sun_tools_attach_AixVirtualMachine_write
+ (JNIEnv *env, jclass cls, jint fd, jbyteArray ba, jint off, jint bufLen)
+{
+ size_t remaining = bufLen;
+ do {
+ unsigned char buf[128];
+ size_t len = sizeof(buf);
+ int n;
+
+ if (len > remaining) {
+ len = remaining;
+ }
+ (*env)->GetByteArrayRegion(env, ba, off, len, (jbyte *)buf);
+
+ RESTARTABLE(write(fd, buf, len), n);
+ if (n > 0) {
+ off += n;
+ remaining -= n;
+ } else {
+ JNU_ThrowIOExceptionWithLastError(env, "write");
+ return;
+ }
+
+ } while (remaining > 0);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/porting/porting_aix.c Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2012, 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include <stdio.h>
+#include <sys/ldr.h>
+#include <errno.h>
+
+#include "porting_aix.h"
+
+static unsigned char dladdr_buffer[0x4000];
+
+static void fill_dll_info(void) {
+ int rc = loadquery(L_GETINFO,dladdr_buffer, sizeof(dladdr_buffer));
+ if (rc == -1) {
+ fprintf(stderr, "loadquery failed (%d %s)", errno, strerror(errno));
+ fflush(stderr);
+ }
+}
+
+static int dladdr_dont_reload(void* addr, Dl_info* info) {
+ const struct ld_info* p = (struct ld_info*) dladdr_buffer;
+ info->dli_fbase = 0; info->dli_fname = 0;
+ info->dli_sname = 0; info->dli_saddr = 0;
+ for (;;) {
+ if (addr >= p->ldinfo_textorg &&
+ addr < (((char*)p->ldinfo_textorg) + p->ldinfo_textsize)) {
+ info->dli_fname = p->ldinfo_filename;
+ info->dli_fbase = p->ldinfo_textorg;
+ return 1; /* [sic] */
+ }
+ if (!p->ldinfo_next) {
+ break;
+ }
+ p = (struct ld_info*)(((char*)p) + p->ldinfo_next);
+ }
+ return 0; /* [sic] */
+}
+
+#ifdef __cplusplus
+extern "C"
+#endif
+int dladdr(void *addr, Dl_info *info) {
+ static int loaded = 0;
+ if (!loaded) {
+ fill_dll_info();
+ loaded = 1;
+ }
+ if (!addr) {
+ return 0; /* [sic] */
+ }
+ /* Address could be AIX function descriptor? */
+ void* const addr0 = *( (void**) addr );
+ int rc = dladdr_dont_reload(addr, info);
+ if (rc == 0) {
+ rc = dladdr_dont_reload(addr0, info);
+ if (rc == 0) { /* [sic] */
+ fill_dll_info(); /* refill, maybe loadquery info is outdated */
+ rc = dladdr_dont_reload(addr, info);
+ if (rc == 0) {
+ rc = dladdr_dont_reload(addr0, info);
+ }
+ }
+ }
+ return rc;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/aix/porting/porting_aix.h Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2012, 2013 SAP AG. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/*
+ * Header file to contain porting-relevant code which does not have a
+ * home anywhere else.
+ * This is intially based on hotspot/src/os/aix/vm/{loadlib,porting}_aix.{hpp,cpp}
+ */
+
+/*
+ * Aix' own version of dladdr().
+ * This function tries to mimick dladdr(3) on Linux
+ * (see http://linux.die.net/man/3/dladdr)
+ * dladdr(3) is not POSIX but a GNU extension, and is not available on AIX.
+ *
+ * Differences between AIX dladdr and Linux dladdr:
+ *
+ * 1) Dl_info.dli_fbase: can never work, is disabled.
+ * A loaded image on AIX is divided in multiple segments, at least two
+ * (text and data) but potentially also far more. This is because the loader may
+ * load each member into an own segment, as for instance happens with the libC.a
+ * 2) Dl_info.dli_sname: This only works for code symbols (functions); for data, a
+ * zero-length string is returned ("").
+ * 3) Dl_info.dli_saddr: For code, this will return the entry point of the function,
+ * not the function descriptor.
+ */
+
+typedef struct {
+ const char *dli_fname; /* file path of loaded library */
+ void *dli_fbase; /* doesn't make sence on AIX */
+ const char *dli_sname; /* symbol name; "" if not known */
+ void *dli_saddr; /* address of *entry* of function; not function descriptor; */
+} Dl_info;
+
+#ifdef __cplusplus
+extern "C"
+#endif
+int dladdr(void *addr, Dl_info *info);
--- a/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/macosx/classes/sun/nio/ch/KQueueArrayWrapper.java Tue Jan 28 14:57:41 2014 -0800
@@ -53,10 +53,6 @@
*/
class KQueueArrayWrapper {
- // Event masks
- static final short POLLIN = AbstractPollArrayWrapper.POLLIN;
- static final short POLLOUT = AbstractPollArrayWrapper.POLLOUT;
-
// kevent filters
static short EVFILT_READ;
static short EVFILT_WRITE;
@@ -129,9 +125,9 @@
// SinkChannelImpl, SourceChannelImpl, DatagramChannelImpl,
// ServerSocketChannelImpl, SocketChannelImpl
if (filter == EVFILT_READ) {
- result |= POLLIN;
+ result |= Net.POLLIN;
} else if (filter == EVFILT_WRITE) {
- result |= POLLOUT;
+ result |= Net.POLLOUT;
}
return result;
@@ -180,7 +176,7 @@
if (!ch.isOpen())
continue;
- register0(kq, ch.getFDVal(), u.events & POLLIN, u.events & POLLOUT);
+ register0(kq, ch.getFDVal(), u.events & Net.POLLIN, u.events & Net.POLLOUT);
}
}
}
--- a/jdk/src/share/bin/jli_util.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/bin/jli_util.h Tue Jan 28 14:57:41 2014 -0800
@@ -85,6 +85,9 @@
#ifdef MACOSX
#define JLI_Lseek lseek
#endif
+#ifdef _AIX
+#define JLI_Lseek lseek
+#endif
#endif /* _WIN32 */
/*
--- a/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/java/nio/file/CopyMoveHelper.java Tue Jan 28 14:57:41 2014 -0800
@@ -130,7 +130,7 @@
// copy basic attributes to target
if (opts.copyAttributes) {
BasicFileAttributeView view =
- Files.getFileAttributeView(target, BasicFileAttributeView.class, linkOptions);
+ Files.getFileAttributeView(target, BasicFileAttributeView.class);
try {
view.setTimes(attrs.lastModifiedTime(),
attrs.lastAccessTime(),
--- a/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/AbstractPollArrayWrapper.java Tue Jan 28 14:57:41 2014 -0800
@@ -37,14 +37,6 @@
public abstract class AbstractPollArrayWrapper {
- // Event masks
- public static final short POLLIN = 0x0001;
- public static final short POLLOUT = 0x0004;
- public static final short POLLERR = 0x0008;
- public static final short POLLHUP = 0x0010;
- public static final short POLLNVAL = 0x0020;
- public static final short POLLREMOVE = 0x0800;
-
// Miscellaneous constants
static final short SIZE_POLLFD = 8;
static final short FD_OFFSET = 0;
--- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -1042,25 +1042,24 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
+ if ((ops & Net.POLLNVAL) != 0) {
// This should only happen if this channel is pre-closed while a
// selection operation is in progress
// ## Throw an error if this channel has not been pre-closed
return false;
}
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_READ) != 0))
newOps |= SelectionKey.OP_READ;
- if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
+ if (((ops & Net.POLLOUT) != 0) &&
((intOps & SelectionKey.OP_WRITE) != 0))
newOps |= SelectionKey.OP_WRITE;
@@ -1105,11 +1104,11 @@
int newOps = 0;
if ((ops & SelectionKey.OP_READ) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
if ((ops & SelectionKey.OP_WRITE) != 0)
- newOps |= PollArrayWrapper.POLLOUT;
+ newOps |= Net.POLLOUT;
if ((ops & SelectionKey.OP_CONNECT) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
sk.selector.putEventOps(sk, newOps);
}
--- a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java Tue Jan 28 14:57:41 2014 -0800
@@ -187,9 +187,9 @@
if (!dc.isOpen())
throw new ClosedChannelException();
long st = System.currentTimeMillis();
- int result = dc.poll(PollArrayWrapper.POLLIN, to);
+ int result = dc.poll(Net.POLLIN, to);
if (result > 0 &&
- ((result & PollArrayWrapper.POLLIN) != 0)) {
+ ((result & Net.POLLIN) != 0)) {
if ((sender = dc.receive(bb)) != null)
return sender;
}
--- a/jdk/src/share/classes/sun/nio/ch/Net.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/Net.java Tue Jan 28 14:57:41 2014 -0800
@@ -581,9 +581,34 @@
private static native void initIDs();
+ /**
+ * Event masks for the various poll system calls.
+ * They will be set platform dependant in the static initializer below.
+ */
+ public static final short POLLIN;
+ public static final short POLLOUT;
+ public static final short POLLERR;
+ public static final short POLLHUP;
+ public static final short POLLNVAL;
+ public static final short POLLCONN;
+
+ static native short pollinValue();
+ static native short polloutValue();
+ static native short pollerrValue();
+ static native short pollhupValue();
+ static native short pollnvalValue();
+ static native short pollconnValue();
+
static {
IOUtil.load();
initIDs();
+
+ POLLIN = pollinValue();
+ POLLOUT = polloutValue();
+ POLLERR = pollerrValue();
+ POLLHUP = pollhupValue();
+ POLLNVAL = pollnvalValue();
+ POLLCONN = pollconnValue();
}
}
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java Tue Jan 28 14:57:41 2014 -0800
@@ -113,7 +113,7 @@
if (!ssc.isOpen())
throw new ClosedChannelException();
long st = System.currentTimeMillis();
- int result = ssc.poll(PollArrayWrapper.POLLIN, to);
+ int result = ssc.poll(Net.POLLIN, to);
if (result > 0 && ((sc = ssc.accept()) != null))
return sc.socket();
to -= System.currentTimeMillis() - st;
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -309,21 +309,20 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
+ if ((ops & Net.POLLNVAL) != 0) {
// This should only happen if this channel is pre-closed while a
// selection operation is in progress
// ## Throw an error if this channel has not been pre-closed
return false;
}
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_ACCEPT) != 0))
newOps |= SelectionKey.OP_ACCEPT;
@@ -369,7 +368,7 @@
// Translate ops
if ((ops & SelectionKey.OP_ACCEPT) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
// Place ops into pollfd array
sk.selector.putEventOps(sk, newOps);
}
--- a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java Tue Jan 28 14:57:41 2014 -0800
@@ -107,7 +107,7 @@
throw new ClosedChannelException();
long st = System.currentTimeMillis();
- int result = sc.poll(PollArrayWrapper.POLLCONN, to);
+ int result = sc.poll(Net.POLLCONN, to);
if (result > 0 && sc.finishConnect())
break;
to -= System.currentTimeMillis() - st;
@@ -201,7 +201,7 @@
if (!sc.isOpen())
throw new ClosedChannelException();
long st = System.currentTimeMillis();
- int result = sc.poll(PollArrayWrapper.POLLIN, to);
+ int result = sc.poll(Net.POLLIN, to);
if (result > 0) {
if ((n = sc.read(bb)) != 0)
return n;
--- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -888,15 +888,14 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
+ if ((ops & Net.POLLNVAL) != 0) {
// This should only happen if this channel is pre-closed while a
// selection operation is in progress
// ## Throw an error if this channel has not been pre-closed
return false;
}
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
// No need to poll again in checkConnect,
@@ -905,19 +904,19 @@
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_READ) != 0) &&
(state == ST_CONNECTED))
newOps |= SelectionKey.OP_READ;
- if (((ops & PollArrayWrapper.POLLCONN) != 0) &&
+ if (((ops & Net.POLLCONN) != 0) &&
((intOps & SelectionKey.OP_CONNECT) != 0) &&
((state == ST_UNCONNECTED) || (state == ST_PENDING))) {
newOps |= SelectionKey.OP_CONNECT;
readyToConnect = true;
}
- if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
+ if (((ops & Net.POLLOUT) != 0) &&
((intOps & SelectionKey.OP_WRITE) != 0) &&
(state == ST_CONNECTED))
newOps |= SelectionKey.OP_WRITE;
@@ -962,11 +961,11 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
int newOps = 0;
if ((ops & SelectionKey.OP_READ) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
if ((ops & SelectionKey.OP_WRITE) != 0)
- newOps |= PollArrayWrapper.POLLOUT;
+ newOps |= Net.POLLOUT;
if ((ops & SelectionKey.OP_CONNECT) != 0)
- newOps |= PollArrayWrapper.POLLCONN;
+ newOps |= Net.POLLCONN;
sk.selector.putEventOps(sk, newOps);
}
--- a/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java Tue Jan 28 14:57:41 2014 -0800
@@ -1297,7 +1297,7 @@
}
String osName = AccessController.doPrivileged(
new GetPropertyAction("os.name"));
- if ("SunOS".equals(osName) || "Linux".equals(osName)
+ if ("SunOS".equals(osName) || "Linux".equals(osName) || "AIX".equals(osName)
|| osName.contains("OS X")) {
charset("x-COMPOUND_TEXT", "COMPOUND_TEXT",
new String[] {
--- a/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider Tue Jan 28 14:57:41 2014 -0800
@@ -31,3 +31,4 @@
#[windows]sun.tools.attach.WindowsAttachProvider
#[linux]sun.tools.attach.LinuxAttachProvider
#[macosx]sun.tools.attach.BsdAttachProvider
+#[aix]sun.tools.attach.AixAttachProvider
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/lib/security/java.security-aix Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,497 @@
+#
+# This is the "master security properties file".
+#
+# An alternate java.security properties file may be specified
+# from the command line via the system property
+#
+# -Djava.security.properties=<URL>
+#
+# This properties file appends to the master security properties file.
+# If both properties files specify values for the same key, the value
+# from the command-line properties file is selected, as it is the last
+# one loaded.
+#
+# Also, if you specify
+#
+# -Djava.security.properties==<URL> (2 equals),
+#
+# then that properties file completely overrides the master security
+# properties file.
+#
+# To disable the ability to specify an additional properties file from
+# the command line, set the key security.overridePropertiesFile
+# to false in the master security properties file. It is set to true
+# by default.
+
+# In this file, various security properties are set for use by
+# java.security classes. This is where users can statically register
+# Cryptography Package Providers ("providers" for short). The term
+# "provider" refers to a package or set of packages that supply a
+# concrete implementation of a subset of the cryptography aspects of
+# the Java Security API. A provider may, for example, implement one or
+# more digital signature algorithms or message digest algorithms.
+#
+# Each provider must implement a subclass of the Provider class.
+# To register a provider in this master security properties file,
+# specify the Provider subclass name and priority in the format
+#
+# security.provider.<n>=<className>
+#
+# This declares a provider, and specifies its preference
+# order n. The preference order is the order in which providers are
+# searched for requested algorithms (when no specific provider is
+# requested). The order is 1-based; 1 is the most preferred, followed
+# by 2, and so on.
+#
+# <className> must specify the subclass of the Provider class whose
+# constructor sets the values of various properties that are required
+# for the Java Security API to look up the algorithms or other
+# facilities implemented by the provider.
+#
+# There must be at least one provider specification in java.security.
+# There is a default provider that comes standard with the JDK. It
+# is called the "SUN" provider, and its Provider subclass
+# named Sun appears in the sun.security.provider package. Thus, the
+# "SUN" provider is registered via the following:
+#
+# security.provider.1=sun.security.provider.Sun
+#
+# (The number 1 is used for the default provider.)
+#
+# Note: Providers can be dynamically registered instead by calls to
+# either the addProvider or insertProviderAt method in the Security
+# class.
+
+#
+# List of providers and their preference orders (see above):
+#
+security.provider.1=sun.security.provider.Sun
+security.provider.2=sun.security.rsa.SunRsaSign
+security.provider.3=sun.security.ec.SunEC
+security.provider.4=com.sun.net.ssl.internal.ssl.Provider
+security.provider.5=com.sun.crypto.provider.SunJCE
+security.provider.6=sun.security.jgss.SunProvider
+security.provider.7=com.sun.security.sasl.Provider
+security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
+security.provider.9=sun.security.smartcardio.SunPCSC
+
+#
+# Sun Provider SecureRandom seed source.
+#
+# Select the primary source of seed data for the "SHA1PRNG" and
+# "NativePRNG" SecureRandom implementations in the "Sun" provider.
+# (Other SecureRandom implementations might also use this property.)
+#
+# On Unix-like systems (for example, Solaris/Linux/MacOS), the
+# "NativePRNG" and "SHA1PRNG" implementations obtains seed data from
+# special device files such as file:/dev/random.
+#
+# On Windows systems, specifying the URLs "file:/dev/random" or
+# "file:/dev/urandom" will enable the native Microsoft CryptoAPI seeding
+# mechanism for SHA1PRNG.
+#
+# By default, an attempt is made to use the entropy gathering device
+# specified by the "securerandom.source" Security property. If an
+# exception occurs while accessing the specified URL:
+#
+# SHA1PRNG:
+# the traditional system/thread activity algorithm will be used.
+#
+# NativePRNG:
+# a default value of /dev/random will be used. If neither
+# are available, the implementation will be disabled.
+# "file" is the only currently supported protocol type.
+#
+# The entropy gathering device can also be specified with the System
+# property "java.security.egd". For example:
+#
+# % java -Djava.security.egd=file:/dev/random MainClass
+#
+# Specifying this System property will override the
+# "securerandom.source" Security property.
+#
+# In addition, if "file:/dev/random" or "file:/dev/urandom" is
+# specified, the "NativePRNG" implementation will be more preferred than
+# SHA1PRNG in the Sun provider.
+#
+securerandom.source=file:/dev/random
+
+#
+# A list of known strong SecureRandom implementations.
+#
+# To help guide applications in selecting a suitable strong
+# java.security.SecureRandom implementation, Java distributions should
+# indicate a list of known strong implementations using the property.
+#
+# This is a comma-separated list of algorithm and/or algorithm:provider
+# entries.
+#
+securerandom.strongAlgorithms=NativePRNGBlocking:SUN
+
+#
+# Class to instantiate as the javax.security.auth.login.Configuration
+# provider.
+#
+login.configuration.provider=sun.security.provider.ConfigFile
+
+#
+# Default login configuration file
+#
+#login.config.url.1=file:${user.home}/.java.login.config
+
+#
+# Class to instantiate as the system Policy. This is the name of the class
+# that will be used as the Policy object.
+#
+policy.provider=sun.security.provider.PolicyFile
+
+# The default is to have a single system-wide policy file,
+# and a policy file in the user's home directory.
+policy.url.1=file:${java.home}/lib/security/java.policy
+policy.url.2=file:${user.home}/.java.policy
+
+# whether or not we expand properties in the policy file
+# if this is set to false, properties (${...}) will not be expanded in policy
+# files.
+policy.expandProperties=true
+
+# whether or not we allow an extra policy to be passed on the command line
+# with -Djava.security.policy=somefile. Comment out this line to disable
+# this feature.
+policy.allowSystemProperty=true
+
+# whether or not we look into the IdentityScope for trusted Identities
+# when encountering a 1.1 signed JAR file. If the identity is found
+# and is trusted, we grant it AllPermission.
+policy.ignoreIdentityScope=false
+
+#
+# Default keystore type.
+#
+keystore.type=jks
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageAccess unless the
+# corresponding RuntimePermission ("accessClassInPackage."+package) has
+# been granted.
+package.access=sun.,\
+ com.sun.xml.internal.,\
+ com.sun.imageio.,\
+ com.sun.istack.internal.,\
+ com.sun.jmx.,\
+ com.sun.media.sound.,\
+ com.sun.proxy.,\
+ com.sun.corba.se.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.utils.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.security.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.,\
+ com.sun.org.glassfish.,\
+ com.oracle.xmlns.internal.,\
+ com.oracle.webservices.internal.,\
+ oracle.jrockit.jfr.,\
+ org.jcp.xml.dsig.internal.,\
+ jdk.internal.,\
+ jdk.nashorn.internal.,\
+ jdk.nashorn.tools.
+
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageDefinition unless the
+# corresponding RuntimePermission ("defineClassInPackage."+package) has
+# been granted.
+#
+# by default, none of the class loaders supplied with the JDK call
+# checkPackageDefinition.
+#
+package.definition=sun.,\
+ com.sun.xml.internal.,\
+ com.sun.imageio.,\
+ com.sun.istack.internal.,\
+ com.sun.jmx.,\
+ com.sun.media.sound.,\
+ com.sun.proxy.,\
+ com.sun.corba.se.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.utils.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.security.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.,\
+ com.sun.org.glassfish.,\
+ com.oracle.xmlns.internal.,\
+ com.oracle.webservices.internal.,\
+ oracle.jrockit.jfr.,\
+ org.jcp.xml.dsig.internal.,\
+ jdk.internal.,\
+ jdk.nashorn.internal.,\
+ jdk.nashorn.tools.
+
+
+#
+# Determines whether this properties file can be appended to
+# or overridden on the command line via -Djava.security.properties
+#
+security.overridePropertiesFile=true
+
+#
+# Determines the default key and trust manager factory algorithms for
+# the javax.net.ssl package.
+#
+ssl.KeyManagerFactory.algorithm=SunX509
+ssl.TrustManagerFactory.algorithm=PKIX
+
+#
+# The Java-level namelookup cache policy for successful lookups:
+#
+# any negative value: caching forever
+# any positive value: the number of seconds to cache an address for
+# zero: do not cache
+#
+# default value is forever (FOREVER). For security reasons, this
+# caching is made forever when a security manager is set. When a security
+# manager is not set, the default behavior in this implementation
+# is to cache for 30 seconds.
+#
+# NOTE: setting this to anything other than the default value can have
+# serious security implications. Do not set it unless
+# you are sure you are not exposed to DNS spoofing attack.
+#
+#networkaddress.cache.ttl=-1
+
+# The Java-level namelookup cache policy for failed lookups:
+#
+# any negative value: cache forever
+# any positive value: the number of seconds to cache negative lookup results
+# zero: do not cache
+#
+# In some Microsoft Windows networking environments that employ
+# the WINS name service in addition to DNS, name service lookups
+# that fail may take a noticeably long time to return (approx. 5 seconds).
+# For this reason the default caching policy is to maintain these
+# results for 10 seconds.
+#
+#
+networkaddress.cache.negative.ttl=10
+
+#
+# Properties to configure OCSP for certificate revocation checking
+#
+
+# Enable OCSP
+#
+# By default, OCSP is not used for certificate revocation checking.
+# This property enables the use of OCSP when set to the value "true".
+#
+# NOTE: SocketPermission is required to connect to an OCSP responder.
+#
+# Example,
+# ocsp.enable=true
+
+#
+# Location of the OCSP responder
+#
+# By default, the location of the OCSP responder is determined implicitly
+# from the certificate being validated. This property explicitly specifies
+# the location of the OCSP responder. The property is used when the
+# Authority Information Access extension (defined in RFC 3280) is absent
+# from the certificate or when it requires overriding.
+#
+# Example,
+# ocsp.responderURL=http://ocsp.example.net:80
+
+#
+# Subject name of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# distinguished name (defined in RFC 2253) which identifies a certificate in
+# the set of certificates supplied during cert path validation. In cases where
+# the subject name alone is not sufficient to uniquely identify the certificate
+# then both the "ocsp.responderCertIssuerName" and
+# "ocsp.responderCertSerialNumber" properties must be used instead. When this
+# property is set then those two properties are ignored.
+#
+# Example,
+# ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp"
+
+#
+# Issuer name of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# distinguished name (defined in RFC 2253) which identifies a certificate in
+# the set of certificates supplied during cert path validation. When this
+# property is set then the "ocsp.responderCertSerialNumber" property must also
+# be set. When the "ocsp.responderCertSubjectName" property is set then this
+# property is ignored.
+#
+# Example,
+# ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp"
+
+#
+# Serial number of the OCSP responder's certificate
+#
+# By default, the certificate of the OCSP responder is that of the issuer
+# of the certificate being validated. This property identifies the certificate
+# of the OCSP responder when the default does not apply. Its value is a string
+# of hexadecimal digits (colon or space separators may be present) which
+# identifies a certificate in the set of certificates supplied during cert path
+# validation. When this property is set then the "ocsp.responderCertIssuerName"
+# property must also be set. When the "ocsp.responderCertSubjectName" property
+# is set then this property is ignored.
+#
+# Example,
+# ocsp.responderCertSerialNumber=2A:FF:00
+
+#
+# Policy for failed Kerberos KDC lookups:
+#
+# When a KDC is unavailable (network error, service failure, etc), it is
+# put inside a blacklist and accessed less often for future requests. The
+# value (case-insensitive) for this policy can be:
+#
+# tryLast
+# KDCs in the blacklist are always tried after those not on the list.
+#
+# tryLess[:max_retries,timeout]
+# KDCs in the blacklist are still tried by their order in the configuration,
+# but with smaller max_retries and timeout values. max_retries and timeout
+# are optional numerical parameters (default 1 and 5000, which means once
+# and 5 seconds). Please notes that if any of the values defined here is
+# more than what is defined in krb5.conf, it will be ignored.
+#
+# Whenever a KDC is detected as available, it is removed from the blacklist.
+# The blacklist is reset when krb5.conf is reloaded. You can add
+# refreshKrb5Config=true to a JAAS configuration file so that krb5.conf is
+# reloaded whenever a JAAS authentication is attempted.
+#
+# Example,
+# krb5.kdc.bad.policy = tryLast
+# krb5.kdc.bad.policy = tryLess:2,2000
+krb5.kdc.bad.policy = tryLast
+
+# Algorithm restrictions for certification path (CertPath) processing
+#
+# In some environments, certain algorithms or key lengths may be undesirable
+# for certification path building and validation. For example, "MD2" is
+# generally no longer considered to be a secure hash algorithm. This section
+# describes the mechanism for disabling algorithms based on algorithm name
+# and/or key length. This includes algorithms used in certificates, as well
+# as revocation information such as CRLs and signed OCSP Responses.
+#
+# The syntax of the disabled algorithm string is described as this Java
+# BNF-style:
+# DisabledAlgorithms:
+# " DisabledAlgorithm { , DisabledAlgorithm } "
+#
+# DisabledAlgorithm:
+# AlgorithmName [Constraint]
+#
+# AlgorithmName:
+# (see below)
+#
+# Constraint:
+# KeySizeConstraint
+#
+# KeySizeConstraint:
+# keySize Operator DecimalInteger
+#
+# Operator:
+# <= | < | == | != | >= | >
+#
+# DecimalInteger:
+# DecimalDigits
+#
+# DecimalDigits:
+# DecimalDigit {DecimalDigit}
+#
+# DecimalDigit: one of
+# 1 2 3 4 5 6 7 8 9 0
+#
+# The "AlgorithmName" is the standard algorithm name of the disabled
+# algorithm. See "Java Cryptography Architecture Standard Algorithm Name
+# Documentation" for information about Standard Algorithm Names. Matching
+# is performed using a case-insensitive sub-element matching rule. (For
+# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and
+# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a
+# sub-element of the certificate algorithm name, the algorithm will be
+# rejected during certification path building and validation. For example,
+# the assertion algorithm name "DSA" will disable all certificate algorithms
+# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion
+# will not disable algorithms related to "ECDSA".
+#
+# A "Constraint" provides further guidance for the algorithm being specified.
+# The "KeySizeConstraint" requires a key of a valid size range if the
+# "AlgorithmName" is of a key algorithm. The "DecimalInteger" indicates the
+# key size specified in number of bits. For example, "RSA keySize <= 1024"
+# indicates that any RSA key with key size less than or equal to 1024 bits
+# should be disabled, and "RSA keySize < 1024, RSA keySize > 2048" indicates
+# that any RSA key with key size less than 1024 or greater than 2048 should
+# be disabled. Note that the "KeySizeConstraint" only makes sense to key
+# algorithms.
+#
+# Note: This property is currently used by Oracle's PKIX implementation. It
+# is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048
+#
+#
+jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
+
+# Algorithm restrictions for Secure Socket Layer/Transport Layer Security
+# (SSL/TLS) processing
+#
+# In some environments, certain algorithms or key lengths may be undesirable
+# when using SSL/TLS. This section describes the mechanism for disabling
+# algorithms during SSL/TLS security parameters negotiation, including cipher
+# suites selection, peer authentication and key exchange mechanisms.
+#
+# For PKI-based peer authentication and key exchange mechanisms, this list
+# of disabled algorithms will also be checked during certification path
+# building and validation, including algorithms used in certificates, as
+# well as revocation information such as CRLs and signed OCSP Responses.
+# This is in addition to the jdk.certpath.disabledAlgorithms property above.
+#
+# See the specification of "jdk.certpath.disabledAlgorithms" for the
+# syntax of the disabled algorithm string.
+#
+# Note: This property is currently used by Oracle's JSSE implementation.
+# It is not guaranteed to be examined and used by other implementations.
+#
+# Example:
+# jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048
+
--- a/jdk/src/share/native/common/check_code.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/common/check_code.c Tue Jan 28 14:57:41 2014 -0800
@@ -90,6 +90,41 @@
#include "classfile_constants.h"
#include "opcodes.in_out"
+/* On AIX malloc(0) and calloc(0, ...) return a NULL pointer, which is legal,
+ * but the code here does not handles it. So we wrap the methods and return non-NULL
+ * pointers even if we allocate 0 bytes.
+ */
+#ifdef _AIX
+static int aix_dummy;
+static void* aix_malloc(size_t len) {
+ if (len == 0) {
+ return &aix_dummy;
+ }
+ return malloc(len);
+}
+
+static void* aix_calloc(size_t n, size_t size) {
+ if (n == 0) {
+ return &aix_dummy;
+ }
+ return calloc(n, size);
+}
+
+static void aix_free(void* p) {
+ if (p == &aix_dummy) {
+ return;
+ }
+ free(p);
+}
+
+#undef malloc
+#undef calloc
+#undef free
+#define malloc aix_malloc
+#define calloc aix_calloc
+#define free aix_free
+#endif
+
#ifdef __APPLE__
/* use setjmp/longjmp versions that do not save/restore the signal mask */
#define setjmp _setjmp
--- a/jdk/src/share/native/java/net/net_util.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/java/net/net_util.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -67,7 +67,7 @@
supporting socket APIs are available
*/
IPv6_available = IPv6_supported() & (!preferIPv4Stack);
- initLocalAddrTable ();
+ platformInit();
parseExclusiveBindProperty(env);
return JNI_VERSION_1_2;
--- a/jdk/src/share/native/java/net/net_util.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/java/net/net_util.h Tue Jan 28 14:57:41 2014 -0800
@@ -137,7 +137,7 @@
JNIEXPORT jobject JNICALL
NET_SockaddrToInetAddress(JNIEnv *env, struct sockaddr *him, int *port);
-void initLocalAddrTable ();
+void platformInit();
void parseExclusiveBindProperty(JNIEnv *env);
void
--- a/jdk/src/share/native/java/util/zip/zip_util.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/java/util/zip/zip_util.c Tue Jan 28 14:57:41 2014 -0800
@@ -659,7 +659,10 @@
entries = zip->entries = calloc(total, sizeof(entries[0]));
tablelen = zip->tablelen = ((total/2) | 1); // Odd -> fewer collisions
table = zip->table = malloc(tablelen * sizeof(table[0]));
- if (entries == NULL || table == NULL) goto Catch;
+ /* According to ISO C it is perfectly legal for malloc to return zero
+ * if called with a zero argument. We check this for 'entries' but not
+ * for 'table' because 'tablelen' can't be zero (see computation above). */
+ if ((entries == NULL && total != 0) || table == NULL) goto Catch;
for (j = 0; j < tablelen; j++)
table[j] = ZIP_ENDCHAIN;
--- a/jdk/src/share/native/sun/awt/medialib/mlib_sys.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/sun/awt/medialib/mlib_sys.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -86,10 +86,13 @@
void *__mlib_malloc(mlib_u32 size)
{
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(AIX)
/*
* Currently, all MS C compilers for Win32 platforms default to 8 byte
* alignment. -- from stdlib.h of MS VC++5.0.
+ *
+ * On AIX, the malloc subroutine returns a pointer to space suitably
+ * aligned for the storage of any type of object (see 'man malloc').
*/
return (void *) malloc(size);
#elif defined(MACOSX)
--- a/jdk/src/share/native/sun/awt/medialib/mlib_types.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/sun/awt/medialib/mlib_types.h Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, 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
@@ -57,7 +57,7 @@
typedef float mlib_f32;
typedef double mlib_d64;
-#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__)
+#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__) || defined(_AIX)
#include <stdint.h>
#include <stddef.h>
--- a/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/sun/management/DiagnosticCommandImpl.c Tue Jan 28 14:57:41 2014 -0800
@@ -23,6 +23,7 @@
* questions.
*/
+#include <stdlib.h>
#include <jni.h>
#include "management.h"
#include "sun_management_DiagnosticCommandImpl.h"
@@ -56,7 +57,8 @@
jobject resultList;
dcmd_arg_info_array = (dcmdArgInfo*) malloc(num_arg * sizeof(dcmdArgInfo));
- if (dcmd_arg_info_array == NULL) {
+ /* According to ISO C it is perfectly legal for malloc to return zero if called with a zero argument */
+ if (dcmd_arg_info_array == NULL && num_arg != 0) {
return NULL;
}
jmm_interface->GetDiagnosticCommandArgumentsInfo(env, command,
@@ -117,19 +119,22 @@
return NULL;
}
num_commands = (*env)->GetArrayLength(env, commands);
- dcmd_info_array = (dcmdInfo*) malloc(num_commands *
- sizeof(dcmdInfo));
+ dcmdInfoCls = (*env)->FindClass(env,
+ "sun/management/DiagnosticCommandInfo");
+ result = (*env)->NewObjectArray(env, num_commands, dcmdInfoCls, NULL);
+ if (result == NULL) {
+ JNU_ThrowOutOfMemoryError(env, 0);
+ }
+ if (num_commands == 0) {
+ /* Handle the 'zero commands' case specially to avoid calling 'malloc()' */
+ /* with a zero argument because that may legally return a NULL pointer. */
+ return result;
+ }
+ dcmd_info_array = (dcmdInfo*) malloc(num_commands * sizeof(dcmdInfo));
if (dcmd_info_array == NULL) {
JNU_ThrowOutOfMemoryError(env, NULL);
}
jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array);
- dcmdInfoCls = (*env)->FindClass(env,
- "sun/management/DiagnosticCommandInfo");
- result = (*env)->NewObjectArray(env, num_commands, dcmdInfoCls, NULL);
- if (result == NULL) {
- free(dcmd_info_array);
- JNU_ThrowOutOfMemoryError(env, 0);
- }
for (i=0; i<num_commands; i++) {
args = getDiagnosticCommandArgumentInfoArray(env,
(*env)->GetObjectArrayElement(env,commands,i),
--- a/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h Tue Jan 28 14:57:41 2014 -0800
@@ -65,6 +65,13 @@
typedef enum boolean { B_FALSE, B_TRUE } boolean_t;
#endif /* _ALLBSD_SOURCE */
+#ifdef AIX
+#define B_FALSE FALSE
+#define B_TRUE TRUE
+typedef unsigned char uint8_t;
+typedef unsigned long ulong_t;
+#endif /* AIX */
+
#ifdef _WIN32
typedef unsigned char uint8_t;
typedef unsigned long ulong_t;
--- a/jdk/src/share/transport/socket/socketTransport.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/share/transport/socket/socketTransport.c Tue Jan 28 14:57:41 2014 -0800
@@ -506,6 +506,19 @@
if (fd < 0) {
return JDWPTRANSPORT_ERROR_NONE;
}
+#ifdef _AIX
+ /*
+ AIX needs a workaround for I/O cancellation, see:
+ http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm
+ ...
+ The close subroutine is blocked until all subroutines which use the file
+ descriptor return to usr space. For example, when a thread is calling close
+ and another thread is calling select with the same file descriptor, the
+ close subroutine does not return until the select call returns.
+ ...
+ */
+ shutdown(fd, 2);
+#endif
if (dbgsysSocketClose(fd) < 0) {
/*
* close failed - it's pointless to restore socketFD here because
--- a/jdk/src/solaris/back/exec_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/back/exec_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,8 @@
#include "sys.h"
#include "util.h"
-#if defined(LINUX) || defined(_ALLBSD_SOURCE)
- /* Linux */
+#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX)
+ /* Linux, BSD, AIX */
#define FORK() fork()
#else
/* Solaris (make sure we always get the POSIX-specified behavior) */
--- a/jdk/src/solaris/bin/java_md_solinux.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/bin/java_md_solinux.c Tue Jan 28 14:57:41 2014 -0800
@@ -41,7 +41,11 @@
#define JVM_DLL "libjvm.so"
#define JAVA_DLL "libjava.so"
+#ifdef AIX
+#define LD_LIBRARY_PATH "LIBPATH"
+#else
#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
+#endif
/* help jettison the LD_LIBRARY_PATH settings in the future */
#ifndef SETENV_REQUIRED
@@ -248,6 +252,11 @@
char *dmllp = NULL;
char *p; /* a utility pointer */
+#ifdef AIX
+ /* We always have to set the LIBPATH on AIX because ld doesn't support $ORIGIN. */
+ return JNI_TRUE;
+#endif
+
llp = getenv("LD_LIBRARY_PATH");
#ifdef __solaris__
dmllp = getenv("LD_LIBRARY_PATH_64");
@@ -506,7 +515,7 @@
* If not on Solaris, assume only a single LD_LIBRARY_PATH
* variable.
*/
- runpath = getenv("LD_LIBRARY_PATH");
+ runpath = getenv(LD_LIBRARY_PATH);
#endif /* __solaris__ */
/* runpath contains current effective LD_LIBRARY_PATH setting */
@@ -514,8 +523,12 @@
jvmpath = JLI_StringDup(jvmpath);
new_runpath = JLI_MemAlloc(((runpath != NULL) ? JLI_StrLen(runpath) : 0) +
2 * JLI_StrLen(jrepath) + 2 * JLI_StrLen(arch) +
+#ifdef AIX
+ /* On AIX we additionally need 'jli' in the path because ld doesn't support $ORIGIN. */
+ JLI_StrLen(jrepath) + JLI_StrLen(arch) + JLI_StrLen("/lib//jli:") +
+#endif
JLI_StrLen(jvmpath) + 52);
- newpath = new_runpath + JLI_StrLen("LD_LIBRARY_PATH=");
+ newpath = new_runpath + JLI_StrLen(LD_LIBRARY_PATH "=");
/*
@@ -527,12 +540,18 @@
if (lastslash)
*lastslash = '\0';
- sprintf(new_runpath, "LD_LIBRARY_PATH="
+ sprintf(new_runpath, LD_LIBRARY_PATH "="
"%s:"
"%s/lib/%s:"
+#ifdef AIX
+ "%s/lib/%s/jli:" /* Needed on AIX because ld doesn't support $ORIGIN. */
+#endif
"%s/../lib/%s",
jvmpath,
jrepath, arch,
+#ifdef AIX
+ jrepath, arch,
+#endif
jrepath, arch
);
@@ -861,7 +880,7 @@
int
ContinueInNewThread0(int (JNICALL *continuation)(void *), jlong stack_size, void * args) {
int rslt;
-#ifdef __linux__
+#ifndef __solaris__
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
@@ -886,7 +905,7 @@
}
pthread_attr_destroy(&attr);
-#else /* ! __linux__ */
+#else /* __solaris__ */
thread_t tid;
long flags = 0;
if (thr_create(NULL, stack_size, (void *(*)(void *))continuation, args, flags, &tid) == 0) {
@@ -897,7 +916,7 @@
/* See above. Continue in current thread if thr_create() failed */
rslt = continuation(args);
}
-#endif /* __linux__ */
+#endif /* !__solaris__ */
return rslt;
}
--- a/jdk/src/solaris/bin/java_md_solinux.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/bin/java_md_solinux.h Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,23 +45,19 @@
* A collection of useful strings. One should think of these as #define
* entries, but actual strings can be more efficient (with many compilers).
*/
-#ifdef __linux__
+#ifdef __solaris__
+static const char *system_dir = "/usr/jdk";
+static const char *user_dir = "/jdk";
+#else /* !__solaris__, i.e. Linux, AIX,.. */
static const char *system_dir = "/usr/java";
static const char *user_dir = "/java";
-#else /* Solaris */
-static const char *system_dir = "/usr/jdk";
-static const char *user_dir = "/jdk";
#endif
#include <dlfcn.h>
-#ifdef __linux__
+#ifdef __solaris__
+#include <thread.h>
+#else
#include <pthread.h>
-#else
-#include <thread.h>
#endif
-#define JVM_DLL "libjvm.so"
-#define JAVA_DLL "libjava.so"
-#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
-
#endif /* JAVA_MD_SOLINUX_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/solaris/bin/ppc64/jvm.cfg Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,33 @@
+# Copyright (c) 2011, 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.
+#
+# List of JVMs that can be used as an option to java, javac, etc.
+# Order is important -- first in this list is the default JVM.
+# NOTE that this both this file and its format are UNSUPPORTED and
+# WILL GO AWAY in a future release.
+#
+# You may also select a JVM in an arbitrary location with the
+# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
+# and may not be available in a future release.
+#
+-server KNOWN
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/solaris/classes/java/lang/UNIXProcess.java.aix Tue Jan 28 14:57:41 2014 -0800
@@ -0,0 +1,504 @@
+/*
+ * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.lang;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.security.AccessController;
+import static java.security.AccessController.doPrivileged;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * java.lang.Process subclass in the UNIX environment.
+ *
+ * @author Mario Wolczko and Ross Knippel.
+ * @author Konstantin Kladko (ported to Linux)
+ * @author Martin Buchholz
+ * @author Volker Simonis (ported to AIX)
+ */
+final class UNIXProcess extends Process {
+ private static final sun.misc.JavaIOFileDescriptorAccess fdAccess
+ = sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess();
+
+ private final int pid;
+ private int exitcode;
+ private boolean hasExited;
+
+ private /* final */ OutputStream stdin;
+ private /* final */ InputStream stdout;
+ private /* final */ InputStream stderr;
+
+ private static enum LaunchMechanism {
+ FORK(1),
+ POSIX_SPAWN(2);
+
+ private int value;
+ LaunchMechanism(int x) {value = x;}
+ };
+
+ /* On AIX, the default is to spawn */
+ private static final LaunchMechanism launchMechanism;
+ private static byte[] helperpath;
+
+ private static byte[] toCString(String s) {
+ if (s == null)
+ return null;
+ byte[] bytes = s.getBytes();
+ byte[] result = new byte[bytes.length + 1];
+ System.arraycopy(bytes, 0,
+ result, 0,
+ bytes.length);
+ result[result.length-1] = (byte)0;
+ return result;
+ }
+
+ static {
+ launchMechanism = AccessController.doPrivileged(
+ new PrivilegedAction<LaunchMechanism>()
+ {
+ public LaunchMechanism run() {
+ String javahome = System.getProperty("java.home");
+ String osArch = System.getProperty("os.arch");
+
+ helperpath = toCString(javahome + "/lib/" + osArch + "/jspawnhelper");
+ String s = System.getProperty(
+ "jdk.lang.Process.launchMechanism", "posix_spawn");
+
+ try {
+ return LaunchMechanism.valueOf(s.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ throw new Error(s + " is not a supported " +
+ "process launch mechanism on this platform.");
+ }
+ }
+ });
+ }
+
+ /* this is for the reaping thread */
+ private native int waitForProcessExit(int pid);
+
+ /**
+ * Create a process. Depending on the mode flag, this is done by
+ * one of the following mechanisms.
+ * - fork(2) and exec(2)
+ * - clone(2) and exec(2)
+ * - vfork(2) and exec(2)
+ *
+ * @param fds an array of three file descriptors.
+ * Indexes 0, 1, and 2 correspond to standard input,
+ * standard output and standard error, respectively. On
+ * input, a value of -1 means to create a pipe to connect
+ * child and parent processes. On output, a value which
+ * is not -1 is the parent pipe fd corresponding to the
+ * pipe which has been created. An element of this array
+ * is -1 on input if and only if it is <em>not</em> -1 on
+ * output.
+ * @return the pid of the subprocess
+ */
+ private native int forkAndExec(int mode, byte[] helperpath,
+ byte[] prog,
+ byte[] argBlock, int argc,
+ byte[] envBlock, int envc,
+ byte[] dir,
+ int[] fds,
+ boolean redirectErrorStream)
+ throws IOException;
+
+ /**
+ * The thread factory used to create "process reaper" daemon threads.
+ */
+ private static class ProcessReaperThreadFactory implements ThreadFactory {
+ private final static ThreadGroup group = getRootThreadGroup();
+
+ private static ThreadGroup getRootThreadGroup() {
+ return doPrivileged(new PrivilegedAction<ThreadGroup> () {
+ public ThreadGroup run() {
+ ThreadGroup root = Thread.currentThread().getThreadGroup();
+ while (root.getParent() != null)
+ root = root.getParent();
+ return root;
+ }});
+ }
+
+ public Thread newThread(Runnable grimReaper) {
+ // Our thread stack requirement is quite modest.
+ Thread t = new Thread(group, grimReaper, "process reaper", 32768);
+ t.setDaemon(true);
+ // A small attempt (probably futile) to avoid priority inversion
+ t.setPriority(Thread.MAX_PRIORITY);
+ return t;
+ }
+ }
+
+ /**
+ * The thread pool of "process reaper" daemon threads.
+ */
+ private static final Executor processReaperExecutor =
+ doPrivileged(new PrivilegedAction<Executor>() {
+ public Executor run() {
+ return Executors.newCachedThreadPool
+ (new ProcessReaperThreadFactory());
+ }});
+
+ UNIXProcess(final byte[] prog,
+ final byte[] argBlock, final int argc,
+ final byte[] envBlock, final int envc,
+ final byte[] dir,
+ final int[] fds,
+ final boolean redirectErrorStream)
+ throws IOException {
+
+ pid = forkAndExec(launchMechanism.value,
+ helperpath,
+ prog,
+ argBlock, argc,
+ envBlock, envc,
+ dir,
+ fds,
+ redirectErrorStream);
+
+ try {
+ doPrivileged(new PrivilegedExceptionAction<Void>() {
+ public Void run() throws IOException {
+ initStreams(fds);
+ return null;
+ }});
+ } catch (PrivilegedActionException ex) {
+ throw (IOException) ex.getException();
+ }
+ }
+
+ static FileDescriptor newFileDescriptor(int fd) {
+ FileDescriptor fileDescriptor = new FileDescriptor();
+ fdAccess.set(fileDescriptor, fd);
+ return fileDescriptor;
+ }
+
+ void initStreams(int[] fds) throws IOException {
+ stdin = (fds[0] == -1) ?
+ ProcessBuilder.NullOutputStream.INSTANCE :
+ new ProcessPipeOutputStream(fds[0]);
+
+ stdout = (fds[1] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ProcessPipeInputStream(fds[1]);
+
+ stderr = (fds[2] == -1) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ProcessPipeInputStream(fds[2]);
+
+ processReaperExecutor.execute(new Runnable() {
+ public void run() {
+ int exitcode = waitForProcessExit(pid);
+ UNIXProcess.this.processExited(exitcode);
+ }});
+ }
+
+ void processExited(int exitcode) {
+ synchronized (this) {
+ this.exitcode = exitcode;
+ hasExited = true;
+ notifyAll();
+ }
+
+ if (stdout instanceof ProcessPipeInputStream)
+ ((ProcessPipeInputStream) stdout).processExited();
+
+ if (stderr instanceof ProcessPipeInputStream)
+ ((ProcessPipeInputStream) stderr).processExited();
+
+ if (stdin instanceof ProcessPipeOutputStream)
+ ((ProcessPipeOutputStream) stdin).processExited();
+ }
+
+ public OutputStream getOutputStream() {
+ return stdin;
+ }
+
+ public InputStream getInputStream() {
+ return stdout;
+ }
+
+ public InputStream getErrorStream() {
+ return stderr;
+ }
+
+ public synchronized int waitFor() throws InterruptedException {
+ while (!hasExited) {
+ wait();
+ }
+ return exitcode;
+ }
+
+ @Override
+ public synchronized boolean waitFor(long timeout, TimeUnit unit)
+ throws InterruptedException
+ {
+ if (hasExited) return true;
+ if (timeout <= 0) return false;
+
+ long timeoutAsNanos = unit.toNanos(timeout);
+ long startTime = System.nanoTime();
+ long rem = timeoutAsNanos;
+
+ while (!hasExited && (rem > 0)) {
+ wait(Math.max(TimeUnit.NANOSECONDS.toMillis(rem), 1));
+ rem = timeoutAsNanos - (System.nanoTime() - startTime);
+ }
+ return hasExited;
+ }
+
+ public synchronized int exitValue() {
+ if (!hasExited) {
+ throw new IllegalThreadStateException("process hasn't exited");
+ }
+ return exitcode;
+ }
+
+ private static native void destroyProcess(int pid, boolean force);
+ private void destroy(boolean force) {
+ // There is a risk that pid will be recycled, causing us to
+ // kill the wrong process! So we only terminate processes
+ // that appear to still be running. Even with this check,
+ // there is an unavoidable race condition here, but the window
+ // is very small, and OSes try hard to not recycle pids too
+ // soon, so this is quite safe.
+ synchronized (this) {
+ if (!hasExited)
+ destroyProcess(pid, force);
+ }
+ try { stdin.close(); } catch (IOException ignored) {}
+ try { stdout.close(); } catch (IOException ignored) {}
+ try { stderr.close(); } catch (IOException ignored) {}
+ }
+
+ public void destroy() {
+ destroy(false);
+ }
+
+ @Override
+ public Process destroyForcibly() {
+ destroy(true);
+ return this;
+ }
+
+ @Override
+ public synchronized boolean isAlive() {
+ return !hasExited;
+ }
+
+ private static native void init();
+
+ static {
+ init();
+ }
+
+ /**
+ * A buffered input stream for a subprocess pipe file descriptor
+ * that allows the underlying file descriptor to be reclaimed when
+ * the process exits, via the processExited hook.
+ *
+ * This is tricky because we do not want the user-level InputStream to be
+ * closed until the user invokes close(), and we need to continue to be
+ * able to read any buffered data lingering in the OS pipe buffer.
+ *
+ * On AIX this is especially tricky, because the 'close()' system call
+ * will block if another thread is at the same time blocked in a file
+ * operation (e.g. 'read()') on the same file descriptor. We therefore
+ * combine this 'ProcessPipeInputStream' with the DeferredCloseInputStream
+ * approach used on Solaris (see "UNIXProcess.java.solaris"). This means
+ * that every potentially blocking operation on the file descriptor
+ * increments a counter before it is executed and decrements it once it
+ * finishes. The 'close()' operation will only be executed if there are
+ * no pending operations. Otherwise it is deferred after the last pending
+ * operation has finished.
+ *
+ */
+ static class ProcessPipeInputStream extends BufferedInputStream {
+ private final Object closeLock = new Object();
+ private int useCount = 0;
+ private boolean closePending = false;
+
+ ProcessPipeInputStream(int fd) {
+ super(new FileInputStream(newFileDescriptor(fd)));
+ }
+
+ private InputStream drainInputStream(InputStream in)
+ throws IOException {
+ int n = 0;
+ int j;
+ byte[] a = null;
+ synchronized (closeLock) {
+ if (buf == null) // asynchronous close()?
+ return null; // discard
+ j = in.available();
+ }
+ while (j > 0) {
+ a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
+ synchronized (closeLock) {
+ if (buf == null) // asynchronous close()?
+ return null; // discard
+ n += in.read(a, n, j);
+ j = in.available();
+ }
+ }
+ return (a == null) ?
+ ProcessBuilder.NullInputStream.INSTANCE :
+ new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
+ }
+
+ /** Called by the process reaper thread when the process exits. */
+ synchronized void processExited() {
+ try {
+ InputStream in = this.in;
+ if (in != null) {
+ InputStream stragglers = drainInputStream(in);
+ in.close();
+ this.in = stragglers;
+ }
+ } catch (IOException ignored) { }
+ }
+
+ private void raise() {
+ synchronized (closeLock) {
+ useCount++;
+ }
+ }
+
+ private void lower() throws IOException {
+ synchronized (closeLock) {
+ useCount--;
+ if (useCount == 0 && closePending) {
+ closePending = false;
+ super.close();
+ }
+ }
+ }
+
+ @Override
+ public int read() throws IOException {
+ raise();
+ try {
+ return super.read();
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException {
+ raise();
+ try {
+ return super.read(b);
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException {
+ raise();
+ try {
+ return super.read(b, off, len);
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public long skip(long n) throws IOException {
+ raise();
+ try {
+ return super.skip(n);
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public int available() throws IOException {
+ raise();
+ try {
+ return super.available();
+ } finally {
+ lower();
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ // BufferedInputStream#close() is not synchronized unlike most other methods.
+ // Synchronizing helps avoid racing with drainInputStream().
+ synchronized (closeLock) {
+ if (useCount == 0) {
+ super.close();
+ }
+ else {
+ closePending = true;
+ }
+ }
+ }
+ }
+
+ /**
+ * A buffered output stream for a subprocess pipe file descriptor
+ * that allows the underlying file descriptor to be reclaimed when
+ * the process exits, via the processExited hook.
+ */
+ static class ProcessPipeOutputStream extends BufferedOutputStream {
+ ProcessPipeOutputStream(int fd) {
+ super(new FileOutputStream(newFileDescriptor(fd)));
+ }
+
+ /** Called by the process reaper thread when the process exits. */
+ synchronized void processExited() {
+ OutputStream out = this.out;
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException ignored) {
+ // We know of no reason to get an IOException, but if
+ // we do, there's nothing else to do but carry on.
+ }
+ this.out = ProcessBuilder.NullOutputStream.INSTANCE;
+ }
+ }
+ }
+}
--- a/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java Tue Jan 28 14:57:41 2014 -0800
@@ -68,6 +68,8 @@
return createProvider("sun.nio.ch.LinuxAsynchronousChannelProvider");
if (osname.contains("OS X"))
return createProvider("sun.nio.ch.BsdAsynchronousChannelProvider");
+ if (osname.equals("AIX"))
+ return createProvider("sun.nio.ch.AixAsynchronousChannelProvider");
throw new InternalError("platform not recognized");
}
}
--- a/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/EPollPort.java Tue Jan 28 14:57:41 2014 -0800
@@ -93,7 +93,7 @@
try {
socketpair(sv);
// register one end with epoll
- epollCtl(epfd, EPOLL_CTL_ADD, sv[0], POLLIN);
+ epollCtl(epfd, EPOLL_CTL_ADD, sv[0], Net.POLLIN);
} catch (IOException x) {
close0(epfd);
throw x;
--- a/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/KQueuePort.java Tue Jan 28 14:57:41 2014 -0800
@@ -172,9 +172,9 @@
// TBD: Measure cost of EV_ONESHOT vs. EV_CLEAR, either will do here.
int err = 0;
int flags = (EV_ADD|EV_ONESHOT);
- if ((events & Port.POLLIN) > 0)
+ if ((events & Net.POLLIN) > 0)
err = keventRegister(kqfd, fd, EVFILT_READ, flags);
- if (err == 0 && (events & Port.POLLOUT) > 0)
+ if (err == 0 && (events & Net.POLLOUT) > 0)
err = keventRegister(kqfd, fd, EVFILT_WRITE, flags);
if (err != 0)
throw new InternalError("kevent failed: " + err); // should not happen
@@ -227,9 +227,9 @@
int filter = getFilter(keventAddress);
int events = 0;
if (filter == EVFILT_READ)
- events = Port.POLLIN;
+ events = Net.POLLIN;
else if (filter == EVFILT_WRITE)
- events = Port.POLLOUT;
+ events = Net.POLLOUT;
Event ev = new Event(channel, events);
--- a/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/PollArrayWrapper.java Tue Jan 28 14:57:41 2014 -0800
@@ -43,8 +43,6 @@
public class PollArrayWrapper extends AbstractPollArrayWrapper {
- public static final short POLLCONN = POLLOUT;
-
// File descriptor to write for interrupt
int interruptFD;
@@ -58,7 +56,7 @@
void initInterrupt(int fd0, int fd1) {
interruptFD = fd1;
putDescriptor(0, fd0);
- putEventOps(0, POLLIN);
+ putEventOps(0, Net.POLLIN);
putReventOps(0, 0);
}
--- a/jdk/src/solaris/classes/sun/nio/ch/Port.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/Port.java Tue Jan 28 14:57:41 2014 -0800
@@ -40,10 +40,6 @@
*/
abstract class Port extends AsynchronousChannelGroupImpl {
- static final short POLLIN = 0x0001;
- static final short POLLOUT = 0x0004;
- static final short POLLERR = 0x0008;
- static final short POLLHUP = 0x0010;
/**
* Implemented by clients registered with this port.
@@ -77,11 +73,21 @@
}
/**
+ * Callback method for implementations that need special handling when fd is
+ * removed (currently only needed in the AIX-Port - see AixPollPort.java).
+ */
+ protected void preUnregister(int fd) {
+ // Do nothing by default.
+ }
+
+ /**
* Unregister channel identified by its file descriptor
*/
final void unregister(int fd) {
boolean checkForShutdown = false;
+ preUnregister(fd);
+
fdToChannelLock.writeLock().lock();
try {
fdToChannel.remove(Integer.valueOf(fd));
--- a/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SinkChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -118,17 +118,16 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0)
+ if ((ops & Net.POLLNVAL) != 0)
throw new Error("POLLNVAL detected");
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
+ if (((ops & Net.POLLOUT) != 0) &&
((intOps & SelectionKey.OP_WRITE) != 0))
newOps |= SelectionKey.OP_WRITE;
@@ -146,7 +145,7 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
if (ops == SelectionKey.OP_WRITE)
- ops = PollArrayWrapper.POLLOUT;
+ ops = Net.POLLOUT;
sk.selector.putEventOps(sk, ops);
}
--- a/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SourceChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -118,17 +118,16 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0)
+ if ((ops & Net.POLLNVAL) != 0)
throw new Error("POLLNVAL detected");
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_READ) != 0))
newOps |= SelectionKey.OP_READ;
@@ -146,7 +145,7 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
if (ops == SelectionKey.OP_READ)
- ops = PollArrayWrapper.POLLIN;
+ ops = Net.POLLIN;
sk.selector.putEventOps(sk, ops);
}
--- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -148,7 +148,7 @@
synchronized (updateLock) {
acceptPending = true;
}
- port.startPoll(fdVal, Port.POLLIN);
+ port.startPoll(fdVal, Net.POLLIN);
return;
}
@@ -299,7 +299,7 @@
}
// register for connections
- port.startPoll(fdVal, Port.POLLIN);
+ port.startPoll(fdVal, Net.POLLIN);
return result;
}
} catch (Throwable x) {
--- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -142,9 +142,9 @@
assert Thread.holdsLock(updateLock);
int events = 0;
if (readPending)
- events |= Port.POLLIN;
+ events |= Net.POLLIN;
if (connectPending || writePending)
- events |= Port.POLLOUT;
+ events |= Net.POLLOUT;
if (events != 0)
port.startPoll(fdVal, events);
}
@@ -204,9 +204,9 @@
*/
@Override
public void onEvent(int events, boolean mayInvokeDirect) {
- boolean readable = (events & Port.POLLIN) > 0;
- boolean writable = (events & Port.POLLOUT) > 0;
- if ((events & (Port.POLLERR | Port.POLLHUP)) > 0) {
+ boolean readable = (events & Net.POLLIN) > 0;
+ boolean writable = (events & Net.POLLOUT) > 0;
+ if ((events & (Net.POLLERR | Net.POLLHUP)) > 0) {
readable = true;
writable = true;
}
--- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -593,15 +593,14 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
+ if ((ops & Net.POLLNVAL) != 0) {
/* This should only happen if this channel is pre-closed while a
* selection operation is in progress
* ## Throw an error if this channel has not been pre-closed */
return false;
}
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
/* No need to poll again in checkConnect,
@@ -610,19 +609,19 @@
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_READ) != 0) &&
isConnected())
newOps |= SelectionKey.OP_READ;
- if (((ops & PollArrayWrapper.POLLCONN) != 0) &&
+ if (((ops & Net.POLLCONN) != 0) &&
((intOps & SelectionKey.OP_CONNECT) != 0) &&
((state == ChannelState.UNCONNECTED) || (state == ChannelState.PENDING))) {
newOps |= SelectionKey.OP_CONNECT;
readyToConnect = true;
}
- if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
+ if (((ops & Net.POLLOUT) != 0) &&
((intOps & SelectionKey.OP_WRITE) != 0) &&
isConnected())
newOps |= SelectionKey.OP_WRITE;
@@ -646,11 +645,11 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
int newOps = 0;
if ((ops & SelectionKey.OP_READ) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
if ((ops & SelectionKey.OP_WRITE) != 0)
- newOps |= PollArrayWrapper.POLLOUT;
+ newOps |= Net.POLLOUT;
if ((ops & SelectionKey.OP_CONNECT) != 0)
- newOps |= PollArrayWrapper.POLLCONN;
+ newOps |= Net.POLLCONN;
sk.selector.putEventOps(sk, newOps);
}
--- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -321,25 +321,24 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
+ if ((ops & Net.POLLNVAL) != 0) {
/* This should only happen if this channel is pre-closed while a
* selection operation is in progress
* ## Throw an error if this channel has not been pre-closed */
return false;
}
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_READ) != 0))
newOps |= SelectionKey.OP_READ;
- if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
+ if (((ops & Net.POLLOUT) != 0) &&
((intOps & SelectionKey.OP_WRITE) != 0))
newOps |= SelectionKey.OP_WRITE;
@@ -361,9 +360,9 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
int newOps = 0;
if ((ops & SelectionKey.OP_READ) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
if ((ops & SelectionKey.OP_WRITE) != 0)
- newOps |= PollArrayWrapper.POLLOUT;
+ newOps |= Net.POLLOUT;
sk.selector.putEventOps(sk, newOps);
}
--- a/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -314,21 +314,20 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
+ if ((ops & Net.POLLNVAL) != 0) {
/* This should only happen if this channel is pre-closed while a
* selection operation is in progress
* ## Throw an error if this channel has not been pre-closed */
return false;
}
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_ACCEPT) != 0))
newOps |= SelectionKey.OP_ACCEPT;
@@ -352,7 +351,7 @@
/* Translate ops */
if ((ops & SelectionKey.OP_ACCEPT) != 0)
- newOps |= PollArrayWrapper.POLLIN;
+ newOps |= Net.POLLIN;
/* Place ops into pollfd array */
sk.selector.putEventOps(sk, newOps);
--- a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java Tue Jan 28 14:57:41 2014 -0800
@@ -63,6 +63,8 @@
return createProvider("sun.nio.fs.LinuxFileSystemProvider");
if (osname.contains("OS X"))
return createProvider("sun.nio.fs.MacOSXFileSystemProvider");
+ if (osname.equals("AIX"))
+ return createProvider("sun.nio.fs.AixFileSystemProvider");
throw new AssertionError("Platform not recognized");
}
}
--- a/jdk/src/solaris/classes/sun/print/UnixPrintService.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/print/UnixPrintService.java Tue Jan 28 14:57:41 2014 -0800
@@ -28,6 +28,7 @@
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.Locale;
import javax.print.DocFlavor;
@@ -273,11 +274,58 @@
return PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS ;
}
+ // Filter the list of possible AIX Printers and remove header lines
+ // and extra lines which have been added for remote printers.
+ // 'protected' because this method is also used from UnixPrintServiceLookup.
+ protected static String[] filterPrinterNamesAIX(String[] posPrinters) {
+ ArrayList printers = new ArrayList();
+ String [] splitPart;
+
+ for(int i = 0; i < posPrinters.length; i++) {
+ // Remove the header lines
+ if (posPrinters[i].startsWith("---") ||
+ posPrinters[i].startsWith("Queue") ||
+ posPrinters[i].equals("")) continue;
+
+ // Check if there is a ":" in the end of the first colomn.
+ // This means that it is not a valid printer definition.
+ splitPart = posPrinters[i].split(" ");
+ if(splitPart.length >= 1 && !splitPart[0].trim().endsWith(":")) {
+ printers.add(posPrinters[i]);
+ }
+ }
+
+ return (String[])printers.toArray(new String[printers.size()]);
+ }
+
+ private PrinterIsAcceptingJobs getPrinterIsAcceptingJobsAIX() {
+ // On AIX there should not be a blank after '-a'.
+ String command = "/usr/bin/lpstat -a" + printer;
+ String results[]= UnixPrintServiceLookup.execCmd(command);
+
+ // Remove headers and bogus entries added by remote printers.
+ results = filterPrinterNamesAIX(results);
+
+ if (results != null && results.length > 0) {
+ for (int i = 0; i < results.length; i++) {
+ if (results[i].contains("READY") ||
+ results[i].contains("RUNNING")) {
+ return PrinterIsAcceptingJobs.ACCEPTING_JOBS;
+ }
+ }
+ }
+
+ return PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS;
+
+ }
+
private PrinterIsAcceptingJobs getPrinterIsAcceptingJobs() {
if (UnixPrintServiceLookup.isSysV()) {
return getPrinterIsAcceptingJobsSysV();
} else if (UnixPrintServiceLookup.isBSD()) {
return getPrinterIsAcceptingJobsBSD();
+ } else if (UnixPrintServiceLookup.isAIX()) {
+ return getPrinterIsAcceptingJobsAIX();
} else {
return PrinterIsAcceptingJobs.ACCEPTING_JOBS;
}
@@ -345,11 +393,32 @@
return new QueuedJobCount(qlen);
}
+ private QueuedJobCount getQueuedJobCountAIX() {
+ // On AIX there should not be a blank after '-a'.
+ String command = "/usr/bin/lpstat -a" + printer;
+ String results[]= UnixPrintServiceLookup.execCmd(command);
+
+ // Remove headers and bogus entries added by remote printers.
+ results = filterPrinterNamesAIX(results);
+
+ int qlen = 0;
+ if (results != null && results.length > 0){
+ for (int i = 0; i < results.length; i++) {
+ if (results[i].contains("QUEUED")){
+ qlen ++;
+ }
+ }
+ }
+ return new QueuedJobCount(qlen);
+ }
+
private QueuedJobCount getQueuedJobCount() {
if (UnixPrintServiceLookup.isSysV()) {
return getQueuedJobCountSysV();
} else if (UnixPrintServiceLookup.isBSD()) {
return getQueuedJobCountBSD();
+ } else if (UnixPrintServiceLookup.isAIX()) {
+ return getQueuedJobCountAIX();
} else {
return new QueuedJobCount(0);
}
@@ -369,6 +438,13 @@
return attrs;
}
+ private PrintServiceAttributeSet getAIXServiceAttributes() {
+ PrintServiceAttributeSet attrs = new HashPrintServiceAttributeSet();
+ attrs.add(getQueuedJobCountAIX());
+ attrs.add(getPrinterIsAcceptingJobsAIX());
+ return attrs;
+ }
+
private boolean isSupportedCopies(Copies copies) {
int numCopies = copies.getValue();
return (numCopies > 0 && numCopies < MAXCOPIES);
@@ -394,6 +470,8 @@
private PrintServiceAttributeSet getDynamicAttributes() {
if (UnixPrintServiceLookup.isSysV()) {
return getSysVServiceAttributes();
+ } else if (UnixPrintServiceLookup.isAIX()) {
+ return getAIXServiceAttributes();
} else {
return getBSDServiceAttributes();
}
--- a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java Tue Jan 28 14:57:41 2014 -0800
@@ -78,6 +78,19 @@
static String osname;
+ // List of commands used to deal with the printer queues on AIX
+ String[] lpNameComAix = {
+ "/usr/bin/lsallq",
+ "/usr/bin/lpstat -W -p|/usr/bin/expand|/usr/bin/cut -f1 -d' '",
+ "/usr/bin/lpstat -W -d|/usr/bin/expand|/usr/bin/cut -f1 -d' '",
+ "/usr/bin/lpstat -W -v"
+ };
+ private static final int aix_lsallq = 0;
+ private static final int aix_lpstat_p = 1;
+ private static final int aix_lpstat_d = 2;
+ private static final int aix_lpstat_v = 3;
+ private static int aix_defaultPrinterEnumeration = aix_lsallq;
+
static {
/* The system property "sun.java2d.print.polling"
* can be used to force the printing code to poll or not poll
@@ -114,6 +127,24 @@
osname = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("os.name"));
+
+ /* The system property "sun.java2d.print.aix.lpstat"
+ * can be used to force the usage of 'lpstat -p' to enumerate all
+ * printer queues. By default we use 'lsallq', because 'lpstat -p' can
+ * take lots of time if thousands of printers are attached to a server.
+ */
+ if (isAIX()) {
+ String aixPrinterEnumerator = java.security.AccessController.doPrivileged(
+ new sun.security.action.GetPropertyAction("sun.java2d.print.aix.lpstat"));
+
+ if (aixPrinterEnumerator != null) {
+ if (aixPrinterEnumerator.equalsIgnoreCase("lpstat")) {
+ aix_defaultPrinterEnumeration = aix_lpstat_p;
+ } else if (aixPrinterEnumerator.equalsIgnoreCase("lsallq")) {
+ aix_defaultPrinterEnumeration = aix_lsallq;
+ }
+ }
+ }
}
static boolean isMac() {
@@ -133,6 +164,10 @@
osname.contains("OS X"));
}
+ static boolean isAIX() {
+ return osname.equals("AIX");
+ }
+
static final int UNINITIALIZED = -1;
static final int BSD_LPD = 0;
static final int BSD_LPD_NG = 1;
@@ -251,6 +286,8 @@
} else {
if (isMac() || isSysV()) {
printers = getAllPrinterNamesSysV();
+ } else if (isAIX()) {
+ printers = getAllPrinterNamesAIX();
} else { //BSD
printers = getAllPrinterNamesBSD();
}
@@ -434,6 +471,8 @@
PrintService printer = null;
if (isMac() || isSysV()) {
printer = getNamedPrinterNameSysV(name);
+ } else if (isAIX()) {
+ printer = getNamedPrinterNameAIX(name);
} else {
printer = getNamedPrinterNameBSD(name);
}
@@ -598,6 +637,8 @@
} else {
if (isMac() || isSysV()) {
defaultPrinter = getDefaultPrinterNameSysV();
+ } else if (isAIX()) {
+ defaultPrinter = getDefaultPrinterNameAIX();
} else {
defaultPrinter = getDefaultPrinterNameBSD();
}
@@ -772,11 +813,49 @@
return (String[])printerNames.toArray(new String[printerNames.size()]);
}
+ private String getDefaultPrinterNameAIX() {
+ String[] names = execCmd(lpNameComAix[aix_lpstat_d]);
+ // Remove headers and bogus entries added by remote printers.
+ names = UnixPrintService.filterPrinterNamesAIX(names);
+ if (names == null || names.length != 1) {
+ // No default printer found
+ return null;
+ } else {
+ return names[0];
+ }
+ }
+
+ private PrintService getNamedPrinterNameAIX(String name) {
+ // On AIX there should be no blank after '-v'.
+ String[] result = execCmd(lpNameComAix[aix_lpstat_v] + name);
+ // Remove headers and bogus entries added by remote printers.
+ result = UnixPrintService.filterPrinterNamesAIX(result);
+ if (result == null || result.length != 1) {
+ return null;
+ } else {
+ return new UnixPrintService(name);
+ }
+ }
+
+ private String[] getAllPrinterNamesAIX() {
+ // Determine all printers of the system.
+ String [] names = execCmd(lpNameComAix[aix_defaultPrinterEnumeration]);
+
+ // Remove headers and bogus entries added by remote printers.
+ names = UnixPrintService.filterPrinterNamesAIX(names);
+
+ ArrayList<String> printerNames = new ArrayList<String>();
+ for ( int i=0; i < names.length; i++) {
+ printerNames.add(names[i]);
+ }
+ return printerNames.toArray(new String[printerNames.size()]);
+ }
+
static String[] execCmd(final String command) {
ArrayList results = null;
try {
final String[] cmd = new String[3];
- if (isSysV()) {
+ if (isSysV() || isAIX()) {
cmd[0] = "/usr/bin/sh";
cmd[1] = "-c";
cmd[2] = "env LC_ALL=C " + command;
--- a/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/demo/jvmti/hprof/hprof_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -42,7 +42,7 @@
#include <sys/stat.h>
#include <fcntl.h>
-#if !defined(LINUX) && !defined(_ALLBSD_SOURCE)
+#if !defined(LINUX) && !defined(_ALLBSD_SOURCE) && !defined(AIX)
#include <procfs.h>
#endif
@@ -65,6 +65,10 @@
#include "jvm_md.h"
#include "hprof.h"
+#ifdef AIX
+#include "porting_aix.h" /* For the 'dladdr' function. */
+#endif
+
int
md_getpid(void)
{
@@ -86,7 +90,7 @@
void
md_init(void)
{
-#if defined(LINUX) || defined(_ALLBSD_SOURCE)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX)
/* No Hi-Res timer option? */
#else
if ( gdata->micro_state_accounting ) {
@@ -253,7 +257,7 @@
jlong
md_get_microsecs(void)
{
-#if defined(LINUX) || defined(_ALLBSD_SOURCE)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX)
return (jlong)(md_timeofday() * (jlong)1000); /* Milli to micro */
#else
return (jlong)(gethrtime()/(hrtime_t)1000); /* Nano seconds to micro seconds */
@@ -271,7 +275,7 @@
jlong
md_get_thread_cpu_timemillis(void)
{
-#if defined(LINUX) || defined(_ALLBSD_SOURCE)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX)
return md_timeofday();
#else
return (jlong)(gethrvtime()/1000); /* Nano seconds to milli seconds */
@@ -286,7 +290,7 @@
Dl_info dlinfo;
libdir[0] = 0;
-#if defined(LINUX) || defined(_ALLBSD_SOURCE)
+#if defined(LINUX) || defined(_ALLBSD_SOURCE) || defined(AIX)
addr = (void*)&Agent_OnLoad;
#else
/* Just using &Agent_OnLoad will get the first external symbol with
@@ -457,3 +461,5 @@
sym = dlsym(handle, name);
return sym;
}
+
+
--- a/jdk/src/solaris/native/common/jdk_util_md.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/common/jdk_util_md.h Tue Jan 28 14:57:41 2014 -0800
@@ -39,6 +39,10 @@
#include <math.h>
#define ISNANF(f) isnanf(f)
#define ISNAND(d) isnan(d)
+#elif defined(_AIX)
+#include <math.h>
+#define ISNANF(f) _isnanf(f)
+#define ISNAND(d) _isnan(d)
#else
#error "missing platform-specific definition here"
#endif
--- a/jdk/src/solaris/native/java/io/io_util_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/io/io_util_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -35,7 +35,7 @@
#include <sys/filio.h>
#endif
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
#include <sys/ioctl.h>
#endif
--- a/jdk/src/solaris/native/java/lang/UNIXProcess_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/lang/UNIXProcess_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
#include <signal.h>
#include <string.h>
-#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
#include <spawn.h>
#endif
@@ -455,7 +455,7 @@
return resultPid;
}
-#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
static pid_t
spawnChild(JNIEnv *env, jobject process, ChildStuff *c, const char *helperpath) {
pid_t resultPid;
@@ -551,7 +551,7 @@
return vforkChild(c);
case MODE_FORK:
return forkChild(c);
-#if defined(__solaris__) || defined(_ALLBSD_SOURCE)
+#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
case MODE_POSIX_SPAWN:
return spawnChild(env, process, c, helperpath);
#endif
--- a/jdk/src/solaris/native/java/lang/childproc.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/lang/childproc.c Tue Jan 28 14:57:41 2014 -0800
@@ -66,6 +66,9 @@
#define FD_DIR "/dev/fd"
#define dirent64 dirent
#define readdir64 readdir
+#elif defined(_AIX)
+/* AIX does not understand '/proc/self' - it requires the real process ID */
+#define FD_DIR aix_fd_dir
#else
#define FD_DIR "/proc/self/fd"
#endif
@@ -87,6 +90,12 @@
close(from_fd); /* for possible use by opendir() */
close(from_fd + 1); /* another one for good luck */
+#if defined(_AIX)
+ /* AIX does not understand '/proc/self' - it requires the real process ID */
+ char aix_fd_dir[32]; /* the pid has at most 19 digits */
+ snprintf(aix_fd_dir, 32, "/proc/%d/fd", getpid());
+#endif
+
if ((dp = opendir(FD_DIR)) == NULL)
return 0;
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, 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
@@ -52,6 +52,13 @@
#include <stdio.h>
#endif
+#if defined(_AIX)
+#include <sys/ioctl.h>
+#include <netinet/in6_var.h>
+#include <sys/ndd_var.h>
+#include <sys/kinfo.h>
+#endif
+
#ifdef __linux__
#define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6"
#endif
@@ -1041,8 +1048,8 @@
}
-/** Linux **/
-#ifdef __linux__
+/** Linux, AIX **/
+#if defined(__linux__) || defined(_AIX)
/* Open socket for further ioct calls, try v4 socket first and
* if it falls return v6 socket
*/
@@ -1080,11 +1087,13 @@
static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
struct ifconf ifc;
struct ifreq *ifreqP;
- char *buf;
+ char *buf = NULL;
int numifs;
unsigned i;
+ int siocgifconfRequest = SIOCGIFCONF;
+#if defined(__linux__)
/* need to do a dummy SIOCGIFCONF to determine the buffer size.
* SIOCGIFCOUNT doesn't work
*/
@@ -1093,11 +1102,21 @@
NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed");
return ifs;
}
+#elif defined(_AIX)
+ ifc.ifc_buf = NULL;
+ if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGSIZIFCONF failed");
+ return ifs;
+ }
+#endif /* __linux__ */
CHECKED_MALLOC3(buf,char *, ifc.ifc_len);
ifc.ifc_buf = buf;
- if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
+#if defined(_AIX)
+ siocgifconfRequest = CSIOCGIFCONF;
+#endif
+ if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) {
NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "ioctl SIOCGIFCONF failed");
(void) free(buf);
return ifs;
@@ -1108,6 +1127,9 @@
*/
ifreqP = ifc.ifc_req;
for (i=0; i<ifc.ifc_len/sizeof (struct ifreq); i++, ifreqP++) {
+#if defined(_AIX)
+ if (ifreqP->ifr_addr.sa_family != AF_INET) continue;
+#endif
/*
* Add to the list
*/
@@ -1135,7 +1157,7 @@
* Enumerates and returns all IPv6 interfaces on Linux
*/
-#ifdef AF_INET6
+#if defined(AF_INET6) && defined(__linux__)
static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
FILE *f;
char addr6[40], devname[21];
@@ -1179,11 +1201,108 @@
#endif
+/*
+ * Enumerates and returns all IPv6 interfaces on AIX
+ */
+
+#if defined(AF_INET6) && defined(_AIX)
+static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
+ struct ifconf ifc;
+ struct ifreq *ifreqP;
+ char *buf;
+ int numifs;
+ unsigned i;
+ unsigned bufsize;
+ char *cp, *cplimit;
+
+ /* use SIOCGSIZIFCONF to get size for SIOCGIFCONF */
+
+ ifc.ifc_buf = NULL;
+ if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "ioctl SIOCGSIZIFCONF failed");
+ return ifs;
+ }
+ bufsize = ifc.ifc_len;
+
+ buf = (char *)malloc(bufsize);
+ if (!buf) {
+ JNU_ThrowOutOfMemoryError(env, "Network interface native buffer allocation failed");
+ return ifs;
+ }
+ ifc.ifc_len = bufsize;
+ ifc.ifc_buf = buf;
+ if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
+ NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
+ "ioctl CSIOCGIFCONF failed");
+ free(buf);
+ return ifs;
+ }
+
+ /*
+ * Iterate through each interface
+ */
+ ifreqP = ifc.ifc_req;
+ cp = (char *)ifc.ifc_req;
+ cplimit = cp + ifc.ifc_len;
+
+ for ( ; cp < cplimit; cp += (sizeof(ifreqP->ifr_name) + MAX((ifreqP->ifr_addr).sa_len, sizeof(ifreqP->ifr_addr)))) {
+ ifreqP = (struct ifreq *)cp;
+ struct ifreq if2;
+
+ memset((char *)&if2, 0, sizeof(if2));
+ strcpy(if2.ifr_name, ifreqP->ifr_name);
+
+ /*
+ * Skip interface that aren't UP
+ */
+ if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) >= 0) {
+ if (!(if2.ifr_flags & IFF_UP)) {
+ continue;
+ }
+ }
+
+ if (ifreqP->ifr_addr.sa_family != AF_INET6)
+ continue;
+
+ if (ioctl(sock, SIOCGIFSITE6, (char *)&if2) >= 0) {
+ struct sockaddr_in6 *s6= (struct sockaddr_in6 *)&(ifreqP->ifr_addr);
+ s6->sin6_scope_id = if2.ifr_site6;
+ }
+
+ /*
+ * Add to the list
+ */
+ ifs = addif(env, sock, ifreqP->ifr_name, ifs,
+ (struct sockaddr *)&(ifreqP->ifr_addr),
+ AF_INET6, 0);
+
+ /*
+ * If an exception occurred then free the list
+ */
+ if ((*env)->ExceptionOccurred(env)) {
+ free(buf);
+ freeif(ifs);
+ return NULL;
+ }
+ }
+
+ /*
+ * Free socket and buffer
+ */
+ free(buf);
+ return ifs;
+}
+#endif
+
+
static int getIndex(int sock, const char *name){
/*
* Try to get the interface index
- * (Not supported on Solaris 2.6 or 7)
*/
+#if defined(_AIX)
+ return if_nametoindex(name);
+#else
struct ifreq if2;
strcpy(if2.ifr_name, name);
@@ -1192,6 +1311,7 @@
}
return if2.ifr_ifindex;
+#endif
}
/**
@@ -1258,6 +1378,46 @@
* MAC address. Returns -1 if there is no hardware address on that interface.
*/
static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) {
+#if defined (_AIX)
+ int size;
+ struct kinfo_ndd *nddp;
+ void *end;
+
+ size = getkerninfo(KINFO_NDD, 0, 0, 0);
+ if (size == 0) {
+ return -1;
+ }
+
+ if (size < 0) {
+ perror("getkerninfo 1");
+ return -1;
+ }
+
+ nddp = (struct kinfo_ndd *)malloc(size);
+
+ if (!nddp) {
+ return -1;
+ }
+
+ if (getkerninfo(KINFO_NDD, nddp, &size, 0) < 0) {
+ perror("getkerninfo 2");
+ return -1;
+ }
+
+ end = (void *)nddp + size;
+ while ((void *)nddp < end) {
+ if (!strcmp(nddp->ndd_alias, ifname) ||
+ !strcmp(nddp->ndd_name, ifname)) {
+ bcopy(nddp->ndd_addr, buf, 6);
+ return 6;
+ } else {
+ nddp++;
+ }
+ }
+
+ return -1;
+
+#elif defined(__linux__)
static struct ifreq ifr;
int i;
@@ -1279,6 +1439,7 @@
}
return -1;
+#endif
}
static int getMTU(JNIEnv *env, int sock, const char *ifname) {
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c Tue Jan 28 14:57:41 2014 -0800
@@ -963,7 +963,7 @@
}
if (NET_SetSockOpt(fd, level, optname, (const void *)&optval, optlen) < 0) {
-#ifdef __solaris__
+#if defined(__solaris__) || defined(_AIX)
if (errno == EINVAL) {
// On Solaris setsockopt will set errno to EINVAL if the socket
// is closed. The default error message is then confusing
--- a/jdk/src/solaris/native/java/net/net_util_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/net/net_util_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -737,14 +737,23 @@
return 0;
}
-void initLocalAddrTable () {
+void platformInit () {
initLoopbackRoutes();
initLocalIfs();
}
+#elif defined(_AIX)
+
+/* Initialize stubs for blocking I/O workarounds (see src/solaris/native/java/net/linux_close.c) */
+extern void aix_close_init();
+
+void platformInit () {
+ aix_close_init();
+}
+
#else
-void initLocalAddrTable () {}
+void platformInit () {}
#endif
@@ -1271,6 +1280,7 @@
NET_SetSockOpt(int fd, int level, int opt, const void *arg,
int len)
{
+
#ifndef IPTOS_TOS_MASK
#define IPTOS_TOS_MASK 0x1e
#endif
@@ -1291,9 +1301,6 @@
#else
static long maxsockbuf = -1;
#endif
-
- int addopt;
- struct linger *ling;
#endif
/*
@@ -1386,6 +1393,29 @@
}
#endif
+#ifdef _AIX
+ if (level == SOL_SOCKET) {
+ if (opt == SO_SNDBUF || opt == SO_RCVBUF) {
+ /*
+ * Just try to set the requested size. If it fails we will leave the
+ * socket option as is. Setting the buffer size means only a hint in
+ * the jse2/java software layer, see javadoc. In the previous
+ * solution the buffer has always been truncated to a length of
+ * 0x100000 Byte, even if the technical limit has not been reached.
+ * This kind of absolute truncation was unexpected in the jck tests.
+ */
+ int ret = setsockopt(fd, level, opt, arg, len);
+ if ((ret == 0) || (ret == -1 && errno == ENOBUFS)) {
+ // Accept failure because of insufficient buffer memory resources.
+ return 0;
+ } else {
+ // Deliver all other kinds of errors.
+ return ret;
+ }
+ }
+ }
+#endif
+
/*
* On Linux the receive buffer is used for both socket
* structures and the the packet payload. The implication
@@ -1442,10 +1472,12 @@
}
}
+#endif
+#if defined(_ALLBSD_SOURCE) || defined(_AIX)
/*
* On Solaris, SO_REUSEADDR will allow multiple datagram
- * sockets to bind to the same port. The network jck tests
+ * sockets to bind to the same port. The network jck tests check
* for this "feature", so we need to emulate it by turning on
* SO_REUSEPORT as well for that combination.
*/
@@ -1459,11 +1491,9 @@
}
if (sotype == SOCK_DGRAM) {
- addopt = SO_REUSEPORT;
- setsockopt(fd, level, addopt, arg, len);
+ setsockopt(fd, level, SO_REUSEPORT, arg, len);
}
}
-
#endif
return setsockopt(fd, level, opt, arg, len);
@@ -1633,7 +1663,7 @@
if (timeout <= 0) {
return read_rv > 0 ? 0 : -1;
}
- newTime = prevTime;
+ prevTime = newTime;
if (read_rv > 0) {
break;
--- a/jdk/src/solaris/native/java/net/net_util_md.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/net/net_util_md.h Tue Jan 28 14:57:41 2014 -0800
@@ -37,7 +37,17 @@
#endif
-#if defined(__linux__) || defined(MACOSX)
+/*
+ AIX needs a workaround for I/O cancellation, see:
+ http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm
+ ...
+ The close subroutine is blocked until all subroutines which use the file
+ descriptor return to usr space. For example, when a thread is calling close
+ and another thread is calling select with the same file descriptor, the
+ close subroutine does not return until the select call returns.
+ ...
+*/
+#if defined(__linux__) || defined(MACOSX) || defined (_AIX)
extern int NET_Timeout(int s, long timeout);
extern int NET_Read(int s, void* buf, size_t len);
extern int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
--- a/jdk/src/solaris/native/java/util/TimeZone_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/java/util/TimeZone_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2013, 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
@@ -123,7 +123,7 @@
return NULL;
}
-#if defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \
+#if defined(_AIX) || defined(__linux__) || defined(MACOSX) || (defined(__solaris__) \
&& (defined(_POSIX_PTHREAD_SEMANTICS) || defined(_LP64)))
while (readdir_r(dirp, entry, &dp) == 0 && dp != NULL) {
#else
@@ -615,6 +615,14 @@
#endif /*__solaris__*/
#endif /*__linux__*/
+#ifdef _AIX
+static char *
+getPlatformTimeZoneID()
+{
+ return NULL;
+}
+#endif
+
/*
* findJavaTZ_md() maps platform time zone ID to Java time zone ID
* using <java_home>/lib/tzmappings. If the TZ value is not found, it
@@ -635,7 +643,7 @@
#if defined(__linux__) || defined(_ALLBSD_SOURCE)
if (tz == NULL) {
#else
-#ifdef __solaris__
+#if defined (__solaris__) || defined(_AIX)
if (tz == NULL || *tz == '\0') {
#endif
#endif
--- a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c Tue Jan 28 14:57:41 2014 -0800
@@ -37,6 +37,10 @@
#include "awt_Plugin.h"
+#ifdef AIX
+#include "porting_aix.h" /* For the 'dladdr' function. */
+#endif
+
#ifdef DEBUG
#define VERBOSE_AWT_DEBUG
#endif
--- a/jdk/src/solaris/native/sun/awt/fontpath.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/awt/fontpath.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,7 @@
#define MAXFDIRS 512 /* Max number of directories that contain fonts */
-#if !defined(__linux__)
+#if defined(__solaris__)
/*
* This can be set in the makefile to "/usr/X11" if so desired.
*/
@@ -114,7 +114,7 @@
NULL, /* terminates the list */
};
-#else /* __linux */
+#elif defined( __linux__)
/* All the known interesting locations we have discovered on
* various flavors of Linux
*/
@@ -134,6 +134,12 @@
"/usr/share/fonts/default/Type1", /* RH 9.0 */
NULL, /* terminates the list */
};
+#elif defined(_AIX)
+static char *fullAixFontPath[] = {
+ "/usr/lpp/X11/lib/X11/fonts/Type1", /* from X11.fnt.iso_T1 */
+ "/usr/lpp/X11/lib/X11/fonts/TrueType", /* from X11.fnt.ucs.ttf */
+ NULL, /* terminates the list */
+};
#endif
static char **getFontConfigLocations();
@@ -497,10 +503,11 @@
#if defined(__linux__)
knowndirs = fullLinuxFontPath;
-#else /* IF SOLARIS */
+#elif defined(__solaris__)
knowndirs = fullSolarisFontPath;
+#elif defined(_AIX)
+ knowndirs = fullAixFontPath;
#endif
-
/* REMIND: this code requires to be executed when the GraphicsEnvironment
* is already initialised. That is always true, but if it were not so,
* this code could throw an exception and the fontpath would fail to
@@ -592,6 +599,25 @@
}
}
#endif
+
+#if defined(_AIX)
+ /* On AIX, fontconfig is not a standard package supported by IBM.
+ * instead it has to be installed from the "AIX Toolbox for Linux Applications"
+ * site http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html
+ * and will be installed under /opt/freeware/lib/libfontconfig.a.
+ * Notice that the archive contains the real 32- and 64-bit shared libraries.
+ * We first try to load 'libfontconfig.so' from the default library path in the
+ * case the user has installed a private version of the library and if that
+ * doesn't succeed, we try the version from /opt/freeware/lib/libfontconfig.a
+ */
+ libfontconfig = dlopen("libfontconfig.so", RTLD_LOCAL|RTLD_LAZY);
+ if (libfontconfig == NULL) {
+ libfontconfig = dlopen("/opt/freeware/lib/libfontconfig.a(libfontconfig.so.1)", RTLD_MEMBER|RTLD_LOCAL|RTLD_LAZY);
+ if (libfontconfig == NULL) {
+ return NULL;
+ }
+ }
+#else
/* 64 bit sparc should pick up the right version from the lib path.
* New features may be added to libfontconfig, this is expected to
* be compatible with old features, but we may need to start
@@ -606,6 +632,7 @@
return NULL;
}
}
+#endif
/* Version 1.0 of libfontconfig crashes if HOME isn't defined in
* the environment. This should generally never happen, but we can't
@@ -1203,7 +1230,7 @@
*/
if (fontformat != NULL
&& (strcmp((char*)fontformat, "TrueType") != 0)
-#ifdef __linux__
+#if defined(__linux__) || defined(_AIX)
&& (strcmp((char*)fontformat, "Type 1") != 0)
#endif
) {
--- a/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Tue Jan 28 14:57:41 2014 -0800
@@ -56,8 +56,8 @@
int x, y;
} X11RIPrivate;
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#define XSD_MAX(a,b) ((a) > (b) ? (a) : (b))
+#define XSD_MIN(a,b) ((a) < (b) ? (a) : (b))
static LockFunc X11SD_Lock;
static GetRasInfoFunc X11SD_GetRasInfo;
@@ -1090,10 +1090,10 @@
x2 = x1 + DisplayWidth(awt_display, xsdo->configData->awt_visInfo.screen);
y2 = y1 + DisplayHeight(awt_display, xsdo->configData->awt_visInfo.screen);
- x1 = MAX(bounds->x1, x1);
- y1 = MAX(bounds->y1, y1);
- x2 = MIN(bounds->x2, x2);
- y2 = MIN(bounds->y2, y2);
+ x1 = XSD_MAX(bounds->x1, x1);
+ y1 = XSD_MAX(bounds->y1, y1);
+ x2 = XSD_MIN(bounds->x2, x2);
+ y2 = XSD_MIN(bounds->y2, y2);
if ((x1 >= x2) || (y1 >= y2)) {
return FALSE;
}
--- a/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/java2d/x11/XRBackendNative.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, 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
@@ -72,8 +72,8 @@
#include <dlfcn.h>
-#ifdef __solaris__
-/* Solaris 10 will not have these symbols at runtime */
+#if defined(__solaris__) || defined(_AIX)
+/* Solaris 10 and AIX will not have these symbols at runtime */
typedef Picture (*XRenderCreateLinearGradientFuncType)
(Display *dpy,
@@ -147,7 +147,7 @@
return JNI_FALSE;
}
-#ifdef __solaris__
+#if defined(__solaris__) || defined(_AIX)
xrenderlib = dlopen("libXrender.so",RTLD_GLOBAL|RTLD_LAZY);
if (xrenderlib != NULL) {
--- a/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,7 @@
#include <sys/proc_info.h>
#include <libproc.h>
#endif
-#else
+#elif !defined(_AIX)
#include <sys/swap.h>
#endif
#include <sys/resource.h>
@@ -57,9 +57,13 @@
#include <stdlib.h>
#include <unistd.h>
+#if defined(_AIX)
+#include <libperfstat.h>
+#endif
+
static jlong page_size = 0;
-#if defined(_ALLBSD_SOURCE)
+#if defined(_ALLBSD_SOURCE) || defined(_AIX)
#define MB (1024UL * 1024UL)
#else
@@ -326,6 +330,12 @@
*/
// throw_internal_error(env, "unimplemented in FreeBSD")
return (128 * MB);
+#elif defined(_AIX)
+ perfstat_memory_total_t memory_info;
+ if (-1 != perfstat_memory_total(NULL, &memory_info, sizeof(perfstat_memory_total_t), 1)) {
+ return (jlong)(memory_info.real_free * 4L * 1024L);
+ }
+ return -1;
#else // solaris / linux
jlong num_avail_physical_pages = sysconf(_SC_AVPHYS_PAGES);
return (num_avail_physical_pages * page_size);
@@ -349,6 +359,12 @@
return -1;
}
return result;
+#elif defined(_AIX)
+ perfstat_memory_total_t memory_info;
+ if (-1 != perfstat_memory_total(NULL, &memory_info, sizeof(perfstat_memory_total_t), 1)) {
+ return (jlong)(memory_info.real_total * 4L * 1024L);
+ }
+ return -1;
#else // solaris / linux
jlong num_physical_pages = sysconf(_SC_PHYS_PAGES);
return (num_physical_pages * page_size);
@@ -417,7 +433,16 @@
struct dirent* dentp;
jlong fds = 0;
- dirp = opendir("/proc/self/fd");
+#if defined(_AIX)
+/* AIX does not understand '/proc/self' - it requires the real process ID */
+#define FD_DIR aix_fd_dir
+ char aix_fd_dir[32]; /* the pid has at most 19 digits */
+ snprintf(aix_fd_dir, 32, "/proc/%d/fd", getpid());
+#else
+#define FD_DIR "/proc/self/fd"
+#endif
+
+ dirp = opendir(FD_DIR);
if (dirp == NULL) {
throw_internal_error(env, "Unable to open directory /proc/self/fd");
return -1;
--- a/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c Tue Jan 28 14:57:41 2014 -0800
@@ -81,7 +81,7 @@
rv = connect(fd, 0, 0);
#endif
-#if defined(__linux__) || defined(_ALLBSD_SOURCE)
+#if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
{
int len;
SOCKADDR sa;
@@ -115,6 +115,14 @@
if (rv < 0 && errno == EADDRNOTAVAIL)
rv = errno = 0;
#endif
+#if defined(_AIX)
+ /* See W. Richard Stevens, "UNIX Network Programming, Volume 1", p. 254:
+ * 'Setting the address family to AF_UNSPEC might return EAFNOSUPPORT
+ * but that is acceptable.
+ */
+ if (rv < 0 && errno == EAFNOSUPPORT)
+ rv = errno = 0;
+#endif
}
#endif
--- a/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c Tue Jan 28 14:57:41 2014 -0800
@@ -147,6 +147,19 @@
if (md == JNI_FALSE) {
result = fdatasync(fd);
} else {
+#ifdef _AIX
+ /* On AIX, calling fsync on a file descriptor that is opened only for
+ * reading results in an error ("EBADF: The FileDescriptor parameter is
+ * not a valid file descriptor open for writing.").
+ * However, at this point it is not possibly anymore to read the
+ * 'writable' attribute of the corresponding file channel so we have to
+ * use 'fcntl'.
+ */
+ int getfl = fcntl(fd, F_GETFL);
+ if (getfl >= 0 && (getfl & O_ACCMODE) == O_RDONLY) {
+ return 0;
+ }
+#endif
result = fsync(fd);
}
return handle(env, result, "Force failed");
--- a/jdk/src/solaris/native/sun/nio/ch/IOUtil.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/nio/ch/IOUtil.c Tue Jan 28 14:57:41 2014 -0800
@@ -145,7 +145,6 @@
return (jint)iov_max;
}
-
/* Declared in nio_util.h for use elsewhere in NIO */
jint
--- a/jdk/src/solaris/native/sun/nio/ch/Net.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/nio/ch/Net.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
* questions.
*/
+#include <sys/poll.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
@@ -40,6 +41,9 @@
#include "nio.h"
#include "sun_nio_ch_PollArrayWrapper.h"
+#ifdef _AIX
+#include <sys/utsname.h>
+#endif
/**
* IP_MULTICAST_ALL supported since 2.6.31 but may not be available at
@@ -52,15 +56,31 @@
#endif
/**
- * IPV6_ADD_MEMBERSHIP/IPV6_DROP_MEMBERSHIP may not be defined on OSX
+ * IPV6_ADD_MEMBERSHIP/IPV6_DROP_MEMBERSHIP may not be defined on OSX and AIX
*/
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(_AIX)
#ifndef IPV6_ADD_MEMBERSHIP
#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
#endif
#endif
+#if defined(_AIX)
+ #ifndef IP_BLOCK_SOURCE
+ #define IP_BLOCK_SOURCE 58 /* Block data from a given source to a given group */
+ #define IP_UNBLOCK_SOURCE 59 /* Unblock data from a given source to a given group */
+ #define IP_ADD_SOURCE_MEMBERSHIP 60 /* Join a source-specific group */
+ #define IP_DROP_SOURCE_MEMBERSHIP 61 /* Leave a source-specific group */
+ #endif
+
+ #ifndef MCAST_BLOCK_SOURCE
+ #define MCAST_BLOCK_SOURCE 64
+ #define MCAST_UNBLOCK_SOURCE 65
+ #define MCAST_JOIN_SOURCE_GROUP 66
+ #define MCAST_LEAVE_SOURCE_GROUP 67
+ #endif
+#endif /* _AIX */
+
#define COPY_INET6_ADDRESS(env, source, target) \
(*env)->GetByteArrayRegion(env, source, 0, 16, target)
@@ -86,6 +106,36 @@
}
#endif
+#ifdef _AIX
+
+/*
+ * Checks whether or not "socket extensions for multicast source filters" is supported.
+ * Returns JNI_TRUE if it is supported, JNI_FALSE otherwise
+ */
+static jboolean isSourceFilterSupported(){
+ static jboolean alreadyChecked = JNI_FALSE;
+ static jboolean result = JNI_TRUE;
+ if (alreadyChecked != JNI_TRUE){
+ struct utsname uts;
+ memset(&uts, 0, sizeof(uts));
+ strcpy(uts.sysname, "?");
+ const int utsRes = uname(&uts);
+ int major = -1;
+ int minor = -1;
+ major = atoi(uts.version);
+ minor = atoi(uts.release);
+ if (strcmp(uts.sysname, "AIX") == 0) {
+ if (major < 6 || (major == 6 && minor < 1)) {// unsupported on aix < 6.1
+ result = JNI_FALSE;
+ }
+ }
+ alreadyChecked = JNI_TRUE;
+ }
+ return result;
+}
+
+#endif /* _AIX */
+
JNIEXPORT void JNICALL
Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz)
{
@@ -106,7 +156,7 @@
JNIEXPORT jboolean JNICALL
Java_sun_nio_ch_Net_canIPv6SocketJoinIPv4Group0(JNIEnv* env, jclass cl)
{
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(_AIX)
/* for now IPv6 sockets cannot join IPv4 multicast groups */
return JNI_FALSE;
#else
@@ -434,6 +484,14 @@
optval = (void*)&mreq;
optlen = sizeof(mreq);
} else {
+
+#ifdef _AIX
+ /* check AIX for support of source filtering */
+ if (isSourceFilterSupported() != JNI_TRUE){
+ return IOS_UNAVAILABLE;
+ }
+#endif
+
mreq_source.imr_multiaddr.s_addr = htonl(group);
mreq_source.imr_sourceaddr.s_addr = htonl(source);
mreq_source.imr_interface.s_addr = htonl(interf);
@@ -444,7 +502,7 @@
n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt, optval, optlen);
if (n < 0) {
- if (join && (errno == ENOPROTOOPT))
+ if (join && (errno == ENOPROTOOPT || errno == EOPNOTSUPP))
return IOS_UNAVAILABLE;
handleSocketError(env, errno);
}
@@ -463,6 +521,13 @@
int n;
int opt = (block) ? IP_BLOCK_SOURCE : IP_UNBLOCK_SOURCE;
+#ifdef _AIX
+ /* check AIX for support of source filtering */
+ if (isSourceFilterSupported() != JNI_TRUE){
+ return IOS_UNAVAILABLE;
+ }
+#endif
+
mreq_source.imr_multiaddr.s_addr = htonl(group);
mreq_source.imr_sourceaddr.s_addr = htonl(source);
mreq_source.imr_interface.s_addr = htonl(interf);
@@ -470,7 +535,7 @@
n = setsockopt(fdval(env,fdo), IPPROTO_IP, opt,
(void*)&mreq_source, sizeof(mreq_source));
if (n < 0) {
- if (block && (errno == ENOPROTOOPT))
+ if (block && (errno == ENOPROTOOPT || errno == EOPNOTSUPP))
return IOS_UNAVAILABLE;
handleSocketError(env, errno);
}
@@ -508,7 +573,7 @@
n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt, optval, optlen);
if (n < 0) {
- if (join && (errno == ENOPROTOOPT))
+ if (join && (errno == ENOPROTOOPT || errno == EOPNOTSUPP))
return IOS_UNAVAILABLE;
handleSocketError(env, errno);
}
@@ -537,7 +602,7 @@
n = setsockopt(fdval(env,fdo), IPPROTO_IPV6, opt,
(void*)&req, sizeof(req));
if (n < 0) {
- if (block && (errno == ENOPROTOOPT))
+ if (block && (errno == ENOPROTOOPT || errno == EOPNOTSUPP))
return IOS_UNAVAILABLE;
handleSocketError(env, errno);
}
@@ -637,6 +702,42 @@
}
}
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLIN;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_polloutValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLOUT;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollerrValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLERR;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollhupValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLHUP;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollnvalValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLNVAL;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollconnValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLOUT;
+}
+
/* Declared in nio_util.h */
--- a/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c Tue Jan 28 14:57:41 2014 -0800
@@ -42,7 +42,7 @@
#include <strings.h>
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(_AIX)
#include <string.h>
#endif
@@ -294,7 +294,13 @@
jsize len;
jbyteArray bytes;
+#ifdef _AIX
+ /* strerror() is not thread-safe on AIX so we have to use strerror_r() */
+ char buffer[256];
+ msg = (strerror_r((int)error, buffer, 256) == 0) ? buffer : "Error while calling strerror_r";
+#else
msg = strerror((int)error);
+#endif
len = strlen(msg);
bytes = (*env)->NewByteArray(env, len);
if (bytes != NULL) {
@@ -674,6 +680,15 @@
/* EINTR not listed as a possible error */
/* TDB: reentrant version probably not required here */
res = readdir64_r(dirp, ptr, &result);
+
+#ifdef _AIX
+ /* On AIX, readdir_r() returns EBADF (i.e. '9') and sets 'result' to NULL for the */
+ /* directory stream end. Otherwise, 'errno' will contain the error code. */
+ if (res != 0) {
+ res = (result == NULL && res == EBADF) ? 0 : errno;
+ }
+#endif
+
if (res != 0) {
throwUnixException(env, res);
return NULL;
@@ -877,6 +892,18 @@
if (err == -1) {
throwUnixException(env, errno);
} else {
+#ifdef _AIX
+ /* AIX returns ULONG_MAX in buf.f_blocks for the /proc file system. */
+ /* This is too big for a Java signed long and fools various tests. */
+ if (buf.f_blocks == ULONG_MAX) {
+ buf.f_blocks = 0;
+ }
+ /* The number of free or available blocks can never exceed the total number of blocks */
+ if (buf.f_blocks == 0) {
+ buf.f_bfree = 0;
+ buf.f_bavail = 0;
+ }
+#endif
(*env)->SetLongField(env, attrs, attrs_f_frsize, long_to_jlong(buf.f_frsize));
(*env)->SetLongField(env, attrs, attrs_f_blocks, long_to_jlong(buf.f_blocks));
(*env)->SetLongField(env, attrs, attrs_f_bfree, long_to_jlong(buf.f_bfree));
--- a/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -50,7 +50,11 @@
{
const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL);
// look up existing handle only, do not load
+#if defined(AIX)
+ void *hModule = dlopen(libName, RTLD_LAZY);
+#else
void *hModule = dlopen(libName, RTLD_NOLOAD);
+#endif
dprintf2("-handle for %s: %u\n", libName, hModule);
(*env)->ReleaseStringUTFChars(env, jLibName, libName);
return ptr_to_jlong(hModule);
--- a/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/classes/sun/nio/ch/PollArrayWrapper.java Tue Jan 28 14:57:41 2014 -0800
@@ -53,15 +53,6 @@
static short SIZE_POLLFD = 8; // sizeof pollfd struct
- // events masks
- @Native static final short POLLIN = AbstractPollArrayWrapper.POLLIN;
- @Native static final short POLLOUT = AbstractPollArrayWrapper.POLLOUT;
- @Native static final short POLLERR = AbstractPollArrayWrapper.POLLERR;
- @Native static final short POLLHUP = AbstractPollArrayWrapper.POLLHUP;
- @Native static final short POLLNVAL = AbstractPollArrayWrapper.POLLNVAL;
- @Native static final short POLLREMOVE = AbstractPollArrayWrapper.POLLREMOVE;
- @Native static final short POLLCONN = 0x0002;
-
private int size; // Size of the pollArray
PollArrayWrapper(int newSize) {
@@ -119,6 +110,6 @@
// Adds Windows wakeup socket at a given index.
void addWakeupSocket(int fdVal, int index) {
putDescriptor(index, fdVal);
- putEventOps(index, POLLIN);
+ putEventOps(index, Net.POLLIN);
}
}
--- a/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/classes/sun/nio/ch/SinkChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -78,17 +78,16 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0)
+ if ((ops & Net.POLLNVAL) != 0)
throw new Error("POLLNVAL detected");
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
+ if (((ops & Net.POLLOUT) != 0) &&
((intOps & SelectionKey.OP_WRITE) != 0))
newOps |= SelectionKey.OP_WRITE;
@@ -106,7 +105,7 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
if ((ops & SelectionKey.OP_WRITE) != 0)
- ops = PollArrayWrapper.POLLOUT;
+ ops = Net.POLLOUT;
sk.selector.putEventOps(sk, ops);
}
--- a/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/classes/sun/nio/ch/SourceChannelImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -77,17 +77,16 @@
int oldOps = sk.nioReadyOps();
int newOps = initialOps;
- if ((ops & PollArrayWrapper.POLLNVAL) != 0)
+ if ((ops & Net.POLLNVAL) != 0)
throw new Error("POLLNVAL detected");
- if ((ops & (PollArrayWrapper.POLLERR
- | PollArrayWrapper.POLLHUP)) != 0) {
+ if ((ops & (Net.POLLERR | Net.POLLHUP)) != 0) {
newOps = intOps;
sk.nioReadyOps(newOps);
return (newOps & ~oldOps) != 0;
}
- if (((ops & PollArrayWrapper.POLLIN) != 0) &&
+ if (((ops & Net.POLLIN) != 0) &&
((intOps & SelectionKey.OP_READ) != 0))
newOps |= SelectionKey.OP_READ;
@@ -105,7 +104,7 @@
public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
if ((ops & SelectionKey.OP_READ) != 0)
- ops = PollArrayWrapper.POLLIN;
+ ops = Net.POLLIN;
sk.selector.putEventOps(sk, ops);
}
--- a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Tue Jan 28 14:57:41 2014 -0800
@@ -313,16 +313,16 @@
private int processSelectedKeys(long updateCount) {
int numKeysUpdated = 0;
numKeysUpdated += processFDSet(updateCount, readFds,
- PollArrayWrapper.POLLIN,
+ Net.POLLIN,
false);
numKeysUpdated += processFDSet(updateCount, writeFds,
- PollArrayWrapper.POLLCONN |
- PollArrayWrapper.POLLOUT,
+ Net.POLLCONN |
+ Net.POLLOUT,
false);
numKeysUpdated += processFDSet(updateCount, exceptFds,
- PollArrayWrapper.POLLIN |
- PollArrayWrapper.POLLCONN |
- PollArrayWrapper.POLLOUT,
+ Net.POLLIN |
+ Net.POLLCONN |
+ Net.POLLOUT,
true);
return numKeysUpdated;
}
--- a/jdk/src/windows/native/java/net/net_util_md.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/native/java/net/net_util_md.c Tue Jan 28 14:57:41 2014 -0800
@@ -125,8 +125,8 @@
return TRUE;
}
-void initLocalAddrTable () {}
-void parseExclusiveBindProperty (JNIEnv *env) {}
+void platformInit() {}
+void parseExclusiveBindProperty(JNIEnv *env) {}
/*
* Since winsock doesn't have the equivalent of strerror(errno)
--- a/jdk/src/windows/native/sun/nio/ch/Net.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/native/sun/nio/ch/Net.c Tue Jan 28 14:57:41 2014 -0800
@@ -554,11 +554,11 @@
FD_ZERO(&rd);
FD_ZERO(&wr);
FD_ZERO(&ex);
- if (events & sun_nio_ch_PollArrayWrapper_POLLIN) {
+ if (events & POLLIN) {
FD_SET(fd, &rd);
}
- if (events & sun_nio_ch_PollArrayWrapper_POLLOUT ||
- events & sun_nio_ch_PollArrayWrapper_POLLCONN) {
+ if (events & POLLOUT ||
+ events & POLLCONN) {
FD_SET(fd, &wr);
}
FD_SET(fd, &ex);
@@ -572,14 +572,50 @@
} else if (rv >= 0) {
rv = 0;
if (FD_ISSET(fd, &rd)) {
- rv |= sun_nio_ch_PollArrayWrapper_POLLIN;
+ rv |= POLLIN;
}
if (FD_ISSET(fd, &wr)) {
- rv |= sun_nio_ch_PollArrayWrapper_POLLOUT;
+ rv |= POLLOUT;
}
if (FD_ISSET(fd, &ex)) {
- rv |= sun_nio_ch_PollArrayWrapper_POLLERR;
+ rv |= POLLERR;
}
}
return rv;
}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollinValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLIN;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_polloutValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLOUT;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollerrValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLERR;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollhupValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLHUP;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollnvalValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLNVAL;
+}
+
+JNIEXPORT jshort JNICALL
+Java_sun_nio_ch_Net_pollconnValue(JNIEnv *env, jclass this)
+{
+ return (jshort)POLLCONN;
+}
--- a/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/native/sun/nio/ch/WindowsSelectorImpl.c Tue Jan 28 14:57:41 2014 -0800
@@ -33,13 +33,15 @@
#define FD_SETSIZE 1024
#include <stdlib.h>
+#include <winsock2.h>
+
#include "jvm.h"
#include "jni.h"
#include "jni_util.h"
#include "sun_nio_ch_WindowsSelectorImpl.h"
#include "sun_nio_ch_PollArrayWrapper.h"
-#include "winsock2.h"
+#include "nio_util.h" /* Needed for POLL* constants (includes "winsock2.h") */
typedef struct {
jint fd;
@@ -79,12 +81,11 @@
/* Set FD_SET structures required for select */
for (i = 0; i < numfds; i++) {
- if (fds[i].events & sun_nio_ch_PollArrayWrapper_POLLIN) {
+ if (fds[i].events & POLLIN) {
readfds.fd_array[read_count] = fds[i].fd;
read_count++;
}
- if (fds[i].events & (sun_nio_ch_PollArrayWrapper_POLLOUT |
- sun_nio_ch_PollArrayWrapper_POLLCONN))
+ if (fds[i].events & (POLLOUT | POLLCONN))
{
writefds.fd_array[write_count] = fds[i].fd;
write_count++;
@@ -110,12 +111,11 @@
/* prepare select structures for the i-th socket */
errreadfds.fd_count = 0;
errwritefds.fd_count = 0;
- if (fds[i].events & sun_nio_ch_PollArrayWrapper_POLLIN) {
+ if (fds[i].events & POLLIN) {
errreadfds.fd_array[0] = fds[i].fd;
errreadfds.fd_count = 1;
}
- if (fds[i].events & (sun_nio_ch_PollArrayWrapper_POLLOUT |
- sun_nio_ch_PollArrayWrapper_POLLCONN))
+ if (fds[i].events & (POLLOUT | POLLCONN))
{
errwritefds.fd_array[0] = fds[i].fd;
errwritefds.fd_count = 1;
--- a/jdk/src/windows/native/sun/nio/ch/nio_util.h Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/src/windows/native/sun/nio/ch/nio_util.h Tue Jan 28 14:57:41 2014 -0800
@@ -23,6 +23,8 @@
* questions.
*/
+#include <winsock2.h>
+
#include "jni.h"
/**
@@ -55,3 +57,19 @@
};
#endif
+
+#ifndef POLLIN
+ /* WSAPoll()/WSAPOLLFD and the corresponding constants are only defined */
+ /* in Windows Vista / Windows Server 2008 and later. If we are on an */
+ /* older release we just use the Solaris constants as this was previously */
+ /* done in PollArrayWrapper.java. */
+ #define POLLIN 0x0001
+ #define POLLOUT 0x0004
+ #define POLLERR 0x0008
+ #define POLLHUP 0x0010
+ #define POLLNVAL 0x0020
+ #define POLLCONN 0x0002
+#else
+ /* POLLCONN must not equal any of the other constants (see winsock2.h). */
+ #define POLLCONN 0x2000
+#endif
--- a/jdk/test/ProblemList.txt Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/ProblemList.txt Tue Jan 28 14:57:41 2014 -0800
@@ -41,11 +41,11 @@
#
# List items are testnames followed by labels, all MUST BE commented
# as to why they are here and use a label:
-# generic-all Problems on all platforms
-# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc.
-# OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx
-# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-amd64
-# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8
+# generic-all Problems on all platforms
+# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc.
+# OSNAME-all Where OSNAME is one of: solaris, linux, windows, macosx, aix
+# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-amd64
+# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8
#
# More than one label is allowed but must be on the same line.
#
@@ -134,6 +134,11 @@
# jdk_jmx
+# 8030957
+com/sun/management/OperatingSystemMXBean/GetProcessCpuLoad.java aix-all
+com/sun/management/OperatingSystemMXBean/GetSystemCpuLoad.java aix-all
+javax/management/MBeanServer/OldMBeanServerTest.java aix-all
+
############################################################################
# jdk_math
--- a/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/corba/5036554/TestCorbaBug.sh Tue Jan 28 14:57:41 2014 -0800
@@ -48,7 +48,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/com/sun/corba/cachedSocket/7056731.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/corba/cachedSocket/7056731.sh Tue Jan 28 14:57:41 2014 -0800
@@ -31,7 +31,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/java/swing/plaf/windows/8016551/bug8016551.java Tue Jan 28 14:57:41 2014 -0800
@@ -25,7 +25,7 @@
* @bug 8016551
* @summary JMenuItem in WindowsLookAndFeel can't paint default icons
* @author Leonid Romanov
- * @run main bug8016551
+ * @run main/othervm bug8016551
*/
import javax.swing.*;
--- a/jdk/test/com/sun/jdi/ImmutableResourceTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/jdi/ImmutableResourceTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -56,7 +56,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PATHSEP=":"
;;
--- a/jdk/test/com/sun/jdi/JITDebug.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/jdi/JITDebug.sh Tue Jan 28 14:57:41 2014 -0800
@@ -63,7 +63,7 @@
OS=`uname -s`
export TRANSPORT_METHOD
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PATHSEP=":"
TRANSPORT_METHOD=dt_socket
;;
--- a/jdk/test/com/sun/jdi/PrivateTransportTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/jdi/PrivateTransportTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -102,7 +102,7 @@
is_windows=false
is_cygwin=false
case `uname -s` in
- SunOS|Linux)
+ SunOS|Linux|AIX)
xx=`find ${jreloc}/lib -name libdt_socket.so`
libloc=`dirname ${xx}`
;;
@@ -161,13 +161,23 @@
echo cp ${libloc}/libdt_socket.so ${fullpath}
cp ${libloc}/libdt_socket.so ${fullpath}
# make sure we can find libraries in current directory
- if [ "${LD_LIBRARY_PATH}" = "" ] ; then
- LD_LIBRARY_PATH=${libdir}
+ if [ "$os" = "AIX" ] ; then
+ if [ "${LIBPATH}" = "" ] ; then
+ LIBPATH=${libdir}
+ else
+ LIBPATH=${LIBPATH}:${libdir}
+ fi
+ export LIBPATH
+ echo LIBPATH=${LIBPATH}
else
- LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir}
+ if [ "${LD_LIBRARY_PATH}" = "" ] ; then
+ LD_LIBRARY_PATH=${libdir}
+ else
+ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir}
+ fi
+ export LD_LIBRARY_PATH
+ echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
fi
- export LD_LIBRARY_PATH
- echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
else
echo "cannot find dt_socket in ${libloc} for ${private_transport}"
fail "cannot find dt_socket in ${libloc} for ${private_transport}"
--- a/jdk/test/com/sun/jdi/ShellScaffold.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/jdi/ShellScaffold.sh Tue Jan 28 14:57:41 2014 -0800
@@ -199,6 +199,8 @@
if [ "$osname" = SunOS ] ; then
# Solaris and OpenSolaris use pgrep and not ps in psCmd
findPidCmd="$psCmd"
+ elif [ "$osname" = AIX ] ; then
+ findPidCmd="$psCmd"
else
# Never use plain 'ps', which requires a "controlling terminal"
# and will fail with a "ps: no controlling terminal" error.
@@ -293,7 +295,7 @@
psCmd=ps
jstack=jstack.exe
;;
- SunOS | Linux | Darwin)
+ SunOS | Linux | Darwin | AIX)
transport=dt_socket
address=
devnull=/dev/null
--- a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh Tue Jan 28 14:57:41 2014 -0800
@@ -45,7 +45,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
;;
Windows* | CYGWIN*)
--- a/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/awt/Toolkit/AutoShutdown/ShowExitTest/ShowExitTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -102,6 +102,14 @@
TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}`
;;
+ AIX )
+ VAR="A different value for AIX"
+ DEFAULT_JDK=/
+ FILESEP="/"
+ PATHSEP=":"
+ TMP="/tmp"
+ ;;
+
# catch all other OSs
* )
echo "Unrecognized system! $OS"
--- a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -135,6 +135,14 @@
TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}`
;;
+ AIX )
+ VAR="A different value for AIX"
+ DEFAULT_JDK=/
+ FILESEP="/"
+ PATHSEP=":"
+ TMP="/tmp"
+ ;;
+
# catch all other OSs
* )
echo "Unrecognized system! $OS"
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh Tue Jan 28 14:57:41 2014 -0800
@@ -45,7 +45,7 @@
# Need to determine the classpath separator and filepath separator based on the
# operating system.
case "$OS" in
-SunOS | Linux | Darwin )
+SunOS | Linux | Darwin | AIX )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
--- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/io/Serializable/serialver/classpath/run.sh Tue Jan 28 14:57:41 2014 -0800
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
--- a/jdk/test/java/io/Serializable/serialver/nested/run.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/io/Serializable/serialver/nested/run.sh Tue Jan 28 14:57:41 2014 -0800
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":" ;;
Windows* | CYGWIN* )
PS=";" ;;
--- a/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh Tue Jan 28 14:57:41 2014 -0800
@@ -58,6 +58,9 @@
Darwin )
FS="/"
;;
+ AIX )
+ FS="/"
+ ;;
Windows*)
FS="\\"
;;
--- a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh Tue Jan 28 14:57:41 2014 -0800
@@ -63,6 +63,9 @@
Darwin )
FS="/"
;;
+ AIX )
+ FS="/"
+ ;;
Windows* | CYGWIN* )
FS="\\"
;;
--- a/jdk/test/java/lang/ProcessBuilder/Basic.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/ProcessBuilder/Basic.java Tue Jan 28 14:57:41 2014 -0800
@@ -61,6 +61,9 @@
/* used for Mac OS X only */
static final String cfUserTextEncoding = System.getenv("__CF_USER_TEXT_ENCODING");
+ /* used for AIX only */
+ static final String libpath = System.getenv("LIBPATH");
+
/**
* Returns the number of milliseconds since time given by
* startNanoTime, which must have been previously returned from a
@@ -87,7 +90,11 @@
String output = commandOutput(r);
equal(p.waitFor(), 0);
equal(p.exitValue(), 0);
- return output;
+ // The debug/fastdebug versions of the VM may write some warnings to stdout
+ // (i.e. "Warning: Cannot open log file: hotspot.log" if the VM is started
+ // in a directory without write permissions). These warnings will confuse tests
+ // which match the entire output of the child process so better filter them out.
+ return output.replaceAll("Warning:.*\\n", "");
}
private static String commandOutput(ProcessBuilder pb) {
@@ -588,6 +595,12 @@
System.getProperty("os.name").startsWith("Windows");
}
+ static class AIX {
+ public static boolean is() { return is; }
+ private static final boolean is =
+ System.getProperty("os.name").equals("AIX");
+ }
+
static class Unix {
public static boolean is() { return is; }
private static final boolean is =
@@ -641,7 +654,7 @@
private static boolean isEnglish(String envvar) {
String val = getenv(envvar);
- return (val == null) || val.matches("en.*");
+ return (val == null) || val.matches("en.*") || val.matches("C");
}
/** Returns true if we can expect English OS error strings */
@@ -716,6 +729,14 @@
return cleanedVars.replace(javaMainClassStr,"");
}
+ /* Only used for AIX --
+ * AIX adds the variable AIXTHREAD_GUARDPAGES=0 to the environment.
+ * Remove it from the list of env variables
+ */
+ private static String removeAixExpectedVars(String vars) {
+ return vars.replace("AIXTHREAD_GUARDPAGES=0,","");
+ }
+
private static String sortByLinesWindowsly(String text) {
String[] lines = text.split("\n");
Arrays.sort(lines, new WindowsComparator());
@@ -1164,13 +1185,20 @@
ProcessBuilder pb = new ProcessBuilder();
pb.environment().clear();
String expected = Windows.is() ? "SystemRoot="+systemRoot+",": "";
+ expected = AIX.is() ? "LIBPATH="+libpath+",": expected;
if (Windows.is()) {
pb.environment().put("SystemRoot", systemRoot);
}
+ if (AIX.is()) {
+ pb.environment().put("LIBPATH", libpath);
+ }
String result = getenvInChild(pb);
if (MacOSX.is()) {
result = removeMacExpectedVars(result);
}
+ if (AIX.is()) {
+ result = removeAixExpectedVars(result);
+ }
equal(result, expected);
} catch (Throwable t) { unexpected(t); }
@@ -1685,10 +1713,14 @@
}
Process p = Runtime.getRuntime().exec(cmdp, envp);
String expected = Windows.is() ? "=C:=\\,=ExitValue=3,SystemRoot="+systemRoot+"," : "=C:=\\,";
+ expected = AIX.is() ? expected + "LIBPATH="+libpath+",": expected;
String commandOutput = commandOutput(p);
if (MacOSX.is()) {
commandOutput = removeMacExpectedVars(commandOutput);
}
+ if (AIX.is()) {
+ commandOutput = removeAixExpectedVars(commandOutput);
+ }
equal(commandOutput, expected);
if (Windows.is()) {
ProcessBuilder pb = new ProcessBuilder(childArgs);
@@ -1740,9 +1772,14 @@
if (MacOSX.is()) {
commandOutput = removeMacExpectedVars(commandOutput);
}
+ if (AIX.is()) {
+ commandOutput = removeAixExpectedVars(commandOutput);
+ }
check(commandOutput.equals(Windows.is()
? "LC_ALL=C,SystemRoot="+systemRoot+","
- : "LC_ALL=C,"),
+ : AIX.is()
+ ? "LC_ALL=C,LIBPATH="+libpath+","
+ : "LC_ALL=C,"),
"Incorrect handling of envstrings containing NULs");
} catch (Throwable t) { unexpected(t); }
@@ -2019,8 +2056,13 @@
if (Unix.is()
&& new File("/bin/bash").exists()
&& new File("/bin/sleep").exists()) {
- final String[] cmd = { "/bin/bash", "-c", "(/bin/sleep 6666)" };
- final String[] cmdkill = { "/bin/bash", "-c", "(/usr/bin/pkill -f \"sleep 6666\")" };
+ // Notice that we only destroy the process created by us (i.e.
+ // our child) but not our grandchild (i.e. '/bin/sleep'). So
+ // pay attention that the grandchild doesn't run too long to
+ // avoid polluting the process space with useless processes.
+ // Running the grandchild for 60s should be more than enough.
+ final String[] cmd = { "/bin/bash", "-c", "(/bin/sleep 60)" };
+ final String[] cmdkill = { "/bin/bash", "-c", "(/usr/bin/pkill -f \"sleep 60\")" };
final ProcessBuilder pb = new ProcessBuilder(cmd);
final Process p = pb.start();
final InputStream stdout = p.getInputStream();
@@ -2042,13 +2084,27 @@
reader.start();
Thread.sleep(100);
p.destroy();
- // Subprocess is now dead, but file descriptors remain open.
check(p.waitFor() != 0);
check(p.exitValue() != 0);
+ // Subprocess is now dead, but file descriptors remain open.
+ // Make sure the test will fail if we don't manage to close
+ // the open streams within 30 seconds. Notice that this time
+ // must be shorter than the sleep time of the grandchild.
+ Timer t = new Timer("test/java/lang/ProcessBuilder/Basic.java process reaper", true);
+ t.schedule(new TimerTask() {
+ public void run() {
+ fail("Subprocesses which create subprocesses of " +
+ "their own caused the parent to hang while " +
+ "waiting for file descriptors to be closed.");
+ System.exit(-1);
+ }
+ }, 30000);
stdout.close();
stderr.close();
stdin.close();
new ProcessBuilder(cmdkill).start();
+ // All streams successfully closed so we can cancel the timer.
+ t.cancel();
//----------------------------------------------------------
// There remain unsolved issues with asynchronous close.
// Here's a highly non-portable experiment to demonstrate:
@@ -2194,8 +2250,9 @@
}
long end = System.nanoTime();
// give waitFor(timeout) a wide berth (100ms)
- if ((end - start) > 100000000)
- fail("Test failed: waitFor took too long");
+ // Old AIX machines my need a little longer.
+ if ((end - start) > 100000000L * (AIX.is() ? 4 : 1))
+ fail("Test failed: waitFor took too long (" + (end - start) + "ns)");
p.destroy();
p.waitFor();
@@ -2222,7 +2279,7 @@
long end = System.nanoTime();
if ((end - start) < 500000000)
- fail("Test failed: waitFor didn't take long enough");
+ fail("Test failed: waitFor didn't take long enough (" + (end - start) + "ns)");
p.destroy();
@@ -2230,7 +2287,7 @@
p.waitFor(1000, TimeUnit.MILLISECONDS);
end = System.nanoTime();
if ((end - start) > 900000000)
- fail("Test failed: waitFor took too long on a dead process.");
+ fail("Test failed: waitFor took too long on a dead process. (" + (end - start) + "ns)");
} catch (Throwable t) { unexpected(t); }
//----------------------------------------------------------------
--- a/jdk/test/java/lang/ProcessBuilder/DestroyTest.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/ProcessBuilder/DestroyTest.java Tue Jan 28 14:57:41 2014 -0800
@@ -154,6 +154,9 @@
} else if (osName.equals("SunOS")) {
return new UnixTest(
File.createTempFile("ProcessTrap-", ".sh",null));
+ } else if (osName.equals("AIX")) {
+ return new UnixTest(
+ File.createTempFile("ProcessTrap-", ".sh",null));
}
return null;
}
--- a/jdk/test/java/lang/StringCoding/CheckEncodings.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/StringCoding/CheckEncodings.sh Tue Jan 28 14:57:41 2014 -0800
@@ -30,7 +30,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin) ;;
+ SunOS | Linux | Darwin | AIX ) ;;
Windows* | CYGWIN* )
echo "Passed"; exit 0 ;;
* ) echo "Unrecognized system!" ; exit 1 ;;
--- a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh Tue Jan 28 14:57:41 2014 -0800
@@ -48,7 +48,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin)
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh Tue Jan 28 14:57:41 2014 -0800
@@ -47,6 +47,10 @@
PS=":"
FS="/"
;;
+ AIX )
+ PS=":"
+ FS="/"
+ ;;
Windows*)
PS=";"
OS="Windows"
--- a/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh Tue Jan 28 14:57:41 2014 -0800
@@ -61,7 +61,7 @@
while true; do
echo "Run $i: TestSystemLoadAvg"
case `uname -s` in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
runOne GetSystemLoadAverage
;;
* )
--- a/jdk/test/java/net/Authenticator/B4933582.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/Authenticator/B4933582.sh Tue Jan 28 14:57:41 2014 -0800
@@ -26,7 +26,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/net/DatagramSocket/Send12k.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/DatagramSocket/Send12k.java Tue Jan 28 14:57:41 2014 -0800
@@ -53,7 +53,7 @@
boolean sendOkay = true;
try {
s1.send(p1);
- } catch (SocketException e) {
+ } catch (IOException e) {
/*
* Prior to merlin a send of > 12k to loopback address
* would fail silently.
--- a/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh Tue Jan 28 14:57:41 2014 -0800
@@ -27,7 +27,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Darwin )
+ SunOS | Darwin | AIX )
PATHSEP=":"
FILESEP="/"
;;
--- a/jdk/test/java/net/Socket/OldSocketImpl.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/Socket/OldSocketImpl.sh Tue Jan 28 14:57:41 2014 -0800
@@ -28,7 +28,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/net/URL/B5086147.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/URL/B5086147.sh Tue Jan 28 14:57:41 2014 -0800
@@ -26,7 +26,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
exit 0
;;
CYGWIN* )
--- a/jdk/test/java/net/URLClassLoader/B5077773.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/URLClassLoader/B5077773.sh Tue Jan 28 14:57:41 2014 -0800
@@ -34,7 +34,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Darwin )
+ SunOS | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/URLClassLoader/sealing/checksealed.sh Tue Jan 28 14:57:41 2014 -0800
@@ -27,7 +27,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Darwin )
+ SunOS | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/net/URLConnection/6212146/test.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/net/URLConnection/6212146/test.sh Tue Jan 28 14:57:41 2014 -0800
@@ -33,7 +33,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Darwin )
+ SunOS | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh Tue Jan 28 14:57:41 2014 -0800
@@ -34,7 +34,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin ) ;;
+ SunOS | Linux | Darwin | AIX ) ;;
# Skip locale test for Windows
Windows* | CYGWIN* )
echo "Passed"; exit 0 ;;
--- a/jdk/test/java/nio/charset/spi/basic.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/nio/charset/spi/basic.sh Tue Jan 28 14:57:41 2014 -0800
@@ -48,7 +48,7 @@
DIR=`pwd`
case `uname` in
- SunOS | Linux | Darwin ) CPS=':' ;;
+ SunOS | Linux | Darwin | AIX ) CPS=':' ;;
Windows* ) CPS=';' ;;
CYGWIN* )
DIR=`/usr/bin/cygpath -a -s -m $DIR`
@@ -81,7 +81,7 @@
L="$1"
shift
s=`uname -s`
- if [ $s != Linux -a $s != SunOS -a $s != Darwin ]; then
+ if [ $s != Linux -a $s != SunOS -a $s != Darwin -a $s != AIX ]; then
echo "$L: Locales not supported on this system, skipping..."
exit 0
fi
--- a/jdk/test/java/nio/file/Files/SBC.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/nio/file/Files/SBC.java Tue Jan 28 14:57:41 2014 -0800
@@ -235,7 +235,7 @@
try {
Files.newByteChannel(link, READ, LinkOption.NOFOLLOW_LINKS);
throw new RuntimeException();
- } catch (IOException x) {
+ } catch (IOException | UnsupportedOperationException x) {
} finally {
TestUtil.deleteUnchecked(link);
}
--- a/jdk/test/java/nio/file/Files/walkFileTree/find.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/nio/file/Files/walkFileTree/find.sh Tue Jan 28 14:57:41 2014 -0800
@@ -43,7 +43,14 @@
echo "This test does not run on Windows"
exit 0
;;
+ AIX )
+ CLASSPATH=${TESTCLASSES}:${TESTSRC}
+ # On AIX "find -follow" may core dump on recursive links without '-L'
+ # see: http://www-01.ibm.com/support/docview.wss?uid=isg1IV28143
+ FIND_FOLLOW_OPT="-L"
+ ;;
* )
+ FIND_FOLLOW_OPT=
CLASSPATH=${TESTCLASSES}:${TESTSRC}
;;
esac
@@ -65,7 +72,7 @@
# cycles (sym links to ancestor directories), other versions do
# not. For that reason we run PrintFileTree with the -printCycles
# option when the output without this option differs to find(1).
-find "$ROOT" -follow > out1
+find $FIND_FOLLOW_OPT "$ROOT" -follow > out1
$JAVA ${TESTVMOPTS} PrintFileTree -follow "$ROOT" > out2
diff out1 out2
if [ $? != 0 ];
--- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh Tue Jan 28 14:57:41 2014 -0800
@@ -33,7 +33,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
;;
Windows* | CYGWIN* )
--- a/jdk/test/java/rmi/registry/readTest/readTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/rmi/registry/readTest/readTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -34,7 +34,7 @@
REGARGS=""
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
FILEURL="file:"
--- a/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh Tue Jan 28 14:57:41 2014 -0800
@@ -62,6 +62,10 @@
PATHSEP=":"
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,6 +46,10 @@
PATHSEP=":"
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- a/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh Tue Jan 28 14:57:41 2014 -0800
@@ -70,6 +70,10 @@
PATHSEP=":"
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
Windows* )
PATHSEP=";"
FILESEP="\\"
--- a/jdk/test/java/security/Security/signedfirst/Dyn.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/security/Security/signedfirst/Dyn.sh Tue Jan 28 14:57:41 2014 -0800
@@ -62,6 +62,10 @@
PATHSEP=":"
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- a/jdk/test/java/security/Security/signedfirst/Static.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/security/Security/signedfirst/Static.sh Tue Jan 28 14:57:41 2014 -0800
@@ -62,6 +62,10 @@
PATHSEP=":"
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- a/jdk/test/java/util/Currency/PropertiesTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/Currency/PropertiesTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -52,7 +52,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/util/Locale/LocaleCategory.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/Locale/LocaleCategory.sh Tue Jan 28 14:57:41 2014 -0800
@@ -52,7 +52,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | *BSD | Darwin )
+ SunOS | Linux | *BSD | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/util/Locale/LocaleProviders.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/Locale/LocaleProviders.sh Tue Jan 28 14:57:41 2014 -0800
@@ -56,7 +56,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | *BSD | Darwin )
+ SunOS | Linux | *BSD | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/util/PluggableLocale/ExecTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/PluggableLocale/ExecTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -62,7 +62,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh Tue Jan 28 14:57:41 2014 -0800
@@ -31,7 +31,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PATHSEP=":"
FILESEP="/"
;;
--- a/jdk/test/java/util/ServiceLoader/basic.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/ServiceLoader/basic.sh Tue Jan 28 14:57:41 2014 -0800
@@ -43,7 +43,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Darwin )
+ SunOS | Darwin | AIX )
SEP=':' ;;
Linux )
SEP=':' ;;
--- a/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/logging/AnonLoggerWeakRefLeak.sh Tue Jan 28 14:57:41 2014 -0800
@@ -83,9 +83,9 @@
fi
if [ "$status" != 0 ]; then
- echo "ERROR: 'jmap $jmap_option' is not supported so this test"
- echo "ERROR: cannot work reliably. Aborting!"
- exit 2
+ echo "WARNING: 'jmap $jmap_option' is not supported on this platform"
+ echo "WARNING: so this test cannot work reliably. Aborting!"
+ exit 0
fi
fi
--- a/jdk/test/java/util/logging/LoggerWeakRefLeak.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/logging/LoggerWeakRefLeak.sh Tue Jan 28 14:57:41 2014 -0800
@@ -83,9 +83,9 @@
fi
if [ "$status" != 0 ]; then
- echo "ERROR: 'jmap $jmap_option' is not supported so this test"
- echo "ERROR: cannot work reliably. Aborting!"
- exit 2
+ echo "WARNING: 'jmap $jmap_option' is not supported on this platform"
+ echo "WARNING: so this test cannot work reliably. Aborting!"
+ exit 0
fi
fi
--- a/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/java/util/prefs/CheckUserPrefsStorage.sh Tue Jan 28 14:57:41 2014 -0800
@@ -31,7 +31,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -56,7 +56,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -89,7 +89,7 @@
FILESEP="/"
;;
- Linux | Darwin )
+ Linux | Darwin | AIX )
VAR="A different value for Linux"
DEFAULT_JDK=/none
#DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386
--- a/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/javax/imageio/metadata/IIOMetadataFormat/runMetadataFormatThreadTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -90,7 +90,7 @@
FILESEP="/"
;;
- Linux | Darwin )
+ Linux | Darwin | AIX )
VAR="A different value for Linux"
DEFAULT_JDK=/none
#DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386
--- a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh Tue Jan 28 14:57:41 2014 -0800
@@ -92,6 +92,14 @@
TMP="/tmp"
;;
+ AIX )
+ VAR="A different value for AIX"
+ DEFAULT_JDK=/
+ FILESEP="/"
+ PATHSEP=":"
+ TMP="/tmp"
+ ;;
+
Darwin )
VAR="A different value for MacOSX"
DEFAULT_JDK=/usr
--- a/jdk/test/javax/script/CommonSetup.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/javax/script/CommonSetup.sh Tue Jan 28 14:57:41 2014 -0800
@@ -36,7 +36,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/javax/security/auth/Subject/doAs/Test.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/javax/security/auth/Subject/doAs/Test.sh Tue Jan 28 14:57:41 2014 -0800
@@ -48,6 +48,11 @@
FS="/"
RM="/bin/rm -f"
;;
+ AIX )
+ PS=":"
+ FS="/"
+ RM="/bin/rm -f"
+ ;;
CYGWIN* )
PS=";"
FS="/"
--- a/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/lib/security/java.policy/Ext_AllPolicy.sh Tue Jan 28 14:57:41 2014 -0800
@@ -53,7 +53,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh Tue Jan 28 14:57:41 2014 -0800
@@ -43,7 +43,7 @@
esac
case $OS in
-SunOS | Linux | Darwin)
+SunOS | Linux | Darwin | AIX )
PATHSEP=":"
FILESEP="/"
DFILESEP=$FILESEP
--- a/jdk/test/sun/net/ftp/MarkResetTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/net/ftp/MarkResetTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -28,7 +28,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/net/www/http/HttpClient/RetryPost.sh Tue Jan 28 14:57:41 2014 -0800
@@ -28,7 +28,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/net/www/protocol/jar/B5105410.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/net/www/protocol/jar/B5105410.sh Tue Jan 28 14:57:41 2014 -0800
@@ -31,7 +31,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh Tue Jan 28 14:57:41 2014 -0800
@@ -31,7 +31,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/batch.sh Tue Jan 28 14:57:41 2014 -0800
@@ -61,13 +61,13 @@
set -ex
-${TESTJAVA}/bin/rmic -keep -nowrite -v1.1 -d $refv11dir -classpath "$@"
-${TESTJAVA}/bin/rmic -keep -nowrite -vcompat -d $refvcompatdir -classpath "$@"
-${TESTJAVA}/bin/rmic -keep -v1.2 -d $refv12dir -classpath "$@"
+${TESTJAVA}/bin/rmic -keep -nowrite -v1.1 -d $refv11dir -classpath "$@"
+${TESTJAVA}/bin/rmic -keep -nowrite -vcompat -d $refvcompatdir -classpath "$@"
+${TESTJAVA}/bin/rmic -keep -nowrite -v1.2 -d $refv12dir -classpath "$@"
-${TESTJAVA}/bin/rmic -Xnew -nowrite -keep -v1.1 -d $newv11dir -classpath "$@"
-${TESTJAVA}/bin/rmic -Xnew -nowrite -keep -vcompat -d $newvcompatdir -classpath "$@"
-${TESTJAVA}/bin/rmic -Xnew -keep -v1.2 -d $newv12dir -classpath "$@"
+${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -v1.1 -d $newv11dir -classpath "$@"
+${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -vcompat -d $newvcompatdir -classpath "$@"
+${TESTJAVA}/bin/rmic -Xnew -keep -nowrite -v1.2 -d $newv12dir -classpath "$@"
set +ex
--- a/jdk/test/sun/security/krb5/runNameEquals.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/krb5/runNameEquals.sh Tue Jan 28 14:57:41 2014 -0800
@@ -66,6 +66,10 @@
fi
fi
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- a/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh Tue Jan 28 14:57:41 2014 -0800
@@ -72,6 +72,12 @@
CP="${FS}bin${FS}cp"
CHMOD="${FS}bin${FS}chmod"
;;
+ AIX )
+ FS="/"
+ PS=":"
+ CP="${FS}bin${FS}cp"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
Windows* )
FS="\\"
PS=";"
--- a/jdk/test/sun/security/pkcs11/Provider/Login.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/pkcs11/Provider/Login.sh Tue Jan 28 14:57:41 2014 -0800
@@ -73,6 +73,12 @@
CP="${FS}bin${FS}cp"
CHMOD="${FS}bin${FS}chmod"
;;
+ AIX )
+ FS="/"
+ PS=":"
+ CP="${FS}bin${FS}cp"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
Windows* )
FS="\\"
PS=";"
--- a/jdk/test/sun/security/provider/KeyStore/DKSTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/provider/KeyStore/DKSTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -50,15 +50,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PS=":"
- FS="/"
- ;;
- Linux )
- PS=":"
- FS="/"
- ;;
- Darwin )
+ SunOS | Linux | Darwin | AIX)
PS=":"
FS="/"
;;
--- a/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh Tue Jan 28 14:57:41 2014 -0800
@@ -63,6 +63,10 @@
PS=":"
FS="/"
;;
+ AIX )
+ PS=":"
+ FS="/"
+ ;;
CYGWIN* )
PS=";"
FS="/"
--- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh Tue Jan 28 14:57:41 2014 -0800
@@ -33,7 +33,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
FILESEP="/"
PATHSEP=":"
;;
--- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh Tue Jan 28 14:57:41 2014 -0800
@@ -32,7 +32,7 @@
HOSTNAME=`uname -n`
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh Tue Jan 28 14:57:41 2014 -0800
@@ -32,7 +32,7 @@
HOSTNAME=`uname -n`
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PS=":"
FS="/"
;;
--- a/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/jarsigner/AlgOptions.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/jarsigner/PercentSign.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/jarsigner/PercentSign.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/jarsigner/diffend.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/jarsigner/diffend.sh Tue Jan 28 14:57:41 2014 -0800
@@ -41,7 +41,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/jarsigner/oldsig.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/jarsigner/oldsig.sh Tue Jan 28 14:57:41 2014 -0800
@@ -42,7 +42,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/keytool/AltProviderPath.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/AltProviderPath.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh Tue Jan 28 14:57:41 2014 -0800
@@ -59,6 +59,10 @@
PATHSEP=":"
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
--- a/jdk/test/sun/security/tools/keytool/NoExtNPE.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/NoExtNPE.sh Tue Jan 28 14:57:41 2014 -0800
@@ -51,6 +51,10 @@
Darwin )
FILESEP="/"
;;
+ AIX )
+ PATHSEP=":"
+ FILESEP="/"
+ ;;
CYGWIN* )
FILESEP="/"
;;
--- a/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/SecretKeyKS.sh Tue Jan 28 14:57:41 2014 -0800
@@ -45,7 +45,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/keytool/StandardAlgName.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/StandardAlgName.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/StorePasswordsByShell.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,15 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Linux )
- PATHSEP=":"
- FILESEP="/"
- ;;
- Darwin )
+ SunOS | Linux | Darwin | AIX)
PATHSEP=":"
FILESEP="/"
;;
--- a/jdk/test/sun/security/tools/keytool/printssl.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/printssl.sh Tue Jan 28 14:57:41 2014 -0800
@@ -40,7 +40,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
FS="/"
;;
CYGWIN* )
--- a/jdk/test/sun/security/tools/keytool/resource.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/resource.sh Tue Jan 28 14:57:41 2014 -0800
@@ -43,7 +43,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
FS="/"
;;
--- a/jdk/test/sun/security/tools/keytool/standard.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/keytool/standard.sh Tue Jan 28 14:57:41 2014 -0800
@@ -45,7 +45,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin | CYGWIN* )
+ SunOS | Linux | Darwin | AIX | CYGWIN* )
FS="/"
;;
Windows_* )
--- a/jdk/test/sun/security/tools/policytool/Alias.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/Alias.sh Tue Jan 28 14:57:41 2014 -0800
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/policytool/ChangeUI.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/ChangeUI.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/policytool/OpenPolicy.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/OpenPolicy.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/policytool/SaveAs.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/SaveAs.sh Tue Jan 28 14:57:41 2014 -0800
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/UpdatePermissions.sh Tue Jan 28 14:57:41 2014 -0800
@@ -47,7 +47,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/policytool/UsePolicy.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/UsePolicy.sh Tue Jan 28 14:57:41 2014 -0800
@@ -46,7 +46,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/security/tools/policytool/i18n.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/security/tools/policytool/i18n.sh Tue Jan 28 14:57:41 2014 -0800
@@ -49,7 +49,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
NULL=/dev/null
PS=":"
FS="/"
--- a/jdk/test/sun/tools/common/CommonSetup.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/tools/common/CommonSetup.sh Tue Jan 28 14:57:41 2014 -0800
@@ -48,6 +48,7 @@
# isSolaris - true if OS is Solaris
# isWindows - true if OS is Windows
# isMacos - true if OS is Macos X
+# isAIX - true if OS is AIX
if [ -z "${TESTJAVA}" ]; then
@@ -83,6 +84,7 @@
isUnknownOS=false
isWindows=false
isMacos=false
+isAIX=false
OS=`uname -s`
@@ -113,6 +115,10 @@
OS="Solaris"
isSolaris=true
;;
+ AIX )
+ OS="AIX"
+ isAIX=true
+ ;;
Windows* )
OS="Windows"
PATTERN_EOL='[
]*$'
--- a/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/tools/jconsole/ResourceCheckTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -54,7 +54,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin)
+ SunOS | Linux | Darwin | AIX)
PATHSEP=":"
;;
--- a/jdk/test/sun/tools/jinfo/Basic.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/tools/jinfo/Basic.sh Tue Jan 28 14:57:41 2014 -0800
@@ -45,7 +45,7 @@
runSA=true
-if [ $isMacos = true ]; then
+if [ $isMacos = true -o $isAIX = true -o `uname -m` = ppc64 ]; then
runSA=false
fi
--- a/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh Tue Jan 28 14:57:41 2014 -0800
@@ -56,7 +56,7 @@
OS=`uname -s`
case "$OS" in
- SunOS | Linux | Darwin )
+ SunOS | Linux | Darwin | AIX )
PATHSEP=":"
;;
--- a/jdk/test/tools/launcher/ExecutionEnvironment.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/tools/launcher/ExecutionEnvironment.java Tue Jan 28 14:57:41 2014 -0800
@@ -62,7 +62,9 @@
public class ExecutionEnvironment extends TestHelper {
static final String LD_LIBRARY_PATH = TestHelper.isMacOSX
? "DYLD_LIBRARY_PATH"
- : "LD_LIBRARY_PATH";
+ : TestHelper.isAIX
+ ? "LIBPATH"
+ : "LD_LIBRARY_PATH";
static final String LD_LIBRARY_PATH_32 = LD_LIBRARY_PATH + "_32";
static final String LD_LIBRARY_PATH_64 = LD_LIBRARY_PATH + "_64";
@@ -134,7 +136,19 @@
for (String x : LD_PATH_STRINGS) {
if (!tr.contains(x)) {
- flagError(tr, "FAIL: did not get <" + x + ">");
+ if (TestHelper.isAIX && x.startsWith(LD_LIBRARY_PATH)) {
+ // AIX does not support the '-rpath' linker options so the
+ // launchers have to prepend the jdk library path to 'LIBPATH'.
+ String aixLibPath = LD_LIBRARY_PATH + "=" +
+ System.getenv(LD_LIBRARY_PATH) +
+ System.getProperty("path.separator") + LD_LIBRARY_PATH_VALUE;
+ if (!tr.matches(aixLibPath)) {
+ flagError(tr, "FAIL: did not get <" + aixLibPath + ">");
+ }
+ }
+ else {
+ flagError(tr, "FAIL: did not get <" + x + ">");
+ }
}
}
}
@@ -170,7 +184,7 @@
Map<String, String> env = new HashMap<>();
- if (TestHelper.isLinux || TestHelper.isMacOSX) {
+ if (TestHelper.isLinux || TestHelper.isMacOSX || TestHelper.isAIX) {
for (String x : LD_PATH_STRINGS) {
String pairs[] = x.split("=");
env.put(pairs[0], pairs[1]);
--- a/jdk/test/tools/launcher/Settings.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/tools/launcher/Settings.java Tue Jan 28 14:57:41 2014 -0800
@@ -73,16 +73,20 @@
}
static void runTestOptionDefault() throws IOException {
+ String stackSize = "256"; // in kb
+ if (getArch().equals("ppc64")) {
+ stackSize = "800";
+ }
TestResult tr = null;
tr = doExec(javaCmd, "-Xms64m", "-Xmx512m",
- "-Xss256k", "-XshowSettings", "-jar", testJar.getAbsolutePath());
+ "-Xss" + stackSize + "k", "-XshowSettings", "-jar", testJar.getAbsolutePath());
containsAllOptions(tr);
if (!tr.isOK()) {
System.out.println(tr.status);
throw new RuntimeException("test fails");
}
tr = doExec(javaCmd, "-Xms65536k", "-Xmx712m",
- "-Xss256000", "-XshowSettings", "-jar", testJar.getAbsolutePath());
+ "-Xss" + stackSize + "000", "-XshowSettings", "-jar", testJar.getAbsolutePath());
containsAllOptions(tr);
if (!tr.isOK()) {
System.out.println(tr.status);
--- a/jdk/test/tools/launcher/TestHelper.java Tue Jan 28 11:22:25 2014 -0800
+++ b/jdk/test/tools/launcher/TestHelper.java Tue Jan 28 14:57:41 2014 -0800
@@ -92,6 +92,8 @@
System.getProperty("os.name", "unknown").startsWith("SunOS");
static final boolean isLinux =
System.getProperty("os.name", "unknown").startsWith("Linux");
+ static final boolean isAIX =
+ System.getProperty("os.name", "unknown").startsWith("AIX");
static final String LIBJVM = isWindows
? "jvm.dll"
: "libjvm" + (isMacOSX ? ".dylib" : ".so");