Track class initializing in transaction
Add a field and a corresponding constructor to transaction which keeps
track of the class that the transaction is initializing.
To implement constraints for <clinit> behaviors, the transaction needs
to know which class it is initializing.
Test: make test-art-host -j64
Change-Id: I87b3fcb3ef15914c79c6687ec8a87058265eaead
diff --git a/runtime/transaction.cc b/runtime/transaction.cc
index 907d37e..359030e 100644
--- a/runtime/transaction.cc
+++ b/runtime/transaction.cc
@@ -38,6 +38,10 @@
CHECK(Runtime::Current()->IsAotCompiler());
}
+Transaction::Transaction(mirror::Class* root) : Transaction() {
+ root_ = root;
+}
+
Transaction::~Transaction() {
if (kEnableTransactionStats) {
MutexLock mu(Thread::Current(), log_lock_);
@@ -270,6 +274,7 @@
void Transaction::VisitRoots(RootVisitor* visitor) {
MutexLock mu(Thread::Current(), log_lock_);
+ visitor->VisitRoot(reinterpret_cast<mirror::Object**>(&root_), RootInfo(kRootUnknown));
VisitObjectLogs(visitor);
VisitArrayLogs(visitor);
VisitInternStringLogs(visitor);