Remove ExtractCodeAndPrelink and switch Portable to MCLinker
Change-Id: Ia2459c7da6b79e0a1c0f1148c6e28ad9cbbe27a2
diff --git a/src/compiled_method.h b/src/compiled_method.h
index b7a2f9c..c05aba1 100644
--- a/src/compiled_method.h
+++ b/src/compiled_method.h
@@ -17,6 +17,7 @@
#ifndef ART_SRC_COMPILED_METHOD_H_
#define ART_SRC_COMPILED_METHOD_H_
+#include <string>
#include <vector>
#include "instruction_set.h"
@@ -31,14 +32,13 @@
class CompiledCode {
public:
- CompiledCode(InstructionSet instruction_set)
- : instruction_set_(instruction_set) {
- }
+ // For Quick to supply an code blob
+ CompiledCode(InstructionSet instruction_set, const std::vector<uint8_t>& code);
- CompiledCode(InstructionSet instruction_set, const std::vector<uint8_t>& code)
- : instruction_set_(instruction_set), code_(code) {
- CHECK_NE(code.size(), 0U);
- }
+ // For Portable to supply an ELF object
+ CompiledCode(InstructionSet instruction_set,
+ const std::string& elf_object,
+ const std::string &symbol);
InstructionSet GetInstructionSet() const {
return instruction_set_;
@@ -73,9 +73,26 @@
static const void* CodePointer(const void* code_pointer,
InstructionSet instruction_set);
+#if defined(ART_USE_PORTABLE_COMPILER)
+ const std::string& GetSymbol() const;
+ const std::vector<uint32_t>& GetOatdataOffsetsToCompliledCodeOffset() const;
+ void AddOatdataOffsetToCompliledCodeOffset(uint32_t offset);
+#endif
+
private:
const InstructionSet instruction_set_;
+
+ // Used to store the PIC code for Quick and an ELF image for portable.
std::vector<uint8_t> code_;
+
+ // Used for the Portable ELF symbol name.
+ std::string symbol_;
+
+ // There are offsets from the oatdata symbol to where the offset to
+ // the compiled method will be found. These are computed by the
+ // OatWriter and then used by the ElfWriter to add relocations so
+ // that MCLinker can update the values to the location in the linked .so.
+ std::vector<uint32_t> oatdata_offsets_to_compiled_code_offset_;
};
class CompiledMethod : public CompiledCode {
@@ -97,19 +114,21 @@
const uint32_t core_spill_mask,
const uint32_t fp_spill_mask);
- // Constructs a CompiledMethod for the LLVM compiler.
+ // Constructs a CompiledMethod for the Portable compiler.
CompiledMethod(InstructionSet instruction_set,
- const std::vector<uint8_t>& code,
- const std::vector<uint8_t>& gc_map)
- : CompiledCode(instruction_set, code),
+ const std::string& code,
+ const std::vector<uint8_t>& gc_map,
+ const std::string& symbol)
+ : CompiledCode(instruction_set, code, symbol),
frame_size_in_bytes_(kStackAlignment), core_spill_mask_(0),
fp_spill_mask_(0), native_gc_map_(gc_map) {
}
- // Constructs a CompiledMethod for the LLVM JniCompiler.
+ // Constructs a CompiledMethod for the Portable JniCompiler.
CompiledMethod(InstructionSet instruction_set,
- const std::vector<uint8_t>& code)
- : CompiledCode(instruction_set, code),
+ const std::string& code,
+ const std::string& symbol)
+ : CompiledCode(instruction_set, code, symbol),
frame_size_in_bytes_(kStackAlignment), core_spill_mask_(0),
fp_spill_mask_(0) {
}
@@ -151,11 +170,15 @@
class CompiledInvokeStub : public CompiledCode {
public:
- explicit CompiledInvokeStub(InstructionSet instruction_set);
-
+ // Used by Quick to provide a blob of code.
explicit CompiledInvokeStub(InstructionSet instruction_set,
const std::vector<uint8_t>& code);
+ // Used by Portable to provide ELF object.
+ explicit CompiledInvokeStub(InstructionSet instruction_set,
+ const std::string& elf_object,
+ const std::string& symbol);
+
~CompiledInvokeStub() {}
};