svn commit: r218144 - in projects/sv: . bin/ps bin/sh contrib/top contrib/tzdata etc etc/mail etc/periodic/daily etc/rc.d gnu/lib/libgcc gnu/lib/libgomp gnu/usr.bin/binutils lib/libc lib/libc/sys l...

Attilio Rao attilio at FreeBSD.org
Mon Jan 31 22:14:48 UTC 2011


Author: attilio
Date: Mon Jan 31 22:14:47 2011
New Revision: 218144
URL: http://svn.freebsd.org/changeset/base/218144

Log:
  MFC

Added:
  projects/sv/share/doc/papers/kernmalloc/appendix.ms
     - copied unchanged from r218142, head/share/doc/papers/kernmalloc/appendix.ms
  projects/sv/share/doc/papers/sysperf/appendix.ms
     - copied unchanged from r218142, head/share/doc/papers/sysperf/appendix.ms
  projects/sv/sys/dev/ath/ath_rate/sample/tx_schedules.h
     - copied unchanged from r218142, head/sys/dev/ath/ath_rate/sample/tx_schedules.h
  projects/sv/sys/dev/ath/if_ath_debug.c
     - copied unchanged from r218142, head/sys/dev/ath/if_ath_debug.c
  projects/sv/sys/dev/ath/if_ath_debug.h
     - copied unchanged from r218142, head/sys/dev/ath/if_ath_debug.h
  projects/sv/sys/dev/ath/if_ath_misc.h
     - copied unchanged from r218142, head/sys/dev/ath/if_ath_misc.h
  projects/sv/sys/dev/ath/if_ath_tx.c
     - copied unchanged from r218142, head/sys/dev/ath/if_ath_tx.c
  projects/sv/sys/dev/ath/if_ath_tx.h
     - copied unchanged from r218142, head/sys/dev/ath/if_ath_tx.h
  projects/sv/sys/modules/khelp/h_ertt/
     - copied from r218142, head/sys/modules/khelp/h_ertt/
  projects/sv/sys/netinet/khelp/
     - copied from r218142, head/sys/netinet/khelp/
  projects/sv/tools/regression/bin/sh/builtins/trap7.0
     - copied unchanged from r218142, head/tools/regression/bin/sh/builtins/trap7.0
  projects/sv/tools/regression/bin/sh/execution/killed2.0
     - copied unchanged from r218142, head/tools/regression/bin/sh/execution/killed2.0
