summaryrefslogtreecommitdiff
path: root/runtime/oat.cc
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2023-01-03 14:01:00 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2023-01-28 16:42:34 +0000
commitdf68c0a6f0d36728fa728049e5bcec20de2d0d5e (patch)
treef65b2ffdf3f998dc7980853c71d169cb489289a8 /runtime/oat.cc
parent09c218c61ab525b05d7181be92e78d69d035e122 (diff)
Write classes in runtime-generated app image.
Test: 845-data-image Bug: 260557058 Change-Id: I640b78942984ac3d3f8d24abda619d78154acd86
Diffstat (limited to 'runtime/oat.cc')
-rw-r--r--runtime/oat.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/runtime/oat.cc b/runtime/oat.cc
index 42bb7d4894..2c7a73f964 100644
--- a/runtime/oat.cc
+++ b/runtime/oat.cc
@@ -467,4 +467,27 @@ void OatHeader::Flatten(const SafeMap<std::string, std::string>* key_value_store
key_value_store_size_ = data_ptr - reinterpret_cast<char*>(&key_value_store_);
}
+const uint8_t* OatHeader::GetOatAddress(StubType type) const {
+ DCHECK_LE(type, StubType::kLast);
+ switch (type) {
+ // TODO: We could maybe clean this up if we stored them in an array in the oat header.
+ case StubType::kQuickGenericJNITrampoline:
+ return static_cast<const uint8_t*>(GetQuickGenericJniTrampoline());
+ case StubType::kJNIDlsymLookupTrampoline:
+ return static_cast<const uint8_t*>(GetJniDlsymLookupTrampoline());
+ case StubType::kJNIDlsymLookupCriticalTrampoline:
+ return static_cast<const uint8_t*>(GetJniDlsymLookupCriticalTrampoline());
+ case StubType::kQuickIMTConflictTrampoline:
+ return static_cast<const uint8_t*>(GetQuickImtConflictTrampoline());
+ case StubType::kQuickResolutionTrampoline:
+ return static_cast<const uint8_t*>(GetQuickResolutionTrampoline());
+ case StubType::kQuickToInterpreterBridge:
+ return static_cast<const uint8_t*>(GetQuickToInterpreterBridge());
+ case StubType::kNterpTrampoline:
+ return static_cast<const uint8_t*>(GetNterpTrampoline());
+ default:
+ UNREACHABLE();
+ }
+}
+
} // namespace art