Date: Mon, 25 Feb 2013 22:51:49 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r247288 - in user/adrian/net80211_tx: . bin/sh bin/test cddl/contrib/opensolaris/cmd/zinject cddl/contrib/opensolaris/lib/libzpool/common cddl/contrib/opensolaris/lib/libzpool/common/sy... Message-ID: <201302252251.r1PMpn2T055001@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Mon Feb 25 22:51:49 2013 New Revision: 247288 URL: http://svnweb.freebsd.org/changeset/base/247288 Log: MFH Added: user/adrian/net80211_tx/tools/regression/bin/sh/builtins/wait4.0 - copied unchanged from r247287, head/tools/regression/bin/sh/builtins/wait4.0 user/adrian/net80211_tx/tools/regression/bin/sh/builtins/wait5.0 - copied unchanged from r247287, head/tools/regression/bin/sh/builtins/wait5.0 user/adrian/net80211_tx/usr.sbin/bsdconfig/include/media.hlp - copied unchanged from r247287, head/usr.sbin/bsdconfig/include/media.hlp user/adrian/net80211_tx/usr.sbin/bsdconfig/include/network_device.hlp - copied unchanged from r247287, head/usr.sbin/bsdconfig/include/network_device.hlp user/adrian/net80211_tx/usr.sbin/bsdconfig/include/options.hlp - copied unchanged from r247287, head/usr.sbin/bsdconfig/include/options.hlp user/adrian/net80211_tx/usr.sbin/bsdconfig/include/tcp.hlp - copied unchanged from r247287, head/usr.sbin/bsdconfig/include/tcp.hlp user/adrian/net80211_tx/usr.sbin/bsdconfig/share/device.subr - copied unchanged from r247287, head/usr.sbin/bsdconfig/share/device.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/share/media/ - copied from r247287, head/usr.sbin/bsdconfig/share/media/ user/adrian/net80211_tx/usr.sbin/bsdconfig/share/struct.subr - copied unchanged from r247287, head/usr.sbin/bsdconfig/share/struct.subr Deleted: user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/include/tcp.hlp Modified: user/adrian/net80211_tx/Makefile.inc1 user/adrian/net80211_tx/bin/sh/eval.c user/adrian/net80211_tx/bin/sh/jobs.c user/adrian/net80211_tx/bin/sh/main.c user/adrian/net80211_tx/bin/sh/trap.c user/adrian/net80211_tx/bin/sh/trap.h user/adrian/net80211_tx/bin/test/test.1 user/adrian/net80211_tx/bin/test/test.c user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/translate.c user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/zinject.c user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h user/adrian/net80211_tx/contrib/llvm/lib/Target/X86/X86InstrCompiler.td user/adrian/net80211_tx/etc/rc.d/rtadvd user/adrian/net80211_tx/lib/libc/gen/opendir.c user/adrian/net80211_tx/lib/libelf/elf_update.c user/adrian/net80211_tx/sbin/fsck_ffs/dir.c user/adrian/net80211_tx/sbin/fsck_ffs/ea.c user/adrian/net80211_tx/sbin/fsck_ffs/fsck.h user/adrian/net80211_tx/sbin/fsck_ffs/fsutil.c user/adrian/net80211_tx/sbin/fsck_ffs/inode.c user/adrian/net80211_tx/sbin/fsck_ffs/main.c user/adrian/net80211_tx/sbin/fsck_ffs/setup.c user/adrian/net80211_tx/sbin/fsdb/fsdbutil.c user/adrian/net80211_tx/sbin/hastctl/hastctl.c user/adrian/net80211_tx/sbin/hastd/control.c user/adrian/net80211_tx/sbin/hastd/hast.h user/adrian/net80211_tx/sbin/hastd/primary.c user/adrian/net80211_tx/sbin/hastd/secondary.c user/adrian/net80211_tx/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h user/adrian/net80211_tx/sys/arm/ti/ti_gpio.c user/adrian/net80211_tx/sys/boot/common/bootstrap.h user/adrian/net80211_tx/sys/boot/common/module.c user/adrian/net80211_tx/sys/boot/fdt/dts/bcm2835-rpi-b.dts user/adrian/net80211_tx/sys/boot/fdt/fdt_loader_cmd.c user/adrian/net80211_tx/sys/cddl/compat/opensolaris/sys/time.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_boot.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ah.h user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5210/ar5210.h user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5211/ar5211.h user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5212/ar5212.h user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5416/ar5416.h user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c user/adrian/net80211_tx/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c user/adrian/net80211_tx/sys/dev/ath/if_ath.c user/adrian/net80211_tx/sys/dev/ath/if_ath_tx_ht.c user/adrian/net80211_tx/sys/dev/ath/if_athvar.h user/adrian/net80211_tx/sys/dev/ciss/ciss.c user/adrian/net80211_tx/sys/dev/fdt/fdt_common.h user/adrian/net80211_tx/sys/dev/isp/isp.c user/adrian/net80211_tx/sys/dev/mxge/if_mxge.c user/adrian/net80211_tx/sys/dev/sym/sym_hipd.c user/adrian/net80211_tx/sys/dev/usb/usb_pf.c user/adrian/net80211_tx/sys/dev/usb/usbdevs user/adrian/net80211_tx/sys/ia64/ia64/pmap.c user/adrian/net80211_tx/sys/ia64/include/vmparam.h user/adrian/net80211_tx/sys/kern/kern_descrip.c user/adrian/net80211_tx/tools/regression/bin/test/regress.sh user/adrian/net80211_tx/usr.bin/systat/systat.1 user/adrian/net80211_tx/usr.sbin/bhyve/pci_emul.h user/adrian/net80211_tx/usr.sbin/bsdconfig/include/Makefile user/adrian/net80211_tx/usr.sbin/bsdconfig/include/messages.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/devices user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/include/Makefile user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/common.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/device.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/hostname.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/ipaddr.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/netmask.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/resolv.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/networking/share/routing.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/share/Makefile user/adrian/net80211_tx/usr.sbin/bsdconfig/share/common.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/share/script.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/share/strings.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/share/variable.subr user/adrian/net80211_tx/usr.sbin/bsdconfig/startup/rcvar user/adrian/net80211_tx/usr.sbin/rtadvd/rtadvd.8 user/adrian/net80211_tx/usr.sbin/rtadvd/rtadvd.c Directory Properties: user/adrian/net80211_tx/ (props changed) user/adrian/net80211_tx/cddl/contrib/opensolaris/ (props changed) user/adrian/net80211_tx/contrib/llvm/ (props changed) user/adrian/net80211_tx/lib/libc/ (props changed) user/adrian/net80211_tx/sbin/ (props changed) user/adrian/net80211_tx/sys/ (props changed) user/adrian/net80211_tx/sys/boot/ (props changed) user/adrian/net80211_tx/sys/cddl/contrib/opensolaris/ (props changed) user/adrian/net80211_tx/usr.sbin/bhyve/ (props changed) user/adrian/net80211_tx/usr.sbin/rtadvd/ (props changed) Modified: user/adrian/net80211_tx/Makefile.inc1 ============================================================================== --- user/adrian/net80211_tx/Makefile.inc1 Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/Makefile.inc1 Mon Feb 25 22:51:49 2013 (r247288) @@ -1132,7 +1132,8 @@ _lex= usr.bin/lex .endif .if ${BOOTSTRAPPING} < 1000013 -_yacc= usr.bin/yacc +_yacc= lib/liby \ + usr.bin/yacc .endif .if ${BOOTSTRAPPING} < 1000026 Modified: user/adrian/net80211_tx/bin/sh/eval.c ============================================================================== --- user/adrian/net80211_tx/bin/sh/eval.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/sh/eval.c Mon Feb 25 22:51:49 2013 (r247288) @@ -301,7 +301,7 @@ evaltree(union node *n, int flags) } while (n != NULL); out: popstackmark(&smark); - if (pendingsigs) + if (pendingsig) dotrap(); if (eflag && exitstatus != 0 && do_etest) exitshell(exitstatus); Modified: user/adrian/net80211_tx/bin/sh/jobs.c ============================================================================== --- user/adrian/net80211_tx/bin/sh/jobs.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/sh/jobs.c Mon Feb 25 22:51:49 2013 (r247288) @@ -521,7 +521,7 @@ waitcmd(int argc, char **argv) } while (dowait(DOWAIT_BLOCK | DOWAIT_SIG, (struct job *)NULL) != -1); in_waitcmd--; - return 0; + return pendingsig + 128; } Modified: user/adrian/net80211_tx/bin/sh/main.c ============================================================================== --- user/adrian/net80211_tx/bin/sh/main.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/sh/main.c Mon Feb 25 22:51:49 2013 (r247288) @@ -196,7 +196,7 @@ cmdloop(int top) TRACE(("cmdloop(%d) called\n", top)); setstackmark(&smark); for (;;) { - if (pendingsigs) + if (pendingsig) dotrap(); inter = 0; if (iflag && top) { Modified: user/adrian/net80211_tx/bin/sh/trap.c ============================================================================== --- user/adrian/net80211_tx/bin/sh/trap.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/sh/trap.c Mon Feb 25 22:51:49 2013 (r247288) @@ -73,7 +73,7 @@ __FBSDID("$FreeBSD$"); MKINIT char sigmode[NSIG]; /* current value of signal */ -int pendingsigs; /* indicates some signal received */ +volatile sig_atomic_t pendingsig; /* indicates some signal received */ int in_dotrap; /* do we execute in a trap handler? */ static char *volatile trap[NSIG]; /* trap handler commands */ static volatile sig_atomic_t gotsig[NSIG]; @@ -388,22 +388,25 @@ onsig(int signo) return; } - if (signo != SIGCHLD || !ignore_sigchld) - gotsig[signo] = 1; - pendingsigs++; - /* If we are currently in a wait builtin, prepare to break it */ - if ((signo == SIGINT || signo == SIGQUIT) && in_waitcmd != 0) - breakwaitcmd = 1; - /* - * If a trap is set, not ignored and not the null command, we need - * to make sure traps are executed even when a child blocks signals. - */ - if (Tflag && - trap[signo] != NULL && - ! (trap[signo][0] == '\0') && - ! (trap[signo][0] == ':' && trap[signo][1] == '\0')) + if ((signo == SIGINT || signo == SIGQUIT) && in_waitcmd != 0) { breakwaitcmd = 1; + pendingsig = signo; + } + + if (trap[signo] != NULL && trap[signo][0] != '\0' && + (signo != SIGCHLD || !ignore_sigchld)) { + gotsig[signo] = 1; + pendingsig = signo; + + /* + * If a trap is set, not ignored and not the null command, we + * need to make sure traps are executed even when a child + * blocks signals. + */ + if (Tflag && !(trap[signo][0] == ':' && trap[signo][1] == '\0')) + breakwaitcmd = 1; + } #ifndef NO_HISTORY if (signo == SIGWINCH) @@ -424,7 +427,7 @@ dotrap(void) in_dotrap++; for (;;) { - pendingsigs = 0; + pendingsig = 0; for (i = 1; i < NSIG; i++) { if (gotsig[i]) { gotsig[i] = 0; Modified: user/adrian/net80211_tx/bin/sh/trap.h ============================================================================== --- user/adrian/net80211_tx/bin/sh/trap.h Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/sh/trap.h Mon Feb 25 22:51:49 2013 (r247288) @@ -33,7 +33,7 @@ * $FreeBSD$ */ -extern int pendingsigs; +extern volatile sig_atomic_t pendingsig; extern int in_dotrap; extern volatile sig_atomic_t gotwinch; Modified: user/adrian/net80211_tx/bin/test/test.1 ============================================================================== --- user/adrian/net80211_tx/bin/test/test.1 Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/test/test.1 Mon Feb 25 22:51:49 2013 (r247288) @@ -169,15 +169,65 @@ True if .Ar file exists and is a socket. .It Ar file1 Fl nt Ar file2 -True if +True if both +.Ar file1 +and +.Ar file2 +exist and +.Ar file1 +is newer than +.Ar file2 . +.It Ar file1 Fl nt Ns Ar X Ns Ar Y Ar file2 +True if both +.Ar file1 +and +.Ar file2 +exist and .Ar file1 -exists and is newer than +has a more recent last access time +.Pq Ar X Ns = Ns Cm a , +inode creation time +.Pq Ar X Ns = Ns Cm b , +change time +.Pq Ar X Ns = Ns Cm c , +or modification time +.Pq Ar X Ns = Ns Cm m +than the last access time +.Pq Ar Y Ns = Ns Cm a , +inode creation time +.Pq Ar Y Ns = Ns Cm b , +change time +.Pq Ar Y Ns = Ns Cm c , +or modification time +.Pq Ar Y Ns = Ns Cm m +of .Ar file2 . +Note that +.Ic -ntmm +is equivalent to +.Ic -nt . .It Ar file1 Fl ot Ar file2 -True if +True if both +.Ar file1 +and +.Ar file2 +exist and .Ar file1 -exists and is older than +is older than .Ar file2 . +Note that +.Ar file1 +.Ic -ot +.Ar file2 +is equivalent to +.Ar file2 +.Ic -nt +.Ar file1 +.It Ar file1 Fl ot Ns Ar X Ns Ar Y Ar file2 +Equivalent to +.Ar file2 +.Ic -nt Ns Ar Y Ns Ar X +.Ar file1 . .It Ar file1 Fl ef Ar file2 True if .Ar file1 Modified: user/adrian/net80211_tx/bin/test/test.c ============================================================================== --- user/adrian/net80211_tx/bin/test/test.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/bin/test/test.c Mon Feb 25 22:51:49 2013 (r247288) @@ -63,7 +63,7 @@ error(const char *msg, ...) "-u"|"-g"|"-k"|"-s"|"-t"|"-z"|"-n"|"-o"|"-O"|"-G"|"-L"|"-S"; binary-operator ::= "="|"!="|"-eq"|"-ne"|"-ge"|"-gt"|"-le"|"-lt"| - "-nt"|"-ot"|"-ef"; + "-nt"|"-nt[abcm][abcm]"|"-ot"|"-ot[abcm][abcm])"|"-ef"; operand ::= <any legal UNIX file name> */ @@ -85,8 +85,38 @@ enum token { FILSUID, FILSGID, FILSTCK, - FILNT, - FILOT, + FILNTAA, + FILNTAB, + FILNTAC, + FILNTAM, + FILNTBA, + FILNTBB, + FILNTBC, + FILNTBM, + FILNTCA, + FILNTCB, + FILNTCC, + FILNTCM, + FILNTMA, + FILNTMB, + FILNTMC, + FILNTMM, + FILOTAA, + FILOTAB, + FILOTAC, + FILOTAM, + FILOTBA, + FILOTBB, + FILOTBC, + FILOTBM, + FILOTCA, + FILOTCB, + FILOTCC, + FILOTCM, + FILOTMA, + FILOTMB, + FILOTMC, + FILOTMM, FILEQ, FILUID, FILGID, @@ -118,9 +148,16 @@ enum token_types { PAREN }; +enum time_types { + ATIME, + BTIME, + CTIME, + MTIME +}; + static struct t_op { - char op_text[4]; - short op_num, op_type; + char op_text[6]; + char op_num, op_type; } const ops [] = { {"-r", FILRD, UNOP}, {"-w", FILWR, UNOP}, @@ -154,8 +191,40 @@ static struct t_op { {"-gt", INTGT, BINOP}, {"-le", INTLE, BINOP}, {"-lt", INTLT, BINOP}, - {"-nt", FILNT, BINOP}, - {"-ot", FILOT, BINOP}, + {"-nt", FILNTMM, BINOP}, + {"-ntaa", FILNTAA, BINOP}, + {"-ntab", FILNTAB, BINOP}, + {"-ntac", FILNTAC, BINOP}, + {"-ntam", FILNTAM, BINOP}, + {"-ntba", FILNTBA, BINOP}, + {"-ntbb", FILNTBB, BINOP}, + {"-ntbc", FILNTBC, BINOP}, + {"-ntbm", FILNTBM, BINOP}, + {"-ntca", FILNTCA, BINOP}, + {"-ntcb", FILNTCB, BINOP}, + {"-ntcc", FILNTCC, BINOP}, + {"-ntcm", FILNTCM, BINOP}, + {"-ntma", FILNTMA, BINOP}, + {"-ntmb", FILNTMB, BINOP}, + {"-ntmc", FILNTMC, BINOP}, + {"-ntmm", FILNTMM, BINOP}, + {"-ot", FILOTMM, BINOP}, + {"-otaa", FILOTAA, BINOP}, + {"-otab", FILOTBB, BINOP}, + {"-otac", FILOTAC, BINOP}, + {"-otam", FILOTAM, BINOP}, + {"-otba", FILOTBA, BINOP}, + {"-otbb", FILOTBB, BINOP}, + {"-otbc", FILOTBC, BINOP}, + {"-otbm", FILOTBM, BINOP}, + {"-otca", FILOTCA, BINOP}, + {"-otcb", FILOTCB, BINOP}, + {"-otcc", FILOTCC, BINOP}, + {"-otcm", FILOTCM, BINOP}, + {"-otma", FILOTMA, BINOP}, + {"-otmb", FILOTMB, BINOP}, + {"-otmc", FILOTMC, BINOP}, + {"-otmm", FILOTMM, BINOP}, {"-ef", FILEQ, BINOP}, {"!", UNOT, BUNOP}, {"-a", BAND, BBINOP}, @@ -180,10 +249,10 @@ static int intcmp(const char *, const ch static int isunopoperand(void); static int islparenoperand(void); static int isrparenoperand(void); -static int newerf(const char *, const char *); +static int newerf(const char *, const char *, enum time_types, + enum time_types); static int nexpr(enum token); static int oexpr(enum token); -static int olderf(const char *, const char *); static int primary(enum token); static void syntax(const char *, const char *); static enum token t_lex(char *); @@ -353,10 +422,70 @@ binop(void) return intcmp(opnd1, opnd2) <= 0; case INTLT: return intcmp(opnd1, opnd2) < 0; - case FILNT: - return newerf (opnd1, opnd2); - case FILOT: - return olderf (opnd1, opnd2); + case FILNTAA: + return newerf(opnd1, opnd2, ATIME, ATIME); + case FILNTAB: + return newerf(opnd1, opnd2, ATIME, BTIME); + case FILNTAC: + return newerf(opnd1, opnd2, ATIME, CTIME); + case FILNTAM: + return newerf(opnd1, opnd2, ATIME, MTIME); + case FILNTBA: + return newerf(opnd1, opnd2, BTIME, ATIME); + case FILNTBB: + return newerf(opnd1, opnd2, BTIME, BTIME); + case FILNTBC: + return newerf(opnd1, opnd2, BTIME, CTIME); + case FILNTBM: + return newerf(opnd1, opnd2, BTIME, MTIME); + case FILNTCA: + return newerf(opnd1, opnd2, CTIME, ATIME); + case FILNTCB: + return newerf(opnd1, opnd2, CTIME, BTIME); + case FILNTCC: + return newerf(opnd1, opnd2, CTIME, CTIME); + case FILNTCM: + return newerf(opnd1, opnd2, CTIME, MTIME); + case FILNTMA: + return newerf(opnd1, opnd2, MTIME, ATIME); + case FILNTMB: + return newerf(opnd1, opnd2, MTIME, BTIME); + case FILNTMC: + return newerf(opnd1, opnd2, MTIME, CTIME); + case FILNTMM: + return newerf(opnd1, opnd2, MTIME, MTIME); + case FILOTAA: + return newerf(opnd2, opnd1, ATIME, ATIME); + case FILOTAB: + return newerf(opnd2, opnd1, BTIME, ATIME); + case FILOTAC: + return newerf(opnd2, opnd1, CTIME, ATIME); + case FILOTAM: + return newerf(opnd2, opnd1, MTIME, ATIME); + case FILOTBA: + return newerf(opnd2, opnd1, ATIME, BTIME); + case FILOTBB: + return newerf(opnd2, opnd1, BTIME, BTIME); + case FILOTBC: + return newerf(opnd2, opnd1, CTIME, BTIME); + case FILOTBM: + return newerf(opnd2, opnd1, MTIME, BTIME); + case FILOTCA: + return newerf(opnd2, opnd1, ATIME, CTIME); + case FILOTCB: + return newerf(opnd2, opnd1, BTIME, CTIME); + case FILOTCC: + return newerf(opnd2, opnd1, CTIME, CTIME); + case FILOTCM: + return newerf(opnd2, opnd1, MTIME, CTIME); + case FILOTMA: + return newerf(opnd2, opnd1, ATIME, MTIME); + case FILOTMB: + return newerf(opnd2, opnd1, BTIME, MTIME); + case FILOTMC: + return newerf(opnd2, opnd1, CTIME, MTIME); + case FILOTMM: + return newerf(opnd2, opnd1, MTIME, MTIME); case FILEQ: return equalf (opnd1, opnd2); default: @@ -570,25 +699,34 @@ intcmp (const char *s1, const char *s2) } static int -newerf (const char *f1, const char *f2) +newerf (const char *f1, const char *f2, enum time_types t1, enum time_types t2) { struct stat b1, b2; + struct timespec *ts1, *ts2; if (stat(f1, &b1) != 0 || stat(f2, &b2) != 0) return 0; - if (b1.st_mtim.tv_sec > b2.st_mtim.tv_sec) + switch (t1) { + case ATIME: ts1 = &b1.st_atim; break; + case BTIME: ts1 = &b1.st_birthtim; break; + case CTIME: ts1 = &b1.st_ctim; break; + default: ts1 = &b1.st_mtim; break; + } + + switch (t2) { + case ATIME: ts2 = &b2.st_atim; break; + case BTIME: ts2 = &b2.st_birthtim; break; + case CTIME: ts2 = &b2.st_ctim; break; + default: ts2 = &b2.st_mtim; break; + } + + if (ts1->tv_sec > ts2->tv_sec) return 1; - if (b1.st_mtim.tv_sec < b2.st_mtim.tv_sec) + if (ts1->tv_sec < ts2->tv_sec) return 0; - return (b1.st_mtim.tv_nsec > b2.st_mtim.tv_nsec); -} - -static int -olderf (const char *f1, const char *f2) -{ - return (newerf(f2, f1)); + return (ts1->tv_nsec > ts2->tv_nsec); } static int Modified: user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/translate.c ============================================================================== --- user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/translate.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/translate.c Mon Feb 25 22:51:49 2013 (r247288) @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #include <libzfs.h> @@ -455,6 +456,20 @@ translate_device(const char *pool, const &record->zi_guid) == 0); } + /* + * Device faults can take on three different forms: + * 1). delayed or hanging I/O + * 2). zfs label faults + * 3). generic disk faults + */ + if (record->zi_timer != 0) { + record->zi_cmd = ZINJECT_DELAY_IO; + } else if (label_type != TYPE_INVAL) { + record->zi_cmd = ZINJECT_LABEL_FAULT; + } else { + record->zi_cmd = ZINJECT_DEVICE_FAULT; + } + switch (label_type) { case TYPE_LABEL_UBERBLOCK: record->zi_start = offsetof(vdev_label_t, vl_uberblock[0]); Modified: user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/zinject.c ============================================================================== --- user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/zinject.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/cddl/contrib/opensolaris/cmd/zinject/zinject.c Mon Feb 25 22:51:49 2013 (r247288) @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ /* @@ -603,7 +604,7 @@ main(int argc, char **argv) } while ((c = getopt(argc, argv, - ":aA:b:d:f:Fg:qhIc:t:T:l:mr:s:e:uL:p:")) != -1) { + ":aA:b:d:D:f:Fg:qhIc:t:T:l:mr:s:e:uL:p:")) != -1) { switch (c) { case 'a': flags |= ZINJECT_FLUSH_ARC; @@ -629,6 +630,15 @@ main(int argc, char **argv) case 'd': device = optarg; break; + case 'D': + record.zi_timer = strtoull(optarg, &end, 10); + if (errno != 0 || *end != '\0') { + (void) fprintf(stderr, "invalid i/o delay " + "value: '%s'\n", optarg); + usage(); + return (1); + } + break; case 'e': if (strcasecmp(optarg, "io") == 0) { error = EIO; @@ -693,6 +703,7 @@ main(int argc, char **argv) case 'p': (void) strlcpy(record.zi_func, optarg, sizeof (record.zi_func)); + record.zi_cmd = ZINJECT_PANIC; break; case 'q': quiet = 1; @@ -766,13 +777,15 @@ main(int argc, char **argv) argc -= optind; argv += optind; + if (record.zi_duration != 0) + record.zi_cmd = ZINJECT_IGNORED_WRITES; + if (cancel != NULL) { /* * '-c' is invalid with any other options. */ if (raw != NULL || range != NULL || type != TYPE_INVAL || - level != 0 || record.zi_func[0] != '\0' || - record.zi_duration != 0) { + level != 0 || record.zi_cmd != ZINJECT_UNINITIALIZED) { (void) fprintf(stderr, "cancel (-c) incompatible with " "any other options\n"); usage(); @@ -804,8 +817,7 @@ main(int argc, char **argv) * for doing injection, so handle it separately here. */ if (raw != NULL || range != NULL || type != TYPE_INVAL || - level != 0 || record.zi_func[0] != '\0' || - record.zi_duration != 0) { + level != 0 || record.zi_cmd != ZINJECT_UNINITIALIZED) { (void) fprintf(stderr, "device (-d) incompatible with " "data error injection\n"); usage(); @@ -839,7 +851,7 @@ main(int argc, char **argv) } else if (raw != NULL) { if (range != NULL || type != TYPE_INVAL || level != 0 || - record.zi_func[0] != '\0' || record.zi_duration != 0) { + record.zi_cmd != ZINJECT_UNINITIALIZED) { (void) fprintf(stderr, "raw (-b) format with " "any other options\n"); usage(); @@ -862,13 +874,14 @@ main(int argc, char **argv) return (1); } + record.zi_cmd = ZINJECT_DATA_FAULT; if (translate_raw(raw, &record) != 0) return (1); if (!error) error = EIO; - } else if (record.zi_func[0] != '\0') { + } else if (record.zi_cmd == ZINJECT_PANIC) { if (raw != NULL || range != NULL || type != TYPE_INVAL || - level != 0 || device != NULL || record.zi_duration != 0) { + level != 0 || device != NULL) { (void) fprintf(stderr, "panic (-p) incompatible with " "other options\n"); usage(); @@ -886,7 +899,7 @@ main(int argc, char **argv) if (argv[1] != NULL) record.zi_type = atoi(argv[1]); dataset[0] = '\0'; - } else if (record.zi_duration != 0) { + } else if (record.zi_cmd == ZINJECT_IGNORED_WRITES) { if (nowrites == 0) { (void) fprintf(stderr, "-s or -g meaningless " "without -I (ignore writes)\n"); @@ -940,6 +953,7 @@ main(int argc, char **argv) return (1); } + record.zi_cmd = ZINJECT_DATA_FAULT; if (translate_record(type, argv[0], range, level, &record, pool, dataset) != 0) return (1); Modified: user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c ============================================================================== --- user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Mon Feb 25 22:51:49 2013 (r247288) @@ -45,6 +45,9 @@ int aok; uint64_t physmem; vnode_t *rootdir = (vnode_t *)0xabcd1234; char hw_serial[HW_HOSTID_LEN]; +#ifdef illumos +kmutex_t cpu_lock; +#endif struct utsname utsname = { "userland", "libzpool", "1", "1", "na" @@ -842,6 +845,28 @@ ddi_strtoull(const char *str, char **npt return (0); } +#ifdef illumos +/* ARGSUSED */ +cyclic_id_t +cyclic_add(cyc_handler_t *hdlr, cyc_time_t *when) +{ + return (1); +} + +/* ARGSUSED */ +void +cyclic_remove(cyclic_id_t id) +{ +} + +/* ARGSUSED */ +int +cyclic_reprogram(cyclic_id_t id, hrtime_t expiration) +{ + return (1); +} +#endif + /* * ========================================================================= * kernel emulation setup & teardown @@ -875,6 +900,10 @@ kernel_init(int mode) system_taskq_init(); +#ifdef illumos + mutex_init(&cpu_lock, NULL, MUTEX_DEFAULT, NULL); +#endif + spa_init(mode); } Modified: user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h ============================================================================== --- user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Mon Feb 25 22:51:49 2013 (r247288) @@ -457,6 +457,9 @@ extern vnode_t *rootdir; extern void delay(clock_t ticks); +#define SEC_TO_TICK(sec) ((sec) * hz) +#define NSEC_TO_TICK(usec) ((usec) / (NANOSEC / hz)) + #define gethrestime_sec() time(NULL) #define gethrestime(t) \ do {\ @@ -624,6 +627,36 @@ typedef uint32_t idmap_rid_t; #define ERESTART (-1) #endif +#ifdef illumos +/* + * Cyclic information + */ +extern kmutex_t cpu_lock; + +typedef uintptr_t cyclic_id_t; +typedef uint16_t cyc_level_t; +typedef void (*cyc_func_t)(void *); + +#define CY_LOW_LEVEL 0 +#define CY_INFINITY INT64_MAX +#define CYCLIC_NONE ((cyclic_id_t)0) + +typedef struct cyc_time { + hrtime_t cyt_when; + hrtime_t cyt_interval; +} cyc_time_t; + +typedef struct cyc_handler { + cyc_func_t cyh_func; + void *cyh_arg; + cyc_level_t cyh_level; +} cyc_handler_t; + +extern cyclic_id_t cyclic_add(cyc_handler_t *, cyc_time_t *); +extern void cyclic_remove(cyclic_id_t); +extern int cyclic_reprogram(cyclic_id_t, hrtime_t); +#endif /* illumos */ + #ifdef __cplusplus } #endif Modified: user/adrian/net80211_tx/contrib/llvm/lib/Target/X86/X86InstrCompiler.td ============================================================================== --- user/adrian/net80211_tx/contrib/llvm/lib/Target/X86/X86InstrCompiler.td Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/contrib/llvm/lib/Target/X86/X86InstrCompiler.td Mon Feb 25 22:51:49 2013 (r247288) @@ -1076,12 +1076,14 @@ def : Pat<(X86cmp GR64:$src1, 0), // inverted. multiclass CMOVmr<PatLeaf InvertedCond, Instruction Inst16, Instruction Inst32, Instruction Inst64> { - def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, InvertedCond, EFLAGS), - (Inst16 GR16:$src2, addr:$src1)>; - def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, InvertedCond, EFLAGS), - (Inst32 GR32:$src2, addr:$src1)>; - def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, InvertedCond, EFLAGS), - (Inst64 GR64:$src2, addr:$src1)>; + let Predicates = [HasCMov] in { + def : Pat<(X86cmov (loadi16 addr:$src1), GR16:$src2, InvertedCond, EFLAGS), + (Inst16 GR16:$src2, addr:$src1)>; + def : Pat<(X86cmov (loadi32 addr:$src1), GR32:$src2, InvertedCond, EFLAGS), + (Inst32 GR32:$src2, addr:$src1)>; + def : Pat<(X86cmov (loadi64 addr:$src1), GR64:$src2, InvertedCond, EFLAGS), + (Inst64 GR64:$src2, addr:$src1)>; + } } defm : CMOVmr<X86_COND_B , CMOVAE16rm, CMOVAE32rm, CMOVAE64rm>; Modified: user/adrian/net80211_tx/etc/rc.d/rtadvd ============================================================================== --- user/adrian/net80211_tx/etc/rc.d/rtadvd Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/etc/rc.d/rtadvd Mon Feb 25 22:51:49 2013 (r247288) @@ -46,6 +46,8 @@ rtadvd_precmd() fi done ;; + [Nn][Oo][Nn][Ee]) + ;; *) command_args="${rtadvd_interfaces}" ;; Modified: user/adrian/net80211_tx/lib/libc/gen/opendir.c ============================================================================== --- user/adrian/net80211_tx/lib/libc/gen/opendir.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/lib/libc/gen/opendir.c Mon Feb 25 22:51:49 2013 (r247288) @@ -49,7 +49,7 @@ __FBSDID("$FreeBSD$"); #include "gen-private.h" #include "telldir.h" -static DIR * __opendir_common(int, const char *, int); +static DIR * __opendir_common(int, int); /* * Open a directory. @@ -78,7 +78,7 @@ fdopendir(int fd) } if (_fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) return (NULL); - return (__opendir_common(fd, NULL, DTF_HIDEW|DTF_NODUP)); + return (__opendir_common(fd, DTF_HIDEW|DTF_NODUP)); } DIR * @@ -92,7 +92,7 @@ __opendir2(const char *name, int flags) O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC)) == -1) return (NULL); - dir = __opendir_common(fd, name, flags); + dir = __opendir_common(fd, flags); if (dir == NULL) { saved_errno = errno; _close(fd); @@ -113,7 +113,7 @@ opendir_compar(const void *p1, const voi * Common routine for opendir(3), __opendir2(3) and fdopendir(3). */ static DIR * -__opendir_common(int fd, const char *name, int flags) +__opendir_common(int fd, int flags) { DIR *dirp; int incr; @@ -121,6 +121,8 @@ __opendir_common(int fd, const char *nam int unionstack; int fd2; + fd2 = -1; + if ((dirp = malloc(sizeof(DIR) + sizeof(struct _telldir))) == NULL) return (NULL); @@ -165,7 +167,22 @@ __opendir_common(int fd, const char *nam * entries into a buffer, sort the buffer, and * remove duplicate entries by setting the inode * number to zero. + * + * We reopen the directory because _getdirentries() + * on a MNT_UNION mount modifies the open directory, + * making it refer to the lower directory after the + * upper directory's entries are exhausted. + * This would otherwise break software that uses + * the directory descriptor for fchdir or *at + * functions, such as fts.c. */ + if ((fd2 = _openat(fd, ".", O_RDONLY | O_CLOEXEC)) == -1) { + saved_errno = errno; + free(buf); + free(dirp); + errno = saved_errno; + return (NULL); + } do { /* @@ -181,7 +198,7 @@ __opendir_common(int fd, const char *nam ddptr = buf + (len - space); } - n = _getdirentries(fd, ddptr, space, &dirp->dd_seek); + n = _getdirentries(fd2, ddptr, space, &dirp->dd_seek); if (n > 0) { ddptr += n; space -= n; @@ -191,25 +208,8 @@ __opendir_common(int fd, const char *nam ddeptr = ddptr; flags |= __DTF_READALL; - /* - * Re-open the directory. - * This has the effect of rewinding back to the - * top of the union stack and is needed by - * programs which plan to fchdir to a descriptor - * which has also been read -- see fts.c. - */ - if (flags & DTF_REWIND) { - if ((fd2 = _open(name, O_RDONLY | O_DIRECTORY | - O_CLOEXEC)) == -1) { - saved_errno = errno; - free(buf); - free(dirp); - errno = saved_errno; - return (NULL); - } - (void)_dup2(fd2, fd); - _close(fd2); - } + _close(fd2); + fd2 = -1; /* * There is now a buffer full of (possibly) duplicate @@ -293,7 +293,6 @@ __opendir_common(int fd, const char *nam if (dirp->dd_buf == NULL) goto fail; dirp->dd_seek = 0; - flags &= ~DTF_REWIND; } dirp->dd_loc = 0; @@ -310,6 +309,8 @@ __opendir_common(int fd, const char *nam fail: saved_errno = errno; + if (fd2 != -1) + _close(fd2); free(dirp); errno = saved_errno; return (NULL); Modified: user/adrian/net80211_tx/lib/libelf/elf_update.c ============================================================================== --- user/adrian/net80211_tx/lib/libelf/elf_update.c Mon Feb 25 22:45:02 2013 (r247287) +++ user/adrian/net80211_tx/lib/libelf/elf_update.c Mon Feb 25 22:51:49 2013 (r247288) @@ -41,89 +41,79 @@ __FBSDID("$FreeBSD$"); #include "_libelf.h" /* - * Update the internal data structures associated with an ELF object. - * Returns the size in bytes the ELF object would occupy in its file - * representation. + * Layout strategy: * - * After a successful call to this function, the following structures - * are updated: + * - Case 1: ELF_F_LAYOUT is asserted + * In this case the application has full control over where the + * section header table, program header table, and section data + * will reside. The library only perform error checks. * - * - The ELF header is updated. - * - All sections are sorted in order of ascending addresses and their - * section header table entries updated. An error is signalled - * if an overlap was detected among sections. - * - All data descriptors associated with a section are sorted in order - * of ascending addresses. Overlaps, if detected, are signalled as - * errors. Other sanity checks for alignments, section types etc. are - * made. + * - Case 2: ELF_F_LAYOUT is not asserted * - * After a resync_elf() successfully returns, the ELF descriptor is - * ready for being handed over to _libelf_write_elf(). + * The library will do the object layout using the following + * ordering: + * - The executable header is placed first, are required by the + * ELF specification. + * - The program header table is placed immediately following the + * executable header. + * - Section data, if any, is placed after the program header + * table, aligned appropriately. + * - The section header table, if needed, is placed last. * - * File alignments: - * PHDR - Addr - * SHDR - Addr + * There are two sub-cases to be taken care of: * - * XXX: how do we handle 'flags'. + * - Case 2a: e->e_cmd == ELF_C_READ or ELF_C_RDWR + * + * In this sub-case, the underlying ELF object may already have + * content in it, which the application may have modified. The + * library will retrieve content from the existing object as + * needed. + * + * - Case 2b: e->e_cmd == ELF_C_WRITE + * + * The ELF object is being created afresh in this sub-case; + * there is no pre-existing content in the underlying ELF + * object. */ /* * Compute the extents of a section, by looking at the data - * descriptors associated with it. The function returns zero if an - * error was detected. `*rc' holds the maximum file extent seen so - * far. + * descriptors associated with it. The function returns 1 if + * successful, or zero if an error was detected. */ static int -_libelf_compute_section_extents(Elf *e, Elf_Scn *s, off_t *rc) +_libelf_compute_section_extents(Elf *e, Elf_Scn *s, off_t rc) { int ec; - Elf_Data *d, *td; + size_t fsz, msz; + Elf_Data *d; + Elf32_Shdr *shdr32; + Elf64_Shdr *shdr64; unsigned int elftype; uint32_t sh_type; uint64_t d_align; uint64_t sh_align, sh_entsize, sh_offset, sh_size; uint64_t scn_size, scn_alignment; - /* - * We need to recompute library private data structures if one - * or more of the following is true: - * - The underlying Shdr structure has been marked `dirty'. Significant - * fields include: `sh_offset', `sh_type', `sh_size', `sh_addralign'. - * - The Elf_Data structures part of this section have been marked - * `dirty'. Affected members include `d_align', `d_offset', `d_type', - * and `d_size'. - * - The section as a whole is `dirty', e.g., it has been allocated - * using elf_newscn(), or if a new Elf_Data structure was added using - * elf_newdata(). - * - * Each of these conditions would result in the ELF_F_DIRTY bit being - * set on the section descriptor's `s_flags' field. - */ - ec = e->e_class; + shdr32 = &s->s_shdr.s_shdr32; + shdr64 = &s->s_shdr.s_shdr64; if (ec == ELFCLASS32) { - sh_type = s->s_shdr.s_shdr32.sh_type; - sh_align = (uint64_t) s->s_shdr.s_shdr32.sh_addralign; - sh_entsize = (uint64_t) s->s_shdr.s_shdr32.sh_entsize; - sh_offset = (uint64_t) s->s_shdr.s_shdr32.sh_offset; - sh_size = (uint64_t) s->s_shdr.s_shdr32.sh_size; + sh_type = shdr32->sh_type; + sh_align = (uint64_t) shdr32->sh_addralign; + sh_entsize = (uint64_t) shdr32->sh_entsize; + sh_offset = (uint64_t) shdr32->sh_offset; + sh_size = (uint64_t) shdr32->sh_size; } else { - sh_type = s->s_shdr.s_shdr64.sh_type; - sh_align = s->s_shdr.s_shdr64.sh_addralign; - sh_entsize = s->s_shdr.s_shdr64.sh_entsize; - sh_offset = s->s_shdr.s_shdr64.sh_offset; - sh_size = s->s_shdr.s_shdr64.sh_size; + sh_type = shdr64->sh_type; + sh_align = shdr64->sh_addralign; + sh_entsize = shdr64->sh_entsize; + sh_offset = shdr64->sh_offset; + sh_size = shdr64->sh_size; } - if (sh_type == SHT_NULL || sh_type == SHT_NOBITS) - return (1); - - if ((s->s_flags & ELF_F_DIRTY) == 0) { - if ((size_t) *rc < sh_offset + sh_size) - *rc = sh_offset + sh_size; - return (1); - } + assert(sh_type != SHT_NULL && sh_type != SHT_NOBITS); elftype = _libelf_xlate_shtype(sh_type); if (elftype > ELF_T_LAST) { @@ -131,15 +121,52 @@ _libelf_compute_section_extents(Elf *e, return (0); } - /* - * Compute the extent of the data descriptors associated with - * this section. - */ - scn_alignment = 0; if (sh_align == 0) sh_align = _libelf_falign(elftype, ec); - /* Compute the section alignment. */ + /* + * Check the section's data buffers for sanity and compute the + * section's alignment. + * Compute the section's size and alignment using the data + * descriptors associated with the section. + */ + if (STAILQ_EMPTY(&s->s_data)) { + /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302252251.r1PMpn2T055001>