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);