Module Name: src Committed By: pooka Date: Fri Mar 5 18:49:30 UTC 2010
Modified Files: src/lib/libukfs: ukfs.c src/tests/rump/rumpkern: t_modcmd.c Log Message: Update to use newstyle rump_module interfaces. To generate a diff of this commit: cvs rdiff -u -r1.47 -r1.48 src/lib/libukfs/ukfs.c cvs rdiff -u -r1.4 -r1.5 src/tests/rump/rumpkern/t_modcmd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libukfs/ukfs.c diff -u src/lib/libukfs/ukfs.c:1.47 src/lib/libukfs/ukfs.c:1.48 --- src/lib/libukfs/ukfs.c:1.47 Sun Dec 13 20:52:36 2009 +++ src/lib/libukfs/ukfs.c Fri Mar 5 18:49:30 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: ukfs.c,v 1.47 2009/12/13 20:52:36 pooka Exp $ */ +/* $NetBSD: ukfs.c,v 1.48 2010/03/05 18:49:30 pooka Exp $ */ /* * Copyright (c) 2007, 2008, 2009 Antti Kantee. All Rights Reserved. @@ -1097,7 +1097,7 @@ ukfs_modload(const char *fname) { void *handle; - struct modinfo **mi; + const struct modinfo *const *mi_start, *const *mi_end; int error; handle = dlopen(fname, RTLD_LAZY|RTLD_GLOBAL); @@ -1110,9 +1110,11 @@ return -1; } - mi = dlsym(handle, "__start_link_set_modules"); - if (mi) { - error = rump_pub_module_init(*mi, NULL); + mi_start = dlsym(handle, "__start_link_set_modules"); + mi_end = dlsym(handle, "__stop_link_set_modules"); + if (mi_start && mi_end) { + error = rump_pub_module_init(mi_start, + (size_t)(mi_end-mi_start)); if (error) goto errclose; return 1; Index: src/tests/rump/rumpkern/t_modcmd.c diff -u src/tests/rump/rumpkern/t_modcmd.c:1.4 src/tests/rump/rumpkern/t_modcmd.c:1.5 --- src/tests/rump/rumpkern/t_modcmd.c:1.4 Fri Nov 6 15:26:54 2009 +++ src/tests/rump/rumpkern/t_modcmd.c Fri Mar 5 18:49:30 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: t_modcmd.c,v 1.4 2009/11/06 15:26:54 pooka Exp $ */ +/* $NetBSD: t_modcmd.c,v 1.5 2010/03/05 18:49:30 pooka Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -63,9 +63,9 @@ ATF_TC_BODY(cmsg_modcmd, tc) { struct tmpfs_args args; - struct modinfo **mi; + const struct modinfo *const *mi_start, *const *mi_end; void *handle; - int rv; + int i, rv, loop = 0; rump_init(); memset(&args, 0, sizeof(args)); @@ -82,18 +82,33 @@ const char *dlmsg = dlerror(); atf_tc_fail("cannot open %s: %s", TMPFSMODULE, dlmsg); } - mi = dlsym(handle, "__start_link_set_modules"); - if (mi == NULL) + + again: + mi_start = dlsym(handle, "__start_link_set_modules"); + mi_end = dlsym(handle, "__stop_link_set_modules"); + if (mi_start == NULL || mi_end == NULL) atf_tc_fail("cannot find module info"); - if ((rv = rump_pub_module_init(*mi, NULL)) != 0) + if ((rv = rump_pub_module_init(mi_start, (size_t)(mi_end-mi_start)))!=0) atf_tc_fail("module init failed: %d (%s)", rv, strerror(rv)); + if ((rv = rump_pub_module_init(mi_start, (size_t)(mi_end-mi_start)))==0) + atf_tc_fail("module double init succeeded"); if (rump_sys_mount(MOUNT_TMPFS, "/mp", 0, &args, sizeof(args)) == -1) atf_tc_fail_errno("still cannot mount"); if (rump_sys_unmount("/mp", 0) == -1) atf_tc_fail("cannot unmount"); - if ((rv = rump_pub_module_fini(*mi)) != 0) - atf_tc_fail("module fini failed: %d (%s)", rv, strerror(rv)); + for (i = 0; i < (int)(mi_end-mi_start); i++) { + if ((rv = rump_pub_module_fini(mi_start[i])) != 0) + atf_tc_fail("module fini failed: %d (%s)", + rv, strerror(rv)); + } + for (i = 0; i < (int)(mi_end-mi_start); i++) { + if ((rv = rump_pub_module_fini(mi_start[i])) == 0) + atf_tc_fail("module double fini succeeded"); + } + if (loop++ == 0) + goto again; + if (dlclose(handle)) { const char *dlmsg = dlerror(); atf_tc_fail("cannot close %s: %s", TMPFSMODULE, dlmsg);