diff options
| author | Dmitriy Ivanov <dimitry@google.com> | 2014-12-16 22:01:47 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-12-16 22:01:47 +0000 |
| commit | 92b9cb2c899c386954b8f9ad8111aa6c8c63e306 (patch) | |
| tree | 3c08c95348bb00f0b16777de76104085e719fe6d | |
| parent | 3a50b65fd152b4a50dc15ec33f19080e8724b02c (diff) | |
| parent | bfa88bca5ca387d6b3560074050856527cfc7514 (diff) | |
| download | bionic-92b9cb2c899c386954b8f9ad8111aa6c8c63e306.zip bionic-92b9cb2c899c386954b8f9ad8111aa6c8c63e306.tar.gz bionic-92b9cb2c899c386954b8f9ad8111aa6c8c63e306.tar.bz2 | |
Merge "Add another test for weak-reference"
| -rw-r--r-- | tests/dlfcn_test.cpp | 14 | ||||
| -rw-r--r-- | tests/libs/Android.mk | 9 | ||||
| -rw-r--r-- | tests/libs/dlopen_weak_undefined.cpp | 25 |
3 files changed, 47 insertions, 1 deletions
diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp index c988d29..6fdfdc7 100644 --- a/tests/dlfcn_test.cpp +++ b/tests/dlfcn_test.cpp @@ -819,7 +819,7 @@ TEST(dlfcn, rtld_next_known_symbol) { TEST(dlfcn, dlsym_weak_func) { dlerror(); - void* handle = dlopen("libtest_dlsym_weak_func.so",RTLD_NOW); + void* handle = dlopen("libtest_dlsym_weak_func.so", RTLD_NOW); ASSERT_TRUE(handle != NULL); int (*weak_func)(); @@ -829,6 +829,18 @@ TEST(dlfcn, dlsym_weak_func) { 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) { void* handle1 = dlopen("libdlext_test.so", RTLD_NOW); void* handle2 = dlopen("libdlext_test_v2.so", RTLD_NOW); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index e4620f5..50d96b2 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -358,3 +358,12 @@ libtest_dlsym_weak_func_src_files := \ module := libtest_dlsym_weak_func 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 diff --git a/tests/libs/dlopen_weak_undefined.cpp b/tests/libs/dlopen_weak_undefined.cpp new file mode 100644 index 0000000..599a52e --- /dev/null +++ b/tests/libs/dlopen_weak_undefined.cpp @@ -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; + } +} |
