summaryrefslogtreecommitdiff
path: root/runtime/mirror/executable.h
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2019-09-18 06:14:50 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2019-09-18 06:14:50 +0000
commit4ac0e1571e015a01d75091c3daef065f9624ad77 (patch)
tree4d13edeab88bd6fd724388c48385b0c3cca4f3a8 /runtime/mirror/executable.h
parent5a2301d897294ff4ee6de71f459dc2566dc3fa1a (diff)
Revert "Revert "Basic structural redefinition support""
This reverts commit 5a2301d897294ff4ee6de71f459dc2566dc3fa1a. Bug: 134162467 Reason for revert: Relanding as unclear if issue is due to topic. Change-Id: Ib1d1cf2e9132e30c9649b760ae9ae2d8ceacf843
Diffstat (limited to 'runtime/mirror/executable.h')
-rw-r--r--runtime/mirror/executable.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/runtime/mirror/executable.h b/runtime/mirror/executable.h
index a99c3ec461..8eca206d5a 100644
--- a/runtime/mirror/executable.h
+++ b/runtime/mirror/executable.h
@@ -41,6 +41,10 @@ class MANAGED Executable : public AccessibleObject {
return reinterpret_cast64<ArtMethod*>(GetField64<kVerifyFlags>(ArtMethodOffset()));
}
+ template <typename Visitor,
+ VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags>
+ inline void VisitTarget(Visitor&& v) REQUIRES(Locks::mutator_lock_);
+
template <bool kTransactionActive = false,
bool kCheckTransaction = true,
VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags>
@@ -61,6 +65,21 @@ class MANAGED Executable : public AccessibleObject {
uint32_t access_flags_;
uint32_t dex_method_index_;
+ template<bool kTransactionActive = false>
+ void SetDeclaringClass(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) {
+ SetFieldObject<kTransactionActive>(DeclaringClassOffset(), klass);
+ }
+
+ template<bool kTransactionActive = false>
+ void SetAccessFlags(uint32_t flags) REQUIRES_SHARED(Locks::mutator_lock_) {
+ SetField32<kTransactionActive>(AccessFlagsOffset(), flags);
+ }
+
+ template<bool kTransactionActive = false>
+ void SetDexMethodIndex(uint32_t idx) REQUIRES_SHARED(Locks::mutator_lock_) {
+ SetField32<kTransactionActive>(DexMethodIndexOffset(), idx);
+ }
+
static MemberOffset DeclaringClassOffset() {
return MemberOffset(OFFSETOF_MEMBER(Executable, declaring_class_));
}