From owner-p4-projects@FreeBSD.ORG Fri Jun 9 21:56:41 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 D7E9D16A504; Fri, 9 Jun 2006 21:56:40 +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 96D8916A500 for ; Fri, 9 Jun 2006 21:56:40 +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 4A76143D70 for ; Fri, 9 Jun 2006 21:56:40 +0000 (GMT) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k59LsbC0029501 for ; Fri, 9 Jun 2006 21:54:37 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k59LsbYb029498 for perforce@freebsd.org; Fri, 9 Jun 2006 21:54:37 GMT (envelope-from jb@freebsd.org) Date: Fri, 9 Jun 2006 21:54:37 GMT Message-Id: <200606092154.k59LsbYb029498@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 98884 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: Fri, 09 Jun 2006 21:56:41 -0000 http://perforce.freebsd.org/chv.cgi?CH=98884 Change 98884 by jb@jb_freebsd2 on 2006/06/09 21:53:53 Add a loader menu option to load the DTrace modules before booting. This isn't implemented in Forth (like the acpi load wasn't) because the support.4th code is all centred around processing configuration files and all that has happened before the menu is displayed. We need an active committer who knows Forth. Despite the commit comment by the author of support.4th, this code is far from documented and light years away from being readable. It's like someone just dropped a million words in a file and called it "code". Yuk. I've wasted enough time trying to understand it. Affected files ... .. //depot/projects/dtrace/src/sys/boot/forth/beastie.4th#2 edit .. //depot/projects/dtrace/src/sys/boot/i386/libi386/i386_module.c#2 edit Differences ... ==== //depot/projects/dtrace/src/sys/boot/forth/beastie.4th#2 (text+ko) ==== @@ -40,6 +40,7 @@ variable bootkey variable bootacpikey +variable bootdtracekey variable bootsafekey variable bootverbosekey variable bootsinglekey @@ -194,6 +195,7 @@ printmenuitem ." Boot FreeBSD in Safe Mode" bootsafekey ! printmenuitem ." Boot FreeBSD in single user mode" bootsinglekey ! printmenuitem ." Boot FreeBSD with verbose logging" bootverbosekey ! + printmenuitem ." Boot FreeBSD with DTrace enabled" bootdtracekey ! printmenuitem ." Escape to loader prompt" escapekey ! printmenuitem ." Reboot" rebootkey ! menuX @ 20 at-xy @@ -283,6 +285,10 @@ s" YES" s" boot_single" setenv 0 boot then + dup bootdtracekey @ = if + s" YES" s" dtrace_load" setenv + 0 boot + then dup escapekey @ = if 2drop s" NO" s" autoboot_delay" setenv ==== //depot/projects/dtrace/src/sys/boot/i386/libi386/i386_module.c#2 (text+ko) ==== @@ -64,5 +64,31 @@ printf("ACPI autoload failed - %s\n", strerror(error)); } + /* + * XXX This stuff should be in 4th too, but who can understand + * how to load a module from a menu option? The support.4th + * code loads modules before the menu. + */ + if (getenv("dtrace_load")) { + error = mod_load("cyclic", NULL, 0, NULL); + if (error != 0) + printf("cyclic autoload failed - %s\n", strerror(error)); + error = mod_load("dtrace", NULL, 0, NULL); + if (error != 0) + printf("dtrace autoload failed - %s\n", strerror(error)); + error = mod_load("profile", NULL, 0, NULL); + if (error != 0) + printf("profile autoload failed - %s\n", strerror(error)); + error = mod_load("systrace", NULL, 0, NULL); + if (error != 0) + printf("systrace autoload failed - %s\n", strerror(error)); + error = mod_load("fbt", NULL, 0, NULL); + if (error != 0) + printf("fbt autoload failed - %s\n", strerror(error)); + error = mod_load("sdt", NULL, 0, NULL); + if (error != 0) + printf("sdt autoload failed - %s\n", strerror(error)); + } + return(0); }