diff options
author | Dmitry Petrochenko <dmitry.petrochenko@intel.com> | 2014-05-16 17:43:39 +0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-05-16 17:10:20 -0700 |
commit | f0972a410a0665dbe32bd96df09a572d69f9f3a3 (patch) | |
tree | 7e68b84a8395c72bdacb293c9e42cb3817f14668 /compiler/image_writer.cc | |
parent | de1129a26e0474ea8bb9112938ebb867163969fd (diff) | |
download | android_art-f0972a410a0665dbe32bd96df09a572d69f9f3a3.tar.gz android_art-f0972a410a0665dbe32bd96df09a572d69f9f3a3.tar.bz2 android_art-f0972a410a0665dbe32bd96df09a572d69f9f3a3.zip |
Fix generic jni issue in ArtMethod::GetQuickFrameInfo
The 64-bit host mode fails to start due to incorrect
detection of GetQuickGenericJniTrampoline.
The quick_code is 32-bit and taken from oat file, but
GetQuickGenericJniTrampoline returnf 0x7fffxx (64-bit)
address of trampoline and execution went to incorrect way.
Some clean-up.
Original Author: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
Change-Id: I0952443b2a9f6833ad37ec373837ae208681fad7
Diffstat (limited to 'compiler/image_writer.cc')
-rw-r--r-- | compiler/image_writer.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index 20a66d4022..eb1c5811c7 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -757,7 +757,8 @@ void ImageWriter::PatchOatCodeAndMethods() { uintptr_t value = quick_code - patch_location + patch->RelativeOffset(); SetPatchLocation(patch, value); } else { - if (quick_code == reinterpret_cast<uintptr_t>(GetQuickToInterpreterBridge())) { + if (quick_code == reinterpret_cast<uintptr_t>(GetQuickToInterpreterBridge()) || + quick_code == reinterpret_cast<uintptr_t>(class_linker->GetQuickGenericJniTrampoline())) { if (target->IsNative()) { // generic JNI, not interpreter bridge from GetQuickOatCodeFor(). code_offset = quick_generic_jni_trampoline_offset_; |