Merge "Improve library lookup logic" into mnc-dev
This commit is contained in:
		
				
					committed by
					
						
						Android (Google) Code Review
					
				
			
			
				
	
			
			
			
					commit
					462df82902
				
			@@ -1349,7 +1349,19 @@ static soinfo *find_loaded_library_by_soname(const char* name) {
 | 
			
		||||
    return nullptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  uint32_t target_sdk_version = get_application_target_sdk_version();
 | 
			
		||||
 | 
			
		||||
  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();
 | 
			
		||||
    if (soname != nullptr && (strcmp(name, soname) == 0)) {
 | 
			
		||||
      return si;
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,10 @@
 | 
			
		||||
static std::atomic<uint32_t> g_target_sdk_version(__ANDROID_API__);
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user