oat.h revision 3320cf46afd082398aa401b246e6f301cebdf64d
1e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom// Copyright 2011 Google Inc. All Rights Reserved. 2e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 3e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom#ifndef ART_SRC_OAT_H_ 4e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom#define ART_SRC_OAT_H_ 5e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 6e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom#include <vector> 7e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 8e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom#include "dex_file.h" 9e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom#include "macros.h" 10e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 11e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstromnamespace art { 12e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 13e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstromclass PACKED OatHeader { 14e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom public: 15e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom OatHeader() {} 16e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom OatHeader(const std::vector<const DexFile*>* dex_files); 17e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 18e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom bool IsValid() const; 19e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom const char* GetMagic() const; 20e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint32_t GetChecksum() const; 21e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom void UpdateChecksum(const void* data, size_t length); 22e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint32_t GetDexFileCount() const; 23e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint32_t GetExecutableOffset() const; 24e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom void SetExecutableOffset(uint32_t executable_offset); 25e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 26e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom private: 27e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom static const uint8_t kOatMagic[4]; 28e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom static const uint8_t kOatVersion[4]; 29e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 30e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint8_t magic_[4]; 31e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint8_t version_[4]; 32e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint32_t adler32_checksum_; 33e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint32_t dex_file_count_; 34e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom uint32_t executable_offset_; 35e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 36e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom DISALLOW_COPY_AND_ASSIGN(OatHeader); 37e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom}; 38e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 393320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstromclass PACKED OatMethodOffsets { 403320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom public: 413320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom OatMethodOffsets(); 423320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom OatMethodOffsets(uint32_t code_offset, 433320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t frame_size_in_bytes, 443320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t return_pc_offset_in_bytes, 453320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t core_spill_mask, 463320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t fp_spill_mask, 473320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t mapping_table_offset, 483320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t vmap_table_offset, 493320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t invoke_stub_offset); 503320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom ~OatMethodOffsets(); 513320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom 523320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t code_offset_; 533320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t frame_size_in_bytes_; 543320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t return_pc_offset_in_bytes_; 553320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t core_spill_mask_; 563320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t fp_spill_mask_; 573320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t mapping_table_offset_; 583320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t vmap_table_offset_; 593320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom uint32_t invoke_stub_offset_; 603320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom}; 613320cf46afd082398aa401b246e6f301cebdf64dBrian Carlstrom 62e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom} // namespace art 63e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom 64e24fa61603a60ade3797e4a0c8b3fccb346cb048Brian Carlstrom#endif // ART_SRC_OAT_H_ 65