[External] : Re: [foreign-memaccess+abi] Integrated: 8268673: Stack walk across optimized entry frame on fresh native thread fails
Jorn Vernee
jorn.vernee at oracle.com
Tue Jun 15 15:46:16 UTC 2021
Ok thanks,
If upcalls are involved it makes sense then that the
ProgrammableUpcallHandler.USE_INTRINSICS has an effect. Both invocation
modes should behave the same, but the implementations are completely
separate, so if setting the flag to false makes a difference there might
be a problem when passing one of the arguments when USE_INTRINSICS=true.
Thanks for testing, I'll try and reproduce the issue here as well.
Jorn
On 15/06/2021 17:10, Sebastian Stenzel wrote:
> A reference to the first mentioned method is stored in a struct [1]
> (defined in fuse_operations.h) right here [2], which then gets passed
> to FUSE. FUSE then decides to call some of these methods when a
> corresponding file system access happens.
>
> [1]:
> https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/main/java/de/skymatic/fusepanama/lowlevel/fuse_operations.java#L28
> <https://urldefense.com/v3/__https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/main/java/de/skymatic/fusepanama/lowlevel/fuse_operations.java*L28__;Iw!!GqivPVa7Brio!IACTB0TzhBi09Zn2FRLC-Lkt6VqU7CWFBtZDudXO2BDhgk1TYYFrljCX5TIPESgu$>
> [2]:
> https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/main/java/de/skymatic/fusepanama/FuseOperations.java#L25
> <https://urldefense.com/v3/__https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/main/java/de/skymatic/fusepanama/FuseOperations.java*L25__;Iw!!GqivPVa7Brio!IACTB0TzhBi09Zn2FRLC-Lkt6VqU7CWFBtZDudXO2BDhgk1TYYFrljCX5f8dc5As$>
>
>
>> On 15. Jun 2021, at 16:52, Jorn Vernee <jorn.vernee at oracle.com
>> <mailto:jorn.vernee at oracle.com>> wrote:
>>
>> Hi Sebastian,
>>
>> This sounds very odd, as the code you link to doesn't seem to use
>> upcalls? The ProgrammableUpcallHandler.USE_INTRINSICS flag is only
>> used to control the invocation mode of upcalls.
>>
>> May I ask how exactly you're diagnosing this problem?
>>
>> Jorn
>>
>> On 15/06/2021 15:48, Sebastian Stenzel wrote:
>>> Hi,
>>>
>>> I have pulled this fix (foreign-jextract commit e4f89d7b0f8) and can
>>> confirm that the crashes are gone. However, copying bytes from heap
>>> to native buffers still is a little odd. Take this code: [1]; [2]
>>>
>>> If I run the project with
>>> `-Djdk.internal.foreign.ProgrammableUpcallHandler.USE_INTRINSICS=false`,
>>> it copies the contents of HELLO_STR to the segment. Without the flag
>>> it copies 13 null-bytes, though. 13 being the correct length of the
>>> source buffer.
>>>
>>> I guess this is not related to the stack walking problem. The only
>>> thing I can tell is that said flag has some influence on the behaviour.
>>>
>>> Cheers!
>>> Sebastian
>>>
>>>
>>> [1] my upcall method:
>>> https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/main/java/de/skymatic/fusepanama/FuseOperations.java#L222-L227
>>> <https://urldefense.com/v3/__https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/main/java/de/skymatic/fusepanama/FuseOperations.java*L222-L227__;Iw!!GqivPVa7Brio!IACTB0TzhBi09Zn2FRLC-Lkt6VqU7CWFBtZDudXO2BDhgk1TYYFrljCX5SMpro9I$>
>>> [2] method invoked during upcall, which copies bytes to the
>>> specified segment:
>>> https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/test/java/de/skymatic/fusepanama/examples/HelloPanamaFileSystem.java#L109-L112
>>> <https://urldefense.com/v3/__https://github.com/skymatic/fuse-panama/blob/3e5dc43ec7a6ba7e2c39fcce0db48d4350fdc0b3/src/test/java/de/skymatic/fusepanama/examples/HelloPanamaFileSystem.java*L109-L112__;Iw!!GqivPVa7Brio!IACTB0TzhBi09Zn2FRLC-Lkt6VqU7CWFBtZDudXO2BDhgk1TYYFrljCX5ZFCsni2$>
>>>
>>>
>>>> On 14. Jun 2021, at 17:09, Jorn Vernee <jvernee at openjdk.java.net
>>>> <mailto:jvernee at openjdk.java.net>> wrote:
>>>>
>>>> On Mon, 14 Jun 2021 12:13:52 GMT, Jorn Vernee <jvernee at openjdk.org
>>>> <mailto:jvernee at openjdk.org>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> When native code creates a new thread and calls a Panama upcall,
>>>>> and during that upcall a stack walk is triggered, getting the
>>>>> sender frame for the entry frame is not possible, and should not
>>>>> be attempted.
>>>>>
>>>>> For JNI this case is handled already by indicating the end of the
>>>>> stack frame stream, but for Panama upcalls it is not, and the VM
>>>>> will either hit an assert or crash when trying to find the last
>>>>> Java frame before the entry frame (which does not exist in this case).
>>>>>
>>>>> This patch adds handling for panama upcalls frames to
>>>>> `frame::is_first_frame`, which is used by the stack walking code
>>>>> to determine when to stop walking.
>>>>>
>>>>> Thanks,
>>>>> Jorn
>>>>
>>>> This pull request has now been integrated.
>>>>
>>>> Changeset: 2287ca5a
>>>> Author: Jorn Vernee <jvernee at openjdk.org
>>>> <mailto:jvernee at openjdk.org>>
>>>> URL:
>>>> https://git.openjdk.java.net/panama-foreign/commit/2287ca5a530c348bc4ec7c0c6774e8ed9101dffa
>>>> <https://git.openjdk.java.net/panama-foreign/commit/2287ca5a530c348bc4ec7c0c6774e8ed9101dffa>
>>>> Stats: 194 lines in 11 files changed: 193 ins; 0 del; 1 mod
>>>>
>>>> 8268673: Stack walk across optimized entry frame on fresh native
>>>> thread fails
>>>>
>>>> Reviewed-by: mcimadamore
>>>>
>>>> -------------
>>>>
>>>> PR: https://git.openjdk.java.net/panama-foreign/pull/558
>>>> <https://git.openjdk.java.net/panama-foreign/pull/558>
>>>
>
More information about the panama-dev
mailing list