summaryrefslogtreecommitdiff
path: root/tests/libexec
diff options
context:
space:
mode:
authorpooka <pooka@NetBSD.org>2011-03-25 14:45:21 +0000
committerpooka <pooka@NetBSD.org>2011-03-25 14:45:21 +0000
commit2d2058dcebe38da557dbf9c935e11f17fed612d4 (patch)
tree3a233f95ff0d74a7b3f799a030bfd7ea732d3135 /tests/libexec
parentd2bf6b8a700a2536711764ebf9408420c6fc8033 (diff)
check that dlopen()d dso shows up in the linkmap
Diffstat (limited to 'tests/libexec')
-rw-r--r--tests/libexec/ld.elf_so/t_dlinfo.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/libexec/ld.elf_so/t_dlinfo.c b/tests/libexec/ld.elf_so/t_dlinfo.c
index 618ca5f5c1b..951ad5b20d4 100644
--- a/tests/libexec/ld.elf_so/t_dlinfo.c
+++ b/tests/libexec/ld.elf_so/t_dlinfo.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_dlinfo.c,v 1.2 2010/11/03 16:10:23 christos Exp $ */
+/* $NetBSD: t_dlinfo.c,v 1.3 2011/03/25 14:45:21 pooka Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -84,10 +84,35 @@ ATF_TC_BODY(rtld_dlinfo_linkmap_dlopen, tc)
dlclose(handle);
}
+ATF_TC(rtld_dlinfo_linkmap_dlopen_iter);
+ATF_TC_HEAD(rtld_dlinfo_linkmap_dlopen_iter, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "dlopen'd dso's show up in the list");
+}
+ATF_TC_BODY(rtld_dlinfo_linkmap_dlopen_iter, tc)
+{
+ struct link_map *map;
+ void *handle;
+
+ handle = dlopen("libutil.so", RTLD_LAZY);
+ ATF_CHECK(handle);
+
+ RZ(dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &map));
+
+ for (; map->l_next; map = map->l_next)
+ continue;
+ for (; map; map = map->l_prev)
+ if (strstr(map->l_name, "libutil.so") != NULL)
+ break;
+
+ ATF_REQUIRE_MSG(map, "dlopen()d object not found from linkmap");
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, rtld_dlinfo_linkmap_self);
ATF_TP_ADD_TC(tp, rtld_dlinfo_linkmap_inval);
ATF_TP_ADD_TC(tp, rtld_dlinfo_linkmap_dlopen);
+ ATF_TP_ADD_TC(tp, rtld_dlinfo_linkmap_dlopen_iter);
return 0;
}