summaryrefslogtreecommitdiff
path: root/runtime/stack_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/stack_map.h')
-rw-r--r--runtime/stack_map.h19
1 files changed, 13 insertions, 6 deletions
diff --git a/runtime/stack_map.h b/runtime/stack_map.h
index 26b95b0c2b..928f0f24d6 100644
--- a/runtime/stack_map.h
+++ b/runtime/stack_map.h
@@ -268,15 +268,22 @@ class RegisterMask : public BitTableAccessor<2> {
*/
class CodeInfo {
public:
- explicit CodeInfo(const void* data) {
- Decode(reinterpret_cast<const uint8_t*>(data));
+ enum DecodeFlags {
+ Default = 0,
+ // Limits the decoding only to the main stack map table and inline info table.
+ // This is sufficient for many use cases and makes the header decoding faster.
+ InlineInfoOnly = 1,
+ };
+
+ explicit CodeInfo(const uint8_t* data, DecodeFlags flags = DecodeFlags::Default) {
+ Decode(reinterpret_cast<const uint8_t*>(data), flags);
}
explicit CodeInfo(MemoryRegion region) : CodeInfo(region.begin()) {
DCHECK_EQ(Size(), region.size());
}
- explicit CodeInfo(const OatQuickMethodHeader* header);
+ explicit CodeInfo(const OatQuickMethodHeader* header, DecodeFlags flags = DecodeFlags::Default);
size_t Size() const {
return BitsToBytesRoundUp(size_in_bits_);
@@ -421,20 +428,20 @@ class CodeInfo {
uint32_t first_dex_register,
/*out*/ DexRegisterMap* map) const;
- void Decode(const uint8_t* data);
+ void Decode(const uint8_t* data, DecodeFlags flags);
uint32_t frame_size_in_bytes_;
uint32_t core_spill_mask_;
uint32_t fp_spill_mask_;
uint32_t number_of_dex_registers_;
BitTable<StackMap> stack_maps_;
+ BitTable<InlineInfo> inline_infos_;
BitTable<RegisterMask> register_masks_;
BitTable<MaskInfo> stack_masks_;
- BitTable<InlineInfo> inline_infos_;
BitTable<MaskInfo> dex_register_masks_;
BitTable<DexRegisterMapInfo> dex_register_maps_;
BitTable<DexRegisterInfo> dex_register_catalog_;
- uint32_t size_in_bits_;
+ uint32_t size_in_bits_ = 0;
};
#undef ELEMENT_BYTE_OFFSET_AFTER