Details
-
Bug
-
Status: Resolved
-
P4
-
Resolution: Fixed
-
None
Backports
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8304253 | 17.0.8 | Johannes Bechberger | P4 | Resolved | Fixed | master |
Description
AsyncGetCallTrace returns only 3 frames in the sanity test, while GetStackTrace returns 11. The GetStackTrace trace conforms to the actual source code.
GetStackTrace returns a stack trace like the following:
```
Frame 0: Native frame Lprofiling/sanity/ASGSTBaseTest;.checkAsyncGetStackTraceCall()Z
Frame 1: Java frame Lprofiling/sanity/ASGSTBaseTest;.main([Ljava/lang/String;)V: 0
Frame 2: Java frame Ljava/lang/invoke/LambdaForm$DMH.0x0000000801002000;.invokeStatic(Ljava/lang/Object;Ljava/lang/Object;)V: 10
Frame 3: Java frame Ljava/lang/invoke/LambdaForm$MH.0x0000000801003400;.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;: 33
Frame 4: Java frame Ljava/lang/invoke/Invokers$Holder;.invokeExact_MT(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;: 20
Frame 5: Java frame Ljdk/internal/reflect/DirectMethodHandleAccessor;.invokeImpl(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;: 55
Frame 6: Java frame Ljdk/internal/reflect/DirectMethodHandleAccessor;.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;: 23
Frame 7: Java frame Ljava/lang/reflect/Method;.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;: 102
Frame 8: Java frame Lcom/sun/javatest/regtest/agent/MainWrapper$MainThread;.run()V: 134
Frame 9: Java frame Ljava/lang/Thread;.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V: 5
Frame 10: Java frame Ljava/lang/Thread;.run()V: 19
```
AsyncGetCallTrace returns:
```
Frame 0: Native frame Lprofiling/sanity/ASGSTBaseTest;.checkAsyncGetStackTraceCall()Z
Frame 1: Java frame Lprofiling/sanity/ASGSTBaseTest;.main([Ljava/lang/String;)V: 0
Frame 2: Java frame Ljava/lang/invoke/LambdaForm$DMH.0x0000000801002000;.invokeStatic(Ljava/lang/Object;Ljava/lang/Object;)V: 10
```
This is related to a bug in `frame::is_safe_for_sender` which is already fixed on PPC (https://bugs.openjdk.org/browse/JDK-8209996) but is still present on x86, albeit only for AsyncGetCallTrace and not for JFR.
The issue itself first appeared with the implementation ofJDK-8271820 which altered the implementation of Java reflection which is used by the JTREG test runner. So it might affect other code that uses reflection heavily.
This test error occurs when checking for the length of the returned traces in the sanity test (see https://github.com/parttimenerd/jdk/commit/98fe63f42f5a3d5ec9fd151b034dfeb3ef767afd).
GetStackTrace returns a stack trace like the following:
```
Frame 0: Native frame Lprofiling/sanity/ASGSTBaseTest;.checkAsyncGetStackTraceCall()Z
Frame 1: Java frame Lprofiling/sanity/ASGSTBaseTest;.main([Ljava/lang/String;)V: 0
Frame 2: Java frame Ljava/lang/invoke/LambdaForm$DMH.0x0000000801002000;.invokeStatic(Ljava/lang/Object;Ljava/lang/Object;)V: 10
Frame 3: Java frame Ljava/lang/invoke/LambdaForm$MH.0x0000000801003400;.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;: 33
Frame 4: Java frame Ljava/lang/invoke/Invokers$Holder;.invokeExact_MT(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;: 20
Frame 5: Java frame Ljdk/internal/reflect/DirectMethodHandleAccessor;.invokeImpl(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;: 55
Frame 6: Java frame Ljdk/internal/reflect/DirectMethodHandleAccessor;.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;: 23
Frame 7: Java frame Ljava/lang/reflect/Method;.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;: 102
Frame 8: Java frame Lcom/sun/javatest/regtest/agent/MainWrapper$MainThread;.run()V: 134
Frame 9: Java frame Ljava/lang/Thread;.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V: 5
Frame 10: Java frame Ljava/lang/Thread;.run()V: 19
```
AsyncGetCallTrace returns:
```
Frame 0: Native frame Lprofiling/sanity/ASGSTBaseTest;.checkAsyncGetStackTraceCall()Z
Frame 1: Java frame Lprofiling/sanity/ASGSTBaseTest;.main([Ljava/lang/String;)V: 0
Frame 2: Java frame Ljava/lang/invoke/LambdaForm$DMH.0x0000000801002000;.invokeStatic(Ljava/lang/Object;Ljava/lang/Object;)V: 10
```
This is related to a bug in `frame::is_safe_for_sender` which is already fixed on PPC (https://bugs.openjdk.org/browse/JDK-8209996) but is still present on x86, albeit only for AsyncGetCallTrace and not for JFR.
The issue itself first appeared with the implementation of
This test error occurs when checking for the length of the returned traces in the sanity test (see https://github.com/parttimenerd/jdk/commit/98fe63f42f5a3d5ec9fd151b034dfeb3ef767afd).
Attachments
Issue Links
- backported by
-
JDK-8304253 AsyncGetCallTrace obtains too few frames in sanity test
-
- Resolved
-
- relates to
-
JDK-8303168 AsyncGetCallTrace/MyPackage/ASGCTBaseTest.java failed with "GetStackTrace and AsyncGetCallTrace return different number of frames"
-
- In Progress
-
-
JDK-8209996 [PPC64] Fix JFR profiling.
-
- Resolved
-
- links to
-
Commit openjdk/jdk17u-dev/4baaa110
-
Commit openjdk/jdk/db483a38
-
Review openjdk/jdk17u-dev/1197
-
Review openjdk/jdk17u/366
-
Review openjdk/jdk/12535
(3 links to)