Merge "Improve library lookup logic" into mnc-dev
This commit is contained in:
commit
462df82902
@ -1349,7 +1349,19 @@ static soinfo *find_loaded_library_by_soname(const char* name) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t target_sdk_version = get_application_target_sdk_version();
|
||||||
|
|
||||||
for (soinfo* si = solist; si != nullptr; si = si->next) {
|
for (soinfo* si = solist; si != nullptr; si = si->next) {
|
||||||
|
// If the library was opened under different target sdk version
|
||||||
|
// skip this step and try to reopen it. The exceptions are
|
||||||
|
// "libdl.so" and global group. There is no point in skipping
|
||||||
|
// them because relocation process is going to use them
|
||||||
|
// in any case.
|
||||||
|
if (si != solist && (si->get_dt_flags_1() & DF_1_GLOBAL) == 0 &&
|
||||||
|
si->is_linked() && si->get_target_sdk_version() != target_sdk_version) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const char* soname = si->get_soname();
|
const char* soname = si->get_soname();
|
||||||
if (soname != nullptr && (strcmp(name, soname) == 0)) {
|
if (soname != nullptr && (strcmp(name, soname) == 0)) {
|
||||||
return si;
|
return si;
|
||||||
|
@ -21,6 +21,10 @@
|
|||||||
static std::atomic<uint32_t> g_target_sdk_version(__ANDROID_API__);
|
static std::atomic<uint32_t> g_target_sdk_version(__ANDROID_API__);
|
||||||
|
|
||||||
void set_application_target_sdk_version(uint32_t target) {
|
void set_application_target_sdk_version(uint32_t target) {
|
||||||
|
// translate current sdk_version to platform sdk_version
|
||||||
|
if (target == 0) {
|
||||||
|
target = __ANDROID_API__;
|
||||||
|
}
|
||||||
g_target_sdk_version = target;
|
g_target_sdk_version = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user