summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2019-05-01 11:22:22 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2019-05-01 11:22:22 +0000
commit256b90376a3ab4acdc5f69035941c08d0949f373 (patch)
treec34ed2874baf383c9518e84aa752ac0eba6ac12d
parent425df02ecf865e3c34ddf216dc462a1066b559f3 (diff)
parente742aada08b77c795649b3e05d39213e1edcceeb (diff)
downloadillumos-joyent-256b90376a3ab4acdc5f69035941c08d0949f373.tar.gz
[illumos-gate merge]
commit e742aada08b77c795649b3e05d39213e1edcceeb 10837 loader: zfsboot.c cstyle cleanup commit dddac438d5629d72879f2701924b62774cb4eaf0 10806 mnode_range_setup() makes assumptions about mnodes commit 40320bdcdf7a073effbd3872d29e2bd595eae22c 10858 loader: add elf_i386_sol2 option where we do not use ld script commit adf7a658ee3948276f007c3374ca1ecbb5ede9c5 10848 loader: disable libficl/vm.c smatch deref check commit 092a100d3e036d742afb02e2f572395e7dbe35ef 10861 s10_npreload: make clobber target is failing to remove directory
-rw-r--r--usr/src/boot/sys/boot/i386/gptzfsboot/Makefile1
-rw-r--r--usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c762
-rw-r--r--usr/src/boot/sys/boot/i386/isoboot/Makefile2
-rw-r--r--usr/src/boot/sys/boot/libficl/Makefile.com3
-rw-r--r--usr/src/lib/brand/solaris10/s10_npreload/amd64/Makefile2
-rw-r--r--usr/src/lib/brand/solaris10/s10_npreload/i386/Makefile2
6 files changed, 399 insertions, 373 deletions
diff --git a/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile b/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile
index 466a2f1276..b7a73288cc 100644
--- a/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile
+++ b/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile
@@ -68,6 +68,7 @@ OBJS = multiboot.o zfsboot.o sio.o cons.o devopen.o \
part.o := CPPFLAGS += -I$(ZLIB)
smbios.o := CPPFLAGS += -DSMBIOS_SERIAL_NUMBERS
smbios.o := CPPFLAGS += -DSMBIOS_LITTLE_ENDIAN_UUID
+gptldr.out := LD_FLAGS += -m elf_i386_sol2
CLEANFILES= gptzfsboot $(OBJS)
diff --git a/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c b/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c
index 59f5192042..3c5166005d 100644
--- a/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c
+++ b/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c
@@ -1,4 +1,4 @@
-/*-
+/*
* Copyright (c) 1998 Robert Nordier
* All rights reserved.
*
@@ -47,18 +47,18 @@
#include "libzfs.h"
-#define ARGS 0x900
-#define NOPT 14
-#define NDEV 3
+#define ARGS 0x900
+#define NOPT 14
+#define NDEV 3
-#define BIOS_NUMDRIVES 0x475
-#define DRV_HARD 0x80
-#define DRV_MASK 0x7f
+#define BIOS_NUMDRIVES 0x475
+#define DRV_HARD 0x80
+#define DRV_MASK 0x7f
-#define TYPE_AD 0
-#define TYPE_DA 1
-#define TYPE_MAXHARD TYPE_DA
-#define TYPE_FD 2
+#define TYPE_AD 0
+#define TYPE_DA 1
+#define TYPE_MAXHARD TYPE_DA
+#define TYPE_FD 2
extern uint32_t _end;
@@ -129,311 +129,318 @@ struct fs_ops *file_system[] = {
int
main(void)
{
- int auto_boot, i, fd;
- struct disk_devdesc devdesc;
-
- bios_getmem();
-
- if (high_heap_size > 0) {
- heap_top = PTOV(high_heap_base + high_heap_size);
- heap_bottom = PTOV(high_heap_base);
- } else {
- heap_bottom = (char *)
- (roundup2(__base + (int32_t)&_end, 0x10000) - __base);
- heap_top = (char *) PTOV(bios_basemem);
- }
- setheap(heap_bottom, heap_top);
-
- /*
- * Initialise the block cache. Set the upper limit.
- */
- bcache_init(32768, 512);
-
- archsw.arch_autoload = NULL;
- archsw.arch_getdev = i386_getdev;
- archsw.arch_copyin = NULL;
- archsw.arch_copyout = NULL;
- archsw.arch_readin = NULL;
- archsw.arch_isainb = NULL;
- archsw.arch_isaoutb = NULL;
- archsw.arch_zfs_probe = i386_zfs_probe;
-
- bootinfo.bi_version = BOOTINFO_VERSION;
- bootinfo.bi_size = sizeof(bootinfo);
- bootinfo.bi_basemem = bios_basemem / 1024;
- bootinfo.bi_extmem = bios_extmem / 1024;
- bootinfo.bi_memsizes_valid++;
- bootinfo.bi_bios_dev = *(uint8_t *)PTOV(ARGS);
-
- /* Set up fall back device name. */
- snprintf(boot_devname, sizeof (boot_devname), "disk%d:",
- bd_bios2unit(bootinfo.bi_bios_dev));
-
- for (i = 0; devsw[i] != NULL; i++)
- if (devsw[i]->dv_init != NULL)
- (devsw[i]->dv_init)();
-
- disk_parsedev(&devdesc, boot_devname+4, NULL);
-
- bootdev = MAKEBOOTDEV(dev_maj[DEVT_DISK], devdesc.d_slice + 1,
- devdesc.dd.d_unit, devdesc.d_partition >= 0? devdesc.d_partition:0xff);
-
- /*
- * zfs_fmtdev() can be called only after dv_init
- */
- if (bdev != NULL && bdev->dd.d_dev->dv_type == DEVT_ZFS) {
- /* set up proper device name string for ZFS */
- strncpy(boot_devname, zfs_fmtdev(bdev), sizeof (boot_devname));
- }
-
- /* now make sure we have bdev on all cases */
- if (bdev != NULL)
- free(bdev);
- i386_getdev((void **)&bdev, boot_devname, NULL);
+ int auto_boot, i, fd;
+ struct disk_devdesc devdesc;
- env_setenv("currdev", EV_VOLATILE, boot_devname, i386_setcurrdev,
- env_nounset);
+ bios_getmem();
- /* Process configuration file */
- setenv("screen-#rows", "24", 1);
- auto_boot = 1;
+ if (high_heap_size > 0) {
+ heap_top = PTOV(high_heap_base + high_heap_size);
+ heap_bottom = PTOV(high_heap_base);
+ } else {
+ heap_bottom = (char *)
+ (roundup2(__base + (int32_t)&_end, 0x10000) - __base);
+ heap_top = (char *)PTOV(bios_basemem);
+ }
+ setheap(heap_bottom, heap_top);
- fd = open(PATH_CONFIG, O_RDONLY);
- if (fd == -1)
- fd = open(PATH_DOTCONFIG, O_RDONLY);
+ /*
+ * Initialise the block cache. Set the upper limit.
+ */
+ bcache_init(32768, 512);
+
+ archsw.arch_autoload = NULL;
+ archsw.arch_getdev = i386_getdev;
+ archsw.arch_copyin = NULL;
+ archsw.arch_copyout = NULL;
+ archsw.arch_readin = NULL;
+ archsw.arch_isainb = NULL;
+ archsw.arch_isaoutb = NULL;
+ archsw.arch_zfs_probe = i386_zfs_probe;
+
+ bootinfo.bi_version = BOOTINFO_VERSION;
+ bootinfo.bi_size = sizeof (bootinfo);
+ bootinfo.bi_basemem = bios_basemem / 1024;
+ bootinfo.bi_extmem = bios_extmem / 1024;
+ bootinfo.bi_memsizes_valid++;
+ bootinfo.bi_bios_dev = *(uint8_t *)PTOV(ARGS);
+
+ /* Set up fall back device name. */
+ snprintf(boot_devname, sizeof (boot_devname), "disk%d:",
+ bd_bios2unit(bootinfo.bi_bios_dev));
+
+ for (i = 0; devsw[i] != NULL; i++)
+ if (devsw[i]->dv_init != NULL)
+ (devsw[i]->dv_init)();
+
+ disk_parsedev(&devdesc, boot_devname + 4, NULL);
+
+ bootdev = MAKEBOOTDEV(dev_maj[DEVT_DISK], devdesc.d_slice + 1,
+ devdesc.dd.d_unit,
+ devdesc.d_partition >= 0 ? devdesc.d_partition : 0xff);
- if (fd != -1) {
- read(fd, cmd, sizeof(cmd));
- close(fd);
- }
+ /*
+ * zfs_fmtdev() can be called only after dv_init
+ */
+ if (bdev != NULL && bdev->dd.d_dev->dv_type == DEVT_ZFS) {
+ /* set up proper device name string for ZFS */
+ strncpy(boot_devname, zfs_fmtdev(bdev), sizeof (boot_devname));
+ }
+
+ /* now make sure we have bdev on all cases */
+ if (bdev != NULL)
+ free(bdev);
+ i386_getdev((void **)&bdev, boot_devname, NULL);
+
+ env_setenv("currdev", EV_VOLATILE, boot_devname, i386_setcurrdev,
+ env_nounset);
+
+ /* Process configuration file */
+ setenv("screen-#rows", "24", 1);
+ auto_boot = 1;
+
+ fd = open(PATH_CONFIG, O_RDONLY);
+ if (fd == -1)
+ fd = open(PATH_DOTCONFIG, O_RDONLY);
+
+ if (fd != -1) {
+ read(fd, cmd, sizeof (cmd));
+ close(fd);
+ }
+
+ if (*cmd) {
+ /*
+ * Note that parse_cmd() is destructive to cmd[] and we also
+ * want to honor RBX_QUIET option that could be present in
+ * cmd[].
+ */
+ memcpy(cmddup, cmd, sizeof (cmd));
+ if (parse_cmd())
+ auto_boot = 0;
+ if (!OPT_CHECK(RBX_QUIET))
+ printf("%s: %s\n", PATH_CONFIG, cmddup);
+ /* Do not process this command twice */
+ *cmd = 0;
+ }
- if (*cmd) {
/*
- * Note that parse_cmd() is destructive to cmd[] and we also want
- * to honor RBX_QUIET option that could be present in cmd[].
+ * Try to exec stage 3 boot loader. If interrupted by a keypress,
+ * or in case of failure, switch off auto boot.
*/
- memcpy(cmddup, cmd, sizeof(cmd));
- if (parse_cmd())
- auto_boot = 0;
- if (!OPT_CHECK(RBX_QUIET))
- printf("%s: %s\n", PATH_CONFIG, cmddup);
- /* Do not process this command twice */
- *cmd = 0;
- }
-
- /*
- * Try to exec stage 3 boot loader. If interrupted by a keypress,
- * or in case of failure, switch off auto boot.
- */
-
- if (auto_boot && !*kname) {
- memcpy(kname, PATH_LOADER, sizeof(PATH_LOADER));
- if (!keyhit(3)) {
- load();
- auto_boot = 0;
- /*
- * Try to fall back to /boot/zfsloader.
- * This fallback should be eventually removed.
- * Created: 08/03/2018
- */
+
+ if (auto_boot && !*kname) {
+ memcpy(kname, PATH_LOADER, sizeof (PATH_LOADER));
+ if (!keyhit(3)) {
+ load();
+ auto_boot = 0;
+ /*
+ * Try to fall back to /boot/zfsloader.
+ * This fallback should be eventually removed.
+ * Created: 08/03/2018
+ */
#define PATH_ZFSLOADER "/boot/zfsloader"
- memcpy(kname, PATH_ZFSLOADER, sizeof(PATH_ZFSLOADER));
- load();
- /*
- * Still there? restore default loader name for prompt.
- */
- memcpy(kname, PATH_LOADER, sizeof(PATH_LOADER));
+ memcpy(kname, PATH_ZFSLOADER, sizeof (PATH_ZFSLOADER));
+ load();
+ /*
+ * Still there? restore default loader name for prompt.
+ */
+ memcpy(kname, PATH_LOADER, sizeof (PATH_LOADER));
+ }
}
- }
- /* Present the user with the boot2 prompt. */
+ /* Present the user with the boot2 prompt. */
- for (;;) {
- if (!auto_boot || !OPT_CHECK(RBX_QUIET)) {
- printf("\nillumos/x86 boot\n");
- printf("Default: %s%s\nboot: ", boot_devname, kname);
+ for (;;) {
+ if (!auto_boot || !OPT_CHECK(RBX_QUIET)) {
+ printf("\nillumos/x86 boot\n");
+ printf("Default: %s%s\nboot: ", boot_devname, kname);
+ }
+ if (ioctrl & IO_SERIAL)
+ sio_flush();
+ if (!auto_boot || keyhit(5))
+ getstr(cmd, sizeof (cmd));
+ else if (!auto_boot || !OPT_CHECK(RBX_QUIET))
+ putchar('\n');
+ auto_boot = 0;
+ if (parse_cmd())
+ putchar('\a');
+ else
+ load();
}
- if (ioctrl & IO_SERIAL)
- sio_flush();
- if (!auto_boot || keyhit(5))
- getstr(cmd, sizeof(cmd));
- else if (!auto_boot || !OPT_CHECK(RBX_QUIET))
- putchar('\n');
- auto_boot = 0;
- if (parse_cmd())
- putchar('\a');
- else
- load();
- }
}
/* XXX - Needed for btxld to link the boot2 binary; do not remove. */
void
exit(int x)
{
- while (1);
+ while (1)
+ ;
}
static void
load(void)
{
- union {
- struct exec ex;
- Elf32_Ehdr eh;
- } hdr;
- static Elf32_Phdr ep[2];
- static Elf32_Shdr es[2];
- caddr_t p;
- uint32_t addr, x;
- int fd, fmt, i, j;
-
- if ((fd = open(kname, O_RDONLY)) == -1) {
- printf("\nCan't find %s\n", kname);
- return;
- }
- if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
- close(fd);
- return;
- }
- if (N_GETMAGIC(hdr.ex) == ZMAGIC)
- fmt = 0;
- else if (IS_ELF(hdr.eh))
- fmt = 1;
- else {
- printf("Invalid %s\n", "format");
- close(fd);
- return;
- }
- if (fmt == 0) {
- addr = hdr.ex.a_entry & 0xffffff;
- p = PTOV(addr);
- lseek(fd, PAGE_SIZE, SEEK_SET);
- if (read(fd, p, hdr.ex.a_text) != hdr.ex.a_text) {
- close(fd);
- return;
- }
- p += roundup2(hdr.ex.a_text, PAGE_SIZE);
- if (read(fd, p, hdr.ex.a_data) != hdr.ex.a_data) {
- close(fd);
- return;
- }
- p += hdr.ex.a_data + roundup2(hdr.ex.a_bss, PAGE_SIZE);
- bootinfo.bi_symtab = VTOP(p);
- memcpy(p, &hdr.ex.a_syms, sizeof(hdr.ex.a_syms));
- p += sizeof(hdr.ex.a_syms);
- if (hdr.ex.a_syms) {
- if (read(fd, p, hdr.ex.a_syms) != hdr.ex.a_syms) {
- close(fd);
- return;
- }
- p += hdr.ex.a_syms;
- if (read(fd, p, sizeof(int)) != sizeof(int)) {
- close(fd);
+ union {
+ struct exec ex;
+ Elf32_Ehdr eh;
+ } hdr;
+ static Elf32_Phdr ep[2];
+ static Elf32_Shdr es[2];
+ caddr_t p;
+ uint32_t addr, x;
+ int fd, fmt, i, j;
+
+ if ((fd = open(kname, O_RDONLY)) == -1) {
+ printf("\nCan't find %s\n", kname);
return;
- }
- x = *(uint32_t *)p;
- p += sizeof(int);
- x -= sizeof(int);
- if (read(fd, p, x) != x) {
- close(fd);
- return;
- }
- p += x;
}
- } else {
- lseek(fd, hdr.eh.e_phoff, SEEK_SET);
- for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) {
- if (read(fd, ep + j, sizeof(ep[0])) != sizeof(ep[0])) {
+ if (read(fd, &hdr, sizeof (hdr)) != sizeof (hdr)) {
close(fd);
return;
- }
- if (ep[j].p_type == PT_LOAD)
- j++;
}
- for (i = 0; i < 2; i++) {
- p = PTOV(ep[i].p_paddr & 0xffffff);
- lseek(fd, ep[i].p_offset, SEEK_SET);
- if (read(fd, p, ep[i].p_filesz) != ep[i].p_filesz) {
+ if (N_GETMAGIC(hdr.ex) == ZMAGIC) {
+ fmt = 0;
+ } else if (IS_ELF(hdr.eh)) {
+ fmt = 1;
+ } else {
+ printf("Invalid %s\n", "format");
close(fd);
return;
- }
}
- p += roundup2(ep[1].p_memsz, PAGE_SIZE);
- bootinfo.bi_symtab = VTOP(p);
- if (hdr.eh.e_shnum == hdr.eh.e_shstrndx + 3) {
- lseek(fd, hdr.eh.e_shoff + sizeof(es[0]) * (hdr.eh.e_shstrndx + 1),
- SEEK_SET);
- if (read(fd, &es, sizeof(es)) != sizeof(es)) {
- close(fd);
- return;
- }
- for (i = 0; i < 2; i++) {
- memcpy(p, &es[i].sh_size, sizeof(es[i].sh_size));
- p += sizeof(es[i].sh_size);
- lseek(fd, es[i].sh_offset, SEEK_SET);
- if (read(fd, p, es[i].sh_size) != es[i].sh_size) {
- close(fd);
- return;
+ if (fmt == 0) {
+ addr = hdr.ex.a_entry & 0xffffff;
+ p = PTOV(addr);
+ lseek(fd, PAGE_SIZE, SEEK_SET);
+ if (read(fd, p, hdr.ex.a_text) != hdr.ex.a_text) {
+ close(fd);
+ return;
+ }
+ p += roundup2(hdr.ex.a_text, PAGE_SIZE);
+ if (read(fd, p, hdr.ex.a_data) != hdr.ex.a_data) {
+ close(fd);
+ return;
+ }
+ p += hdr.ex.a_data + roundup2(hdr.ex.a_bss, PAGE_SIZE);
+ bootinfo.bi_symtab = VTOP(p);
+ memcpy(p, &hdr.ex.a_syms, sizeof (hdr.ex.a_syms));
+ p += sizeof (hdr.ex.a_syms);
+ if (hdr.ex.a_syms) {
+ if (read(fd, p, hdr.ex.a_syms) != hdr.ex.a_syms) {
+ close(fd);
+ return;
+ }
+ p += hdr.ex.a_syms;
+ if (read(fd, p, sizeof (int)) != sizeof (int)) {
+ close(fd);
+ return;
+ }
+ x = *(uint32_t *)p;
+ p += sizeof (int);
+ x -= sizeof (int);
+ if (read(fd, p, x) != x) {
+ close(fd);
+ return;
+ }
+ p += x;
+ }
+ } else {
+ lseek(fd, hdr.eh.e_phoff, SEEK_SET);
+ for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) {
+ if (read(fd, ep + j, sizeof (ep[0])) !=
+ sizeof (ep[0])) {
+ close(fd);
+ return;
+ }
+ if (ep[j].p_type == PT_LOAD)
+ j++;
}
- p += es[i].sh_size;
- }
+ for (i = 0; i < 2; i++) {
+ p = PTOV(ep[i].p_paddr & 0xffffff);
+ lseek(fd, ep[i].p_offset, SEEK_SET);
+ if (read(fd, p, ep[i].p_filesz) != ep[i].p_filesz) {
+ close(fd);
+ return;
+ }
+ }
+ p += roundup2(ep[1].p_memsz, PAGE_SIZE);
+ bootinfo.bi_symtab = VTOP(p);
+ if (hdr.eh.e_shnum == hdr.eh.e_shstrndx + 3) {
+ lseek(fd, hdr.eh.e_shoff +
+ sizeof (es[0]) * (hdr.eh.e_shstrndx + 1),
+ SEEK_SET);
+ if (read(fd, &es, sizeof (es)) != sizeof (es)) {
+ close(fd);
+ return;
+ }
+ for (i = 0; i < 2; i++) {
+ memcpy(p, &es[i].sh_size,
+ sizeof (es[i].sh_size));
+ p += sizeof (es[i].sh_size);
+ lseek(fd, es[i].sh_offset, SEEK_SET);
+ if (read(fd, p, es[i].sh_size) !=
+ es[i].sh_size) {
+ close(fd);
+ return;
+ }
+ p += es[i].sh_size;
+ }
+ }
+ addr = hdr.eh.e_entry & 0xffffff;
+ }
+ close(fd);
+
+ bootinfo.bi_esymtab = VTOP(p);
+ bootinfo.bi_kernelname = VTOP(kname);
+
+ if (bdev->dd.d_dev->dv_type == DEVT_ZFS) {
+ zfsargs.size = sizeof (zfsargs);
+ zfsargs.pool = bdev->d_kind.zfs.pool_guid;
+ zfsargs.root = bdev->d_kind.zfs.root_guid;
+ __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
+ bootdev,
+ KARGS_FLAGS_ZFS | KARGS_FLAGS_EXTARG,
+ (uint32_t)bdev->d_kind.zfs.pool_guid,
+ (uint32_t)(bdev->d_kind.zfs.pool_guid >> 32),
+ VTOP(&bootinfo),
+ zfsargs);
+ } else {
+ __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
+ bootdev, 0, 0, 0, VTOP(&bootinfo));
}
- addr = hdr.eh.e_entry & 0xffffff;
- }
- close(fd);
-
- bootinfo.bi_esymtab = VTOP(p);
- bootinfo.bi_kernelname = VTOP(kname);
-
- if (bdev->dd.d_dev->dv_type == DEVT_ZFS) {
- zfsargs.size = sizeof(zfsargs);
- zfsargs.pool = bdev->d_kind.zfs.pool_guid;
- zfsargs.root = bdev->d_kind.zfs.root_guid;
- __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
- bootdev,
- KARGS_FLAGS_ZFS | KARGS_FLAGS_EXTARG,
- (uint32_t) bdev->d_kind.zfs.pool_guid,
- (uint32_t) (bdev->d_kind.zfs.pool_guid >> 32),
- VTOP(&bootinfo),
- zfsargs);
- } else
- __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
- bootdev, 0, 0, 0, VTOP(&bootinfo));
}
static int
mount_root(char *arg)
{
- char *root;
- struct i386_devdesc *ddesc;
- uint8_t part;
-
- root = malloc(strlen(arg) + 2);
- if (root == NULL)
- return (1);
- sprintf(root, "%s:", arg);
- if (i386_getdev((void **)&ddesc, root, NULL)) {
- free(root);
- return (1);
- }
+ char *root;
+ struct i386_devdesc *ddesc;
+ uint8_t part;
+
+ root = malloc(strlen(arg) + 2);
+ if (root == NULL)
+ return (1);
+ sprintf(root, "%s:", arg);
+ if (i386_getdev((void **)&ddesc, root, NULL)) {
+ free(root);
+ return (1);
+ }
- /* we should have new device descriptor, free old and replace it. */
- if (bdev != NULL)
+ /* we should have new device descriptor, free old and replace it. */
free(bdev);
- bdev = ddesc;
- if (bdev->dd.d_dev->dv_type == DEVT_DISK) {
- if (bdev->d_kind.biosdisk.partition == -1)
- part = 0xff;
- else
- part = bdev->d_kind.biosdisk.partition;
- bootdev = MAKEBOOTDEV(dev_maj[bdev->dd.d_dev->dv_type],
- bdev->d_kind.biosdisk.slice + 1,
- bdev->dd.d_unit, part);
- bootinfo.bi_bios_dev = bd_unit2bios(bdev);
- }
- setenv("currdev", root, 1);
- free(root);
- return (0);
+ bdev = ddesc;
+ if (bdev->dd.d_dev->dv_type == DEVT_DISK) {
+ if (bdev->d_kind.biosdisk.partition == -1)
+ part = 0xff;
+ else
+ part = bdev->d_kind.biosdisk.partition;
+ bootdev = MAKEBOOTDEV(dev_maj[bdev->dd.d_dev->dv_type],
+ bdev->d_kind.biosdisk.slice + 1,
+ bdev->dd.d_unit, part);
+ bootinfo.bi_bios_dev = bd_unit2bios(bdev);
+ }
+ setenv("currdev", root, 1);
+ free(root);
+ return (0);
}
static void
@@ -459,101 +466,114 @@ fs_list(char *arg)
static int
parse_cmd(void)
{
- char *arg = cmd;
- char *ep, *p, *q;
- const char *cp;
- char line[80];
- int c, i, j;
-
- while ((c = *arg++)) {
- if (c == ' ' || c == '\t' || c == '\n')
- continue;
- for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++);
- ep = p;
- if (*p)
- *p++ = 0;
- if (c == '-') {
- while ((c = *arg++)) {
- if (c == 'P') {
- if (*(uint8_t *)PTOV(0x496) & 0x10) {
- cp = "yes";
- } else {
- opts |= OPT_SET(RBX_DUAL) | OPT_SET(RBX_SERIAL);
- cp = "no";
- }
- printf("Keyboard: %s\n", cp);
- continue;
- } else if (c == 'S') {
- j = 0;
- while ((unsigned int)(i = *arg++ - '0') <= 9)
- j = j * 10 + i;
- if (j > 0 && i == -'0') {
- comspeed = j;
- break;
- }
- /* Fall through to error below ('S' not in optstr[]). */
- }
- for (i = 0; c != optstr[i]; i++)
- if (i == NOPT - 1)
- return -1;
- opts ^= OPT_SET(flags[i]);
- }
- ioctrl = OPT_CHECK(RBX_DUAL) ? (IO_SERIAL|IO_KEYBOARD) :
- OPT_CHECK(RBX_SERIAL) ? IO_SERIAL : IO_KEYBOARD;
- if (ioctrl & IO_SERIAL) {
- if (sio_init(115200 / comspeed) != 0)
- ioctrl &= ~IO_SERIAL;
- }
- } else if (c == '?') {
- printf("\n");
- fs_list(arg);
- zfs_list(arg);
- return -1;
- } else {
- arg--;
-
- /*
- * Report pool status if the comment is 'status'. Lets
- * hope no-one wants to load /status as a kernel.
- */
- if (!strcmp(arg, "status")) {
- pager_open();
- for (i = 0; devsw[i] != NULL; i++) {
- if (devsw[i]->dv_print != NULL) {
- if (devsw[i]->dv_print(1))
- break;
- } else {
- sprintf(line, "%s: (unknown)\n", devsw[i]->dv_name);
- if (pager_output(line))
- break;
- }
+ char *arg = cmd;
+ char *ep, *p, *q;
+ const char *cp;
+ char line[80];
+ int c, i, j;
+
+ while ((c = *arg++)) {
+ if (c == ' ' || c == '\t' || c == '\n')
+ continue;
+ for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++)
+ ;
+ ep = p;
+ if (*p)
+ *p++ = 0;
+ if (c == '-') {
+ while ((c = *arg++)) {
+ if (c == 'P') {
+ if (*(uint8_t *)PTOV(0x496) & 0x10) {
+ cp = "yes";
+ } else {
+ opts |= OPT_SET(RBX_DUAL);
+ opts |= OPT_SET(RBX_SERIAL);
+ cp = "no";
+ }
+ printf("Keyboard: %s\n", cp);
+ continue;
+ } else if (c == 'S') {
+ j = 0;
+ while ((unsigned int)
+ (i = *arg++ - '0') <= 9)
+ j = j * 10 + i;
+ if (j > 0 && i == -'0') {
+ comspeed = j;
+ break;
+ }
+ /*
+ * Fall through to error below
+ * ('S' not in optstr[]).
+ */
+ }
+ for (i = 0; c != optstr[i]; i++)
+ if (i == NOPT - 1)
+ return (-1);
+ opts ^= OPT_SET(flags[i]);
+ }
+ if (OPT_CHECK(RBX_DUAL))
+ ioctrl = IO_SERIAL | IO_KEYBOARD;
+ else if (OPT_CHECK(RBX_SERIAL))
+ ioctrl = IO_SERIAL;
+ else
+ ioctrl = IO_KEYBOARD;
+
+ if (ioctrl & IO_SERIAL) {
+ if (sio_init(115200 / comspeed) != 0)
+ ioctrl &= ~IO_SERIAL;
+ }
+ } else if (c == '?') {
+ printf("\n");
+ fs_list(arg);
+ zfs_list(arg);
+ return (-1);
+ } else {
+ arg--;
+
+ /*
+ * Report pool status if the comment is 'status'. Lets
+ * hope no-one wants to load /status as a kernel.
+ */
+ if (strcmp(arg, "status") == 0) {
+ pager_open();
+ for (i = 0; devsw[i] != NULL; i++) {
+ if (devsw[i]->dv_print != NULL) {
+ if (devsw[i]->dv_print(1))
+ break;
+ } else {
+ sprintf(line,
+ "%s: (unknown)\n",
+ devsw[i]->dv_name);
+ if (pager_output(line))
+ break;
+ }
+ }
+ pager_close();
+ return (-1);
+ }
+
+ /*
+ * If there is a colon, switch pools.
+ */
+ if (strncmp(arg, "zfs:", 4) == 0)
+ q = strchr(arg + 4, ':');
+ else
+ q = strchr(arg, ':');
+ if (q) {
+ *q++ = '\0';
+ if (mount_root(arg) != 0)
+ return (-1);
+ arg = q;
+ }
+ if ((i = ep - arg)) {
+ if ((size_t)i >= sizeof (kname))
+ return (-1);
+ memcpy(kname, arg, i + 1);
+ }
}
- pager_close();
- return -1;
- }
-
- /*
- * If there is a colon, switch pools.
- */
- if (strncmp(arg, "zfs:", 4) == 0)
- q = strchr(arg + 4, ':');
- else
- q = strchr(arg, ':');
- if (q) {
- *q++ = '\0';
- if (mount_root(arg) != 0)
- return -1;
- arg = q;
- }
- if ((i = ep - arg)) {
- if ((size_t)i >= sizeof(kname))
- return -1;
- memcpy(kname, arg, i + 1);
- }
+ arg = p;
}
- arg = p;
- }
- return 0;
+ return (0);
}
/*
@@ -562,7 +582,7 @@ parse_cmd(void)
struct probe_args {
int fd;
char *devname;
- u_int secsz;
+ uint_t secsz;
uint64_t offset;
};
@@ -687,7 +707,7 @@ probe_disk(char *devname)
ret = ioctl(pa.fd, DIOCGSECTORSIZE, &pa.secsz);
if (ret == 0) {
table = ptable_open(&pa, mediasz / pa.secsz, pa.secsz,
- parttblread);
+ parttblread);
if (table != NULL) {
ret = ptable_iterate(table, &pa, probe_partition);
ptable_close(table);
diff --git a/usr/src/boot/sys/boot/i386/isoboot/Makefile b/usr/src/boot/sys/boot/i386/isoboot/Makefile
index fd23e8e2a3..89130a52c9 100644
--- a/usr/src/boot/sys/boot/i386/isoboot/Makefile
+++ b/usr/src/boot/sys/boot/i386/isoboot/Makefile
@@ -46,6 +46,8 @@ LDSCRIPT= ../boot.ldscript
LD_FLAGS= -static -N --gc-sections
LIBSTAND= ../../libstand/$(MACH)/libstand.a
+gptldr.out := LD_FLAGS += -m elf_i386_sol2
+
include ../Makefile.inc
all: $(PROG)
diff --git a/usr/src/boot/sys/boot/libficl/Makefile.com b/usr/src/boot/sys/boot/libficl/Makefile.com
index db77cdce2f..1bb02d4a2d 100644
--- a/usr/src/boot/sys/boot/libficl/Makefile.com
+++ b/usr/src/boot/sys/boot/libficl/Makefile.com
@@ -33,6 +33,9 @@ OBJECTS += hash.o callback.o word.o loader.o
HEADERS= $(FICLDIR)/ficl.h $(FICLDIR)/ficlplatform/unix.h ../ficllocal.h
#
+# disable inner loop variable 'fw' check
+vm.o := SMOFF += check_check_deref
+
.PARALLEL:
MAJOR = 4
diff --git a/usr/src/lib/brand/solaris10/s10_npreload/amd64/Makefile b/usr/src/lib/brand/solaris10/s10_npreload/amd64/Makefile
index 971867056c..1514a58883 100644
--- a/usr/src/lib/brand/solaris10/s10_npreload/amd64/Makefile
+++ b/usr/src/lib/brand/solaris10/s10_npreload/amd64/Makefile
@@ -26,6 +26,6 @@
include ../Makefile.com
include $(SRC)/lib/Makefile.lib.64
-CLOBBERFILES = $(ROOTLIBDIR64)/$(DYNLIB) $(ROOTLIBDIR64)/$(LINTLIB)
+CLOBBERFILES = $(ROOTLIBDIR64)/$(DYNLIB)
install: all $(ROOTLIBS64)
diff --git a/usr/src/lib/brand/solaris10/s10_npreload/i386/Makefile b/usr/src/lib/brand/solaris10/s10_npreload/i386/Makefile
index 26c4bfd554..7f63aa322c 100644
--- a/usr/src/lib/brand/solaris10/s10_npreload/i386/Makefile
+++ b/usr/src/lib/brand/solaris10/s10_npreload/i386/Makefile
@@ -25,6 +25,6 @@
include ../Makefile.com
-CLOBBERFILES = $(ROOTLIBDIR)/$(DYNLIB) $(ROOTLIBDIR)/$(LINTLIB)
+CLOBBERFILES = $(ROOTLIBDIR)/$(DYNLIB)
install: all $(ROOTLIBS)