Module Name:    src
Committed By:   pooka
Date:           Fri Mar  5 18:47:50 UTC 2010

Modified Files:
        src/lib/librumpuser: rumpuser_dl.c
        src/sys/rump/include/rump: rumpuser.h

Log Message:
During bootstrap, process all modinfos in a DSO in one go.  Get
rid of dependency tricks, since they are no longer necessary.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/lib/librumpuser/rumpuser_dl.c
cvs rdiff -u -r1.37 -r1.38 src/sys/rump/include/rump/rumpuser.h

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

Modified files:

Index: src/lib/librumpuser/rumpuser_dl.c
diff -u src/lib/librumpuser/rumpuser_dl.c:1.2 src/lib/librumpuser/rumpuser_dl.c:1.3
--- src/lib/librumpuser/rumpuser_dl.c:1.2	Mon Mar  1 13:13:48 2010
+++ src/lib/librumpuser/rumpuser_dl.c	Fri Mar  5 18:47:50 2010
@@ -1,4 +1,4 @@
-/*      $NetBSD: rumpuser_dl.c,v 1.2 2010/03/01 13:13:48 pooka Exp $	*/
+/*      $NetBSD: rumpuser_dl.c,v 1.3 2010/03/05 18:47:50 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: rumpuser_dl.c,v 1.2 2010/03/01 13:13:48 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_dl.c,v 1.3 2010/03/05 18:47:50 pooka Exp $");
 
 #include <sys/types.h>
 #include <sys/time.h>
@@ -296,35 +296,30 @@
 	return 0;
 }
 
-static int
+static void
 process(const char *soname, rump_modinit_fn domodinit)
 {
 	void *handle;
-	struct modinfo **mi, **mi_end;
-	int loaded = 0;
+	const struct modinfo *const *mi_start, *const *mi_end;
 
 	if (strstr(soname, "librump") == NULL)
-		return 0;
+		return;
 
 	handle = dlopen(soname, RTLD_LAZY);
 	if (handle == NULL)
-		return 0;
+		return;
 
-	mi = dlsym(handle, "__start_link_set_modules");
-	if (!mi)
+	mi_start = dlsym(handle, "__start_link_set_modules");
+	if (!mi_start)
 		goto out;
 	mi_end = dlsym(handle, "__stop_link_set_modules");
 	if (!mi_end)
 		goto out;
 
-	for (; mi < mi_end; mi++)
-		if (domodinit(*mi, NULL) == 0)
-			loaded = 1;
-	assert(mi == mi_end);
+	domodinit(mi_start, (size_t)(mi_end-mi_start));
 
  out:
 	dlclose(handle);
-	return loaded;
 }
 
 /*
@@ -336,7 +331,6 @@
 	rump_symload_fn symload)
 {
 	struct link_map *map, *origmap;
-	int couldload;
 	int error;
 
 	if (dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &origmap) == -1) {
@@ -394,13 +388,8 @@
 	/*
 	 * Next, load modules from dynlibs.
 	 */
-	do {
-		couldload = 0;
-		map = origmap;
-		for (; map; map = map->l_prev)
-			if (process(map->l_name, domodinit))
-				couldload = 1;
-	} while (couldload);
+	for (map = origmap; map; map = map->l_prev)
+		process(map->l_name, domodinit);
 }
 
 void

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.37 src/sys/rump/include/rump/rumpuser.h:1.38
--- src/sys/rump/include/rump/rumpuser.h:1.37	Mon Mar  1 13:12:20 2010
+++ src/sys/rump/include/rump/rumpuser.h	Fri Mar  5 18:47:49 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.37 2010/03/01 13:12:20 pooka Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.38 2010/03/05 18:47:49 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -187,19 +187,9 @@
 
 /* rumpuser dynloader */
 
-/* XXX: go _t, go */
-#ifdef __NetBSD__
-#include <prop/proplib.h>
-#else
-#ifndef HAVE_PROP_DICTIONARY_T
-#define HAVE_PROP_DICTIONARY_T
-typedef struct prop_dictionary *prop_dictionary_t;
-#endif
-#endif
-
 struct modinfo;
 struct rump_component;
-typedef int (*rump_modinit_fn)(struct modinfo *, prop_dictionary_t);
+typedef void (*rump_modinit_fn)(const struct modinfo *const *, size_t);
 typedef int (*rump_symload_fn)(void *, uint64_t, char *, uint64_t);
 typedef void (*rump_component_init_fn)(struct rump_component *, int);
 void rumpuser_dl_bootstrap(rump_modinit_fn, rump_symload_fn);

Reply via email to