Enable hardwiring of things like tunables from embedded enironments

that do not start from loader(8).
This commit is contained in:
Peter Wemm 2001-08-27 05:11:53 +00:00
parent d0b8716702
commit 76cb0cadf1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=82393
18 changed files with 119 additions and 38 deletions

View File

@ -655,7 +655,10 @@ alpha_init(pfn, ptb, bim, bip, biv)
/* Get the loader(8) metadata */
preload_metadata = (caddr_t)bootinfo.modptr;
kern_envp = bootinfo.envp;
if (envmode == 1)
kern_envp = static_env;
else
kern_envp = bootinfo.envp;
/* Do basic tuning, hz etc */
init_param();

View File

@ -1813,7 +1813,9 @@ init386(first)
} else {
metadata_missing = 1;
}
if (bootinfo.bi_envp)
if (envmode == 1)
kern_envp = static_env;
else if (bootinfo.bi_envp)
kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
/* Init basic tunables, hz etc */

View File

@ -17,7 +17,7 @@
#
# Which version of config(8) is required.
%VERSREQ= 500007
%VERSREQ= 500008
# Can be overridden by makeoptions or /etc/make.conf
KERNEL_KO?= kernel
@ -88,10 +88,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
GEN_CFILES= $S/$M/$M/genassym.c
SYSTEM_CFILES= vnode_if.c hints.c config.c
SYSTEM_CFILES= vnode_if.c hints.c env.c config.c
SYSTEM_SFILES= $S/$M/$M/locore.s
SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o config.o hack.So
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So
SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
-e locorestart \
-export-dynamic -dynamic-linker /red/herring \
@ -357,6 +357,9 @@ vers.o:
hints.o: hints.c
${NORMAL_C}
env.o: env.c
${NORMAL_C}
vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src

View File

@ -17,7 +17,7 @@
#
# Which version of config(8) is required.
%VERSREQ= 500007
%VERSREQ= 500008
# Can be overridden by makeoptions or /etc/make.conf
KERNEL_KO?= kernel
@ -91,10 +91,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
GEN_CFILES= $S/$M/$M/genassym.c
SYSTEM_CFILES= vnode_if.c hints.c config.c
SYSTEM_CFILES= vnode_if.c hints.c env.c config.c
SYSTEM_SFILES= $S/$M/$M/locore.s
SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o config.o hack.So
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So
SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
-export-dynamic -dynamic-linker /red/herring \
-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@ -315,6 +315,9 @@ vers.o:
hints.o: hints.c
${NORMAL_C}
env.o: env.c
${NORMAL_C}
vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src

View File

@ -27,7 +27,7 @@ OBJDUMP= ia64-unknown-linux-objdump
MACHINE_ARCH= ia64
# Which version of config(8) is required.
%VERSREQ= 500007
%VERSREQ= 500008
# Can be overridden by makeoptions or /etc/make.conf
KERNEL_KO?= kernel
@ -101,10 +101,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
GEN_CFILES= $S/$M/$M/genassym.c
SYSTEM_CFILES= vnode_if.c hints.c config.c
SYSTEM_CFILES= vnode_if.c hints.c env.c config.c
SYSTEM_SFILES= $S/$M/$M/locore.s
SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o config.o \
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o \
# hack.So ski can't cope with dynamic relocs
SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
-e locorestart \
@ -326,6 +326,9 @@ vers.o:
hints.o: hints.c
${NORMAL_C}
env.o: env.c
${NORMAL_C}
vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src

View File

@ -19,7 +19,7 @@
#
# Which version of config(8) is required.
%VERSREQ= 500007
%VERSREQ= 500008
# Can be overridden by makeoptions or /etc/make.conf
KERNEL_KO?= kernel
@ -93,10 +93,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
GEN_CFILES= $S/$M/$M/genassym.c
SYSTEM_CFILES= vnode_if.c hints.c config.c
SYSTEM_CFILES= vnode_if.c hints.c env.c config.c
SYSTEM_SFILES= $S/$M/$M/locore.s
SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o config.o hack.So
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So
SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
-export-dynamic -dynamic-linker /red/herring \
-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@ -319,6 +319,9 @@ vers.o:
hints.o: hints.c
${NORMAL_C}
env.o: env.c
${NORMAL_C}
vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src

View File

@ -17,7 +17,7 @@
#
# Which version of config(8) is required.
%VERSREQ= 500007
%VERSREQ= 500008
# Temporary stuff while we're still embryonic
NO_MODULES?= yes
@ -94,10 +94,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
GEN_CFILES= $S/$M/$M/genassym.c
SYSTEM_CFILES= vnode_if.c hints.c config.c
SYSTEM_CFILES= vnode_if.c hints.c env.c config.c
SYSTEM_SFILES= $S/$M/$M/locore.s
SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o config.o hack.So
SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So
SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
-export-dynamic -dynamic-linker /red/herring \
-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@ -318,6 +318,9 @@ vers.o:
hints.o: hints.c
${NORMAL_C}
env.o: env.c
${NORMAL_C}
vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src

View File

@ -32,7 +32,7 @@ CWARNFLAGS= -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \
-ansi
# Which version of config(8) is required.
%VERSREQ= 500007
%VERSREQ= 500008
# Can be overridden by makeoptions or /etc/make.conf
KERNEL_KO?= kernel
@ -98,10 +98,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
GEN_CFILES= $S/$M/$M/genassym.c
SYSTEM_CFILES= vnode_if.c hints.c config.c
SYSTEM_CFILES= vnode_if.c hints.c env.c config.c
SYSTEM_SFILES= $S/$M/$M/locore.s $S/$M/$M/exception.s
SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
SYSTEM_OBJS= locore.o exception.o vnode_if.o ${OBJS} hints.o config.o hack.So
SYSTEM_OBJS= locore.o exception.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So
SYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \
-export-dynamic -dynamic-linker /red/herring \
-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@ -329,6 +329,9 @@ vers.o:
hints.o: hints.c
${NORMAL_C}
env.o: env.c
${NORMAL_C}
vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src

