< prev index next >

test/jdk/java/foreign/stackwalk/TestAsyncStackWalk.java

Print this page
*** 23,10 ***
--- 23,11 ---
  
  /*
   * @test id=default_gc
   * @requires ((os.arch == "amd64" | os.arch == "x86_64") & sun.arch.data.model == "64") | os.arch == "aarch64"
   * @library /test/lib
+  * @library ../
   * @build sun.hotspot.WhiteBox
   * @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox
   *
   * @run main/othervm
   *   -Xbootclasspath/a:.

*** 50,10 ***
--- 51,11 ---
  /*
   * @test id=zgc
   * @requires (((os.arch == "amd64" | os.arch == "x86_64") & sun.arch.data.model == "64") | os.arch == "aarch64")
   * @requires vm.gc.Z
   * @library /test/lib
+  * @library ../
   * @build sun.hotspot.WhiteBox
   * @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox
   *
   * @run main/othervm
   *   -Xbootclasspath/a:.

*** 78,10 ***
--- 80,11 ---
  /*
   * @test id=shenandoah
   * @requires (((os.arch == "amd64" | os.arch == "x86_64") & sun.arch.data.model == "64") | os.arch == "aarch64")
   * @requires vm.gc.Shenandoah
   * @library /test/lib
+  * @library ../
   * @build sun.hotspot.WhiteBox
   * @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox
   *
   * @run main/othervm
   *   -Xbootclasspath/a:.

*** 104,38 ***
   *   TestAsyncStackWalk
   */
  
  import jdk.incubator.foreign.CLinker;
  import jdk.incubator.foreign.FunctionDescriptor;
  import jdk.incubator.foreign.SymbolLookup;
  import jdk.incubator.foreign.MemoryAddress;
  
  import java.lang.invoke.MethodHandle;
  import java.lang.invoke.MethodType;
  
  import jdk.incubator.foreign.ResourceScope;
  import sun.hotspot.WhiteBox;
  
  import static java.lang.invoke.MethodHandles.lookup;
- import static jdk.incubator.foreign.CLinker.C_POINTER;
  import static jdk.test.lib.Asserts.assertTrue;
  
! public class TestAsyncStackWalk {
      static final WhiteBox WB = WhiteBox.getWhiteBox();
  
!     static final CLinker linker = CLinker.getInstance();
  
      static final MethodHandle MH_asyncStackWalk;
      static final MethodHandle MH_m;
  
      static {
          try {
              System.loadLibrary("AsyncStackWalk");
              SymbolLookup lookup = SymbolLookup.loaderLookup();
              MH_asyncStackWalk = linker.downcallHandle(
                      lookup.lookup("asyncStackWalk").get(),
-                     MethodType.methodType(void.class, MemoryAddress.class),
                      FunctionDescriptor.ofVoid(C_POINTER));
              MH_m = lookup().findStatic(TestAsyncStackWalk.class, "m", MethodType.methodType(void.class));
          } catch (ReflectiveOperationException e) {
              throw new RuntimeException(e);
          }
--- 107,37 ---
   *   TestAsyncStackWalk
   */
  
  import jdk.incubator.foreign.CLinker;
  import jdk.incubator.foreign.FunctionDescriptor;
+ import jdk.incubator.foreign.NativeSymbol;
  import jdk.incubator.foreign.SymbolLookup;
  import jdk.incubator.foreign.MemoryAddress;
  
  import java.lang.invoke.MethodHandle;
  import java.lang.invoke.MethodType;
  
  import jdk.incubator.foreign.ResourceScope;
  import sun.hotspot.WhiteBox;
  
  import static java.lang.invoke.MethodHandles.lookup;
  import static jdk.test.lib.Asserts.assertTrue;
  
! public class TestAsyncStackWalk extends NativeTestHelper {
      static final WhiteBox WB = WhiteBox.getWhiteBox();
  
!     static final CLinker linker = CLinker.systemCLinker();
  
      static final MethodHandle MH_asyncStackWalk;
      static final MethodHandle MH_m;
  
      static {
          try {
              System.loadLibrary("AsyncStackWalk");
              SymbolLookup lookup = SymbolLookup.loaderLookup();
              MH_asyncStackWalk = linker.downcallHandle(
                      lookup.lookup("asyncStackWalk").get(),
                      FunctionDescriptor.ofVoid(C_POINTER));
              MH_m = lookup().findStatic(TestAsyncStackWalk.class, "m", MethodType.methodType(void.class));
          } catch (ReflectiveOperationException e) {
              throw new RuntimeException(e);
          }

*** 144,21 ***
      static int invocations;
      static boolean didStackWalk;
  
      public static void main(String[] args) throws Throwable {
          try (ResourceScope scope = ResourceScope.newConfinedScope()) {
!             MemoryAddress stub = linker.upcallStub(MH_m, FunctionDescriptor.ofVoid(), scope);
              MemoryAddress stubAddress = stub.address();
              invocations = 0;
              didStackWalk = false;
              payload(stubAddress);
              assertTrue(didStackWalk);
          }
      }
  
      static void payload(MemoryAddress cb) throws Throwable {
!         MH_asyncStackWalk.invokeExact(cb);
      }
  
      static void m() {
          if (invocations++ >= 20000) { // warmup
              didStackWalk = true;
--- 146,21 ---
      static int invocations;
      static boolean didStackWalk;
  
      public static void main(String[] args) throws Throwable {
          try (ResourceScope scope = ResourceScope.newConfinedScope()) {
!             NativeSymbol stub = linker.upcallStub(MH_m, FunctionDescriptor.ofVoid(), scope);
              MemoryAddress stubAddress = stub.address();
              invocations = 0;
              didStackWalk = false;
              payload(stubAddress);
              assertTrue(didStackWalk);
          }
      }
  
      static void payload(MemoryAddress cb) throws Throwable {
!         MH_asyncStackWalk.invoke(cb);
      }
  
      static void m() {
          if (invocations++ >= 20000) { // warmup
              didStackWalk = true;
< prev index next >