Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add full support for calls on z/OS and enable corresponding tests #4907

Merged
merged 17 commits into from
Apr 2, 2020

Commits on Mar 13, 2020

  1. Enhance JitBuilder Call sample to be more exhaustive

    In this change we rewrite the Call sample with a few enhancements to
    introduce all call types:
    
    - JIT to JIT
    - JIT to native
    - JIT to computed native
    - Native to JIT
    
    The test computation is still the same, i.e. we still compute a double
    sum, however we do it in several different ways so as to test calls
    both to and from JIT/native to ensure all paths are working as expected.
    
    This is particularly useful for platforms which have special handling
    of function pointers, such as AIX and z/OS.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    c195267 View commit details
    Browse the repository at this point in the history
  2. Enable Tril tests with calls on z/OS

    Now that we have full support for calls on z/OS we can safely enable
    all Tril tests which were previously disabled.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    7b3ecf2 View commit details
    Browse the repository at this point in the history
  3. Deprecate isXPLinkToPureOSLinkageCall path

    OMR nor any downstream projects support 31-bit XPLINK to OS linkage,
    and the support is also not present in the rest of the compiler. This
    code block is slated for deprecation as we don't anticipate it being
    used.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    cda9342 View commit details
    Browse the repository at this point in the history
  4. Fix loading of double arguments on Z

    The path for loading double arguments for outgoing calls was disabled
    within the `J9_PROJECT_SPECIFIC` ifdef, and as such double arguments
    were not being loaded for outgoing calls.
    
    We fix this by moving the case label outside of the ifdef. In addition
    there is no need to check for `getNumIntegerArgumentRegisters` before
    incrementing the GPR index, similarly to the integer cases since the
    `getIntegerArgumentRegister` API will already return the default value
    if the register index does not participate in the calling convention.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    a971b3c View commit details
    Browse the repository at this point in the history
  5. Add documentation on PPM file format of Mandelbrot sample

    In addition there are some problems with the CMakeLists.txt definition
    for this sample, likely because the sample has been disabled due to
    lack of support for passing arguments to tests generated. We also fix
    this minor issue as part of this commit.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    f20d681 View commit details
    Browse the repository at this point in the history
  6. Enhance Tril LinkageTest to be much more comprehensive

    The current LinkageTest is geared towards running on x86. Now that we
    have full support for calls on z/OS this test can be enhanced. The
    current test has implicit assumptions on the number of arguments that
    are passed on the stack for a particular calling convention.
    
    To be more exhaustive we greatly expand the scope of the testing here
    to the following:
    
    - JIT to {jit|native} calls to functions of different number of
    arguments ranging from 1 to 9 with the same argument type
    - JIT to {jit|native}calls to functions of different number of
    arguments ranging from 1 to 9 with mixed argument types
    
    This ends up running 136 different tests (+ 4 for invalid linkage)
    which covers most cases for passing arguments to and from JIT methods.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    bb4cbe8 View commit details
    Browse the repository at this point in the history
  7. Create the XPLINK Function Descriptor for OMR compiled bodies on z/OS

    System linkage OMR compiled function bodies need to come with a proper
    function descriptor to adhere to XPLINK linkage on z/OS. Currently OMR
    compiled functions return to the user the entry point of the function
    (function's address), however on z/OS we should instead be returning
    the Function Descriptor data structure.
    
    This change implements the Function Descriptor as a snippet in the
    compiled body, similar to the PPA1 and PPA2 snippets. The descriptor is
    then baked into the function literal pool, and when we emit the snippet
    we will update the method address which is used by external APIs.
    
    When dispatching to other native methods (JIT or C-native) we must also
    call through the function descriptor.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    e0fdba4 View commit details
    Browse the repository at this point in the history
  8. Use method symbol address to get the entry point in Tril and JitBuilder

    Some platforms, such as AIX and z/OS, use metadata structures to
    represent "pointer to a function" retrieved via the C `&` operator. On
    AIX and z/OS these are called Function Descriptors. We need to
    disambiguate between the "pointer to a function" and "address of entry
    point of a function".
    
    Currently `getCodeStart` API returns the latter, however this is not
    what we want when we query for the result of a compilation in Tril and
    JitBuilder. We want the former, i.e. the value of the "pointer to a
    function" of the JIT compiled method.
    
    We use the method symbol `getAddress` API here to query for such
    values, and ensuring this value is set properly after binary encoding.
    It is currently set to the result of `getCodeStart` by default, so no
    change in value. If platforms have Function Descriptors it is up to
    those linkages to update this value once the location of the Function
    Descriptor is known.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    cbc0185 View commit details
    Browse the repository at this point in the history
  9. Reformat performProcessRelocationsPhase function

    The indentation in it's current state is very confusing [1], and at
    first sight one may think the:
    
    ```
         if (comp->getCurrentMethod() == NULL)
            {
            comp->getMethodSymbol()->setMethodAddress(cg->getBinaryBufferStart());
            }
    ```
    
    piece of code is guarded by the `if (cg->getAheadOfTimeCompile() &&`
    check, which is what I first thought, but upon a more careful
    inspection the indentation was hiding this is not the case.
    
    [1] https://github.com/eclipse/omr/blob/31db81f3d84a431736ac7a9ff1b3980158fae258/compiler/codegen/OMRCodeGenPhase.cpp#L182-L202
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    448f3f0 View commit details
    Browse the repository at this point in the history
  10. Enable JitBuilder extended tests on z/OS

    Now that we have full support for calling methods on z/OS we can enable
    the full suite of extended JitBuilder tests on the farm.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    eaaa3c7 View commit details
    Browse the repository at this point in the history
  11. Revert "Disable test compiler tests on z/OS"

    This reverts commit eb3b237.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    9278fbe View commit details
    Browse the repository at this point in the history
  12. Revert "Disable Tril's IlGenTest on z/OS"

    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 13, 2020
    Configuration menu
    Copy the full SHA
    5545930 View commit details
    Browse the repository at this point in the history

Commits on Mar 20, 2020

  1. Replace uintptrj_t with uintptr_t

    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    68fafb1 View commit details
    Browse the repository at this point in the history
  2. Add missing OMRPORT_ACCESS_FROM_OMRPORT in LinkageTest

    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 20, 2020
    Configuration menu
    Copy the full SHA
    0bd553a View commit details
    Browse the repository at this point in the history

Commits on Mar 31, 2020

  1. Simplify if/else to ternary in OMRLinkage.cpp

    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 31, 2020
    Configuration menu
    Copy the full SHA
    f5f00a4 View commit details
    Browse the repository at this point in the history
  2. Remove redundant static_cast in LinkageTest.cpp

    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 31, 2020
    Configuration menu
    Copy the full SHA
    fa96327 View commit details
    Browse the repository at this point in the history
  3. Add SKIP_ON_S390_LINUX macros and use them in LinkageTest.cpp

    These helper macros will skip tests based on architecture and operating
    system combinations.
    
    Signed-off-by: Filip Jeremic <fjeremic@ca.ibm.com>
    fjeremic committed Mar 31, 2020
    Configuration menu
    Copy the full SHA
    cf60a96 View commit details
    Browse the repository at this point in the history