RFR: frame::describe: fix stack parameter location.

Richard Reingruber rrich at openjdk.java.net
Wed May 4 13:41:38 UTC 2022


On Wed, 4 May 2022 12:29:09 GMT, Ron Pressler <rpressler at openjdk.org> wrote:

>> Hi,
>> 
>> I'd like to contribute a small fix for a bug in `frame::describe()` I noticed while working on the ppc64le port.
>> 
>> Symptom: wrong location of stack parameters in compiled java calls on ppc64:
>> 
>> 
>> [6.223s][trace][continuations ]  0x00007fffb53bd660: 0x00007fffb53bd830 #6 nmethod 0x00007fffa5026890 for method J BasicExpWIP$ContinuationCompiledFrameWithStackArgs.testMethod_12_dontinline(JJJJJJJJJJJJJ)J
>> [6.223s][trace][continuations ]                                         - #0 scope BasicExpWIP$ContinuationCompiledFrameWithStackArgs.testMethod_12_dontinline(JJJJJJJJJJJJJ)J @ 28
>> [6.223s][trace][continuations ]                                         param 7 long for #6
>> [6.223s][trace][continuations ]                                         unextended_sp for #7
>> [6.223s][trace][continuations ]                                         sp for #7
>> [6.223s][trace][continuations ]  0x00007fffb53bd658: 0x00007fffa10077b0
>> [6.223s][trace][continuations ]  0x00007fffb53bd650: 0x00007fffb53bd7c8
>> [6.223s][trace][continuations ]  0x00007fffb53bd648: 0x00007fffb7c90c20
>> [6.223s][trace][continuations ]  0x00007fffb53bd640: 0x000000000000000d
>> [6.223s][trace][continuations ]  0x00007fffb53bd638: 0x000000000000000c
>> [6.223s][trace][continuations ]  0x00007fffb53bd630: 0x000000000000000b
>> [6.223s][trace][continuations ]  0x00007fffb53bd628: 0x000000000000000a
>> [6.223s][trace][continuations ]  0x00007fffb53bd620: 0x0000000000000009 param 13 long for #5
>> [6.223s][trace][continuations ]  0x00007fffb53bd618: 0x0000000000000008 param 12 long for #5
>> [6.223s][trace][continuations ]  0x00007fffb53bd610: 0x0000000000000007 param 11 long for #5
>> [6.223s][trace][continuations ]  0x00007fffb53bd608: 0x00007fffb53bd5c0 param 10 long for #5
>> [6.224s][trace][continuations ]  0x00007fffb53bd600: 0x00007fffa5026ba8 param 9 long for #5
>> [6.224s][trace][continuations ]                                         return address for #6
>> [6.224s][trace][continuations ]  0x00007fffb53bd5f8: 0x00007fffa0e3a220 param 8 long for #5
>> [6.224s][trace][continuations ]  0x00007fffb53bd5f0: 0x00007fffb53bd660 #5 nmethod 0x00007fffa5026190 for method J BasicExpWIP$ContinuationCompiledFrameWithStackArgs.testMethod_13_dontinline(JJJJJJJJJJJJJJ)J
>> 
>> 
>> You can see that the locations of the stack parameters are wrong, because value for param N is (long)N.
>> 
>> Trace with the fix:
>> 
>> 
>> [8.273s][trace][continuations ]  0x00007fffb53bd660: 0x00007fffb53bd830 #6 nmethod 0x00007fffa5026890 for method J BasicExpWIP$ContinuationCompiledFrameWithStackArgs.testMethod_12_dontinline(JJJJJJJJJJJJJ)J
>> [8.273s][trace][continuations ]                                         - #0 scope BasicExpWIP$ContinuationCompiledFrameWithStackArgs.testMethod_12_dontinline(JJJJJJJJJJJJJ)J @ 28
>> [8.273s][trace][continuations ]                                         unextended_sp for #7
>> [8.273s][trace][continuations ]                                         sp for #7
>> [8.273s][trace][continuations ]  0x00007fffb53bd658: 0x00007fffa10077b0
>> [8.273s][trace][continuations ]  0x00007fffb53bd650: 0x00007fffb53bd7c8
>> [8.273s][trace][continuations ]  0x00007fffb53bd648: 0x00007fffb7c90c20
>> [8.273s][trace][continuations ]  0x00007fffb53bd640: 0x000000000000000d param 13 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd638: 0x000000000000000c param 12 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd630: 0x000000000000000b param 11 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd628: 0x000000000000000a param 10 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd620: 0x0000000000000009 param 9 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd618: 0x0000000000000008 param 8 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd610: 0x0000000000000007 param 7 long for #5
>> [8.273s][trace][continuations ]  0x00007fffb53bd608: 0x00007fffb53bd5c0
>> [8.273s][trace][continuations ]  0x00007fffb53bd600: 0x00007fffa5026ba8 return address for #6
>> [8.273s][trace][continuations ]  0x00007fffb53bd5f8: 0x00007fffa0e3a220
>> [8.273s][trace][continuations ]  0x00007fffb53bd5f0: 0x00007fffb53bd660 #5 nmethod 0x00007fffa5026190 for method J BasicExpWIP$ContinuationCompiledFrameWithStackArgs.testMethod_13_dontinline(JJJJJJJJJJJJJJ)J
>> 
>> 
>> See also [`reg2offset()`](https://github.com/openjdk/jdk/blob/3d07b3c7f01b60ff4dc38f62407c212b48883dbf/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp#L573-L575)
>> 
>> I've done only manual testing.
>> 
>> The change has no effect on x86_64/aarch64 because there [`SharedRuntime::out_preserve_stack_slots()`](https://github.com/openjdk/jdk/blob/3d07b3c7f01b60ff4dc38f62407c212b48883dbf/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp#L2259-L2261) returns 0.
>> 
>> Thanks, Richard.
>
> Passes Loom tiers 1-4. Please `/integrate`.

Thanks @pron and @robehn for looking at this pr.
I think Ron's `integrate` had no effect. Probably I have to do that myself and then the pr can be sponsored with the `sponsor` command.

Let's try...

-------------

PR: https://git.openjdk.java.net/loom/pull/179


More information about the loom-dev mailing list