summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDmitriy Ivanov <dimitry@google.com>2014-07-02 22:48:24 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-07-02 20:52:43 +0000
commit950a435fc0dffc22a816194af175420176b86908 (patch)
tree8f2a2873a0b11c6c23254f29557643552fc457ad /tests
parent99e2a2f04ca3bc4c66ecb91bc5abb378ec7c10ef (diff)
parent04dc91ae763adc403a14c88b4c46f77b3d2d71a3 (diff)
downloadbionic-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.mk5
-rw-r--r--tests/dlext_test.cpp22
-rw-r--r--tests/libs/Android.mk13
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 := \