diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2019-05-01 11:22:22 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2019-05-01 11:22:22 +0000 |
commit | 256b90376a3ab4acdc5f69035941c08d0949f373 (patch) | |
tree | c34ed2874baf383c9518e84aa752ac0eba6ac12d | |
parent | 425df02ecf865e3c34ddf216dc462a1066b559f3 (diff) | |
parent | e742aada08b77c795649b3e05d39213e1edcceeb (diff) | |
download | illumos-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/Makefile | 1 | ||||
-rw-r--r-- | usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c | 762 | ||||
-rw-r--r-- | usr/src/boot/sys/boot/i386/isoboot/Makefile | 2 | ||||
-rw-r--r-- | usr/src/boot/sys/boot/libficl/Makefile.com | 3 | ||||
-rw-r--r-- | usr/src/lib/brand/solaris10/s10_npreload/amd64/Makefile | 2 | ||||
-rw-r--r-- | usr/src/lib/brand/solaris10/s10_npreload/i386/Makefile | 2 |
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) |