diff options
author | 2020-03-24 11:37:45 -0700 | |
---|---|---|
committer | 2020-03-25 22:48:43 +0000 | |
commit | c1ad13a45ca363f7b5044d66a48853403a993b33 (patch) | |
tree | 39b592c7524e403beeb7ea36c32794151194539d /runtime/class_root.h | |
parent | 55d6f19764876fc2bc16ea27d9f0a5a736bb1519 (diff) |
Add Handle::GetFromGdb function
When using a debugger it is normally quite difficult to examine
mirror objects being held by Handles due to the inlining of the
various accessor functions. This adds a new 'GetFromGdb' function that
is emitted normally to allow one to decode the handle from gdb. This
function is defined for every Handle type using a macro.
Test: Manual debugging
Change-Id: I7cb95468b1a14438df4dccdf84b48e2af5ec71b9
Diffstat (limited to 'runtime/class_root.h')
-rw-r--r-- | runtime/class_root.h | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/runtime/class_root.h b/runtime/class_root.h index 1ff48457d6..835ec900be 100644 --- a/runtime/class_root.h +++ b/runtime/class_root.h @@ -52,37 +52,50 @@ class Throwable; class VarHandle; } // namespace mirror -#define CLASS_ROOT_LIST(M) \ - M(kJavaLangClass, "Ljava/lang/Class;", mirror::Class) \ - M(kJavaLangObject, "Ljava/lang/Object;", mirror::Object) \ - M(kClassArrayClass, "[Ljava/lang/Class;", mirror::ObjectArray<mirror::Class>) \ - M(kObjectArrayClass, "[Ljava/lang/Object;", mirror::ObjectArray<mirror::Object>) \ - M(kJavaLangString, "Ljava/lang/String;", mirror::String) \ - M(kJavaLangDexCache, "Ljava/lang/DexCache;", mirror::DexCache) \ - M(kJavaLangRefReference, "Ljava/lang/ref/Reference;", mirror::Reference) \ - M(kJavaLangReflectConstructor, "Ljava/lang/reflect/Constructor;", mirror::Constructor) \ - M(kJavaLangReflectField, "Ljava/lang/reflect/Field;", mirror::Field) \ - M(kJavaLangReflectMethod, "Ljava/lang/reflect/Method;", mirror::Method) \ - M(kJavaLangReflectProxy, "Ljava/lang/reflect/Proxy;", mirror::Proxy) \ - M(kJavaLangStringArrayClass, "[Ljava/lang/String;", mirror::ObjectArray<mirror::String>) \ - M(kJavaLangReflectConstructorArrayClass, "[Ljava/lang/reflect/Constructor;", mirror::ObjectArray<mirror::Constructor>) \ - M(kJavaLangReflectFieldArrayClass, "[Ljava/lang/reflect/Field;", mirror::ObjectArray<mirror::Field>) \ - M(kJavaLangReflectMethodArrayClass, "[Ljava/lang/reflect/Method;", mirror::ObjectArray<mirror::Method>) \ - M(kJavaLangInvokeCallSite, "Ljava/lang/invoke/CallSite;", mirror::CallSite) \ - M(kJavaLangInvokeMethodHandle, "Ljava/lang/invoke/MethodHandle;", mirror::MethodHandle) \ - M(kJavaLangInvokeMethodHandleImpl, "Ljava/lang/invoke/MethodHandleImpl;", mirror::MethodHandleImpl) \ - M(kJavaLangInvokeMethodHandlesLookup, "Ljava/lang/invoke/MethodHandles$Lookup;", mirror::MethodHandlesLookup) \ - M(kJavaLangInvokeMethodType, "Ljava/lang/invoke/MethodType;", mirror::MethodType) \ - M(kJavaLangInvokeVarHandle, "Ljava/lang/invoke/VarHandle;", mirror::VarHandle) \ - M(kJavaLangInvokeFieldVarHandle, "Ljava/lang/invoke/FieldVarHandle;", mirror::FieldVarHandle) \ - M(kJavaLangInvokeArrayElementVarHandle, "Ljava/lang/invoke/ArrayElementVarHandle;", mirror::ArrayElementVarHandle) \ - M(kJavaLangInvokeByteArrayViewVarHandle, "Ljava/lang/invoke/ByteArrayViewVarHandle;", mirror::ByteArrayViewVarHandle) \ - M(kJavaLangInvokeByteBufferViewVarHandle, "Ljava/lang/invoke/ByteBufferViewVarHandle;", mirror::ByteBufferViewVarHandle) \ - M(kJavaLangClassLoader, "Ljava/lang/ClassLoader;", mirror::ClassLoader) \ - M(kJavaLangThrowable, "Ljava/lang/Throwable;", mirror::Throwable) \ +#define CLASS_MIRROR_ROOT_LIST(M) \ + M(kJavaLangClass, "Ljava/lang/Class;", mirror::Class) \ + M(kJavaLangObject, "Ljava/lang/Object;", mirror::Object) \ + M(kClassArrayClass, "[Ljava/lang/Class;", mirror::ObjectArray<mirror::Class>) \ + M(kObjectArrayClass, "[Ljava/lang/Object;", mirror::ObjectArray<mirror::Object>) \ + M(kJavaLangString, "Ljava/lang/String;", mirror::String) \ + M(kJavaLangDexCache, "Ljava/lang/DexCache;", mirror::DexCache) \ + M(kJavaLangRefReference, "Ljava/lang/ref/Reference;", mirror::Reference) \ + M(kJavaLangReflectConstructor, "Ljava/lang/reflect/Constructor;", mirror::Constructor) \ + M(kJavaLangReflectField, "Ljava/lang/reflect/Field;", mirror::Field) \ + M(kJavaLangReflectMethod, "Ljava/lang/reflect/Method;", mirror::Method) \ + M(kJavaLangReflectProxy, "Ljava/lang/reflect/Proxy;", mirror::Proxy) \ + M(kJavaLangStringArrayClass, "[Ljava/lang/String;", mirror::ObjectArray<mirror::String>) \ + M(kJavaLangReflectConstructorArrayClass, "[Ljava/lang/reflect/Constructor;", mirror::ObjectArray<mirror::Constructor>) \ + M(kJavaLangReflectFieldArrayClass, "[Ljava/lang/reflect/Field;", mirror::ObjectArray<mirror::Field>) \ + M(kJavaLangReflectMethodArrayClass, "[Ljava/lang/reflect/Method;", mirror::ObjectArray<mirror::Method>) \ + M(kJavaLangInvokeCallSite, "Ljava/lang/invoke/CallSite;", mirror::CallSite) \ + M(kJavaLangInvokeMethodHandle, "Ljava/lang/invoke/MethodHandle;", mirror::MethodHandle) \ + M(kJavaLangInvokeMethodHandleImpl, "Ljava/lang/invoke/MethodHandleImpl;", mirror::MethodHandleImpl) \ + M(kJavaLangInvokeMethodHandlesLookup, "Ljava/lang/invoke/MethodHandles$Lookup;", mirror::MethodHandlesLookup) \ + M(kJavaLangInvokeMethodType, "Ljava/lang/invoke/MethodType;", mirror::MethodType) \ + M(kJavaLangInvokeVarHandle, "Ljava/lang/invoke/VarHandle;", mirror::VarHandle) \ + M(kJavaLangInvokeFieldVarHandle, "Ljava/lang/invoke/FieldVarHandle;", mirror::FieldVarHandle) \ + M(kJavaLangInvokeArrayElementVarHandle, "Ljava/lang/invoke/ArrayElementVarHandle;", mirror::ArrayElementVarHandle) \ + M(kJavaLangInvokeByteArrayViewVarHandle, "Ljava/lang/invoke/ByteArrayViewVarHandle;", mirror::ByteArrayViewVarHandle) \ + M(kJavaLangInvokeByteBufferViewVarHandle, "Ljava/lang/invoke/ByteBufferViewVarHandle;", mirror::ByteBufferViewVarHandle) \ + M(kJavaLangClassLoader, "Ljava/lang/ClassLoader;", mirror::ClassLoader) \ + M(kJavaLangThrowable, "Ljava/lang/Throwable;", mirror::Throwable) \ + M(kJavaLangStackTraceElement, "Ljava/lang/StackTraceElement;", mirror::StackTraceElement) \ + M(kDalvikSystemEmulatedStackFrame, "Ldalvik/system/EmulatedStackFrame;", mirror::EmulatedStackFrame) \ + M(kBooleanArrayClass, "[Z", mirror::PrimitiveArray<uint8_t>) \ + M(kByteArrayClass, "[B", mirror::PrimitiveArray<int8_t>) \ + M(kCharArrayClass, "[C", mirror::PrimitiveArray<uint16_t>) \ + M(kDoubleArrayClass, "[D", mirror::PrimitiveArray<double>) \ + M(kFloatArrayClass, "[F", mirror::PrimitiveArray<float>) \ + M(kIntArrayClass, "[I", mirror::PrimitiveArray<int32_t>) \ + M(kLongArrayClass, "[J", mirror::PrimitiveArray<int64_t>) \ + M(kShortArrayClass, "[S", mirror::PrimitiveArray<int16_t>) \ + M(kJavaLangStackTraceElementArrayClass, "[Ljava/lang/StackTraceElement;", mirror::ObjectArray<mirror::StackTraceElement>) \ + M(kJavaLangClassLoaderArrayClass, "[Ljava/lang/ClassLoader;", mirror::ObjectArray<mirror::ClassLoader>) \ + M(kDalvikSystemClassExt, "Ldalvik/system/ClassExt;", mirror::ClassExt) + +#define CLASS_NO_MIRROR_ROOT_LIST(M) \ M(kJavaLangClassNotFoundException, "Ljava/lang/ClassNotFoundException;", detail::NoMirrorType<detail::ClassNotFoundExceptionTag>) \ - M(kJavaLangStackTraceElement, "Ljava/lang/StackTraceElement;", mirror::StackTraceElement) \ - M(kDalvikSystemEmulatedStackFrame, "Ldalvik/system/EmulatedStackFrame;", mirror::EmulatedStackFrame) \ M(kPrimitiveBoolean, "Z", detail::NoMirrorType<uint8_t>) \ M(kPrimitiveByte, "B", detail::NoMirrorType<int8_t>) \ M(kPrimitiveChar, "C", detail::NoMirrorType<uint16_t>) \ @@ -91,18 +104,11 @@ class VarHandle; M(kPrimitiveInt, "I", detail::NoMirrorType<int32_t>) \ M(kPrimitiveLong, "J", detail::NoMirrorType<int64_t>) \ M(kPrimitiveShort, "S", detail::NoMirrorType<int16_t>) \ - M(kPrimitiveVoid, "V", detail::NoMirrorType<void>) \ - M(kBooleanArrayClass, "[Z", mirror::PrimitiveArray<uint8_t>) \ - M(kByteArrayClass, "[B", mirror::PrimitiveArray<int8_t>) \ - M(kCharArrayClass, "[C", mirror::PrimitiveArray<uint16_t>) \ - M(kDoubleArrayClass, "[D", mirror::PrimitiveArray<double>) \ - M(kFloatArrayClass, "[F", mirror::PrimitiveArray<float>) \ - M(kIntArrayClass, "[I", mirror::PrimitiveArray<int32_t>) \ - M(kLongArrayClass, "[J", mirror::PrimitiveArray<int64_t>) \ - M(kShortArrayClass, "[S", mirror::PrimitiveArray<int16_t>) \ - M(kJavaLangStackTraceElementArrayClass, "[Ljava/lang/StackTraceElement;", mirror::ObjectArray<mirror::StackTraceElement>) \ - M(kJavaLangClassLoaderArrayClass, "[Ljava/lang/ClassLoader;", mirror::ObjectArray<mirror::ClassLoader>) \ - M(kDalvikSystemClassExt, "Ldalvik/system/ClassExt;", mirror::ClassExt) + M(kPrimitiveVoid, "V", detail::NoMirrorType<void>) + +#define CLASS_ROOT_LIST(M) \ + CLASS_MIRROR_ROOT_LIST(M) \ + CLASS_NO_MIRROR_ROOT_LIST(M) // Well known mirror::Class roots accessed via ClassLinker::GetClassRoots(). enum class ClassRoot : uint32_t { |