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.simo...@gmail.com <mailto:volker.simo...@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.




Reply via email to