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