Modified:
  projects/sv/Makefile
  projects/sv/Makefile.inc1
  projects/sv/bin/ps/ps.1
  projects/sv/bin/sh/jobs.c
  projects/sv/bin/sh/var.c
  projects/sv/contrib/tzdata/australasia
  projects/sv/contrib/tzdata/northamerica
  projects/sv/etc/ftpusers
  projects/sv/etc/group
  projects/sv/etc/mail/aliases
  projects/sv/etc/master.passwd
  projects/sv/etc/periodic/daily/800.scrub-zfs
  projects/sv/etc/rc.d/rpcbind
  projects/sv/gnu/lib/libgcc/Makefile
  projects/sv/gnu/lib/libgomp/Makefile
  projects/sv/gnu/usr.bin/binutils/Makefile.inc0
  projects/sv/lib/libc/Makefile
  projects/sv/lib/libc/sys/Makefile.inc
  projects/sv/lib/libc/sys/ptrace.2
  projects/sv/lib/libelf/elf_data.c
  projects/sv/libexec/rtld-elf/amd64/rtld_machdep.h
  projects/sv/libexec/rtld-elf/arm/rtld_machdep.h
  projects/sv/libexec/rtld-elf/i386/rtld_machdep.h
  projects/sv/libexec/rtld-elf/ia64/rtld_machdep.h
  projects/sv/libexec/rtld-elf/map_object.c
  projects/sv/libexec/rtld-elf/mips/rtld_machdep.h
  projects/sv/libexec/rtld-elf/powerpc/rtld_machdep.h
  projects/sv/libexec/rtld-elf/powerpc64/rtld_machdep.h
  projects/sv/libexec/rtld-elf/rtld.c
  projects/sv/libexec/rtld-elf/sparc64/rtld_machdep.h
  projects/sv/sbin/fdisk/fdisk.c
  projects/sv/sbin/geom/class/part/gpart.8
  projects/sv/sbin/hastctl/hastctl.c
  projects/sv/sbin/hastd/control.c
  projects/sv/sbin/hastd/hast.h
  projects/sv/sbin/hastd/hastd.c
  projects/sv/sbin/hastd/hastd.h
  projects/sv/sbin/hastd/pjdlog.c
  projects/sv/sbin/hastd/pjdlog.h
  projects/sv/sbin/hastd/primary.c
  projects/sv/sbin/hastd/proto.c
  projects/sv/sbin/hastd/proto.h
  projects/sv/sbin/hastd/proto_common.c
  projects/sv/sbin/hastd/proto_impl.h
  projects/sv/sbin/hastd/proto_socketpair.c
  projects/sv/sbin/hastd/proto_tcp4.c
  projects/sv/sbin/hastd/proto_uds.c
  projects/sv/sbin/hastd/secondary.c
  projects/sv/sbin/hastd/subr.c
  projects/sv/sbin/hastd/subr.h
  projects/sv/sbin/ifconfig/ifieee80211.c
  projects/sv/sbin/iscontrol/config.c
  projects/sv/sbin/iscontrol/fsm.c
  projects/sv/sbin/mount/mount.8
  projects/sv/share/doc/papers/kernmalloc/Makefile
  projects/sv/share/doc/papers/sysperf/Makefile
  projects/sv/share/examples/etc/make.conf
  projects/sv/share/man/man4/altq.4
  projects/sv/share/man/man4/ixgb.4
  projects/sv/share/man/man4/nfe.4
  projects/sv/share/man/man4/re.4
  projects/sv/share/man/man7/build.7
  projects/sv/share/man/man9/Makefile
  projects/sv/share/man/man9/sbuf.9
  projects/sv/share/syscons/keymaps/Makefile
  projects/sv/sys/amd64/amd64/machdep.c
  projects/sv/sys/amd64/amd64/vm_machdep.c
  projects/sv/sys/amd64/linux32/linux.h
  projects/sv/sys/amd64/linux32/linux32_machdep.c
  projects/sv/sys/amd64/linux32/linux32_proto.h
  projects/sv/sys/amd64/linux32/syscalls.master
  projects/sv/sys/arm/include/fdt.h
  projects/sv/sys/arm/s3c2xx0/std.ln2410sbc
  projects/sv/sys/cam/ata/ata_xpt.c
  projects/sv/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c
  projects/sv/sys/cddl/compat/opensolaris/sys/atomic.h
  projects/sv/sys/compat/linprocfs/linprocfs.c
  projects/sv/sys/compat/linux/linux_futex.c
  projects/sv/sys/compat/linux/linux_futex.h
  projects/sv/sys/compat/linux/linux_misc.c
  projects/sv/sys/compat/linux/linux_misc.h
  projects/sv/sys/conf/files
  projects/sv/sys/dev/ahci/ahci.c
  projects/sv/sys/dev/alc/if_alc.c
  projects/sv/sys/dev/ata/ata-pci.h
  projects/sv/sys/dev/ata/chipsets/ata-intel.c
  projects/sv/sys/dev/ath/ath_hal/ah.c
  projects/sv/sys/dev/ath/ath_hal/ah.h
  projects/sv/sys/dev/ath/ath_hal/ah_debug.h
  projects/sv/sys/dev/ath/ath_hal/ah_eeprom_v4k.c
  projects/sv/sys/dev/ath/ath_hal/ah_eeprom_v4k.h
  projects/sv/sys/dev/ath/ath_hal/ar5212/ar5212.h
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar2133.c
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416.h
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416phy.h
  projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
  projects/sv/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c
  projects/sv/sys/dev/ath/ath_hal/ar9002/ar9280.h
  projects/sv/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
  projects/sv/sys/dev/ath/ath_hal/ar9002/ar9285.h
  projects/sv/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
  projects/sv/sys/dev/ath/ath_hal/ar9002/ar9285v2.ini
  projects/sv/sys/dev/ath/ath_rate/sample/sample.c
  projects/sv/sys/dev/ath/if_ath.c
  projects/sv/sys/dev/ath/if_athvar.h
  projects/sv/sys/dev/cs/if_cs.c
  projects/sv/sys/dev/cs/if_csreg.h
  projects/sv/sys/dev/cs/if_csvar.h
  projects/sv/sys/dev/cxgb/cxgb_sge.c
  projects/sv/sys/dev/fdt/fdt_common.c
  projects/sv/sys/dev/fdt/fdt_pci.c
  projects/sv/sys/dev/fdt/fdtbus.c
  projects/sv/sys/dev/flash/mx25l.c
  projects/sv/sys/dev/ichsmb/ichsmb_pci.c
  projects/sv/sys/dev/ichwd/ichwd.c
  projects/sv/sys/dev/ichwd/ichwd.h
  projects/sv/sys/dev/md/md.c
  projects/sv/sys/dev/mii/miidevs
  projects/sv/sys/dev/mii/rlphy.c
  projects/sv/sys/dev/nfe/if_nfe.c
  projects/sv/sys/dev/re/if_re.c
  projects/sv/sys/dev/siis/siis.c
  projects/sv/sys/dev/siis/siis.h
  projects/sv/sys/dev/tsec/if_tsec_fdt.c
  projects/sv/sys/dev/uart/uart_tty.c
  projects/sv/sys/dev/usb/usb_freebsd.h
  projects/sv/sys/dev/xen/netfront/netfront.c
  projects/sv/sys/fs/nfs/nfsport.h
  projects/sv/sys/fs/procfs/procfs_dbregs.c
  projects/sv/sys/fs/procfs/procfs_fpregs.c
  projects/sv/sys/fs/procfs/procfs_map.c
  projects/sv/sys/fs/procfs/procfs_regs.c
  projects/sv/sys/geom/geom_disk.c
  projects/sv/sys/geom/journal/g_journal.c
  projects/sv/sys/geom/part/g_part.c
  projects/sv/sys/geom/part/g_part.h
  projects/sv/sys/geom/part/g_part_bsd.c
  projects/sv/sys/geom/part/g_part_ebr.c
  projects/sv/sys/geom/part/g_part_gpt.c
  projects/sv/sys/geom/part/g_part_mbr.c
  projects/sv/sys/i386/i386/machdep.c
  projects/sv/sys/i386/linux/linux_machdep.c
  projects/sv/sys/i386/linux/linux_proto.h
  projects/sv/sys/i386/linux/syscalls.master
  projects/sv/sys/kern/kern_descrip.c
  projects/sv/sys/kern/kern_fork.c
  projects/sv/sys/kern/kern_jail.c
  projects/sv/sys/kern/kern_malloc.c
  projects/sv/sys/kern/kern_proc.c
  projects/sv/sys/kern/kern_sig.c
  projects/sv/sys/kern/kern_sysctl.c
  projects/sv/sys/kern/subr_lock.c
  projects/sv/sys/kern/subr_sleepqueue.c
  projects/sv/sys/kern/subr_trap.c
  projects/sv/sys/kern/subr_witness.c
  projects/sv/sys/kern/sys_process.c
  projects/sv/sys/kern/uipc_syscalls.c
  projects/sv/sys/kern/vfs_mount.c
  projects/sv/sys/kern/vfs_subr.c
  projects/sv/sys/mips/include/sf_buf.h
  projects/sv/sys/mips/mips/uio_machdep.c
  projects/sv/sys/mips/mips/vm_machdep.c
  projects/sv/sys/modules/ath/Makefile
  projects/sv/sys/modules/khelp/Makefile
  projects/sv/sys/net/if.c
  projects/sv/sys/net80211/ieee80211_ioctl.c
  projects/sv/sys/net80211/ieee80211_scan.c
  projects/sv/sys/netinet/if_ether.c
  projects/sv/sys/netinet/in_pcb.c
  projects/sv/sys/netinet/sctp.h
  projects/sv/sys/netinet/sctp_cc_functions.c
  projects/sv/sys/netinet/sctp_constants.h
  projects/sv/sys/netinet/sctp_header.h
  projects/sv/sys/netinet/sctp_indata.c
  projects/sv/sys/netinet/sctp_indata.h
  projects/sv/sys/netinet/sctp_input.c
  projects/sv/sys/netinet/sctp_output.c
  projects/sv/sys/netinet/sctp_output.h
  projects/sv/sys/netinet/sctp_pcb.c
  projects/sv/sys/netinet/sctp_pcb.h
  projects/sv/sys/netinet/sctp_structs.h
  projects/sv/sys/netinet/sctp_sysctl.c
  projects/sv/sys/netinet/sctp_sysctl.h
  projects/sv/sys/netinet/sctp_timer.c
  projects/sv/sys/netinet/sctp_uio.h
  projects/sv/sys/netinet/sctp_usrreq.c
  projects/sv/sys/netinet/sctputil.c
  projects/sv/sys/netinet/tcp_usrreq.c
  projects/sv/sys/pci/if_rlreg.h
  projects/sv/sys/powerpc/aim/trap.c
  projects/sv/sys/powerpc/include/fdt.h
  projects/sv/sys/powerpc/include/intr_machdep.h
  projects/sv/sys/powerpc/include/openpicvar.h
  projects/sv/sys/powerpc/mambo/mambo_openpic.c
  projects/sv/sys/powerpc/mpc85xx/atpic.c
  projects/sv/sys/powerpc/mpc85xx/isa.c
  projects/sv/sys/powerpc/mpc85xx/nexus.c
  projects/sv/sys/powerpc/mpc85xx/openpic_fdt.c
  projects/sv/sys/powerpc/mpc85xx/pci_fdt.c
  projects/sv/sys/powerpc/powermac/cpcht.c
  projects/sv/sys/powerpc/powermac/hrowpic.c
  projects/sv/sys/powerpc/powermac/openpic_macio.c
  projects/sv/sys/powerpc/powerpc/exec_machdep.c
  projects/sv/sys/powerpc/powerpc/intr_machdep.c
  projects/sv/sys/powerpc/powerpc/openpic.c
  projects/sv/sys/powerpc/powerpc/pic_if.m
  projects/sv/sys/powerpc/ps3/ps3pic.c
  projects/sv/sys/powerpc/psim/openpic_iobus.c
  projects/sv/sys/sys/diskmbr.h
  projects/sv/sys/sys/gpt.h
  projects/sv/sys/sys/proc.h
  projects/sv/sys/sys/ptrace.h
  projects/sv/sys/sys/sysctl.h
  projects/sv/sys/sys/sysent.h
  projects/sv/sys/vm/uma_core.c
  projects/sv/sys/vm/vm_map.c
  projects/sv/sys/vm/vm_page.c
  projects/sv/sys/vm/vm_phys.c
  projects/sv/sys/vm/vm_reserv.c
  projects/sv/tools/tools/ath/ath_ee_v4k_print/v4k.c
  projects/sv/tools/tools/ath/athpow/athpow.c
  projects/sv/usr.bin/csup/updater.c
  projects/sv/usr.bin/getopt/getopt.1
  projects/sv/usr.bin/ktrdump/ktrdump.8
  projects/sv/usr.bin/ktrdump/ktrdump.c
  projects/sv/usr.bin/man/man.sh
  projects/sv/usr.sbin/Makefile.mips
  projects/sv/usr.sbin/newsyslog/newsyslog.8
  projects/sv/usr.sbin/newsyslog/newsyslog.c
  projects/sv/usr.sbin/newsyslog/newsyslog.conf.5
  projects/sv/usr.sbin/newsyslog/pathnames.h
