Help with VM Crash using the foreign linker

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon May 17 11:53:53 UTC 2021


On 16/05/2021 01:27, Duncan McLean wrote:
> Hi Jorn,
>
> Thank you for the suggestion. I've looked into this and the 
> FunctionDescriptor is exactly as you have suggested: 
>  FunctionDescriptor.of(C_DOUBLE, C_POINTER).

Are you sure that's the correct descriptor? Looking at the definition of 
PassingStruct:

https://github.com/boulder-on/JPassport/blob/b3cde66adf3cd1ebceaf2f8adba87890a967f25a/test_jpassport/src/main/java/jpassport/test/structs/TestStructCalls.java#L6

It seems like the struct is being passed by value? Or, when a method in 
JPassport is defined to take a struct Foo, you always imply Foo* - e.g. 
pass the struct by pointer? If that's the case, then I think the 
function descriptor is correct.

Maurizio


>
> I went so far as to hard code FunctionDescriptor call when I was 
> running my TestUsingStructs test case. The FunctionDescriptor is build at:
>
> https://github.com/boulder-on/JPassport/blob/ddaf4482045b83be95000e7fcc240bf720f0b525/jpassport/src/main/java/jpassport/PassportFactory.java#L89 
> <https://urldefense.com/v3/__https://github.com/boulder-on/JPassport/blob/ddaf4482045b83be95000e7fcc240bf720f0b525/jpassport/src/main/java/jpassport/PassportFactory.java*L89__;Iw!!GqivPVa7Brio!LGQVZQLZaKulviK8dN2_jjzVrSssd7ygBA_DkDCRPabfkoDT_UJQ2VmAA5shdr99KgWThnU$>
>
> For some reason I can only run my test cases from my IDE, maven 
> doesn't like something I'm doing (right now it finds my test classes, 
> but no test cases). However, when run from the IDE, 
> TestUsingStructs crashes the vm every time on the first invokeExact 
> call it encounters. When I comment out the deleting of previously 
> compiled files and the compiling of new files (such that the test runs 
> with the last compiled version) the test case always works.
>
> Line for deleting previous compiles:
> https://github.com/boulder-on/JPassport/blob/ddaf4482045b83be95000e7fcc240bf720f0b525/jpassport/src/main/java/jpassport/PassportWriter.java#L535 
> <https://urldefense.com/v3/__https://github.com/boulder-on/JPassport/blob/ddaf4482045b83be95000e7fcc240bf720f0b525/jpassport/src/main/java/jpassport/PassportWriter.java*L535__;Iw!!GqivPVa7Brio!LGQVZQLZaKulviK8dN2_jjzVrSssd7ygBA_DkDCRPabfkoDT_UJQ2VmAA5shdr99dD1D-Kg$>
>
> Line for compiling new classes:
> https://github.com/boulder-on/JPassport/blob/ddaf4482045b83be95000e7fcc240bf720f0b525/jpassport/src/main/java/jpassport/PassportWriter.java#L551 
> <https://urldefense.com/v3/__https://github.com/boulder-on/JPassport/blob/ddaf4482045b83be95000e7fcc240bf720f0b525/jpassport/src/main/java/jpassport/PassportWriter.java*L551__;Iw!!GqivPVa7Brio!LGQVZQLZaKulviK8dN2_jjzVrSssd7ygBA_DkDCRPabfkoDT_UJQ2VmAA5shdr99UqpjNWk$>
>
> Is there any more detailed logging I can generate?
>
> Thanks again,
> Duncan
>
> On Sat, May 15, 2021 at 9:36 AM Jorn Vernee <jorn.vernee at oracle.com 
> <mailto:jorn.vernee at oracle.com>> wrote:
>
>     Hi,
>
>     Looking at the crash log, as well as the test, you seem to be
>     passing a
>     single struct to a native function, but the stack trace in the
>     error log
>     shows that the call is not being intrinsified, which should not be
>     the
>     case if you're only passing a single struct on Windows. Either it
>     fits
>     in a register, or it's passed by reference, both of which cases are
>     intrinsified.
>
>     The most likely explanation for that seems to be that you are not
>     using
>     the right FunctionDescriptor when linking, and a crash occurs when
>     the
>     native code is trying to access what it thinks is a pointer to a
>     struct.
>     This is undefined behavior territory, which could explain why the
>     crash
>     only occurs in certain scenarios.
>
>     My advice would be to check the FunctionDescriptor you're using
>     for the
>     linkage request, and make sure it matches the native function
>     declaration. Looking at [1], the FunctionDescriptor you need is
>     FunctionDescriptor.of(C_DOUBLE, C_POINTER).
>
>     HTH,
>     Jorn
>
>     [1] :
>     https://github.com/boulder-on/JPassport/blob/52bfa8b4390fdde57582722a1c8098958088de08/fl_dll/library.c#L330
>     <https://urldefense.com/v3/__https://github.com/boulder-on/JPassport/blob/52bfa8b4390fdde57582722a1c8098958088de08/fl_dll/library.c*L330__;Iw!!GqivPVa7Brio!LGQVZQLZaKulviK8dN2_jjzVrSssd7ygBA_DkDCRPabfkoDT_UJQ2VmAA5shdr99mEQo5Qw$>
>


More information about the panama-dev mailing list