diff options
author | Dmitriy Ivanov <dimitry@google.com> | 2014-07-02 22:48:24 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-07-02 20:52:43 +0000 |
commit | 950a435fc0dffc22a816194af175420176b86908 (patch) | |
tree | 8f2a2873a0b11c6c23254f29557643552fc457ad /tests | |
parent | 99e2a2f04ca3bc4c66ecb91bc5abb378ec7c10ef (diff) | |
parent | 04dc91ae763adc403a14c88b4c46f77b3d2d71a3 (diff) | |
download | bionic-950a435fc0dffc22a816194af175420176b86908.zip bionic-950a435fc0dffc22a816194af175420176b86908.tar.gz bionic-950a435fc0dffc22a816194af175420176b86908.tar.bz2 |
Merge "Load library using file handle."
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Android.build.mk | 5 | ||||
-rw-r--r-- | tests/dlext_test.cpp | 22 | ||||
-rw-r--r-- | tests/libs/Android.mk | 13 |
3 files changed, 40 insertions, 0 deletions
diff --git a/tests/Android.build.mk b/tests/Android.build.mk index 62e9718..bb00648 100644 --- a/tests/Android.build.mk +++ b/tests/Android.build.mk @@ -26,6 +26,11 @@ endif ifneq ($(findstring LIBRARY, $(build_target)),LIBRARY) LOCAL_MODULE_STEM_32 := $(module)32 LOCAL_MODULE_STEM_64 := $(module)64 +else +ifeq ($($(module)_install_to_out_data),true) + LOCAL_MODULE_PATH_32 := $(TARGET_OUT_DATA_NATIVE_TESTS)/$(module) + LOCAL_MODULE_PATH_64 := $(TARGET_OUT_DATA_NATIVE_TESTS)64/$(module) +endif endif LOCAL_CLANG := $($(module)_clang_$(build_type)) diff --git a/tests/dlext_test.cpp b/tests/dlext_test.cpp index b56fc41..da63046 100644 --- a/tests/dlext_test.cpp +++ b/tests/dlext_test.cpp @@ -45,6 +45,11 @@ typedef int (*fn)(void); #define LIBNAME_NORELRO "libdlext_test_norelro.so" #define LIBSIZE 1024*1024 // how much address space to reserve for it +#if defined(__LP64__) +#define LIBPATH "%s/nativetest64/libdlext_test_fd/libdlext_test_fd.so" +#else +#define LIBPATH "%s/nativetest/libdlext_test_fd/libdlext_test_fd.so" +#endif class DlExtTest : public ::testing::Test { protected: @@ -83,6 +88,23 @@ TEST_F(DlExtTest, ExtInfoNoFlags) { EXPECT_EQ(4, f()); } +TEST_F(DlExtTest, ExtInfoUseFd) { + const char* android_data = getenv("ANDROID_DATA"); + ASSERT_TRUE(android_data != NULL); + char lib_path[PATH_MAX]; + snprintf(lib_path, sizeof(lib_path), LIBPATH, android_data); + + android_dlextinfo extinfo; + extinfo.flags = ANDROID_DLEXT_USE_LIBRARY_FD; + extinfo.library_fd = TEMP_FAILURE_RETRY(open(lib_path, O_RDONLY | O_CLOEXEC)); + ASSERT_TRUE(extinfo.library_fd != -1); + handle_ = android_dlopen_ext(lib_path, RTLD_NOW, &extinfo); + ASSERT_DL_NOTNULL(handle_); + fn f = reinterpret_cast<fn>(dlsym(handle_, "getRandomNumber")); + ASSERT_DL_NOTNULL(f); + EXPECT_EQ(4, f()); +} + TEST_F(DlExtTest, Reserved) { void* start = mmap(NULL, LIBSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); diff --git a/tests/libs/Android.mk b/tests/libs/Android.mk index efce5b5..a374e48 100644 --- a/tests/libs/Android.mk +++ b/tests/libs/Android.mk @@ -78,6 +78,19 @@ build_target := SHARED_LIBRARY include $(TEST_PATH)/Android.build.mk # ----------------------------------------------------------------------------- +# Library used by dlext tests - different name non-default location +# ----------------------------------------------------------------------------- +libdlext_test_fd_src_files := \ + dlext_test_library.cpp \ + +libdlext_test_fd_install_to_out_data := true +module := libdlext_test_fd +module_tag := optional +build_type := target +build_target := SHARED_LIBRARY +include $(TEST_PATH)/Android.build.mk + +# ----------------------------------------------------------------------------- # Library used by dlfcn tests # ----------------------------------------------------------------------------- libtest_simple_src_files := \ |