summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorkato <kato@FreeBSD.org>1997-06-15 16:33:52 +0000
committerkato <kato@FreeBSD.org>1997-06-15 16:33:52 +0000
commitb3ecaa3962000d2cb71873ec057bf5c9c7912631 (patch)
tree68a232602d8db78375bcf6e1dc30dadb1564c7a2 /sys
parentcfea13c53883a82660893e1209dd3a8d126573ff (diff)
downloadFreeBSD-src-b3ecaa3962000d2cb71873ec057bf5c9c7912631.zip
FreeBSD-src-b3ecaa3962000d2cb71873ec057bf5c9c7912631.tar.gz
Synchronize with sys/i386/boot/biosboot/boot.c revision 1.67.
Diffstat (limited to 'sys')
-rw-r--r--sys/pc98/boot/biosboot/boot.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/sys/pc98/boot/biosboot/boot.c b/sys/pc98/boot/biosboot/boot.c
index eaeb188..faaa70b 100644
--- a/sys/pc98/boot/biosboot/boot.c
+++ b/sys/pc98/boot/biosboot/boot.c
@@ -24,7 +24,7 @@
* the rights to redistribute these changes.
*
* from: Mach, [92/04/03 16:51:14 rvb]
- * $Id: boot.c,v 1.12 1997/05/28 09:22:59 kato Exp $
+ * $Id: boot.c,v 1.13 1997/06/09 13:44:03 kato Exp $
*/
@@ -60,8 +60,9 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define ouraddr (BOOTSEG << 4) /* XXX */
#define BOOT_CONFIG_SIZE 512
-#define BOOT_HELP_SIZE (2 * 1024)
-#define NAMEBUF_LEN (4 * 1024)
+#define BOOT_HELP_SIZE 2048
+#define KERNEL_CONFIG_SIZE 512
+#define NAMEBUF_LEN 1024 /* oversized to defend against gets() */
static char boot_config[BOOT_CONFIG_SIZE];
static char boot_help[BOOT_HELP_SIZE];
@@ -69,6 +70,8 @@ static char boot_help[BOOT_HELP_SIZE];
char *dflt_name;
#endif
char *name;
+static char kernel_config[KERNEL_CONFIG_SIZE];
+static char kernel_config_namebuf[NAMEBUF_LEN + sizeof "config"];
static char linebuf[NAMEBUF_LEN];
static char namebuf[NAMEBUF_LEN];
static struct bootinfo bootinfo;
@@ -218,6 +221,7 @@ loadprog(void)
long int bootdev;
int i;
unsigned pad;
+ char *s, *t;
read((void *)&head, sizeof(head));
if ( N_BADMAG(head)) {
@@ -337,6 +341,28 @@ loadprog(void)
bootinfo.bi_kernelname = name + ouraddr;
bootinfo.bi_nfs_diskless = NULL;
bootinfo.bi_size = sizeof(bootinfo);
+
+ /*
+ * Load the kernel config file (if any). Its name is given by
+ * appending ".config" to the kernel name. Build the name inline
+ * because no str*() functions are available. The file has to be
+ * copied to &disklabel for userconfig. It can't be loaded there
+ * directly because the label is used late in readfile() in some
+ * unusual cases, e.g., for bad144 handling.
+ */
+ s = name;
+ t = kernel_config_namebuf;
+ do
+ ;
+ while ((*t++ = *s++) != '\0');
+ s = ".config";
+ --t;
+ do
+ ;
+ while ((*t++ = *s++) != '\0');
+ readfile(kernel_config_namebuf, kernel_config, KERNEL_CONFIG_SIZE);
+ pcpy(kernel_config, (char *)&disklabel + ouraddr, KERNEL_CONFIG_SIZE);
+
printf("total=0x%x entry point=0x%x\n", (int)addr, (int)startaddr);
startprog((int)startaddr, loadflags | RB_BOOTINFO, bootdev,
(int)&bootinfo + ouraddr);
@@ -358,9 +384,6 @@ readfile(char *path, char *buf, size_t nbytes)
read(buf, nbytes);
}
buf[nbytes - 1] = '\0';
-#if 0
- pcpy(buf, (void *)0x800, nbytes);
-#endif
}
static void
OpenPOWER on IntegriCloud