Directory Properties:
  projects/sv/   (props changed)
  projects/sv/cddl/contrib/opensolaris/   (props changed)
  projects/sv/contrib/bind9/   (props changed)
  projects/sv/contrib/binutils/   (props changed)
  projects/sv/contrib/bzip2/   (props changed)
  projects/sv/contrib/dialog/   (props changed)
  projects/sv/contrib/ee/   (props changed)
  projects/sv/contrib/expat/   (props changed)
  projects/sv/contrib/file/   (props changed)
  projects/sv/contrib/gdb/   (props changed)
  projects/sv/contrib/gdtoa/   (props changed)
  projects/sv/contrib/gnu-sort/   (props changed)
  projects/sv/contrib/groff/   (props changed)
  projects/sv/contrib/less/   (props changed)
  projects/sv/contrib/libpcap/   (props changed)
  projects/sv/contrib/llvm/   (props changed)
  projects/sv/contrib/llvm/tools/clang/   (props changed)
  projects/sv/contrib/ncurses/   (props changed)
  projects/sv/contrib/netcat/   (props changed)
  projects/sv/contrib/ntp/   (props changed)
  projects/sv/contrib/one-true-awk/   (props changed)
  projects/sv/contrib/openbsm/   (props changed)
  projects/sv/contrib/openpam/   (props changed)
  projects/sv/contrib/pf/   (props changed)
  projects/sv/contrib/sendmail/   (props changed)
  projects/sv/contrib/tcpdump/   (props changed)
  projects/sv/contrib/tcsh/   (props changed)
  projects/sv/contrib/top/   (props changed)
  projects/sv/contrib/top/install-sh   (props changed)
  projects/sv/contrib/tzcode/stdtime/   (props changed)
  projects/sv/contrib/tzcode/zic/   (props changed)
  projects/sv/contrib/tzdata/   (props changed)
  projects/sv/contrib/wpa/   (props changed)
  projects/sv/contrib/xz/   (props changed)
  projects/sv/crypto/openssh/   (props changed)
  projects/sv/crypto/openssl/   (props changed)
  projects/sv/lib/libc/   (props changed)
  projects/sv/lib/libc/stdtime/   (props changed)
  projects/sv/lib/libutil/   (props changed)
  projects/sv/lib/libz/   (props changed)
  projects/sv/sbin/   (props changed)
  projects/sv/sbin/ipfw/   (props changed)
  projects/sv/share/mk/bsd.arch.inc.mk   (props changed)
  projects/sv/share/zoneinfo/   (props changed)
  projects/sv/sys/   (props changed)
  projects/sv/sys/amd64/include/xen/   (props changed)
  projects/sv/sys/cddl/contrib/opensolaris/   (props changed)
  projects/sv/sys/contrib/dev/acpica/   (props changed)
  projects/sv/sys/contrib/octeon-sdk/   (props changed)
  projects/sv/sys/contrib/pf/   (props changed)
  projects/sv/sys/contrib/x86emu/   (props changed)
  projects/sv/usr.bin/calendar/   (props changed)
  projects/sv/usr.bin/csup/   (props changed)
  projects/sv/usr.bin/procstat/   (props changed)
  projects/sv/usr.sbin/zic/   (props changed)

Modified: projects/sv/Makefile
==============================================================================
--- projects/sv/Makefile	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/Makefile	Mon Jan 31 22:14:47 2011	(r218144)
@@ -28,7 +28,8 @@
 # delete-old-dirs     - Delete obsolete directories.
 # delete-old-files    - Delete obsolete files.
 # delete-old-libs     - Delete obsolete libraries.
-# targets             - Print a list of supported TARGET/TARGET_ARCH pairs.
+# targets             - Print a list of supported TARGET/TARGET_ARCH pairs
+#                       for world and kernel targets.
 #
 # This makefile is simple by design. The FreeBSD make automatically reads
 # the /usr/share/mk/sys.mk unless the -m argument is specified on the
@@ -125,6 +126,38 @@ BINMAKE= \
 	-m ${.CURDIR}/share/mk
 _MAKE=	PATH=${PATH} ${BINMAKE} -f Makefile.inc1
 
+# Guess machine architecture from machine type, and vice versa.
+.if !defined(TARGET_ARCH) && defined(TARGET)
+_TARGET_ARCH=	${TARGET:S/pc98/i386/:S/sun4v/sparc64/:S/mips/mipsel/}
+.elif !defined(TARGET) && defined(TARGET_ARCH) && \
+    ${TARGET_ARCH} != ${MACHINE_ARCH}
+_TARGET=		${TARGET_ARCH:C/mips.*e[lb]/mips/:C/armeb/arm/}
+.endif
+# Legacy names, for a transition period mips:mips -> mipsel:mips
+.if defined(TARGET) && defined(TARGET_ARCH) && \
+    ${TARGET_ARCH} == "mips" && ${TARGET} == "mips"
+.warning "TARGET_ARCH of mips is deprecated in favor of mipsel or mipseb"
+.if defined(TARGET_BIG_ENDIAN)
+_TARGET_ARCH=mipseb
+.else
+_TARGET_ARCH=mipsel
+.endif
+.endif
+# arm with TARGET_BIG_ENDIAN -> armeb
+.if defined(TARGET_ARCH) && ${TARGET_ARCH} == "arm" && defined(TARGET_BIG_ENDIAN)
+.warning "TARGET_ARCH of arm with TARGET_BIG_ENDIAN is deprecated.  use armeb"
+_TARGET_ARCH=armeb
+.endif
+.if defined(TARGET) && !defined(_TARGET)
+_TARGET=${TARGET}
+.endif
+.if defined(TARGET_ARCH) && !defined(_TARGET_ARCH)
+_TARGET_ARCH=${TARGET_ARCH}
+.endif
+# Otherwise, default to current machine type and architecture.
+_TARGET?=	${MACHINE}
+_TARGET_ARCH?=	${MACHINE_ARCH}
+
 #
 # Make sure we have an up-to-date make(1). Only world and buildworld
 # should do this as those are the initial targets used for upgrades.
@@ -172,8 +205,7 @@ cleanworld:
 #
 
 ${TGTS}:
-	${_+_}@cd ${.CURDIR}; \
-		${_MAKE} ${.TARGET}
+	${_+_}cd ${.CURDIR}; ${_MAKE} TARGET=${_TARGET} TARGET_ARCH=${_TARGET_ARCH} ${.TARGET}
 
 # Set a reasonable default
 .MAIN:	all
@@ -297,7 +329,7 @@ TARGET_ARCHES_${target}?= ${target}
 .endfor
 
 targets:
-	@echo "Supported TARGETS/TARGET_ARCH pairs"
+	@echo "Supported TARGET/TARGET_ARCH pairs for world and kernel targets"
 .for target in ${TARGETS}
 .for target_arch in ${TARGET_ARCHES_${target}}
 	@echo "    ${target}/${target_arch}"

Modified: projects/sv/Makefile.inc1
==============================================================================
--- projects/sv/Makefile.inc1	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/Makefile.inc1	Mon Jan 31 22:14:47 2011	(r218144)
@@ -116,32 +116,6 @@ VERSION!=	uname -srp
 VERSION+=	${OSRELDATE}
 .endif
 
-# Guess machine architecture from machine type, and vice versa.
-.if !defined(TARGET_ARCH) && defined(TARGET)
-TARGET_ARCH=	${TARGET:S/pc98/i386/:S/sun4v/sparc64/:S/mips/mipsel/}
-.elif !defined(TARGET) && defined(TARGET_ARCH) && \
-    ${TARGET_ARCH} != ${MACHINE_ARCH}
-TARGET=		${TARGET_ARCH:C/mips.*e[lb]/mips/:C/armeb/arm/}
-.endif
-# Legacy names, for a transition period mips:mips -> mipsel:mips
-.if defined(TARGET) && defined(TARGET_ARCH) && \
-    ${TARGET_ARCH} == "mips" && ${TARGET} == "mips"
-.warning "TARGET_ARCH of mips is deprecated in favor of mipsel or mipseb"
-.if defined(TARGET_BIG_ENDIAN)
-TARGET_ARCH=mipseb
-.else
-TARGET_ARCH=mipsel
-.endif
-.endif
-# arm with TARGET_BIG_ENDIAN -> armeb
-.if defined(TARGET_ARCH) && ${TARGET_ARCH} == "arm" && defined(TARGET_BIG_ENDIAN)
-.warning "TARGET_ARCH of arm with TARGET_BIG_ENDIAN is deprecated.  use armeb"
-TARGET_ARCH=armeb
-.endif
-# Otherwise, default to current machine type and architecture.
-TARGET?=	${MACHINE}
-TARGET_ARCH?=	${MACHINE_ARCH}
-
 KNOWN_ARCHES?=	amd64 arm armeb/arm i386 i386/pc98 ia64 mipsel/mips mipseb/mips mips64el/mips mips64eb/mips mipsn32el/mips mipsn32eb/mips powerpc powerpc64/powerpc sparc64 sparc64/sun4v
 .if ${TARGET} == ${TARGET_ARCH}
 _t=		${TARGET}

