Fix to prevent a dex file from being verified multiple times.
Instead of verifying a dex file whenever one is initialized, they're now
verified when not opened from memory. Also, the way dalvik_system_DexFile
opens dex files has been changed to check for an existing oat file and
get the corresponding dex file from there instead.
Change-Id: I75fc26247150107d628e2c4e364ef8a53fbf9481
diff --git a/src/dex_file_verifier.h b/src/dex_file_verifier.h
index e6aa329..58b5984 100644
--- a/src/dex_file_verifier.h
+++ b/src/dex_file_verifier.h
@@ -25,11 +25,11 @@
class DexFileVerifier {
public:
- static bool Verify(DexFile* dex_file, const byte* begin, size_t length);
+ static bool Verify(const DexFile* dex_file, const byte* begin, size_t size);
private:
- DexFileVerifier(DexFile* dex_file, const byte* begin, size_t length)
- : dex_file_(dex_file), begin_(begin), length_(length),
+ DexFileVerifier(const DexFile* dex_file, const byte* begin, size_t size)
+ : dex_file_(dex_file), begin_(begin), size_(size),
header_(&dex_file->GetHeader()), ptr_(NULL), previous_item_(NULL) {
}
@@ -83,9 +83,9 @@
bool CheckInterSectionIterate(uint32_t offset, uint32_t count, uint16_t type);
bool CheckInterSection();
- DexFile* dex_file_;
+ const DexFile* dex_file_;
const byte* begin_;
- size_t length_;
+ size_t size_;
const DexFile::Header* header_;
std::map<uint32_t, uint16_t> offset_to_type_map_;