<AWT Dev> RFR(L) - 2nd round: 8024854: Basic changes and files to build the class library on AIX

Phil Race philip.race at oracle.com
Tue Nov 26 20:01:11 UTC 2013


Looking only at what you needed to change this time round, all seems 
fine now.

-phil.

On 11/26/13 8:23 AM, Volker Simonis wrote:
> Hi,
>
> thanks to everybody for the prompt and helpful reviews. Here comes the 
> final webrev which incorporates all the corrections and suggestions 
> from the second review round:
>
> http://cr.openjdk.java.net/~simonis/webrevs/8024854.v3/ 
> <http://cr.openjdk.java.net/%7Esimonis/webrevs/8024854.v3/>
>
> I've successfully build (and run some smoke tests) with these changes 
> on Linux (x86_32, x86_64, ppc64), Solaris/sparcv9, Windows/x86_64, 
> MacOSX and AIX (5.3, 7.1).
>
> So if nobody vetoes these changes are ready for push into our staging 
> repository.
>
> @Vladimir: can I push them or do you want to run them trough JPRT?
>
> Thank you and best regards,
> Volker
>
> PS: compared to the last webrev 
> (http://cr.openjdk.java.net/~simonis/webrevs/8024854.v2/ 
> <http://cr.openjdk.java.net/%7Esimonis/webrevs/8024854.v2/>), I've 
> slightly changed the following files:
>
> makefiles/lib/Awt2dLibraries.gmk
> makefiles/lib/NetworkingLibraries.gmk
> makefiles/Setup.gmk
> src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties
> src/aix/classes/sun/nio/ch/AixPollPort.java
> src/aix/classes/sun/nio/fs/AixFileSystem.java
> src/aix/native/java/net/aix_close.c
> src/aix/porting/porting_aix.c
> src/share/native/java/net/net_util.c
> src/share/native/java/net/net_util.h
> src/share/native/sun/awt/medialib/mlib_sys.c
> src/solaris/bin/java_md_solinux.c
> src/solaris/classes/sun/nio/ch/Port.java
> src/solaris/native/java/net/net_util_md.c
> src/solaris/native/sun/java2d/x11/XRBackendNative.c
> src/solaris/native/sun/management/OperatingSystemImpl.c
> src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
> src/windows/native/java/net/net_util_md.c
>
> Most of the changes are cosmetic, except the ones in:
>
> src/share/native/java/net/net_util.c
> src/share/native/java/net/net_util.h
> src/solaris/native/java/net/net_util_md.c
> src/windows/native/java/net/net_util_md.c
>
> where I renamed 'initLocalAddrTable()' to 'platformInit()'. For AIX, 
> this method will now call 'aix_close_init()' as suggested by Alan.
>
> The changes to src/solaris/native/com/sun/ 
> management/UnixOperatingSystem_md.c are now in 
> src/solaris/native/sun/management/OperatingSystemImpl.c because that 
> file was moved by an upstream change.
>
>
>
> On Wed, Nov 20, 2013 at 7:26 PM, Volker Simonis 
> <volker.simonis at gmail.com <mailto:volker.simonis at gmail.com>> wrote:
>
>     Hi,
>
>     this is the second review round for "8024854: Basic changes and
>     files to build the class library on AIX
>     <https://bugs.openjdk.java.net/browse/JDK-8024854>". The previous
>     reviews can be found at the end of this mail in the references
>     section.
>
>     I've tried to address all the comments and suggestions from the
>     first round and to further streamline the patch (it perfectly
>     builds on Linux/x86_64, Linux/PPC664, AIX, Solaris/SPARC and
>     Windows/x86_64). The biggest change compared to the first review
>     round is the new "aix/" subdirectory which I've now created under
>     "jdk/src" and which contains AIX-only code.
>
>     The webrev is against our
>     http://hg.openjdk.java.net/ppc-aix-port/stage repository which has
>     been recently synchronised with the jdk8 master:
>
>     http://cr.openjdk.java.net/~simonis/webrevs/8024854.v2/
>     <http://cr.openjdk.java.net/%7Esimonis/webrevs/8024854.v2/>
>
>     Below (and in the webrev) you can find some comments which explain
>     the changes to each file. In order to be able to push this big
>     change, I need the approval of reviewers from the lib, net, svc,
>     2d, awt and sec groups. So please don't hesitate to jump at it -
>     there are enough changes for everybody:)
>
>     Thank you and best regards,
>     Volker
>
>     *References:*
>
>     The following reviews have been posted so far (thanks Iris for
>     collecting them :)
>
>     - Alan Bateman (lib): Initial comments (16 Sep [2])
>     - Chris Hegarty (lib/net): Initial comments (20 Sep [3])
>     - Michael McMahon (net): Initial comments (20 Sept [4])
>     - Steffan Larsen (svc): APPROVED (20 Sept [5])
>     - Phil Race (2d): Initial comments  (18 Sept [6]); Additional
>     comments (15 Oct [7])
>     - Sean Mullan (sec): Initial comments (26 Sept [8])
>
>     [2]:
>     http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2013-September/001045.html
>     [3]:
>     http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2013-September/001078.html
>     [4]:
>     http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2013-September/001079.html
>     [5]:
>     http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2013-September/001077.html
>     [6]:
>     http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2013-September/001069.html
>     [7]:
>     http://mail.openjdk.java.net/pipermail/2d-dev/2013-October/003826.html
>     [8]:
>     http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2013-September/001081.html
>
>
>     *Detailed change description:*
>
>     The new "jdk/src/aix" subdirectory contains the following new and
>     AIX-specific files for now:
>
>       src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties
>       src/aix/classes/sun/nio/ch/AixAsynchronousChannelProvider.java
>       src/aix/classes/sun/nio/ch/AixPollPort.java
>       src/aix/classes/sun/nio/fs/AixFileStore.java
>       src/aix/classes/sun/nio/fs/AixFileSystem.java
>       src/aix/classes/sun/nio/fs/AixFileSystemProvider.java
>       src/aix/classes/sun/nio/fs/AixNativeDispatcher.java
>       src/aix/classes/sun/tools/attach/AixAttachProvider.java
>       src/aix/classes/sun/tools/attach/AixVirtualMachine.java
>       src/aix/native/java/net/aix_close.c
>       src/aix/native/sun/nio/ch/AixPollPort.c
>       src/aix/native/sun/nio/fs/AixNativeDispatcher.c
>       src/aix/native/sun/tools/attach/AixVirtualMachine.c
>       src/aix/porting/porting_aix.c
>       src/aix/porting/porting_aix.h
>
>
>             src/aix/porting/porting_aix.c
>             src/aix/porting/porting_aix.h
>
>       * Added these two files for AIX relevant utility code.
>       * Currently these files only contain an implementation of
>         |dladdr| which is not available on AIX.
>       * In the first review round the existing |dladdr| users in the
>         code either called the version from the HotSpot on AIX
>         (|src/solaris/native/sun/awt/awt_LoadLibrary.c|) or had a
>         private copy of the whole implementation
>         (|src/solaris/demo/jvmti/hprof/hprof_md.c|). This is now not
>         necessary any more.
>
>     The new file layout required some small changes to the makefiles
>     to make them aware of the new directory locations:
>
>
>             makefiles/CompileDemos.gmk
>
>       * Add an extra argument to |SetupJVMTIDemo| which can be used to
>         pass additional source locations.
>       * Currently this is only used on AIX for the AIX porting
>         utilities which are required by hprof.
>
>
>             makefiles/lib/Awt2dLibraries.gmk
>             makefiles/lib/ServiceabilityLibraries.gmk
>
>       * On AIX add the sources of the AIX porting utilities to the
>         build. They are required by
>         |src/solaris/native/sun/awt/awt_LoadLibrary.c| and
>         |src/solaris/demo/jvmti/hprof/hprof_md.c| because |dladdr| is
>         not available on AIX.
>
>
>             makefiles/lib/NioLibraries.gmk
>
>       * Make the AIX-build aware of the new NIO source locations under
>         |src/aix/native/sun/nio/|.
>
>
>             makefiles/lib/NetworkingLibraries.gmk
>
>       * Make the AIX-build aware of the new |aix_close.c| source
>         location under |src/aix/native/java/net/|.
>
>
>             src/share/bin/jli_util.h
>
>       * Define |JLI_Lseek| on AIX.
>
>
>             src/share/lib/security/java.security-aix
>
>       * Provide default |java.security-aix| for AIX based on the
>         latest Linux version as suggested by Sean Mullan.
>
>
>             src/share/native/common/check_code.c
>
>       * On AIX malloc(0) and calloc(0, ...) return a NULL pointer,
>         which is legal, but the code in |check_code.c| does not
>         handles this properly. So we wrap the two methods on AIX and
>         return a non-NULL pointer even if we allocate 0 bytes.
>
>
>             src/share/native/sun/awt/medialib/mlib_sys.c
>
>       * |malloc| always returns 8-byte aligned pointers on AIX as well.
>
>
>             src/share/native/sun/awt/medialib/mlib_types.h
>
>       * Add AIX to the list of known platforms.
>
>
>             src/share/native/sun/font/layout/KernTable.cpp
>
>       * Rename the macro |DEBUG| to |DEBUG_KERN_TABLE| because |DEBUG|
>         is too common and may be defined in other headers as well as
>         on the command line and |xlc| bails out on macro redefinitions
>         with a different value.
>
>
>             src/share/native/sun/security/ec/impl/ecc_impl.h
>
>       * Define required types and macros on AIX.
>
>
>             src/solaris/back/exec_md.c
>
>       * AIX behaves like Linux in this case so check for it in the
>         Linux branch.
>
>
>             src/solaris/bin/java_md_solinux.c,
>             src/solaris/bin/java_md_solinux.h
>
>       * On AIX |LD_LIBRARY_PATH| is called |LIBPATH|
>       * Always use |LD_LIBRARY_PATH| macro instead of using the string
>         "|LD_LIBRARY_PATH|" directly to cope with different library
>         path names.
>       * Add |jre/lib/<arch>/jli| to the standard library search path
>         on AIX because the AIX linker doesn't support the |-rpath| option.
>       * Replace |#ifdef __linux__| by |#ifndef __solaris__| because in
>         this case, AIX behaves like Linux.
>       * Removed the definition of |JVM_DLL|, |JAVA_DLL| and
>         |LD_LIBRARY_PATH| from |java_md_solinux.h| because the macros
>         are redefined in the corresponding |.c| files anyway.
>
>
>             src/aix/classes/sun/awt/fontconfigs/aix.fontconfig.properties
>
>       * Provide basic |fontconfig.properties|for AIX.
>
>
>             src/solaris/classes/java/lang/UNIXProcess.java.aix,
>             src/aix/classes/sun/tools/attach/AixAttachProvider.java,
>             src/aix/classes/sun/tools/attach/AixVirtualMachine.java,
>             src/aix/native/sun/tools/attach/AixVirtualMachine.c
>
>       * Provide AIX specific Java versions, mostly based on the
>         corresponding Linux versions.
>
>
>             src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java
>             src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java
>
>       * Detect AIX operating system and return the corresponding
>         channel and file system providers.
>
>
>             src/solaris/classes/sun/nio/ch/Port.java
>
>       * Add a callback function |unregisterImpl(int fd)| for
>         implementations that need special handling when |fd| is
>         removed and call it from |unregister(int fd)|. By default the
>         implementation of |unregisterImpl(int fd)| is empty except for
>         the derived |AixPollPort| class on AIX.
>
>
>             src/solaris/demo/jvmti/hprof/hprof_md.c
>
>       * Add AIX support. AIX mostly behaves like Linux, with the one
>         exception that it has no |dladdr| functionality.
>       * Use the |dladdr| implementation from |porting_aix.{c,h}| on AIX.
>
>
>             src/solaris/native/com/sun/management/UnixOperatingSystem_md.c
>
>       * Adapt for AIX (i.e. use |libperfstat| on AIX to query OS memory).
>
>
>             src/solaris/native/common/jdk_util_md.h
>
>       * Add AIX definitions of the |ISNANF| and |ISNAND| macros.
>
>
>             src/solaris/native/java/io/io_util_md.c
>
>       * AIX behaves like Linux in this case so check for it in the
>         Linux branch.
>
>
>             src/solaris/native/java/lang/UNIXProcess_md.c
>
>       * AIX behaves mostly like Solraris in this case so adjust the
>         ifdefs accordingly.
>
>
>             src/solaris/native/java/lang/childproc.c
>
>       * AIX does not understand '/proc/self' - it requires the real
>         process ID to query the proc file system for the current process.
>
>
>             src/solaris/native/java/net/NetworkInterface.c
>
>       * Add AIX support into the Linux branch because AIX mostly
>         behaves like AIX for IPv4.
>       * AIX needs a special function to enumerate IPv6 interfaces and
>         to query the MAC address.
>       * Moved the declaration of |siocgifconfRequest| to the beginning
>         a the function (as recommend by Michael McMahon) to remain C89
>         compatible.
>
>
>             src/solaris/native/java/net/PlainSocketImpl.c
>
>       * On AIX (like on Solaris) |setsockopt| will set errno to
>         |EINVAL| if the socket is closed. The default error message is
>         then confusing.
>
>
>             src/aix/native/java/net/aix_close.c,
>             src/share/native/java/net/net_util.c
>
>       * As recommended by Michael McMahon and Alan Bateman I've move
>         an adapted version of |linux_close.c| to
>         |src/aix/native/java/net/aix_close.c| because we also need the
>         file and socket wrappers on AIX.
>       * Compared to the Linux version, we've added the initialization
>         of some previously uninitialized data structures.
>       * Also, 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|.
>
>
>             src/solaris/native/java/net/net_util_md.h
>
>       * AIX needs the same workaround for I/O cancellation like Linux
>         and MacOSX.
>
>
>             src/solaris/native/java/net/net_util_md.c
>
>       * |SO_REUSEADDR| is called |SO_REUSEPORT| on AIX.
>       * On AIX we have to ignore failures due to |ENOBUFS| when
>         setting the |SO_SNDBUF|/|SO_RCVBUF| socket options.
>
>
>             src/solaris/native/java/util/TimeZone_md.c
>
>       * Currently on AIX the only way to get the platform time zone is
>         to read it from the |TZ| environment variable.
>
>
>             src/solaris/native/sun/awt/awt_LoadLibrary.c
>
>       * Use the |dladdr| from |porting_aix.{c,h}| on AIX.
>
>
>             src/solaris/native/sun/awt/fontpath.c
>
>       * Changed some macros from |if !defined(__linux__)| to |if
>         defined(__solaris__)| because that's their real meaning.
>       * Add AIX specific fontpath settings and library search paths
>         for |libfontconfig.so|.
>
>
>             src/solaris/native/sun/java2d/x11/X11SurfaceData.c
>
>       * Rename the |MIN| and |MAX| macros to |XSD_MIN| and |XSD_MAX|
>         to avoid name clashes (|MIN| and |MAX| are much too common and
>         thexy are already defined in some AIX system headers).
>
>
>             src/solaris/native/sun/java2d/x11/XRBackendNative.c
>
>       * Handle AIX like Solaris.
>
>
>             src/solaris/native/sun/nio/ch/Net.c
>
>       * Add AIX-specific includes and constant definitions.
>       * On AIX "socket extensions for multicast source filters"
>         support depends on the OS version. Check for this and throw
>         appropriate exceptions if it is requested but not supported.
>         This is needed to pass
>         JCK-api/java_nio/channels/DatagramChannel/DatagramChannel.html#Multicast
>
>
>             src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
>
>       * On AIX |strerror()| is not thread-safe so we have to use
>         |strerror_r()| instead.
>       * 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.
>       * Handle some AIX corner cases for the results of the
>         |statvfs64()| call.
>       * On AIX |getgrgid_r()| returns ESRCH if group does not exist.
>
>
>             src/solaris/native/sun/security/pkcs11/j2secmod_md.c
>
>       * Use |RTLD_LAZY| instead of |RTLD_NOLOAD| on AIX.
>
>
>             test/java/lang/ProcessBuilder/Basic.java
>             test/java/lang/ProcessBuilder/DestroyTest.java
>
>       * Port this test to AIX and make it more robust (i.e. recognize
>         the "C" locale as |isEnglish()|, ignore VM-warnings in the
>         output, make sure the "grandchild" processes created by the
>         test don't run too long (60s vs. 6666s) because in the case of
>         test problems these processes will pollute the process space,
>         make sure the test fails with an error and doesn't hang
>         indefinitley in the case of a problem).
>
>     *Q (Michael McMahon):* Seems to be two macros _AIX and AIX. Is
>     this intended?
>
>     Well, |_AIX| is defined in some system headers while |AIX| is
>     defined by the build system. This is already used inconsistently
>     (i.e. |__linux__| vs. |LINUX|) and in general I try to be
>     consistent with the style of the file where I the changes are.
>     That said, I changes most of the occurences of |AIX| to |_AIX|.
>
>     *Q (Alan Bateman):* There are a few changes for OS/400 in the
>     patch, are they supposed to be there?
>
>     We currently don't support OS/400 (later renamed into i5/OS and
>     currently called IBM i) in our OpenJDK port but we do support it
>     in our internel, SAP JVM build. We stripped out all the extra
>     OS/400 functionality from the port but in some places where there
>     is common functionality needd by both, AIX and OS/400 the OS/400
>     support may still be visible in the OpenJDK port. I don't think
>     this is a real problem and it helps us to keep our internel
>     sources in sync with the OpenJDK port. That said, I think I've
>     removed all the references to OS/400 now.
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/security-dev/attachments/20131126/51b1b229/attachment.htm>


More information about the security-dev mailing list