Date: Mon, 13 May 2002 01:59:26 -0400 From: Jake Burkholder <jake@locore.ca> To: Terry Lambert <tlambert2@mindspring.com> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: question: hacking init_main.c Message-ID: <20020513015926.J2566@locore.ca> In-Reply-To: <3CDF4FA5.8511B01A@mindspring.com>; from tlambert2@mindspring.com on Sun, May 12, 2002 at 10:31:17PM -0700 References: <Pine.BSF.4.43.0205121758360.38560-100000@BigKing.sinp.msu.ru> <3CDEB3C5.7D08D187@mindspring.com> <20020512162506.I2566@locore.ca> <3CDF4FA5.8511B01A@mindspring.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Apparently, On Sun, May 12, 2002 at 10:31:17PM -0700,
Terry Lambert said words to the effect of;
> Jake Burkholder wrote:
> > Wrong, no cookie. kernel printf uses the low level console which is
> > initialized by cninit, which is called from init386 (etc), before
> > mi_startup.
> >
> > My best guess at what's happening is that the subsystem numbers are
> > "sparse", and have high numerical values, so you can't really index
> > an array with them. ie you're trying to print sysinit_descr[0x1000000]
> > etc. The best way I've found to do what you want is to use
> > linker_ddb_search_symbol and linker_ddb_symbol_values on the sysinit
> > function pointer to find its name, and to print the numerical value
> > of the order/subsystem.
> >
> > T TERRY PLZ TO BE RESEARCHING NEXT TIME LUV JAKE
>
> Jake,
>
> *I wrote* init_main.c and kernel.h and the original SYSINIT() code;
> Julian just committed it.
I know that you wrote it and I know that you're wrong.
Take sparc64_init() for example, which is called from locore.S before
mi_startup():
void
sparc64_init(caddr_t mdp, u_long o1, u_long o2, u_long o3, ofw_vec_t *vec)
{
...
/*
* Initialize the console before printing anything.
*/
cninit();
/*
* Panic is there is no metadata. Most likely the kernel was booted
* directly, instead of through loader(8).
*/
if (mdp == NULL || kmdp == NULL) {
printf("sparc64_init: no loader metadata.\n"
"This probably means you are not using loader(8).\n");
panic("sparc64_init");
}
These printfs work fine.
Come to think of it:
> cd /usr/current/src/sys/
> find . -name "*.[ch]" | xargs grep SI_SUB_CONSOLE
./sys/kernel.h: * The SI_SUB_CONSOLE and SI_SUB_SWAP values represent values used by
./sys/kernel.h: SI_SUB_CONSOLE = 0x0800000, /* console*/
>
There don't seem to be any SYSINITs that run at SI_SUB_CONSOLE.
Jake
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020513015926.J2566>
