Date: Mon, 17 Mar 2003 00:28:34 -0800 From: "Crist J. Clark" <crist.clark@attbi.com> To: Peter Wemm <peter@wemm.org> Cc: current@freebsd.org Subject: Re: Create linker.hints at boot Message-ID: <20030317082834.GC24317@blossom.cjclark.org> In-Reply-To: <20030315032742.3AE132A7EA@canning.wemm.org> References: <20030315000920.GA69495@blossom.cjclark.org> <20030315032742.3AE132A7EA@canning.wemm.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030317082834.GC24317>