The VDSO soname varies by architecture.
From http://man7.org/linux/man-pages/man7/vdso.7.html:
user ABI vDSO name
─────────────────────────────
aarch64 linux-vdso.so.1
arm linux-vdso.so.1
ia64 linux-gate.so.1
mips linux-vdso.so.1
ppc/32 linux-vdso32.so.1
ppc/64 linux-vdso64.so.1
s390 linux-vdso32.so.1
s390x linux-vdso64.so.1
sh linux-gate.so.1
* i386 linux-gate.so.1
* x86-64 linux-vdso.so.1
x86/x32 linux-vdso.so.1
Note that Android "x86" is Linux's "i386", which is the odd one out
amongst Android's supported architectures.
Bug: http://b/72831787
Test: ran tests
Change-Id: I0a28127af042e2fd7673f24bbb30f8a50556cf96
diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp
index 000d1f7..fb05cd3 100644
--- a/tests/dlfcn_test.cpp
+++ b/tests/dlfcn_test.cpp
@@ -256,7 +256,12 @@
return;
}
#endif
- void* handle = dlopen("linux-vdso.so.1", RTLD_NOW);
+
+ const char* vdso_name = "linux-vdso.so.1";
+#if defined(__i386__)
+ vdso_name = "linux-gate.so.1";
+#endif
+ void* handle = dlopen(vdso_name, RTLD_NOW);
ASSERT_TRUE(handle != nullptr) << dlerror();
dlclose(handle);
}