Fix JVMTI GetStackTrace bug

GetStackTrace would incorrectly return ERR(ILLEGAL_ARGUMENT) if the
number frames returned was less then the start depth and start depth
was >= 0. This made some legal stack trace calls impossible.

Instead it should have been checking that at least one frame was
retrieved (since otherwise the start-depth was off the stack).

Test: ./test.py --host
Bug: 132196976
Change-Id: I9f959569f90dbb75de0010173b119472a4b5864e
diff --git a/openjdkjvmti/ti_stack.cc b/openjdkjvmti/ti_stack.cc
index 62204c9..75f0556 100644
--- a/openjdkjvmti/ti_stack.cc
+++ b/openjdkjvmti/ti_stack.cc
@@ -232,7 +232,7 @@
   size_t index = 0;
 };
 
-jvmtiError StackUtil::GetStackTrace(jvmtiEnv* jvmti_env ATTRIBUTE_UNUSED,
+jvmtiError StackUtil::GetStackTrace(jvmtiEnv* jvmti_env,
                                     jthread java_thread,
                                     jint start_depth,
                                     jint max_frame_count,
@@ -282,7 +282,9 @@
       return ERR(THREAD_NOT_ALIVE);
     }
     *count_ptr = static_cast<jint>(closure.index);
-    if (closure.index < static_cast<size_t>(start_depth)) {
+    if (closure.index == 0) {
+      JVMTI_LOG(INFO, jvmti_env) << "The stack is not large enough for a start_depth of "
+                                 << start_depth << ".";
       return ERR(ILLEGAL_ARGUMENT);
     }
     return ERR(NONE);
diff --git a/test/911-get-stack-trace/expected.txt b/test/911-get-stack-trace/expected.txt
index 3179424..42e8aa7 100644
--- a/test/911-get-stack-trace/expected.txt
+++ b/test/911-get-stack-trace/expected.txt
@@ -55,6 +55,8 @@
  bar (IIILart/ControlData;)J 0 26
  foo (IIILart/ControlData;)I 0 21
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
+---------
+ printOrWait (IILart/ControlData;)V 6 41
 From bottom
 ---------
  run ()V 0 25
@@ -62,7 +64,7 @@
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
  bar (IIILart/ControlData;)J 0 26
  foo (IIILart/ControlData;)I 0 21
- doTest ()V 58 32
+ doTest ()V 61 33
  run ()V 0 25
 ---------
  bar (IIILart/ControlData;)J 0 26
@@ -132,6 +134,8 @@
  foo (IIILart/ControlData;)I 0 21
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
  bar (IIILart/ControlData;)J 0 26
+---------
+ wait ()V 2 568
 From bottom
 ---------
  run ()V 4 28
@@ -169,7 +173,7 @@
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
  bar (IIILart/ControlData;)J 0 26
  foo (IIILart/ControlData;)I 0 21
- run ()V 4 61
+ run ()V 4 62
 ---------
  baz (IIILart/ControlData;)Ljava/lang/Object; 2 32
  bar (IIILart/ControlData;)J 0 26
@@ -186,7 +190,7 @@
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
  bar (IIILart/ControlData;)J 0 26
  foo (IIILart/ControlData;)I 0 21
- run ()V 4 61
+ run ()V 4 62
 ---------
  printOrWait (IILart/ControlData;)V 45 54
  baz (IIILart/ControlData;)Ljava/lang/Object; 2 32
@@ -201,13 +205,13 @@
  foo (IIILart/ControlData;)I 0 21
 From bottom
 ---------
- run ()V 4 61
+ run ()V 4 62
 ---------
  foo (IIILart/ControlData;)I 0 21
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
  bar (IIILart/ControlData;)J 0 26
  foo (IIILart/ControlData;)I 0 21
- run ()V 4 61
+ run ()V 4 62
 ---------
  baz (IIILart/ControlData;)Ljava/lang/Object; 8 34
  bar (IIILart/ControlData;)J 0 26
diff --git a/test/911-get-stack-trace/src/art/OtherThread.java b/test/911-get-stack-trace/src/art/OtherThread.java
index 3f5ae59..a513a1b 100644
--- a/test/911-get-stack-trace/src/art/OtherThread.java
+++ b/test/911-get-stack-trace/src/art/OtherThread.java
@@ -38,6 +38,7 @@
     PrintThread.print(t, 1, 25);
     PrintThread.print(t, 0, 7);
     PrintThread.print(t, 2, 7);
+    PrintThread.print(t, 2, 1);
 
     System.out.println("From bottom");
     PrintThread.print(t, -1, 25);
diff --git a/test/911-get-stack-trace/src/art/SameThread.java b/test/911-get-stack-trace/src/art/SameThread.java
index c9afad5..c7efd6a 100644
--- a/test/911-get-stack-trace/src/art/SameThread.java
+++ b/test/911-get-stack-trace/src/art/SameThread.java
@@ -26,6 +26,7 @@
     Recurse.foo(4, 1, 25, null);
     Recurse.foo(4, 0, 5, null);
     Recurse.foo(4, 2, 5, null);
+    Recurse.foo(4, 2, 1, null);
 
     System.out.println("From bottom");
     Recurse.foo(4, -1, 25, null);