summaryrefslogtreecommitdiffstats
path: root/src/oat_file.cc
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2012-01-11 15:19:46 -0800
committerBrian Carlstrom <bdc@google.com>2012-01-11 17:03:58 -0800
commit0755ec5ea1dce0b549fc1adefeb52d89f119ebec (patch)
tree6565330f01612586ebbfa9b45dda6bd4720c3234 /src/oat_file.cc
parent57e7600af0076bad4d7d3f255e72230d2c3be990 (diff)
downloadart-0755ec5ea1dce0b549fc1adefeb52d89f119ebec.zip
art-0755ec5ea1dce0b549fc1adefeb52d89f119ebec.tar.gz
art-0755ec5ea1dce0b549fc1adefeb52d89f119ebec.tar.bz2
Record Class::Status information in oat file
Change-Id: I328de86a89c7d84a211b3aed3d42b8c92c1f3464
Diffstat (limited to 'src/oat_file.cc')
-rw-r--r--src/oat_file.cc28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/oat_file.cc b/src/oat_file.cc
index 4d6b4a5..646f1c5 100644
--- a/src/oat_file.cc
+++ b/src/oat_file.cc
@@ -166,12 +166,12 @@ OatFile::OatDexFile::OatDexFile(const OatFile* oat_file,
std::string dex_file_location,
uint32_t dex_file_checksum,
byte* dex_file_pointer,
- const uint32_t* methods_offsets_pointer)
+ const uint32_t* oat_class_offsets_pointer)
: oat_file_(oat_file),
dex_file_location_(dex_file_location),
dex_file_checksum_(dex_file_checksum),
dex_file_pointer_(dex_file_pointer),
- methods_offsets_pointer_(methods_offsets_pointer) {}
+ oat_class_offsets_pointer_(oat_class_offsets_pointer) {}
OatFile::OatDexFile::~OatDexFile() {}
@@ -181,17 +181,31 @@ const DexFile* OatFile::OatDexFile::OpenDexFile() const {
}
const OatFile::OatClass* OatFile::OatDexFile::GetOatClass(uint32_t class_def_index) const {
- uint32_t methods_offset = methods_offsets_pointer_[class_def_index];
- const byte* methods_pointer = oat_file_->GetBase() + methods_offset;
+ uint32_t oat_class_offset = oat_class_offsets_pointer_[class_def_index];
+
+ const byte* oat_class_pointer = oat_file_->GetBase() + oat_class_offset;
+ CHECK_LT(oat_class_pointer, oat_file_->GetLimit());
+ Class::Status status = *reinterpret_cast<const Class::Status*>(oat_class_pointer);
+
+ const byte* methods_pointer = oat_class_pointer + sizeof(status);
CHECK_LT(methods_pointer, oat_file_->GetLimit());
- return new OatClass(oat_file_, reinterpret_cast<const OatMethodOffsets*>(methods_pointer));
+
+ return new OatClass(oat_file_,
+ status,
+ reinterpret_cast<const OatMethodOffsets*>(methods_pointer));
}
-OatFile::OatClass::OatClass(const OatFile* oat_file, const OatMethodOffsets* methods_pointer)
- : oat_file_(oat_file), methods_pointer_(methods_pointer) {}
+OatFile::OatClass::OatClass(const OatFile* oat_file,
+ Class::Status status,
+ const OatMethodOffsets* methods_pointer)
+ : oat_file_(oat_file), status_(status), methods_pointer_(methods_pointer) {}
OatFile::OatClass::~OatClass() {}
+Class::Status OatFile::OatClass::GetStatus() const {
+ return status_;
+}
+
const OatFile::OatMethod OatFile::OatClass::GetOatMethod(uint32_t method_index) const {
const OatMethodOffsets& oat_method_offsets = methods_pointer_[method_index];
return OatMethod(