diff options
author | David Brazdil <dbrazdil@google.com> | 2018-01-18 16:50:58 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-01-18 16:50:58 +0000 |
commit | 1ec1d318c76ef3232ac5ee14c4313f77432c910f (patch) | |
tree | 4ed28d4cec632086b216b92cc287f4deaf4bb757 /runtime/class_linker.cc | |
parent | 4dafb1abcf1af20135ee4a0b818362725b716e9e (diff) | |
parent | 975416667698cbe139e0f12baa3f7dd6c278209d (diff) |
Merge "Set runtime hidden API access flags" am: 9ee6fe008d am: 0187bee09a
am: 9754166676
Change-Id: I87085f0c7d3ad780731992b1b249cf2b1eb2f1a7
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r-- | runtime/class_linker.cc | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index 877654247c9..b61fb4afe93 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -3286,7 +3286,15 @@ void ClassLinker::LoadField(const ClassDataItemIterator& it, const uint32_t field_idx = it.GetMemberIndex(); dst->SetDexFieldIndex(field_idx); dst->SetDeclaringClass(klass.Get()); - dst->SetAccessFlags(it.GetFieldAccessFlags()); + + // Get access flags from the DexFile. If this is a boot class path class, + // also set its runtime hidden API access flags. + uint32_t access_flags = it.GetFieldAccessFlags(); + if (klass->IsBootStrapClassLoaded()) { + access_flags = + HiddenApiAccessFlags::EncodeForRuntime(access_flags, it.DecodeHiddenAccessFlags()); + } + dst->SetAccessFlags(access_flags); } void ClassLinker::LoadMethod(const DexFile& dex_file, @@ -3302,8 +3310,15 @@ void ClassLinker::LoadMethod(const DexFile& dex_file, dst->SetDeclaringClass(klass.Get()); dst->SetCodeItemOffset(it.GetMethodCodeItemOffset()); + // Get access flags from the DexFile. If this is a boot class path class, + // also set its runtime hidden API access flags. uint32_t access_flags = it.GetMethodAccessFlags(); + if (klass->IsBootStrapClassLoaded()) { + access_flags = + HiddenApiAccessFlags::EncodeForRuntime(access_flags, it.DecodeHiddenAccessFlags()); + } + if (UNLIKELY(strcmp("finalize", method_name) == 0)) { // Set finalizable flag on declaring class. if (strcmp("V", dex_file.GetShorty(method_id.proto_idx_)) == 0) { |