Modified: projects/sv/bin/ps/ps.1
==============================================================================
--- projects/sv/bin/ps/ps.1	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/bin/ps/ps.1	Mon Jan 31 22:14:47 2011	(r218144)
@@ -288,6 +288,7 @@ the include file
 .It Dv "P_ADVLOCK" Ta No "0x00001	Process may hold a POSIX advisory lock"
 .It Dv "P_CONTROLT" Ta No "0x00002	Has a controlling terminal"
 .It Dv "P_KTHREAD" Ta No "0x00004	Kernel thread"
+.It Dv "P_FOLLOWFORK" Ta No "0x00008	Attach debugger to new children"
 .It Dv "P_PPWAIT" Ta No "0x00010	Parent is waiting for child to exec/exit"
 .It Dv "P_PROFIL" Ta No "0x00020	Has started profiling"
 .It Dv "P_STOPPROF" Ta No "0x00040	Has thread in requesting to stop prof"

Modified: projects/sv/bin/sh/jobs.c
==============================================================================
--- projects/sv/bin/sh/jobs.c	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/bin/sh/jobs.c	Mon Jan 31 22:14:47 2011	(r218144)
@@ -1056,13 +1056,13 @@ dowait(int block, struct job *job)
 			}
 		if (sig > 0 && sig != SIGINT && sig != SIGPIPE) {
 			if (sig < sys_nsig && sys_siglist[sig])
-				out1str(sys_siglist[sig]);
+				out2str(sys_siglist[sig]);
 			else
-				out1fmt("Signal %d", sig);
+				outfmt(out2, "Signal %d", sig);
 			if (coredump)
-				out1str(" (core dumped)");
-			out1c('\n');
-			flushout(out1);
+				out2str(" (core dumped)");
+			out2c('\n');
+			flushout(out2);
 		}
 	} else {
 		TRACE(("Not printing status, rootshell=%d, job=%p\n", rootshell, job));

Modified: projects/sv/bin/sh/var.c
==============================================================================
--- projects/sv/bin/sh/var.c	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/bin/sh/var.c	Mon Jan 31 22:14:47 2011	(r218144)
@@ -600,9 +600,8 @@ var_compare(const void *a, const void *b
 
 
 /*
- * Command to list all variables which are set.  Currently this command
- * is invoked from the set command when the set command is called without
- * any variables.
+ * Command to list all variables which are set.  This is invoked from the
+ * set command when it is called without any options or operands.
  */
 
 int
@@ -840,9 +839,7 @@ setvarcmd(int argc, char **argv)
 
 
 /*
- * The unset builtin command.  We unset the function before we unset the
- * variable to allow a function to be unset when there is a readonly variable
- * with the same name.
+ * The unset builtin command.
  */
 
 int

Modified: projects/sv/contrib/tzdata/australasia
==============================================================================
--- projects/sv/contrib/tzdata/australasia	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/contrib/tzdata/australasia	Mon Jan 31 22:14:47 2011	(r218144)
@@ -1,5 +1,5 @@
 # <pre>
-# @(#)australasia	8.20
+# @(#)australasia	8.22
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -84,14 +84,13 @@ Rule	AS	1986	only	-	Oct	19	2:00s	1:00	-
 Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	-
 Rule	AS	1972	only	-	Feb	27	2:00s	0	-
 Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1986	1989	-	Mar	Sun>=15	2:00s	0	-
-Rule	AS	1990	only	-	Mar	Sun>=18	2:00s	0	-
-Rule	AS	1991	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1992	only	-	Mar	Sun>=18	2:00s	0	-
-Rule	AS	1993	only	-	Mar	Sun>=1	2:00s	0	-
-Rule	AS	1994	only	-	Mar	Sun>=18	2:00s	0	-
+Rule	AS	1986	1990	-	Mar	Sun>=15	2:00s	0	-
+Rule	AS	1991	only	-	Mar	3	2:00s	0	-
+Rule	AS	1992	only	-	Mar	22	2:00s	0	-
+Rule	AS	1993	only	-	Mar	7	2:00s	0	-
+Rule	AS	1994	only	-	Mar	20	2:00s	0	-
 Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AS	2006	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	AS	2006	only	-	Apr	2	2:00s	0	-
 Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	-
 Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	-
 Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	-

Modified: projects/sv/contrib/tzdata/northamerica
==============================================================================
--- projects/sv/contrib/tzdata/northamerica	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/contrib/tzdata/northamerica	Mon Jan 31 22:14:47 2011	(r218144)
@@ -1,5 +1,5 @@
 # <pre>
-# @(#)northamerica	8.34
+# %W%
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -471,20 +471,50 @@ Zone America/Adak	 12:13:21 -	LMT	1867 O
 #  three votes for and one against."
 
 # Hawaii
-#
-# From Arthur David Olson:
-# And then there's Hawaii.
-# DST was observed for one day in 1933;
-# standard time was changed by half an hour in 1947;
-# it's always standard as of 1986.
-#
-# From Paul Eggert:
-# Shanks says the 1933 experiment lasted for three weeks.  Go with Shanks.
-#
-Zone Pacific/Honolulu	-10:31:26 -	LMT	1900 Jan  1 12:00
-			-10:30	-	HST	1933 Apr 30 2:00
-			-10:30	1:00	HDT	1933 May 21 2:00
-			-10:30	US	H%sT	1947 Jun  8 2:00
+
+# From Arthur David Olson (2010-12-09):
+# "Hawaiian Time" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225
+# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,
+# the article is available at
+# <a href="http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf">
+# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf
+# </a>
+# and indicates that standard time was adopted effective noon, January
+# 13, 1896 (page 218), that in "1933, the Legislature decreed daylight
+# saving for the period between the last Sunday of each April and the
+# last Sunday of each September, but less than a month later repealed the
+# act," (page 220), that year-round daylight saving time was in effect
+# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for
+# when clocks changed) and that clocks were changed by 30 minutes
+# effective the second Sunday of June, 1947 (page 219, with no time of
+# day given for when clocks changed). A footnote for the 1933 changes
+# cites Session Laws of Hawaii 1933, "Act. 90 (approved 26 Apr. 1933)
+# and Act 163 (approved 21 May 1933)."
+
+# From Arthur David Olson (2011-01-19):
+# The following is from "Laws of the Territory of Hawaii Passed by the
+# Seventeenth Legislature: Regular Session 1933," available (as of
+# 2011-01-19) at American University's Pence Law Library. Page 85: "Act
+# 90...At 2 o'clock ante meridian of the last Sunday in April of each
+# year, the standard time of this Territory shall be advanced one
+# hour...This Act shall take effect upon its approval. Approved this 26th
+# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of
+# Hawaii." Page 172:  "Act 163...Act 90 of the Session Laws of 1933 is
+# hereby repealed...This Act shall take effect upon its approval, upon
+# which date the standard time of this Territory shall be restored to
+# that existing immediately prior to the taking effect of said Act 90.
+# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor
+# of the Territory of Hawaii."
+#
+# Note that 1933-05-21 was a Sunday.
+# We're left to guess the time of day when Act 163 was approved; guess noon.
+
+Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00 #Schmitt&Cox
+			-10:30	-	HST	1933 Apr 30 2:00 #Laws 1933
+			-10:30	1:00	HDT	1933 May 21 12:00 #Laws 1933+12
+			-10:30	-	HST	1942 Feb 09 2:00 #Schmitt&Cox+2
+			-10:30	1:00	HDT	1945 Sep 30 2:00 #Schmitt&Fox+2
+			-10:30	US	H%sT	1947 Jun  8 2:00 #Schmitt&Fox+2
 			-10:00	-	HST
 
 # Now we turn to US areas that have diverged from the consensus since 1970.

Modified: projects/sv/etc/ftpusers
==============================================================================
--- projects/sv/etc/ftpusers	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/etc/ftpusers	Mon Jan 31 22:14:47 2011	(r218144)
@@ -20,6 +20,7 @@ _dhcp
 uucp
 pop
 www
+hast
 nobody
 mailnull
 smmsp

Modified: projects/sv/etc/group
==============================================================================
--- projects/sv/etc/group	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/etc/group	Mon Jan 31 22:14:47 2011	(r218144)
@@ -27,5 +27,6 @@ dialer:*:68:
 network:*:69:
 audit:*:77:
 www:*:80:
+hast:*:845:
 nogroup:*:65533:
 nobody:*:65534:

Modified: projects/sv/etc/mail/aliases
==============================================================================
--- projects/sv/etc/mail/aliases	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/etc/mail/aliases	Mon Jan 31 22:14:47 2011	(r218144)
@@ -30,6 +30,7 @@ bin:	root
 bind:	root
 daemon:	root
 games:	root
+hast:	root
 kmem:	root
 mailnull: postmaster
 man:	root

Modified: projects/sv/etc/master.passwd
==============================================================================
--- projects/sv/etc/master.passwd	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/etc/master.passwd	Mon Jan 31 22:14:47 2011	(r218144)
@@ -20,4 +20,5 @@ _dhcp:*:65:65::0:0:dhcp programs:/var/em
 uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
 pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
 www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
+hast:*:845:845::0:0:HAST unprivileged user:/var/empty:/usr/sbin/nologin
 nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin

Modified: projects/sv/etc/periodic/daily/800.scrub-zfs
==============================================================================
--- projects/sv/etc/periodic/daily/800.scrub-zfs	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/etc/periodic/daily/800.scrub-zfs	Mon Jan 31 22:14:47 2011	(r218144)
@@ -5,6 +5,10 @@
 
 # If there is a global system configuration file, suck it in.
 #
+
+newline="
+" # A single newline
+
 if [ -r /etc/defaults/periodic.conf ]
 then
     . /etc/defaults/periodic.conf
@@ -24,17 +28,19 @@ case "$daily_scrub_zfs_enable" in
 
 	for pool in ${daily_scrub_zfs_pools}; do
 		# sanity check
-		_status=$(zpool list ${pool} | sed -n -e '$p')
+		_status=$(zpool list "${pool}" 2> /dev/null)
 		if [ $? -ne 0 ]; then
 			echo "   WARNING: pool '${pool}' specified in"
 			echo "            '/etc/periodic.conf:daily_scrub_zfs_pools'"
 			echo "            does not exist"
 			continue
 		fi
-		if echo ${_status} | grep -q FAULTED; then
+		_status=${_status##*$newline}
+		case ${_status} in
+		*FAULTED*)
 			echo "Skipping faulted pool: ${pool}"
-			continue
-		fi
+			continue ;;
+		esac
 
 		# successful only if there is at least one pool to scrub
 		rc=0

Modified: projects/sv/etc/rc.d/rpcbind
==============================================================================
--- projects/sv/etc/rc.d/rpcbind	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/etc/rc.d/rpcbind	Mon Jan 31 22:14:47 2011	(r218144)
@@ -13,5 +13,7 @@ name="rpcbind"
 rcvar=`set_rcvar`
 command="/usr/sbin/${name}"
 
+stop_postcmd='/bin/rm -f /var/run/rpcbind.*'
+
 load_rc_config $name
 run_rc_command "$1"

Modified: projects/sv/gnu/lib/libgcc/Makefile
==============================================================================
--- projects/sv/gnu/lib/libgcc/Makefile	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/gnu/lib/libgcc/Makefile	Mon Jan 31 22:14:47 2011	(r218144)
@@ -121,8 +121,9 @@ LIB2FUNCS_EXTRA = floatunsidf.c floatuns
 
 .if ${TARGET_CPUARCH} == mips
 LIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c
-# XXX do we need n32 here?
-.if ${TARGET_ARCH:Mmips64*} != ""
+# ABIs other than o32 need this
+.if ${TARGET_ARCH:Mmips64*} != "" || \
+    ${TARGET_ARCH:Mmipsn32*} != ""
 LIB2FUNCS_EXTRA+= floatdidf.c fixunsdfsi.c
 LIB2FUNCS_EXTRA+= floatdisf.c floatundidf.c
 LIB2FUNCS_EXTRA+= fixsfdi.c floatundisf.c

Modified: projects/sv/gnu/lib/libgomp/Makefile
==============================================================================
--- projects/sv/gnu/lib/libgomp/Makefile	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/gnu/lib/libgomp/Makefile	Mon Jan 31 22:14:47 2011	(r218144)
@@ -25,7 +25,7 @@ VERSION_MAP=	${SRCDIR}/libgomp.map
 # Target-specific OpenMP configuration
 .if ${MACHINE_CPUARCH} == arm || ${MACHINE_CPUARCH} == i386 || \
     ${MACHINE_ARCH} == powerpc || \
-    ${MACHINE_ARCH} == mipsel || ${MACHINE_ARCH} == mipseb
+    (${MACHINE_CPUARCH} == mips &&  ${MACHINE_ARCH:Mmips64*} == "")
 OMP_LOCK_ALIGN	=	4
 OMP_LOCK_KIND=		4
 OMP_LOCK_SIZE=		4

Modified: projects/sv/gnu/usr.bin/binutils/Makefile.inc0
==============================================================================
--- projects/sv/gnu/usr.bin/binutils/Makefile.inc0	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/gnu/usr.bin/binutils/Makefile.inc0	Mon Jan 31 22:14:47 2011	(r218144)
@@ -28,7 +28,7 @@ SRCDIR=	${.CURDIR}/${RELSRC}
 
 .if ${TARGET_CPUARCH} == "arm" || ${TARGET_CPUARCH} == "i386" || \
 	${TARGET_ARCH} == "powerpc" || \
-	${TARGET_ARCH} == "mipsel" || ${TARGET_ARCH} == "mipseb"
+	(${TARGET_CPUARCH} == "mips" && ${TARGET_ARCH:Mmips64*} == "")
 CFLAGS+= -DBFD_DEFAULT_TARGET_SIZE=32
 .else
 CFLAGS+= -DBFD_DEFAULT_TARGET_SIZE=64

Modified: projects/sv/lib/libc/Makefile
==============================================================================
--- projects/sv/lib/libc/Makefile	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/lib/libc/Makefile	Mon Jan 31 22:14:47 2011	(r218144)
@@ -68,6 +68,7 @@ NOASM=
     ${LIBC_ARCH} != "ia64" && \
     ${LIBC_ARCH} != "powerpc64" && \
     ${LIBC_ARCH} != "sparc64" && \
+    ${MACHINE_ARCH:Mmipsn32*} == "" && \
     ${MACHINE_ARCH:Mmips64*} == ""
 .include "${.CURDIR}/quad/Makefile.inc"
 .endif

Modified: projects/sv/lib/libc/sys/Makefile.inc
==============================================================================
--- projects/sv/lib/libc/sys/Makefile.inc	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/lib/libc/sys/Makefile.inc	Mon Jan 31 22:14:47 2011	(r218144)
@@ -53,16 +53,23 @@ SYM_MAPS+=	${.CURDIR}/sys/Symbol.map
 # Generated files
 CLEANFILES+=	${SASM} ${SPSEUDO}
 
+.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || \
+    ${MACHINE_CPUARCH} == "powerpc"
+NOTE_GNU_STACK='\t.section .note.GNU-stack,"",%%progbits\n'
+.else
+NOTE_GNU_STACK=''
+.endif
+
 ${SASM}:
 	printf '#include "compat.h"\n' > ${.TARGET}
 	printf '#include "SYS.h"\nRSYSCALL(${.PREFIX})\n' >> ${.TARGET}
-	printf '\t.section .note.GNU-stack,"",%%progbits\n' >>${.TARGET}
+	printf  ${NOTE_GNU_STACK} >>${.TARGET}
 
 ${SPSEUDO}:
 	printf '#include "compat.h"\n' > ${.TARGET}
 	printf '#include "SYS.h"\nPSEUDO(${.PREFIX:S/_//})\n' \
 	    >> ${.TARGET}
-	printf '\t.section .note.GNU-stack,"",%%progbits\n' >>${.TARGET}
+	printf ${NOTE_GNU_STACK} >>${.TARGET}
 
 MAN+=	abort2.2 accept.2 access.2 acct.2 adjtime.2 \
 	aio_cancel.2 aio_error.2 aio_read.2 aio_return.2 \

Modified: projects/sv/lib/libc/sys/ptrace.2
==============================================================================
--- projects/sv/lib/libc/sys/ptrace.2	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/lib/libc/sys/ptrace.2	Mon Jan 31 22:14:47 2011	(r218144)
@@ -2,7 +2,7 @@
 .\"	$NetBSD: ptrace.2,v 1.2 1995/02/27 12:35:37 cgd Exp $
 .\"
 .\" This file is in the public domain.
-.Dd July 10, 2010
+.Dd January 23, 2011
 .Dt PTRACE 2
 .Os
 .Sh NAME
@@ -295,6 +295,8 @@ struct ptrace_lwpinfo {
 	sigset_t pl_sigmask;
 	sigset_t pl_siglist;
 	siginfo_t pl_siginfo;
+	char	pl_tdname[MAXCOMLEN + 1];
+	int	pl_child_pid;
 };
 .Ed
 .Pp
@@ -345,6 +347,14 @@ Indicates that
 member of
 .Vt "struct ptrace_lwpinfo"
 contains valid information.
+.It PL_FLAG_FORKED
+Indicates that the process is returning from a call to
+.Fn fork 2
+that created a new child process.
+The process identifier of the new process is available in the
+.Va pl_child_pid
+member of
+.Vt "struct ptrace_lwpinfo" .
 .El
 .It pl_sigmask
 The current signal mask of the LWP
@@ -356,11 +366,20 @@ on an LWP siglist until the thread is se
 The siginfo that accompanies the signal pending.
 Only valid for
 .Dv PL_EVENT_SIGNAL
-kind of stop, when
-.Va pl_flags
-has
+stop when
 .Dv PL_FLAG_SI
-set.
+is set in
+.Va pl_flags .
+.It pl_tdname
+The name of the thread.
+.It pl_child_pid
+The process identifier of the new child process.
+Only valid for a
+.Dv PL_EVENT_SIGNAL
+stop when
+.Dv PL_FLAG_FORKED
+is set in
+.Va pl_flags .
 .El
 .It PT_GETNUMLWPS
 This request returns the number of kernel threads associated with the
@@ -391,6 +410,21 @@ This request will trace the specified pr
 .It PT_SYSCALL
 This request will trace the specified process
 on each system call entry and exit.
+.It PT_FOLLOW_FORK
+This request controls tracing for new child processes of a traced process.
+If
+.Fa data
+is non-zero,
+then new child processes will enable tracing and stop before executing their
+first instruction.
+If
+.Fa data
+is zero, then new child processes will execute without tracing enabled.
+By default, tracing is not enabled for new child processes.
+Child processes do not inherit this property.
+The traced process will set the
+.Dv PL_FLAG_FORKED
+flag upon exit from a system call that creates a new process.
 .It PT_VM_TIMESTAMP
 This request returns the generation number or timestamp of the memory map of
 the traced process as the return value from
@@ -567,6 +601,7 @@ function appeared in
 .At v7 .
 .Sh BUGS
 The
+.Dv PL_FLAG_FORKED ,
 .Dv PL_FLAG_SCE ,
 .Dv PL_FLAG_SCX
 and

Modified: projects/sv/lib/libelf/elf_data.c
==============================================================================
--- projects/sv/lib/libelf/elf_data.c	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/lib/libelf/elf_data.c	Mon Jan 31 22:14:47 2011	(r218144)
@@ -115,8 +115,10 @@ elf_getdata(Elf_Scn *s, Elf_Data *d)
 	d->d_type    = elftype;
 	d->d_version = e->e_version;
 
-	if (sh_type == SHT_NOBITS)
+	if (sh_type == SHT_NOBITS || sh_size == 0) {
+	        STAILQ_INSERT_TAIL(&s->s_data, d, d_next);
 		return (d);
+        }
 
 	if ((d->d_buf = malloc(msz*count)) == NULL) {
 		(void) _libelf_release_data(d);

Modified: projects/sv/libexec/rtld-elf/amd64/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/amd64/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/amd64/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -73,4 +73,7 @@ typedef struct {
 
 extern void *__tls_get_addr(tls_index *ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	PF_X
+#define	RTLD_DEFAULT_STACK_EXEC		PROT_EXEC
+
 #endif

Modified: projects/sv/libexec/rtld-elf/arm/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/arm/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/arm/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -69,4 +69,7 @@ void _rtld_bind_start(void);
 
 extern void *__tls_get_addr(tls_index *ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	PF_X
+#define	RTLD_DEFAULT_STACK_EXEC		PROT_EXEC
+
 #endif

Modified: projects/sv/libexec/rtld-elf/i386/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/i386/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/i386/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -74,4 +74,7 @@ typedef struct {
 extern void *___tls_get_addr(tls_index *ti) __attribute__((__regparm__(1)));
 extern void *__tls_get_addr(tls_index *ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	PF_X
+#define	RTLD_DEFAULT_STACK_EXEC		PROT_EXEC
+
 #endif

Modified: projects/sv/libexec/rtld-elf/ia64/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/ia64/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/ia64/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -65,4 +65,7 @@ void call_initfini_pointer(const struct 
 
 extern void *__tls_get_addr(unsigned long module, unsigned long offset);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	0
+#define	RTLD_DEFAULT_STACK_EXEC		0
+
 #endif

Modified: projects/sv/libexec/rtld-elf/map_object.c
==============================================================================
--- projects/sv/libexec/rtld-elf/map_object.c	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/map_object.c	Mon Jan 31 22:14:47 2011	(r218144)
@@ -101,7 +101,7 @@ map_object(int fd, const char *path, con
     phdyn = phinterp = phtls = NULL;
     phdr_vaddr = 0;
     segs = alloca(sizeof(segs[0]) * hdr->e_phnum);
-    stack_flags = PF_X | PF_R | PF_W;
+    stack_flags = RTLD_DEFAULT_STACK_PF_EXEC | PF_R | PF_W;
     while (phdr < phlimit) {
 	switch (phdr->p_type) {
 

Modified: projects/sv/libexec/rtld-elf/mips/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/mips/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/mips/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -69,4 +69,7 @@ void _rtld_bind_start(void);
 
 extern void *__tls_get_addr(tls_index *ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	PF_X
+#define	RTLD_DEFAULT_STACK_EXEC		PROT_EXEC
+
 #endif

Modified: projects/sv/libexec/rtld-elf/powerpc/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/powerpc/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/powerpc/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -84,4 +84,7 @@ typedef struct {
 
 extern void *__tls_get_addr(tls_index* ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	PF_X
+#define	RTLD_DEFAULT_STACK_EXEC		PROT_EXEC
+
 #endif

Modified: projects/sv/libexec/rtld-elf/powerpc64/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/powerpc64/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/powerpc64/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -76,4 +76,7 @@ typedef struct {
 
 extern void *__tls_get_addr(tls_index* ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	PF_X
+#define	RTLD_DEFAULT_STACK_EXEC		PROT_EXEC
+
 #endif

Modified: projects/sv/libexec/rtld-elf/rtld.c
==============================================================================
--- projects/sv/libexec/rtld-elf/rtld.c	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/rtld.c	Mon Jan 31 22:14:47 2011	(r218144)
@@ -93,7 +93,6 @@ static void *fill_search_info(const char
 static char *find_library(const char *, const Obj_Entry *);
 static const char *gethints(void);
 static void init_dag(Obj_Entry *);
-static void init_dag1(Obj_Entry *, Obj_Entry *, DoneList *);
 static void init_rtld(caddr_t, Elf_Auxinfo **);
 static void initlist_add_neededs(Needed_Entry *, Objlist *);
 static void initlist_add_objects(Obj_Entry *, Obj_Entry **, Objlist *);
@@ -191,7 +190,7 @@ extern Elf_Dyn _DYNAMIC;
 
 int osreldate, pagesize;
 
-static int stack_prot = PROT_READ | PROT_WRITE | PROT_EXEC;
+static int stack_prot = PROT_READ | PROT_WRITE | RTLD_DEFAULT_STACK_EXEC;
 static int max_stack_flags;
 
 /*
@@ -1331,28 +1330,33 @@ gethints(void)
 static void
 init_dag(Obj_Entry *root)
 {
+    const Needed_Entry *needed;
+    const Objlist_Entry *elm;
     DoneList donelist;
 
     if (root->dag_inited)
 	return;
     donelist_init(&donelist);
-    init_dag1(root, root, &donelist);
-    root->dag_inited = true;
-}
-
-static void
-init_dag1(Obj_Entry *root, Obj_Entry *obj, DoneList *dlp)
-{
-    const Needed_Entry *needed;
 
-    if (donelist_check(dlp, obj))
-	return;
+    /* Root object belongs to own DAG. */
+    objlist_push_tail(&root->dldags, root);
+    objlist_push_tail(&root->dagmembers, root);
+    donelist_check(&donelist, root);
 
-    objlist_push_tail(&obj->dldags, root);
-    objlist_push_tail(&root->dagmembers, obj);
-    for (needed = obj->needed;  needed != NULL;  needed = needed->next)
-	if (needed->obj != NULL)
-	    init_dag1(root, needed->obj, dlp);
+    /*
+     * Add dependencies of root object to DAG in breadth order
+     * by exploiting the fact that each new object get added
+     * to the tail of the dagmembers list.
+     */
+    STAILQ_FOREACH(elm, &root->dagmembers, link) {
+	for (needed = elm->obj->needed; needed != NULL; needed = needed->next) {
+	    if (needed->obj == NULL || donelist_check(&donelist, needed->obj))
+		continue;
+	    objlist_push_tail(&needed->obj->dldags, root);
+	    objlist_push_tail(&root->dagmembers, needed->obj);
+	}
+    }
+    root->dag_inited = true;
 }
 
 /*
@@ -1385,7 +1389,7 @@ init_rtld(caddr_t mapbase, Elf_Auxinfo *
 	digest_dynamic1(&objtmp, 1, &dyn_rpath, &dyn_soname);
 	assert(objtmp.needed == NULL);
 #if !defined(__mips__)
-	/* MIPS and SH{3,5} have a bogus DT_TEXTREL. */
+	/* MIPS has a bogus DT_TEXTREL. */
 	assert(!objtmp.textrel);
 #endif
 
@@ -2320,32 +2324,28 @@ do_dlsym(void *handle, const char *name,
 
 	donelist_init(&donelist);
 	if (obj->mainprog) {
-	    /* Search main program and all libraries loaded by it. */
-	    res = symlook_list(&req, &list_main, &donelist);
+            /* Handle obtained by dlopen(NULL, ...) implies global scope. */
+	    res = symlook_global(&req, &donelist);
 	    if (res == 0) {
 		def = req.sym_out;
 		defobj = req.defobj_out;
-	    } else {
-		/*
-		 * We do not distinguish between 'main' object and
-		 * global scope.  If symbol is not defined by objects
-		 * loaded at startup, continue search among
-		 * dynamically loaded objects with RTLD_GLOBAL scope.
-		 */
-		res = symlook_list(&req, &list_global, &donelist);
+	    }
+	    /*
+	     * Search the dynamic linker itself, and possibly resolve the
+	     * symbol from there.  This is how the application links to
+	     * dynamic linker services such as dlopen.
+	     */
+	    if (def == NULL || ELF_ST_BIND(def->st_info) == STB_WEAK) {
+		res = symlook_obj(&req, &obj_rtld);
 		if (res == 0) {
 		    def = req.sym_out;
 		    defobj = req.defobj_out;
 		}
 	    }
-	} else {
-	    Needed_Entry fake;
-
+	}
+	else {
 	    /* Search the whole DAG rooted at the given object. */
-	    fake.next = NULL;
-	    fake.obj = (Obj_Entry *)obj;
-	    fake.name = 0;
-	    res = symlook_needed(&req, &fake, &donelist);
+	    res = symlook_list(&req, &obj->dagmembers, &donelist);
 	    if (res == 0) {
 		def = req.sym_out;
 		defobj = req.defobj_out;
@@ -2800,7 +2800,12 @@ get_program_var_addr(const char *name, R
     donelist_init(&donelist);
     if (symlook_global(&req, &donelist) != 0)
 	return (NULL);
-    return ((const void **)(req.defobj_out->relocbase + req.sym_out->st_value));
+    if (ELF_ST_TYPE(req.sym_out->st_info) == STT_FUNC)
+	return ((const void **)make_function_pointer(req.sym_out,
+	  req.defobj_out));
+    else
+	return ((const void **)(req.defobj_out->relocbase +
+	  req.sym_out->st_value));
 }
 
 /*
@@ -2955,53 +2960,33 @@ symlook_list(SymLook *req, const Objlist
 }
 
 /*
- * Search the symbol table of a shared object and all objects needed
- * by it for a symbol of the given name.  Search order is
- * breadth-first.  Returns a pointer to the symbol, or NULL if no
- * definition was found.
+ * Search the chain of DAGS cointed to by the given Needed_Entry
+ * for a symbol of the given name.  Each DAG is scanned completely
+ * before advancing to the next one.  Returns a pointer to the symbol,
+ * or NULL if no definition was found.
  */
 static int
 symlook_needed(SymLook *req, const Needed_Entry *needed, DoneList *dlp)
 {
-    const Elf_Sym *def, *def_w;
+    const Elf_Sym *def;
     const Needed_Entry *n;
-    const Obj_Entry *defobj, *defobj1;
+    const Obj_Entry *defobj;
     SymLook req1;
     int res;
 
-    def = def_w = NULL;
+    def = NULL;
     defobj = NULL;
     symlook_init_from_req(&req1, req);
     for (n = needed; n != NULL; n = n->next) {
-	if (n->obj == NULL || donelist_check(dlp, n->obj) ||
-	    (res = symlook_obj(&req1, n->obj)) != 0)
+	if (n->obj == NULL ||
+	    (res = symlook_list(&req1, &n->obj->dagmembers, dlp)) != 0)
 	    continue;
-	def = req1.sym_out;
-	defobj = req1.defobj_out;
-	if (ELF_ST_BIND(def->st_info) != STB_WEAK) {
-	    req->defobj_out = defobj;
-	    req->sym_out = def;
-	    return (0);
-	}
-    }
-    /*
-     * There we come when either symbol definition is not found in
-     * directly needed objects, or found symbol is weak.
-     */
-    for (n = needed; n != NULL; n = n->next) {
-	if (n->obj == NULL)
-	    continue;
-	res = symlook_needed(&req1, n->obj->needed, dlp);
-	if (res != 0)
-	    continue;
-	def_w = req1.sym_out;
-	defobj1 = req1.defobj_out;
-	if (def == NULL || ELF_ST_BIND(def_w->st_info) != STB_WEAK) {
-	    def = def_w;
-	    defobj = defobj1;
+	if (def == NULL || ELF_ST_BIND(req1.sym_out->st_info) != STB_WEAK) {
+	    def = req1.sym_out;
+	    defobj = req1.defobj_out;
+	    if (ELF_ST_BIND(def->st_info) != STB_WEAK)
+		break;
 	}
-	if (ELF_ST_BIND(def_w->st_info) != STB_WEAK)
-	    break;
     }
     if (def != NULL) {
 	req->sym_out = def;
@@ -3719,10 +3704,17 @@ locate_dependency(const Obj_Entry *obj, 
     }
 
     for (needed = obj->needed;  needed != NULL;  needed = needed->next) {
-	if (needed->obj == NULL)
-	    continue;
-	if (object_match_name(needed->obj, name))
-	    return needed->obj;
+	if (strcmp(obj->strtab + needed->name, name) == 0 ||
+	  (needed->obj != NULL && object_match_name(needed->obj, name))) {
+	    /*
+	     * If there is DT_NEEDED for the name we are looking for,
+	     * we are all set.  Note that object might not be found if
+	     * dependency was not loaded yet, so the function can
+	     * return NULL here.  This is expected and handled
+	     * properly by the caller.
+	     */
+	    return (needed->obj);
+	}
     }
     _rtld_error("%s: Unexpected inconsistency: dependency %s not found",
 	obj->path, name);
@@ -3848,6 +3840,8 @@ rtld_verify_object_versions(Obj_Entry *o
     vn = obj->verneed;
     while (vn != NULL) {
 	depobj = locate_dependency(obj, obj->strtab + vn->vn_file);
+	if (depobj == NULL)
+	    return (-1);
 	vna = (const Elf_Vernaux *) ((char *)vn + vn->vn_aux);
 	for (;;) {
 	    if (check_object_provided_version(obj, depobj, vna))

Modified: projects/sv/libexec/rtld-elf/sparc64/rtld_machdep.h
==============================================================================
--- projects/sv/libexec/rtld-elf/sparc64/rtld_machdep.h	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/libexec/rtld-elf/sparc64/rtld_machdep.h	Mon Jan 31 22:14:47 2011	(r218144)
@@ -65,4 +65,7 @@ typedef struct {
 
 extern void *__tls_get_addr(tls_index *ti);
 
+#define	RTLD_DEFAULT_STACK_PF_EXEC	0
+#define	RTLD_DEFAULT_STACK_EXEC		0
+
 #endif

Modified: projects/sv/sbin/fdisk/fdisk.c
==============================================================================
--- projects/sv/sbin/fdisk/fdisk.c	Mon Jan 31 22:10:01 2011	(r218143)
+++ projects/sv/sbin/fdisk/fdisk.c	Mon Jan 31 22:14:47 2011	(r218144)
@@ -49,7 +49,10 @@ __FBSDID("$FreeBSD$");
 
 int iotest;
 
-#define NOSECTORS ((u_int32_t)-1)
+#define NO_DISK_SECTORS ((u_int32_t)-1)
+#define NO_TRACK_CYLINDERS 1023
+#define NO_TRACK_HEADS 255
+#define NO_TRACK_SECTORS 63
 #define LBUF 100
 static char lbuf[LBUF];
 
@@ -62,7 +65,7 @@ static char lbuf[LBUF];
  *	Created.
  */
 
-#define Decimal(str, ans, tmp, nbits) if (decimal(str, &tmp, ans, nbits)) ans = tmp
+#define Decimal(str, ans, tmp, maxval) if (decimal(str, &tmp, ans, maxval)) ans = tmp
 
 #define RoundCyl(x) ((((x) + cylsecs - 1) / cylsecs) * cylsecs)
 
@@ -247,7 +250,7 @@ static int get_params(void);
 static int read_s0(void);
 static int write_s0(void);
 static int ok(const char *str);
-static int decimal(const char *str, int *num, int deflt, int nbits);
+static int decimal(const char *str, int *num, int deflt, uint32_t maxval);
 static int read_config(char *config_file);
 static void reset_boot(void);
 static int sanitize_partition(struct dos_partition *);
@@ -572,9 +575,9 @@ change_part(int i)
 	}
 
 	do {
-		Decimal("sysid (165=FreeBSD)", partp->dp_typ, tmp, sizeof(partp->dp_typ) * 8);
-		Decimal("start", partp->dp_start, tmp, sizeof(partp->dp_start) * 8);
-		Decimal("size", partp->dp_size, tmp, sizeof(partp->dp_size) * 8);
+		Decimal("sysid (165=FreeBSD)", partp->dp_typ, tmp, 255);
+		Decimal("start", partp->dp_start, tmp, NO_DISK_SECTORS);
+		Decimal("size", partp->dp_size, tmp, NO_DISK_SECTORS);
 		if (!sanitize_partition(partp)) {
 			warnx("ERROR: failed to adjust; setting sysid to 0");
 			partp->dp_typ = 0;
@@ -586,9 +589,9 @@ change_part(int i)
 			tcyl = DPCYL(partp->dp_scyl,partp->dp_ssect);
 			thd = partp->dp_shd;
 			tsec = DPSECT(partp->dp_ssect);
-			Decimal("beginning cylinder", tcyl, tmp, 10);
-			Decimal("beginning head", thd, tmp, sizeof(partp->dp_shd) * 8);
-			Decimal("beginning sector", tsec, tmp, 6);
+			Decimal("beginning cylinder", tcyl, tmp, NO_TRACK_CYLINDERS);
+			Decimal("beginning head", thd, tmp, NO_TRACK_HEADS);
+			Decimal("beginning sector", tsec, tmp, NO_TRACK_SECTORS);
 			partp->dp_scyl = DOSCYL(tcyl);
 			partp->dp_ssect = DOSSECT(tsec,tcyl);
 			partp->dp_shd = thd;
@@ -596,9 +599,9 @@ change_part(int i)
 			tcyl = DPCYL(partp->dp_ecyl,partp->dp_esect);
 			thd = partp->dp_ehd;
 			tsec = DPSECT(partp->dp_esect);
-			Decimal("ending cylinder", tcyl, tmp, 10);
-			Decimal("ending head", thd, tmp, sizeof(partp->dp_ehd) * 8);
-			Decimal("ending sector", tsec, tmp, 6);
+			Decimal("ending cylinder", tcyl, tmp, NO_TRACK_CYLINDERS);
+			Decimal("ending head", thd, tmp, NO_TRACK_HEADS);
+			Decimal("ending sector", tsec, tmp, NO_TRACK_SECTORS);
 			partp->dp_ecyl = DOSCYL(tcyl);
 			partp->dp_esect = DOSSECT(tsec,tcyl);
 			partp->dp_ehd = thd;
@@ -915,16 +918,12 @@ ok(const char *str)
 }
 
 static int
-decimal(const char *str, int *num, int deflt, int nbits)
+decimal(const char *str, int *num, int deflt, uint32_t maxval)
 {
-	long long acc = 0, limit;
+	long long acc = 0;
 	int c;
 	char *cp;
 
-	if (nbits == 0) {
-		nbits = sizeof(*num) * 8;
-	}
-	limit = (long long)1 << nbits;
 	while (1) {
 		printf("Supply a decimal value for \"%s\" [%d] ", str, deflt);
 		fflush(stdout);
@@ -941,7 +940,7 @@ decimal(const char *str, int *num, int d
 			return 0;
 		while ((c = *cp++)) {
 			if (c <= '9' && c >= '0') {
-				if (acc < limit)
+				if (maxval > 0 && acc <= maxval)
 					acc = acc * 10 + c - '0';
 			} else
 				break;
@@ -949,10 +948,11 @@ decimal(const char *str, int *num, int d
 		if (c == ' ' || c == '\t')
 			while ((c = *cp) && (c == ' ' || c == '\t')) cp++;
 		if (!c) {
-			if (acc >= limit) {
-				acc = limit - 1;
-				printf("%s is too big, it will be truncated to %lld\n",
-				    lbuf, acc);
+			if (maxval > 0 && acc > maxval) {
+				acc = maxval;
+				printf("%s exceeds maximum value allowed for "
+				  "this field. The value has been reduced "
+				  "to %lld\n", lbuf, acc);
 			}
 			*num = acc;
 			return 1;
@@ -1108,7 +1108,7 @@ str2sectors(const char *str)
 	if (str == end || *end == '\0') {
 		warnx("ERROR line %d: unexpected size: \'%s\'",
 		    current_line_number, str);
-		return NOSECTORS;
+		return NO_DISK_SECTORS;
 	}
 
 	if (*end == 'K') 
@@ -1120,7 +1120,7 @@ str2sectors(const char *str)
 	else {
 		warnx("ERROR line %d: unexpected modifier: %c "
 		    "(not K/M/G)", current_line_number, *end);
-		return NOSECTORS;
+		return NO_DISK_SECTORS;
 	}
 
 	return val;
@@ -1170,7 +1170,7 @@ process_partition(CMD *command)
 			}
 		} else {
 			partp->dp_start = str2sectors(command->args[2].arg_str);
-			if (partp->dp_start == NOSECTORS)
+			if (partp->dp_start == NO_DISK_SECTORS)
 				break;
 		}
 	} else
@@ -1182,7 +1182,7 @@ process_partition(CMD *command)
 			    dos_cylsecs) - partp->dp_start;
 		else {
 			partp->dp_size = str2sectors(command->args[3].arg_str);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-projects mailing list