diff options
| author | pooka <pooka@NetBSD.org> | 2011-03-25 14:45:21 +0000 |
|---|---|---|
| committer | pooka <pooka@NetBSD.org> | 2011-03-25 14:45:21 +0000 |
| commit | 2d2058dcebe38da557dbf9c935e11f17fed612d4 (patch) | |
| tree | 3a233f95ff0d74a7b3f799a030bfd7ea732d3135 /tests/libexec | |
| parent | d2bf6b8a700a2536711764ebf9408420c6fc8033 (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.c | 27 |
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; } |
