Module Name:    src
Committed By:   pooka
Date:           Fri Mar 25 14:45:21 UTC 2011

Modified Files:
        src/tests/libexec/ld.elf_so: t_dlinfo.c

Log Message:
check that dlopen()d dso shows up in the linkmap


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/libexec/ld.elf_so/t_dlinfo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/libexec/ld.elf_so/t_dlinfo.c
diff -u src/tests/libexec/ld.elf_so/t_dlinfo.c:1.2 src/tests/libexec/ld.elf_so/t_dlinfo.c:1.3
--- src/tests/libexec/ld.elf_so/t_dlinfo.c:1.2	Wed Nov  3 16:10:23 2010
+++ src/tests/libexec/ld.elf_so/t_dlinfo.c	Fri Mar 25 14:45:21 2011
@@ -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 @@
 	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;
 }

Reply via email to