summaryrefslogtreecommitdiff
path: root/libvtv/testsuite/dlopen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libvtv/testsuite/dlopen.cc')
-rw-r--r--libvtv/testsuite/dlopen.cc38
1 files changed, 38 insertions, 0 deletions
diff --git a/libvtv/testsuite/dlopen.cc b/libvtv/testsuite/dlopen.cc
new file mode 100644
index 00000000000..4ffbe83acf7
--- /dev/null
+++ b/libvtv/testsuite/dlopen.cc
@@ -0,0 +1,38 @@
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <stdio.h>
+
+
+
+typedef void (*voidfn)(void);
+
+int failures = 0;
+
+void
+__vtv_verify_fail (void **data_set_ptr, const void *vtbl_pointer)
+{
+ failures++;
+ return;
+}
+
+
+int main()
+{
+ char so_name[] = "so0.so";
+ void * dlhandle = dlopen(so_name, RTLD_NOW);
+ if (!dlhandle)
+ {
+ fprintf(stderr, "dlopen %s error: %s\n", so_name, dlerror());
+ exit(1);
+ }
+ voidfn so_entry = (voidfn)dlsym(dlhandle, "so_entry_0");
+ if (!so_entry)
+ {
+ fprintf(stderr, "dlopen %s dlsym error: %s\n", so_name, dlerror());
+ exit(2);
+ }
+
+ so_entry();
+
+ dlclose(dlhandle);
+}