From owner-p4-projects@FreeBSD.ORG Mon Apr 24 23:25:30 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C0EBA16A405; Mon, 24 Apr 2006 23:25:30 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8370616A401 for ; Mon, 24 Apr 2006 23:25:30 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5096443D46 for ; Mon, 24 Apr 2006 23:25:30 +0000 (GMT) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k3ONPUQv003320 for ; Mon, 24 Apr 2006 23:25:30 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k3ONPURu003311 for perforce@freebsd.org; Mon, 24 Apr 2006 23:25:30 GMT (envelope-from jb@freebsd.org) Date: Mon, 24 Apr 2006 23:25:30 GMT Message-Id: <200604242325.k3ONPURu003311@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 96024 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 Apr 2006 23:25:31 -0000 http://perforce.freebsd.org/chv.cgi?CH=96024 Change 96024 by jb@jb_freebsd2 on 2006/04/24 23:24:52 Add a function to iterate over each linker file and call a callback function. DTrace needs to do this. It's important that the linker file list remains locked while the callback function is in progress. Ideally the linker file lock would allow the callback function to allocate memory with wait. Affected files ... .. //depot/projects/dtrace/src/sys/kern/kern_linker.c#3 edit .. //depot/projects/dtrace/src/sys/sys/linker.h#3 edit Differences ... ==== //depot/projects/dtrace/src/sys/kern/kern_linker.c#3 (text+ko) ==== @@ -608,6 +608,27 @@ return (LINKER_LOOKUP_SET(file, name, firstp, lastp, countp)); } +/* + * List linker files. + */ +int +linker_file_list(int (*callback_func)(linker_file_t,void *),void *arg) +{ + linker_file_t lf; + int error = 0; + + mtx_lock(&kld_mtx); + + TAILQ_FOREACH(lf, &linker_files, link) { + if ((error = callback_func(lf, arg)) != 0) + break; + } + + mtx_unlock(&kld_mtx); + + return (error); +} + caddr_t linker_file_lookup_symbol(linker_file_t file, const char *name, int deps) { ==== //depot/projects/dtrace/src/sys/sys/linker.h#3 (text+ko) ==== @@ -159,6 +159,11 @@ void *_start, void *_stop, int *_count); /* + * List linker files. + */ +int linker_file_list(int (*)(linker_file_t,void *),void *); + +/* * This routine is responsible for finding dependencies of userland * initiated kldload(2)'s of files. */