1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ART_RUNTIME_OAT_H_ 18 #define ART_RUNTIME_OAT_H_ 19 20 #include <vector> 21 22 #include "base/macros.h" 23 #include "dex_file.h" 24 #include "instruction_set.h" 25 26 namespace art { 27 28 class PACKED(4) OatHeader { 29 public: 30 static const uint8_t kOatMagic[4]; 31 static const uint8_t kOatVersion[4]; 32 33 OatHeader(); 34 OatHeader(InstructionSet instruction_set, 35 const std::vector<const DexFile*>* dex_files, 36 uint32_t image_file_location_oat_checksum, 37 uint32_t image_file_location_oat_data_begin, 38 const std::string& image_file_location); 39 40 bool IsValid() const; 41 const char* GetMagic() const; 42 uint32_t GetChecksum() const; 43 void UpdateChecksum(const void* data, size_t length); 44 uint32_t GetDexFileCount() const { 45 DCHECK(IsValid()); 46 return dex_file_count_; 47 } 48 uint32_t GetExecutableOffset() const; 49 void SetExecutableOffset(uint32_t executable_offset); 50 51 const void* GetInterpreterToInterpreterBridge() const; 52 uint32_t GetInterpreterToInterpreterBridgeOffset() const; 53 void SetInterpreterToInterpreterBridgeOffset(uint32_t offset); 54 const void* GetInterpreterToCompiledCodeBridge() const; 55 uint32_t GetInterpreterToCompiledCodeBridgeOffset() const; 56 void SetInterpreterToCompiledCodeBridgeOffset(uint32_t offset); 57 58 const void* GetJniDlsymLookup() const; 59 uint32_t GetJniDlsymLookupOffset() const; 60 void SetJniDlsymLookupOffset(uint32_t offset); 61 62 const void* GetPortableResolutionTrampoline() const; 63 uint32_t GetPortableResolutionTrampolineOffset() const; 64 void SetPortableResolutionTrampolineOffset(uint32_t offset); 65 const void* GetPortableToInterpreterBridge() const; 66 uint32_t GetPortableToInterpreterBridgeOffset() const; 67 void SetPortableToInterpreterBridgeOffset(uint32_t offset); 68 69 const void* GetQuickResolutionTrampoline() const; 70 uint32_t GetQuickResolutionTrampolineOffset() const; 71 void SetQuickResolutionTrampolineOffset(uint32_t offset); 72 const void* GetQuickToInterpreterBridge() const; 73 uint32_t GetQuickToInterpreterBridgeOffset() const; 74 void SetQuickToInterpreterBridgeOffset(uint32_t offset); 75 76 InstructionSet GetInstructionSet() const; 77 uint32_t GetImageFileLocationOatChecksum() const; 78 uint32_t GetImageFileLocationOatDataBegin() const; 79 uint32_t GetImageFileLocationSize() const; 80 const uint8_t* GetImageFileLocationData() const; 81 std::string GetImageFileLocation() const; 82 83 private: 84 uint8_t magic_[4]; 85 uint8_t version_[4]; 86 uint32_t adler32_checksum_; 87 88 InstructionSet instruction_set_; 89 uint32_t dex_file_count_; 90 uint32_t executable_offset_; 91 uint32_t interpreter_to_interpreter_bridge_offset_; 92 uint32_t interpreter_to_compiled_code_bridge_offset_; 93 uint32_t jni_dlsym_lookup_offset_; 94 uint32_t portable_resolution_trampoline_offset_; 95 uint32_t portable_to_interpreter_bridge_offset_; 96 uint32_t quick_resolution_trampoline_offset_; 97 uint32_t quick_to_interpreter_bridge_offset_; 98 99 uint32_t image_file_location_oat_checksum_; 100 uint32_t image_file_location_oat_data_begin_; 101 uint32_t image_file_location_size_; 102 uint8_t image_file_location_data_[0]; // note variable width data at end 103 104 DISALLOW_COPY_AND_ASSIGN(OatHeader); 105 }; 106 107 class PACKED(4) OatMethodOffsets { 108 public: 109 OatMethodOffsets(); 110 111 OatMethodOffsets(uint32_t code_offset, 112 uint32_t frame_size_in_bytes, 113 uint32_t core_spill_mask, 114 uint32_t fp_spill_mask, 115 uint32_t mapping_table_offset, 116 uint32_t vmap_table_offset, 117 uint32_t gc_map_offset); 118 119 ~OatMethodOffsets(); 120 121 uint32_t code_offset_; 122 uint32_t frame_size_in_bytes_; 123 uint32_t core_spill_mask_; 124 uint32_t fp_spill_mask_; 125 uint32_t mapping_table_offset_; 126 uint32_t vmap_table_offset_; 127 uint32_t gc_map_offset_; 128 }; 129 130 } // namespace art 131 132 #endif // ART_RUNTIME_OAT_H_ 133