• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package dalvik.system;
18 
19 import dalvik.annotation.optimization.FastNative;
20 
21 /**
22  * Provides a limited interface to the Dalvik VM stack. This class is mostly
23  * used for implementing security checks.
24  *
25  * @hide
26  */
27 public final class VMStack {
28     /**
29      * Returns the defining class loader of the caller's caller.
30      *
31      * @return the requested class loader, or {@code null} if this is the
32      *         bootstrap class loader.
33      */
34     @FastNative
getCallingClassLoader()35     native public static ClassLoader getCallingClassLoader();
36 
37     /**
38      * Returns the class of the caller's caller.
39      *
40      * @return the requested class, or {@code null}.
41      */
getStackClass1()42     public static Class<?> getStackClass1() {
43         return getStackClass2();
44     }
45 
46     /**
47      * Returns the class of the caller's caller's caller.
48      *
49      * @return the requested class, or {@code null}.
50      */
51     @FastNative
getStackClass2()52     native public static Class<?> getStackClass2();
53 
54     /**
55      * Returns the first ClassLoader on the call stack that isn't the
56      * bootstrap class loader.
57      */
58     @FastNative
getClosestUserClassLoader()59     public native static ClassLoader getClosestUserClassLoader();
60 
61     /**
62      * Retrieves the stack trace from the specified thread.
63      *
64      * @param t
65      *      thread of interest
66      * @return an array of stack trace elements, or null if the thread
67      *      doesn't have a stack trace (e.g. because it exited)
68      */
69     @FastNative
getThreadStackTrace(Thread t)70     native public static StackTraceElement[] getThreadStackTrace(Thread t);
71 
72     /**
73      * Retrieves a partial stack trace from the specified thread into
74      * the provided array.
75      *
76      * @param t
77      *      thread of interest
78      * @param stackTraceElements
79      *      preallocated array for use when only the top of stack is
80      *      desired. Unused elements will be filled with null values.
81      * @return the number of elements filled
82      */
83     @FastNative
fillStackTraceElements(Thread t, StackTraceElement[] stackTraceElements)84     native public static int fillStackTraceElements(Thread t,
85         StackTraceElement[] stackTraceElements);
86 }
87