8191049: Add alternate version of pns() that is callable from within hotspot source
authorcjplummer
Tue, 14 Nov 2017 18:08:35 -0800
changeset 47891 fa736014cf28
parent 47890 2219a502fd45
child 47892 895fddb973a1
8191049: Add alternate version of pns() that is callable from within hotspot source Summary: added pns2() to debug.cpp Reviewed-by: stuefe, gthornbr
src/hotspot/share/utilities/debug.cpp
--- a/src/hotspot/share/utilities/debug.cpp	Tue Nov 14 14:05:34 2017 -0500
+++ b/src/hotspot/share/utilities/debug.cpp	Tue Nov 14 18:08:35 2017 -0800
@@ -631,6 +631,27 @@
   VMError::print_native_stack(tty, fr, t, buf, sizeof(buf));
 }
 
+//
+// This version of pns() will not work when called from the debugger, but is
+// useful when called from within hotspot code. The advantages over pns()
+// are not having to pass in any arguments, and it will work on Windows/x64.
+//
+// WARNING: Only intended for use when debugging. Do not leave calls to
+// pns2() in committed source (product or debug).
+//
+extern "C" void pns2() { // print native stack
+  Command c("pns2");
+  static char buf[O_BUFLEN];
+  if (os::platform_print_native_stack(tty, NULL, buf, sizeof(buf))) {
+    // We have printed the native stack in platform-specific code,
+    // so nothing else to do in this case.
+  } else {
+    Thread* t = Thread::current_or_null();
+    frame fr = os::current_frame();
+    VMError::print_native_stack(tty, fr, t, buf, sizeof(buf));
+  }
+}
+
 #endif // !PRODUCT
 
 //////////////////////////////////////////////////////////////////////////////