[foreign] RFR: Windows support
Sundararajan Athijegannathan
sundararajan.athijegannathan at oracle.com
Thu Jan 10 13:26:20 UTC 2019
The 4 bugs (including the preexisting one) are as follows:
1) Library.getDefault() does not work on Windows
https://bugs.openjdk.java.net/browse/JDK-8211060
2) Binder changes are needed to support paname foreign API on Windows
https://bugs.openjdk.java.net/browse/JDK-8216485
3) jextract LayoutUtils has to be modified for Windows
https://bugs.openjdk.java.net/browse/JDK-8216484
4) jextract tests have to be modified to run on Windows platform
https://bugs.openjdk.java.net/browse/JDK-8216483
PS. I'm running the test patch on Mac and Linux to make sure that the
testing is fine on other platforms.
Thanks,
-Sundar
On 10/01/19, 6:14 PM, Maurizio Cimadamore wrote:
> Hi Jorn,
> Thanks for the hard work; we are in the process of reviewing the
> changes. Here's what we'll do:
>
> 1) we will create issues for each of the patches (Sundar is doing that
> as we speak)
> 2) we will try to get easier changes in sooner rather than later
> (that is, patches 1, 3, 4)
> 3) in parallel, I'll be doing an in-depth review of your binder
> changes and perhaps start a separate thread on that
>
> Thanks
> Maurizio
>
>
> On 09/01/2019 21:17, Jorn Vernee wrote:
>
>> Hi,
>>
>> I have fixed the last few failing tests on Windows so this is an RFR
>> for adding Windows support to Panama FFI. There's a lot of changes so
>> I've split it into 4 patches. We should probably focus on one of
>> these one at a time, but I wanted to include all the changes needed
>> to pass the tests at least. It's probably best to start with [2],
>> since that implements the core functionality.
>>
>> Default lib fixes [1] (needed for the default library to work on
>> Windows)
>> Hotspot, binder tweaks [2] (Changes to the stub generation and shared
>> binder code. Includes the Windows implementation of SystemABI)
>> jextract tweaks [3] (minor jextract portability changes)
>> test tweaks [4] (changes needed to run, and pass the tests on Windows)
>>
>> There are some tests that are disabled:
>> - EmptyStructTest; Empty structs are a GCC extension.
>> - BadBitfieldTest; this is testing for a problem the MSVC ABI
>> doesn't seem to have.
>> - StdioTest; relies on standard system header path, which on
>> Windows is more tricky to find.
>> - ComplexTest; Windows complex types work very differently in C
>> source, so the current test doesn't compile.
>> - LongDoubleTest; long double is only 64 bits on Windows. This
>> might need a replacement test still, but it should work the same as
>> `double` on Windows.
>> - Getpid; No getpid on Windows in the C standard.
>> - UnixSystem; Windows is not unix.
>>
>> (Some tests specifically for Windows could be added, but I'm leaving
>> that for a different RFR)
>>
>> Changes for [1]:
>> - replace default library handle with a findEntryInProcess since
>> Windows doesn't have an RTLD_DEFAULT equivalent.
>>
>> Changes for [2]:
>> - changed upcall/downcall stub generation to follow the MS ABI on
>> windows (using compiler switches)
>> - added SKIPs to shuffle recipe generation when e.g. the first
>> float is passed in the second float register (which can be the case
>> on windows).
>> - moved boxValue and unboxValue into SystemABI, since they turned
>> out to be ABI specific, and made tweaks to the windows version for
>> handeling structs being passed by value.
>> - moved upcall stub natives into shared ABI package.
>> - Let each ABI have it's own VarargsInvoker implementation, since
>> we need to propagate more info about which arguments are variadic on
>> windows.
>> - CallingSequence::storageOffset is no longer relying on
>> Storage::getStorageIndex, since that is not the same as what's
>> actually needed; being the index of the binding. (the 2 can differ on
>> windows, but not on sysv).
>> - Added Windows ABI implementation classes based on the SysV ones.
>> - Let UniversalUpcallHandler write the in-memory-return pointer to
>> RAX since that is required on Windows (and I think this change is
>> portable).
>>
>> Changes for [3]:
>> - instead of hardcoding the size of `long` `unsigned long` and
>> `long double`, delegate to libclang to tell us the size, since these
>> types have different sizes on the 2 ABIs. (This is pretty ad-hoc, so
>> probably needs to be improved. But, I have little experience with the
>> jextract code, so I'm open to suggestion of how to better fix this)
>>
>> Changes for [4]:
>> - added dll exports for native symbols using compiler switches.
>> - added test for small (fits-in-register) struct by-value passing,
>> since windows has special handling for those.
>> - removed depencies on POSIX functions from some tests where it
>> wasn't really needed, so they could run on windows.
>> - propagate clang library name to TestJextractFFI, since on Windows
>> we need to load "libclang".
>> - let Runner test use windows specific files to compare with for
>> bitfields.h and simple.h
>> - use `long long` instead of `long` in some cases since `long long`
>> is 64 bits on SysV and MSx64
>>
>> Thanks,
>> Jorn
>>
>> [1] :
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/8211060/webrev.01/
>> [2] :
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/windows/webrev.03/
>> [3] :
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/windows_jextract/webrev.00/
>> [4] :
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/windows_tests/webrev.02/
More information about the panama-dev
mailing list