diff options
Diffstat (limited to 'src/compiled_method.cc')
-rw-r--r-- | src/compiled_method.cc | 59 |
1 files changed, 44 insertions, 15 deletions
diff --git a/src/compiled_method.cc b/src/compiled_method.cc index 4de2a3f5fd..36c4eeac57 100644 --- a/src/compiled_method.cc +++ b/src/compiled_method.cc @@ -18,6 +18,26 @@ namespace art { +CompiledCode::CompiledCode(InstructionSet instruction_set, const std::vector<uint8_t>& code) + : instruction_set_(instruction_set), code_(code) +{ + CHECK_NE(code.size(), 0U); +} + +CompiledCode::CompiledCode(InstructionSet instruction_set, + const std::string& elf_object, + const std::string& symbol) + : instruction_set_(instruction_set), symbol_(symbol) { + CHECK_NE(elf_object.size(), 0U); + CHECK_NE(symbol.size(), 0U); + // TODO: we shouldn't just shove ELF objects in as "code" but + // change to have different kinds of compiled methods. This is + // being deferred until we work on hybrid execution or at least + // until we work on batch compilation. + code_.resize(elf_object.size()); + memcpy(&code_[0], &elf_object[0], elf_object.size()); +} + uint32_t CompiledCode::AlignCode(uint32_t offset) const { return AlignCode(offset, instruction_set_); } @@ -72,6 +92,22 @@ const void* CompiledCode::CodePointer(const void* code_pointer, } } +#if defined(ART_USE_PORTABLE_COMPILER) +const std::string& CompiledCode::GetSymbol() const { + CHECK_NE(0U, symbol_.size()); + return symbol_; +} + +const std::vector<uint32_t>& CompiledCode::GetOatdataOffsetsToCompliledCodeOffset() const { + CHECK_NE(0U, oatdata_offsets_to_compiled_code_offset_.size()) << symbol_; + return oatdata_offsets_to_compiled_code_offset_; +} + +void CompiledCode::AddOatdataOffsetToCompliledCodeOffset(uint32_t offset) { + oatdata_offsets_to_compiled_code_offset_.push_back(offset); +} +#endif + CompiledMethod::CompiledMethod(InstructionSet instruction_set, const std::vector<uint8_t>& code, const size_t frame_size_in_bytes, @@ -80,20 +116,15 @@ CompiledMethod::CompiledMethod(InstructionSet instruction_set, const std::vector<uint32_t>& mapping_table, const std::vector<uint16_t>& vmap_table, const std::vector<uint8_t>& native_gc_map) - : CompiledCode(instruction_set), frame_size_in_bytes_(frame_size_in_bytes), + : CompiledCode(instruction_set, code), frame_size_in_bytes_(frame_size_in_bytes), core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask), native_gc_map_(native_gc_map) { - CHECK_NE(code.size(), 0U); DCHECK_EQ(vmap_table.size(), static_cast<uint32_t>(__builtin_popcount(core_spill_mask) + __builtin_popcount(fp_spill_mask))); CHECK_LE(vmap_table.size(), (1U << 16) - 1); // length must fit in 2^16-1 - size_t code_byte_count = code.size() * sizeof(code[0]); - std::vector<uint8_t> byte_code(code_byte_count); - memcpy(&byte_code[0], &code[0], code_byte_count); - std::vector<uint32_t> length_prefixed_mapping_table; length_prefixed_mapping_table.push_back(mapping_table.size()); length_prefixed_mapping_table.insert(length_prefixed_mapping_table.end(), @@ -109,7 +140,6 @@ CompiledMethod::CompiledMethod(InstructionSet instruction_set, DCHECK_EQ(vmap_table.size() + 1, length_prefixed_vmap_table.size()); DCHECK_EQ(vmap_table.size(), length_prefixed_vmap_table[0]); - SetCode(byte_code); mapping_table_ = length_prefixed_mapping_table; vmap_table_ = length_prefixed_vmap_table; DCHECK_EQ(vmap_table_[0], static_cast<uint32_t>(__builtin_popcount(core_spill_mask) + __builtin_popcount(fp_spill_mask))); @@ -122,16 +152,15 @@ CompiledMethod::CompiledMethod(InstructionSet instruction_set, const uint32_t fp_spill_mask) : CompiledCode(instruction_set, code), frame_size_in_bytes_(frame_size_in_bytes), - core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask) { -} - -CompiledInvokeStub::CompiledInvokeStub(InstructionSet instruction_set) - : CompiledCode(instruction_set) { -} + core_spill_mask_(core_spill_mask), fp_spill_mask_(fp_spill_mask) {} CompiledInvokeStub::CompiledInvokeStub(InstructionSet instruction_set, const std::vector<uint8_t>& code) - : CompiledCode(instruction_set, code) { -} + : CompiledCode(instruction_set, code) {} + +CompiledInvokeStub::CompiledInvokeStub(InstructionSet instruction_set, + const std::string& elf_object, + const std::string& symbol) + : CompiledCode(instruction_set, elf_object, symbol) {} } // namespace art |