diff options
Diffstat (limited to 'compiler/compiled_method.h')
| -rw-r--r-- | compiler/compiled_method.h | 74 | 
1 files changed, 37 insertions, 37 deletions
diff --git a/compiler/compiled_method.h b/compiler/compiled_method.h index acd508997d..b5c99e8c95 100644 --- a/compiler/compiled_method.h +++ b/compiler/compiled_method.h @@ -159,29 +159,27 @@ class SrcMap FINAL : public std::vector<SrcMapElem, Allocator> {  using DefaultSrcMap = SrcMap<std::allocator<SrcMapElem>>; - -enum LinkerPatchType { -  kLinkerPatchRecordPosition,   // Just record patch position for patchoat. -  kLinkerPatchMethod, -  kLinkerPatchCall, -  kLinkerPatchCallRelative,     // NOTE: Actual patching is instruction_set-dependent. -  kLinkerPatchType, -  kLinkerPatchString, -  kLinkerPatchStringRelative,   // NOTE: Actual patching is instruction_set-dependent. -  kLinkerPatchDexCacheArray,    // NOTE: Actual patching is instruction_set-dependent. -}; -std::ostream& operator<<(std::ostream& os, const LinkerPatchType& type); -  class LinkerPatch {   public: +  enum class Type { +    kRecordPosition,   // Just record patch position for patchoat. +    kMethod, +    kCall, +    kCallRelative,     // NOTE: Actual patching is instruction_set-dependent. +    kType, +    kString, +    kStringRelative,   // NOTE: Actual patching is instruction_set-dependent. +    kDexCacheArray,    // NOTE: Actual patching is instruction_set-dependent. +  }; +    static LinkerPatch RecordPosition(size_t literal_offset) { -    return LinkerPatch(literal_offset, kLinkerPatchRecordPosition, /* target_dex_file */ nullptr); +    return LinkerPatch(literal_offset, Type::kRecordPosition, /* target_dex_file */ nullptr);    }    static LinkerPatch MethodPatch(size_t literal_offset,                                   const DexFile* target_dex_file,                                   uint32_t target_method_idx) { -    LinkerPatch patch(literal_offset, kLinkerPatchMethod, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kMethod, target_dex_file);      patch.method_idx_ = target_method_idx;      return patch;    } @@ -189,7 +187,7 @@ class LinkerPatch {    static LinkerPatch CodePatch(size_t literal_offset,                                 const DexFile* target_dex_file,                                 uint32_t target_method_idx) { -    LinkerPatch patch(literal_offset, kLinkerPatchCall, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kCall, target_dex_file);      patch.method_idx_ = target_method_idx;      return patch;    } @@ -197,7 +195,7 @@ class LinkerPatch {    static LinkerPatch RelativeCodePatch(size_t literal_offset,                                         const DexFile* target_dex_file,                                         uint32_t target_method_idx) { -    LinkerPatch patch(literal_offset, kLinkerPatchCallRelative, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kCallRelative, target_dex_file);      patch.method_idx_ = target_method_idx;      return patch;    } @@ -205,7 +203,7 @@ class LinkerPatch {    static LinkerPatch TypePatch(size_t literal_offset,                                 const DexFile* target_dex_file,                                 uint32_t target_type_idx) { -    LinkerPatch patch(literal_offset, kLinkerPatchType, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kType, target_dex_file);      patch.type_idx_ = target_type_idx;      return patch;    } @@ -213,7 +211,7 @@ class LinkerPatch {    static LinkerPatch StringPatch(size_t literal_offset,                                   const DexFile* target_dex_file,                                   uint32_t target_string_idx) { -    LinkerPatch patch(literal_offset, kLinkerPatchString, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kString, target_dex_file);      patch.string_idx_ = target_string_idx;      return patch;    } @@ -222,7 +220,7 @@ class LinkerPatch {                                           const DexFile* target_dex_file,                                           uint32_t pc_insn_offset,                                           uint32_t target_string_idx) { -    LinkerPatch patch(literal_offset, kLinkerPatchStringRelative, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kStringRelative, target_dex_file);      patch.string_idx_ = target_string_idx;      patch.pc_insn_offset_ = pc_insn_offset;      return patch; @@ -233,7 +231,7 @@ class LinkerPatch {                                          uint32_t pc_insn_offset,                                          size_t element_offset) {      DCHECK(IsUint<32>(element_offset)); -    LinkerPatch patch(literal_offset, kLinkerPatchDexCacheArray, target_dex_file); +    LinkerPatch patch(literal_offset, Type::kDexCacheArray, target_dex_file);      patch.pc_insn_offset_ = pc_insn_offset;      patch.element_offset_ = element_offset;      return patch; @@ -246,15 +244,15 @@ class LinkerPatch {      return literal_offset_;    } -  LinkerPatchType Type() const { +  Type GetType() const {      return patch_type_;    }    bool IsPcRelative() const { -    switch (Type()) { -      case kLinkerPatchCallRelative: -      case kLinkerPatchStringRelative: -      case kLinkerPatchDexCacheArray: +    switch (GetType()) { +      case Type::kCallRelative: +      case Type::kStringRelative: +      case Type::kDexCacheArray:          return true;        default:          return false; @@ -262,48 +260,49 @@ class LinkerPatch {    }    MethodReference TargetMethod() const { -    DCHECK(patch_type_ == kLinkerPatchMethod || -           patch_type_ == kLinkerPatchCall || patch_type_ == kLinkerPatchCallRelative); +    DCHECK(patch_type_ == Type::kMethod || +           patch_type_ == Type::kCall || +           patch_type_ == Type::kCallRelative);      return MethodReference(target_dex_file_, method_idx_);    }    const DexFile* TargetTypeDexFile() const { -    DCHECK(patch_type_ == kLinkerPatchType); +    DCHECK(patch_type_ == Type::kType);      return target_dex_file_;    }    uint32_t TargetTypeIndex() const { -    DCHECK(patch_type_ == kLinkerPatchType); +    DCHECK(patch_type_ == Type::kType);      return type_idx_;    }    const DexFile* TargetStringDexFile() const { -    DCHECK(patch_type_ == kLinkerPatchString || patch_type_ == kLinkerPatchStringRelative); +    DCHECK(patch_type_ == Type::kString || patch_type_ == Type::kStringRelative);      return target_dex_file_;    }    uint32_t TargetStringIndex() const { -    DCHECK(patch_type_ == kLinkerPatchString || patch_type_ == kLinkerPatchStringRelative); +    DCHECK(patch_type_ == Type::kString || patch_type_ == Type::kStringRelative);      return string_idx_;    }    const DexFile* TargetDexCacheDexFile() const { -    DCHECK(patch_type_ == kLinkerPatchDexCacheArray); +    DCHECK(patch_type_ == Type::kDexCacheArray);      return target_dex_file_;    }    size_t TargetDexCacheElementOffset() const { -    DCHECK(patch_type_ == kLinkerPatchDexCacheArray); +    DCHECK(patch_type_ == Type::kDexCacheArray);      return element_offset_;    }    uint32_t PcInsnOffset() const { -    DCHECK(patch_type_ == kLinkerPatchStringRelative || patch_type_ == kLinkerPatchDexCacheArray); +    DCHECK(patch_type_ == Type::kStringRelative || patch_type_ == Type::kDexCacheArray);      return pc_insn_offset_;    }   private: -  LinkerPatch(size_t literal_offset, LinkerPatchType patch_type, const DexFile* target_dex_file) +  LinkerPatch(size_t literal_offset, Type patch_type, const DexFile* target_dex_file)        : target_dex_file_(target_dex_file),          literal_offset_(literal_offset),          patch_type_(patch_type) { @@ -316,7 +315,7 @@ class LinkerPatch {    const DexFile* target_dex_file_;    uint32_t literal_offset_ : 24;  // Method code size up to 16MiB. -  LinkerPatchType patch_type_ : 8; +  Type patch_type_ : 8;    union {      uint32_t cmp1_;             // Used for relational operators.      uint32_t method_idx_;       // Method index for Call/Method patches. @@ -341,6 +340,7 @@ class LinkerPatch {    friend bool operator==(const LinkerPatch& lhs, const LinkerPatch& rhs);    friend bool operator<(const LinkerPatch& lhs, const LinkerPatch& rhs);  }; +std::ostream& operator<<(std::ostream& os, const LinkerPatch::Type& type);  inline bool operator==(const LinkerPatch& lhs, const LinkerPatch& rhs) {    return lhs.literal_offset_ == rhs.literal_offset_ &&  |