blob: 9a84f0ff48f2dd43ba189ce4ce4b333fc0144f91 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dalvik.system;
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import dalvik.annotation.optimization.FastNative;
import libcore.util.Nullable;
/**
* Provides a limited interface to the Dalvik VM stack. This class is mostly
* used for implementing security checks.
*
* @hide
*/
@libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
@SystemApi(client = MODULE_LIBRARIES)
public final class VMStack {
private VMStack() {
}
/**
* Returns the defining class loader of the caller's caller.
*
* @return the requested class loader, or {@code null} if this is the
* bootstrap class loader.
* @deprecated Use {@code ClassLoader.getClassLoader(sun.reflect.Reflection.getCallerClass())}.
* Note that that can return {@link BootClassLoader} on Android where the RI
* would have returned null.
*
* @hide
*/
@UnsupportedAppUsage
@FastNative
@Deprecated
native public static ClassLoader getCallingClassLoader();
/**
* Returns the class of the caller's caller.
*
* @return the requested class, or {@code null}.
* @deprecated Use {@link sun.reflect.Reflection#getCallerClass()}.
*
* @hide
*/
@Deprecated
public static Class<?> getStackClass1() {
return getStackClass2();
}
/**
* Returns the class of the caller's caller's caller.
*
* @return the requested class, or {@code null}.
*
* @hide
*/
@UnsupportedAppUsage
@FastNative
native public static Class<?> getStackClass2();
/**
* Returns the first ClassLoader on the call stack that isn't the
* bootstrap class loader.
*
* @hide
*/
@FastNative
public native static ClassLoader getClosestUserClassLoader();
/**
* Retrieves the stack trace from the specified thread.
*
* @param t
* thread of interest
* @return an array of stack trace elements, or null if the thread
* doesn't have a stack trace (e.g. because it exited)
*
* @hide
*/
@UnsupportedAppUsage
@FastNative
native public static StackTraceElement[] getThreadStackTrace(Thread t);
/**
* Retrieves an annotated stack trace from the specified thread.
*
* @param t
* thread of interest
* @return an array of annotated stack frames, or null if the thread
* doesn't have a stack trace (e.g. because it exited)
*
* @hide
*/
@libcore.api.CorePlatformApi(status = libcore.api.CorePlatformApi.Status.STABLE)
@SystemApi(client = MODULE_LIBRARIES)
@FastNative
native public static @Nullable AnnotatedStackTraceElement[]
getAnnotatedThreadStackTrace(Thread t);
/**
* Retrieves a partial stack trace from the specified thread into
* the provided array.
*
* @param t
* thread of interest
* @param stackTraceElements
* preallocated array for use when only the top of stack is
* desired. Unused elements will be filled with null values.
* @return the number of elements filled
*
* @hide
*/
@UnsupportedAppUsage
@FastNative
native public static int fillStackTraceElements(Thread t,
StackTraceElement[] stackTraceElements);
}
|