diff options
| author | 2018-03-08 17:45:59 +0000 | |
|---|---|---|
| committer | 2018-03-08 17:45:59 +0000 | |
| commit | 8ba5641ddc43fc13cdb0158bd9f3237c4a90a356 (patch) | |
| tree | 4dad508f24b675e87dd31ff26e597289a329c5cc /compiler/optimizing/sharpening.cc | |
| parent | 66f40dbc3e56c7102820842ec49a55b70cf0e151 (diff) | |
| parent | b066d43b1d9184899aff32b1f243d092611ad9c6 (diff) | |
Merge "Load ArtMethod* from .data.bimg.rel.ro entries."
Diffstat (limited to 'compiler/optimizing/sharpening.cc')
| -rw-r--r-- | compiler/optimizing/sharpening.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/compiler/optimizing/sharpening.cc b/compiler/optimizing/sharpening.cc index 1e49411c72..b65628e441 100644 --- a/compiler/optimizing/sharpening.cc +++ b/compiler/optimizing/sharpening.cc @@ -125,8 +125,14 @@ void HSharpening::SharpenInvokeStaticOrDirect(HInvokeStaticOrDirect* invoke, BootImageAOTCanEmbedMethod(callee, compiler_driver)) { method_load_kind = HInvokeStaticOrDirect::MethodLoadKind::kBootImageLinkTimePcRelative; code_ptr_location = HInvokeStaticOrDirect::CodePtrLocation::kCallArtMethod; + } else if (IsInBootImage(callee)) { + // Use PC-relative access to the .data.bimg.rel.ro methods array. + method_load_kind = HInvokeStaticOrDirect::MethodLoadKind::kBootImageRelRo; + uint8_t* begin = Runtime::Current()->GetHeap()->GetBootImageSpaces().front()->Begin(); + method_load_data = reinterpret_cast<uintptr_t>(callee) - reinterpret_cast<uintptr_t>(begin); + code_ptr_location = HInvokeStaticOrDirect::CodePtrLocation::kCallArtMethod; } else { - // Use PC-relative access to the .bss methods arrays. + // Use PC-relative access to the .bss methods array. method_load_kind = HInvokeStaticOrDirect::MethodLoadKind::kBssEntry; code_ptr_location = HInvokeStaticOrDirect::CodePtrLocation::kCallArtMethod; } |