From owner-freebsd-current Mon Mar 17 0:31:28 2003 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0CD8537B404 for ; Mon, 17 Mar 2003 00:31:24 -0800 (PST) Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) by mx1.FreeBSD.org (Postfix) with ESMTP id DDCEA43F85 for ; Mon, 17 Mar 2003 00:31:22 -0800 (PST) (envelope-from crist.clark@attbi.com) Received: from blossom.cjclark.org (12-234-89-252.client.attbi.com[12.234.89.252]) by sccrmhc01.attbi.com (sccrmhc01) with ESMTP id <200303170828360010020eb9e>; Mon, 17 Mar 2003 08:28:36 +0000 Received: from blossom.cjclark.org (localhost. [127.0.0.1]) by blossom.cjclark.org (8.12.6/8.12.3) with ESMTP id h2H8SZeq025327; Mon, 17 Mar 2003 00:28:35 -0800 (PST) (envelope-from crist.clark@attbi.com) Received: (from cjc@localhost) by blossom.cjclark.org (8.12.6/8.12.6/Submit) id h2H8SYWL025326; Mon, 17 Mar 2003 00:28:34 -0800 (PST) X-Authentication-Warning: blossom.cjclark.org: cjc set sender to crist.clark@attbi.com using -f Date: Mon, 17 Mar 2003 00:28:34 -0800 From: "Crist J. Clark" To: Peter Wemm Cc: current@freebsd.org Subject: Re: Create linker.hints at boot Message-ID: <20030317082834.GC24317@blossom.cjclark.org> Reply-To: cjclark@alum.mit.edu References: <20030315000920.GA69495@blossom.cjclark.org> <20030315032742.3AE132A7EA@canning.wemm.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="cNdxnHkX5QqsyA0e" Content-Disposition: inline In-Reply-To: <20030315032742.3AE132A7EA@canning.wemm.org> User-Agent: Mutt/1.4i X-URL: http://people.freebsd.org/~cjc/ Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --cNdxnHkX5QqsyA0e Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Mar 14, 2003 at 07:27:42PM -0800, Peter Wemm wrote: > "Crist J. Clark" wrote: > > > > --C7zPtVaVf+AK4Oqc > > Content-Type: text/plain; charset=us-ascii > > Content-Disposition: inline > > > > Perhaps it would be a good idea to build a linker.hints file with > > kldxref(8) at boot time. At least, I can't think of any really good > > reasons why _not_ to do it. > > Yes, we need to do this, but your patch needs a little more work. > > Specifically.. There is a linker.hints file in each directory in the module > path, not just /boot/kernel. You need to look at the kern.module_path > sysctl to find the search path. > > peter@daintree[7:26pm]~-101> sysctl -n kern.module_path > /boot/kernel;/boot/kernel;/boot/modules;/modules Ah. There that is. > This also needs to be robust in the case where /boot might be another file > system or readonly or NFSROOT or not even mounted, or something. I think the easiest thing to do here is if the kldxref(8) command fails, it shouldn't kill the boot. Specifically, force the script to always exit on success. Anything failing here is simply not bad enough that we should interupt the boot. In the case of a read-only filesystem, we get an error message like, Building /foo/modules/linker.hints kldxref: /foo/lhint.caF5Wl: Read-only file system For non-existent directories, kldxref(8) actually doesn't return a failure anyway, # kldxref /nonexistent # echo $? 0 Someone who's mount root read-only or booting from a partition that doesn't get mounted is someone who better know what they are doing. If they don't like the error messages they have the knob to completely disable the script or I have added an option for a rc.conf(5) specified directory listing rather than kern.module_path. There are always going to be that small fraction of real or imagined users doing some wild things that won't fit into the startup scripts no matter how many knobs we give them. Making things overly complicated for that small percentile just confuses the bulk of the users and makes more room for more bugs. KISS. Just turn this off if you don't want to or can't use it. -- Crist J. Clark | cjclark@alum.mit.edu | cjclark@jhu.edu http://people.freebsd.org/~cjc/ | cjc@freebsd.org --cNdxnHkX5QqsyA0e Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="kldxref_rc.patch" Index: src/etc/defaults/rc.conf =================================================================== RCS file: /export/freebsd/ncvs/src/etc/defaults/rc.conf,v retrieving revision 1.170 diff -u -r1.170 rc.conf --- src/etc/defaults/rc.conf 15 Mar 2003 08:14:42 -0000 1.170 +++ src/etc/defaults/rc.conf 17 Mar 2003 08:25:09 -0000 @@ -28,6 +28,9 @@ apmd_enable="NO" # Run apmd to handle APM event from userland. apmd_flags="" # Flags to apmd (if enabled). devd_enable="NO" # Run devd, to trigger programs on device tree changes. +kldxref_enable="NO" # Build linker.hints files with kldxref(8). +kldxref_clobber="NO" # Overwrite old linker.hints at boot. +kldxref_module_path="" # Override kern.module_path. A ';'-delimited list. pccard_enable="NO" # Set to YES if you want to configure PCCARD devices. pccard_mem="DEFAULT" # If pccard_enable=YES, this is card memory address. pccard_beep="2" # pccard beep type. Index: src/etc/rc.d/network1 =================================================================== RCS file: /export/freebsd/ncvs/src/etc/rc.d/network1,v retrieving revision 1.145 diff -u -r1.145 network1 --- src/etc/rc.d/network1 12 Feb 2003 04:26:10 -0000 1.145 +++ src/etc/rc.d/network1 15 Mar 2003 00:36:05 -0000 @@ -4,7 +4,7 @@ # # PROVIDE: network1 -# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty +# REQUIRE: atm1 ipfilter kldxref mountcritlocal pccard serial sppp sysctl tty # KEYWORD: FreeBSD . /etc/rc.subr Index: src/etc/rc.d/kldxref =================================================================== RCS file: src/etc/rc.d/kldxref diff -N src/etc/rc.d/kldxref --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/etc/rc.d/kldxref 17 Mar 2003 08:23:09 -0000 @@ -0,0 +1,35 @@ +#!/bin/sh +# +# $FreeBSD:$ +# + +# PROVIDE: kldxref +# REQUIRE: root +# BEFORE: network1 +# KEYWORD: FreeBSD + +. /etc/rc.subr + +rcvar="kldxref_enable" +name="kldxref" +stop_cmd=":" +start_cmd="kldxref_start" + +kldxref_start () { + if [ -z "$kldxref_module_path" ]; then + MODULE_PATHS=`sysctl -n kern.module_path` + else + MODULE_PATHS="$kldxref_module_path" + fi + IFS=';' + for KERNDIR in $MODULE_PATHS; do + if [ ! -f "$KERNDIR/linker.hints" ] || + checkyesno kldxref_clobber; then + echo "Building $KERNDIR/linker.hints" + kldxref "$KERNDIR" + fi + done +} + +load_rc_config $name +run_rc_command "$1" --cNdxnHkX5QqsyA0e-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message