View File

@ -1813,7 +1813,9 @@ init386(first)
} else {
metadata_missing = 1;
}
if (bootinfo.bi_envp)
if (envmode == 1)
kern_envp = static_env;
else if (bootinfo.bi_envp)
kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
/* Init basic tunables, hz etc */

View File

@ -387,7 +387,10 @@ ia64_init()
if (bootinfo.kernend)
kernend = round_page(bootinfo.kernend);
preload_metadata = (caddr_t)bootinfo.modptr;
kern_envp = bootinfo.envp;
if (envmode == 1)
kern_envp = static_env;
else
kern_envp = bootinfo.envp;
/* Init basic tunables, including hz */
init_param();

View File

@ -1877,7 +1877,9 @@ init386(first)
} else {
metadata_missing = 1;
}
if (bootinfo.bi_envp)
if (envmode == 1)
kern_envp = static_env;
else if (bootinfo.bi_envp)
kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
/* Init basic tunables, hz etc */

View File

@ -1877,7 +1877,9 @@ init386(first)
} else {
metadata_missing = 1;
}
if (bootinfo.bi_envp)
if (envmode == 1)
kern_envp = static_env;
else if (bootinfo.bi_envp)
kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
/* Init basic tunables, hz etc */

View File

@ -178,6 +178,8 @@ char *getenv __P((const char *name));
int getenv_int __P((const char *name, int *data));
quad_t getenv_quad __P((const char *name, quad_t *data));
extern char *kern_envp;
extern char *static_env;
extern int envmode;
#ifdef APM_FIXUP_CALLTODO
void adjust_timeout_calltodo __P((struct timeval *time_change));

View File

@ -122,8 +122,10 @@ struct opt_list {
} *otab;
extern char *ident;
extern char *env;
extern char *hints;
extern int do_trace;
extern int envmode;
extern int hintmode;
char *get_word(FILE *);

View File

@ -9,6 +9,7 @@
%token CONFIG
%token CPU
%token DEVICE
%token ENV
%token EQUALS
%token HINTS
%token IDENT
@ -75,6 +76,8 @@ static struct device *curp = 0;
struct device *dtab;
char *ident;
char *env;
int envmode;
char *hints;
int hintmode;
int yyline;
@ -145,6 +148,11 @@ Config_spec:
= { maxusers = $2; } |
PROFILE NUMBER
= { profiling = $2; } |
ENV ID
= {
env = $2;
envmode = 1;
} |
HINTS ID
= {
hints = $2;

View File

@ -8,4 +8,4 @@
*
* $FreeBSD$
*/
#define CONFIGVERS 500007
#define CONFIGVERS 500008

View File

@ -67,6 +67,7 @@ struct kt {
{ "config", CONFIG },
{ "cpu", CPU },
{ "device", DEVICE },
{ "env", ENV },
{ "hints", HINTS },
{ "ident", IDENT },
{ "machine", ARCH }, /* MACHINE is defined in /sys/param.h */

View File

@ -206,19 +206,6 @@ makefile(void)
ofp = fopen(path("hints.c.new"), "w");
if (ofp == NULL)
err(1, "%s", path("hints.c.new"));
#if 0
/*
* This is causing more pain than it is worth. And besides, the
* release has been fixed so that this isn't necessary anymore.
* The boot floppies load hints now.
*/
if (hintmode == 0) {
snprintf(line, sizeof(line), "%s.hints", PREFIX);
ifp = fopen(line, "r");
if (ifp)
hintmode = 2;
}
#endif
fprintf(ofp, "int hintmode = %d;\n", hintmode);
fprintf(ofp, "char static_hints[] = {\n");
if (ifp) {
@ -257,6 +244,55 @@ makefile(void)
fclose(ifp);
fclose(ofp);
moveifchanged(path("hints.c.new"), path("hints.c"));
if (env) {
ifp = fopen(env, "r");
if (ifp == NULL)
err(1, "%s", env);
} else {
ifp = NULL;
}
ofp = fopen(path("env.c.new"), "w");
if (ofp == NULL)
err(1, "%s", path("env.c.new"));
fprintf(ofp, "int envmode = %d;\n", envmode);
fprintf(ofp, "char static_env[] = {\n");
if (ifp) {
while (fgets(line, BUFSIZ, ifp) != 0) {
/* zap trailing CR and/or LF */
while ((s = rindex(line, '\n')) != NULL)
*s = '\0';
while ((s = rindex(line, '\r')) != NULL)
*s = '\0';
/* remove # comments */
s = index(line, '#');
if (s)
*s = '\0';
/* remove any whitespace and " characters */
s = line;
while (*s) {
if (*s == ' ' || *s == '\t' || *s == '"') {
while (*s) {
s[0] = s[1];
s++;
}
/* start over */
s = line;
continue;
}
s++;
}
/* anything left? */
if (*line == '\0')
continue;
fprintf(ofp, "\"%s\\0\"\n", line);
}
}
fprintf(ofp, "\"\\0\"\n};\n");
if (ifp)
fclose(ifp);
fclose(ofp);
moveifchanged(path("env.c.new"), path("env.c"));
}
/*