* commit '4c344affba81b630241fd4e012e90fe594a7b196': Add another test for weak-reference
This commit is contained in:
		@@ -829,6 +829,18 @@ TEST(dlfcn, dlsym_weak_func) {
 | 
				
			|||||||
  dlclose(handle);
 | 
					  dlclose(handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST(dlfcn, dlopen_undefined_weak_func) {
 | 
				
			||||||
 | 
					  test_isolated([] {
 | 
				
			||||||
 | 
					    void* handle = dlopen("libtest_dlopen_weak_undefined_func.so", RTLD_NOW);
 | 
				
			||||||
 | 
					    ASSERT_TRUE(handle != nullptr) << dlerror();
 | 
				
			||||||
 | 
					    int (*weak_func)();
 | 
				
			||||||
 | 
					    weak_func = reinterpret_cast<int (*)()>(dlsym(handle, "use_weak_undefined_func"));
 | 
				
			||||||
 | 
					    ASSERT_TRUE(weak_func != nullptr) << dlerror();
 | 
				
			||||||
 | 
					    EXPECT_EQ(6551, weak_func());
 | 
				
			||||||
 | 
					    dlclose(handle);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST(dlfcn, dlopen_symlink) {
 | 
					TEST(dlfcn, dlopen_symlink) {
 | 
				
			||||||
  void* handle1 = dlopen("libdlext_test.so", RTLD_NOW);
 | 
					  void* handle1 = dlopen("libdlext_test.so", RTLD_NOW);
 | 
				
			||||||
  void* handle2 = dlopen("libdlext_test_v2.so", RTLD_NOW);
 | 
					  void* handle2 = dlopen("libdlext_test_v2.so", RTLD_NOW);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -358,3 +358,12 @@ libtest_dlsym_weak_func_src_files := \
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
module := libtest_dlsym_weak_func
 | 
					module := libtest_dlsym_weak_func
 | 
				
			||||||
include $(LOCAL_PATH)/Android.build.testlib.mk
 | 
					include $(LOCAL_PATH)/Android.build.testlib.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Library with weak undefined function
 | 
				
			||||||
 | 
					# -----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					libtest_dlopen_weak_undefined_func_src_files := \
 | 
				
			||||||
 | 
					    dlopen_weak_undefined.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module := libtest_dlopen_weak_undefined_func
 | 
				
			||||||
 | 
					include $(LOCAL_PATH)/Android.build.testlib.mk
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								tests/libs/dlopen_weak_undefined.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								tests/libs/dlopen_weak_undefined.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2014 The Android Open Source Project
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C" int __attribute__((weak)) weak_undefined_func();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C" int use_weak_undefined_func() {
 | 
				
			||||||
 | 
					  if (weak_undefined_func) {
 | 
				
			||||||
 | 
					    return weak_undefined_func();
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    return 6551;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user