Date: Mon, 11 Jan 2016 19:36:44 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r293687 - in projects/clang380-import: . bin/sh bin/sh/tests/builtins contrib/hyperv/tools gnu/lib/libgcc include lib/csu/arm lib/libc/sys lib/libstand release share/man/man4 share/man/... Message-ID: <201601111936.u0BJaicT070260@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Mon Jan 11 19:36:44 2016 New Revision: 293687 URL: https://svnweb.freebsd.org/changeset/base/293687 Log: Merge ^/head r293430 through r293685. Added: projects/clang380-import/bin/sh/tests/builtins/local5.0 - copied unchanged from r293685, head/bin/sh/tests/builtins/local5.0 projects/clang380-import/tools/build/options/WITHOUT_LLVM_LIBUNWIND - copied unchanged from r293685, head/tools/build/options/WITHOUT_LLVM_LIBUNWIND projects/clang380-import/tools/build/options/WITH_LLVM_LIBUNWIND - copied unchanged from r293685, head/tools/build/options/WITH_LLVM_LIBUNWIND projects/clang380-import/tools/regression/geom_eli/conf.sh - copied unchanged from r293685, head/tools/regression/geom_eli/conf.sh projects/clang380-import/tools/regression/geom_uzip/conf.sh - copied unchanged from r293685, head/tools/regression/geom_uzip/conf.sh projects/clang380-import/tools/regression/geom_uzip/test-1.t - copied unchanged from r293685, head/tools/regression/geom_uzip/test-1.t Deleted: projects/clang380-import/tools/regression/geom_gate/Makefile projects/clang380-import/tools/regression/geom_gate/runtests.sh projects/clang380-import/tools/regression/geom_gate/test-1.sh projects/clang380-import/tools/regression/geom_gate/test-2.sh projects/clang380-import/tools/regression/geom_gate/test-3.sh projects/clang380-import/tools/regression/geom_uzip/runtests.sh projects/clang380-import/tools/regression/geom_uzip/test-1.sh projects/clang380-import/tools/regression/geom_uzip/test-2.sh Modified: projects/clang380-import/Makefile.inc1 projects/clang380-import/bin/sh/eval.c projects/clang380-import/bin/sh/tests/builtins/Makefile projects/clang380-import/bin/sh/var.c projects/clang380-import/contrib/hyperv/tools/hv_kvp_daemon.c projects/clang380-import/gnu/lib/libgcc/Makefile projects/clang380-import/include/limits.h projects/clang380-import/lib/csu/arm/Makefile projects/clang380-import/lib/libc/sys/sendfile.2 projects/clang380-import/lib/libstand/uuid_to_string.c projects/clang380-import/release/release.sh projects/clang380-import/share/man/man4/ismt.4 projects/clang380-import/share/man/man5/src.conf.5 projects/clang380-import/share/misc/committers-src.dot projects/clang380-import/share/mk/src.opts.mk projects/clang380-import/sys/amd64/amd64/elf_machdep.c projects/clang380-import/sys/amd64/amd64/trap.c projects/clang380-import/sys/amd64/linux/linux_sysvec.c projects/clang380-import/sys/amd64/linux32/linux32_sysvec.c projects/clang380-import/sys/arm/arm/elf_machdep.c projects/clang380-import/sys/arm64/arm64/elf_machdep.c projects/clang380-import/sys/boot/common/ufsread.c projects/clang380-import/sys/boot/efi/boot1/Makefile projects/clang380-import/sys/boot/efi/boot1/boot1.c projects/clang380-import/sys/boot/i386/loader/main.c projects/clang380-import/sys/boot/powerpc/boot1.chrp/boot1.c projects/clang380-import/sys/boot/userboot/libstand/Makefile projects/clang380-import/sys/boot/userboot/libstand/Makefile.depend projects/clang380-import/sys/boot/userboot/userboot/main.c projects/clang380-import/sys/boot/zfs/zfs.c projects/clang380-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/clang380-import/sys/compat/ia32/ia32_sysvec.c projects/clang380-import/sys/compat/linux/linux_futex.c projects/clang380-import/sys/compat/svr4/svr4_sysvec.c projects/clang380-import/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c (contents, props changed) projects/clang380-import/sys/dev/cxgbe/t4_main.c projects/clang380-import/sys/dev/ic/ns16550.h projects/clang380-import/sys/dev/iscsi/iscsi.c projects/clang380-import/sys/dev/iscsi/iscsi.h projects/clang380-import/sys/dev/puc/pucdata.c projects/clang380-import/sys/dev/rtwn/if_rtwn.c projects/clang380-import/sys/dev/sfxge/common/efsys.h projects/clang380-import/sys/dev/ti/if_ti.c projects/clang380-import/sys/dev/vt/hw/ofwfb/ofwfb.c projects/clang380-import/sys/fs/ext2fs/ext2_bmap.c projects/clang380-import/sys/fs/ext2fs/ext2_extents.c projects/clang380-import/sys/fs/ext2fs/ext2_extents.h projects/clang380-import/sys/fs/ext2fs/ext2_vfsops.c projects/clang380-import/sys/fs/ext2fs/ext2_vnops.c projects/clang380-import/sys/fs/smbfs/smbfs_smb.c projects/clang380-import/sys/fs/smbfs/smbfs_subr.h projects/clang380-import/sys/fs/smbfs/smbfs_vnops.c projects/clang380-import/sys/i386/i386/elf_machdep.c projects/clang380-import/sys/i386/ibcs2/ibcs2_sysvec.c projects/clang380-import/sys/i386/linux/linux_sysvec.c projects/clang380-import/sys/kern/imgact_aout.c projects/clang380-import/sys/kern/init_main.c projects/clang380-import/sys/kern/kern_condvar.c projects/clang380-import/sys/kern/uipc_mbuf.c projects/clang380-import/sys/kern/uipc_sockbuf.c projects/clang380-import/sys/kern/uipc_syscalls.c projects/clang380-import/sys/kern/uipc_usrreq.c projects/clang380-import/sys/mips/mips/elf_machdep.c projects/clang380-import/sys/mips/mips/freebsd32_machdep.c projects/clang380-import/sys/net/if_arcsubr.c projects/clang380-import/sys/net/if_ethersubr.c projects/clang380-import/sys/net/if_fddisubr.c projects/clang380-import/sys/net/if_fwsubr.c projects/clang380-import/sys/net/if_iso88025subr.c projects/clang380-import/sys/net/if_loop.c projects/clang380-import/sys/net/radix_mpath.c projects/clang380-import/sys/net/radix_mpath.h projects/clang380-import/sys/net/route.c projects/clang380-import/sys/net/route.h projects/clang380-import/sys/net80211/ieee80211_freebsd.c projects/clang380-import/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c projects/clang380-import/sys/netgraph/netflow/netflow.c projects/clang380-import/sys/netgraph/netflow/netflow_v9.c projects/clang380-import/sys/netgraph/netflow/ng_netflow.c projects/clang380-import/sys/netinet/in_fib.c projects/clang380-import/sys/netinet/in_pcb.c projects/clang380-import/sys/netinet/ip_encap.c projects/clang380-import/sys/netinet/ip_mroute.c projects/clang380-import/sys/netinet/ip_output.c projects/clang380-import/sys/netinet/raw_ip.c projects/clang380-import/sys/netinet/tcp_reass.c projects/clang380-import/sys/netinet/tcp_subr.c projects/clang380-import/sys/netinet/toecore.c projects/clang380-import/sys/netinet6/frag6.c projects/clang380-import/sys/netinet6/icmp6.c projects/clang380-import/sys/netinet6/in6_fib.c projects/clang380-import/sys/netinet6/in6_pcb.c projects/clang380-import/sys/netinet6/in6_rmx.c projects/clang380-import/sys/netinet6/in6_src.c projects/clang380-import/sys/netinet6/ip6_var.h projects/clang380-import/sys/netinet6/nd6_nbr.c projects/clang380-import/sys/netinet6/raw_ip6.c projects/clang380-import/sys/netinet6/udp6_usrreq.c projects/clang380-import/sys/netpfil/ipfw/ip_fw_table.c projects/clang380-import/sys/netpfil/ipfw/ip_fw_table_algo.c projects/clang380-import/sys/netpfil/pf/pf_if.c projects/clang380-import/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c projects/clang380-import/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c projects/clang380-import/sys/powerpc/aim/locore32.S projects/clang380-import/sys/powerpc/aim/locore64.S projects/clang380-import/sys/powerpc/aim/trap_subr64.S projects/clang380-import/sys/powerpc/booke/booke_machdep.c projects/clang380-import/sys/powerpc/booke/locore.S projects/clang380-import/sys/powerpc/include/pcb.h projects/clang380-import/sys/powerpc/include/setjmp.h projects/clang380-import/sys/powerpc/ofw/rtas.c projects/clang380-import/sys/powerpc/powermac/grackle.c projects/clang380-import/sys/powerpc/powerpc/copyinout.c projects/clang380-import/sys/powerpc/powerpc/elf32_machdep.c projects/clang380-import/sys/powerpc/powerpc/elf64_machdep.c projects/clang380-import/sys/powerpc/powerpc/mp_machdep.c projects/clang380-import/sys/powerpc/powerpc/setjmp.S projects/clang380-import/sys/powerpc/powerpc/trap.c projects/clang380-import/sys/sparc64/sparc64/elf_machdep.c projects/clang380-import/sys/sys/mbuf.h projects/clang380-import/sys/sys/sf_buf.h projects/clang380-import/sys/sys/sockbuf.h projects/clang380-import/sys/sys/socket.h projects/clang380-import/sys/sys/sysent.h projects/clang380-import/sys/vm/vm_domain.c projects/clang380-import/tools/regression/geom_concat/conf.sh projects/clang380-import/tools/regression/geom_concat/test-1.t projects/clang380-import/tools/regression/geom_concat/test-2.t projects/clang380-import/tools/regression/geom_eli/attach-d.t projects/clang380-import/tools/regression/geom_eli/configure-b-B.t projects/clang380-import/tools/regression/geom_eli/delkey.t projects/clang380-import/tools/regression/geom_eli/detach-l.t projects/clang380-import/tools/regression/geom_eli/init-B.t projects/clang380-import/tools/regression/geom_eli/init-J.t projects/clang380-import/tools/regression/geom_eli/init-a.t projects/clang380-import/tools/regression/geom_eli/init-i-P.t projects/clang380-import/tools/regression/geom_eli/init.t projects/clang380-import/tools/regression/geom_eli/integrity-copy.t projects/clang380-import/tools/regression/geom_eli/integrity-data.t projects/clang380-import/tools/regression/geom_eli/integrity-hmac.t projects/clang380-import/tools/regression/geom_eli/kill.t projects/clang380-import/tools/regression/geom_eli/nokey.t projects/clang380-import/tools/regression/geom_eli/onetime-a.t projects/clang380-import/tools/regression/geom_eli/onetime-d.t projects/clang380-import/tools/regression/geom_eli/onetime.t projects/clang380-import/tools/regression/geom_eli/readonly.t projects/clang380-import/tools/regression/geom_eli/resize.t projects/clang380-import/tools/regression/geom_eli/setkey.t projects/clang380-import/tools/regression/geom_gate/test-1.t projects/clang380-import/tools/regression/geom_gate/test-2.t projects/clang380-import/tools/regression/geom_gate/test-3.t projects/clang380-import/tools/regression/geom_nop/conf.sh projects/clang380-import/tools/regression/geom_nop/test-1.t projects/clang380-import/tools/regression/geom_nop/test-2.t projects/clang380-import/tools/regression/geom_raid3/conf.sh projects/clang380-import/tools/regression/geom_raid3/test-1.t projects/clang380-import/tools/regression/geom_raid3/test-10.t projects/clang380-import/tools/regression/geom_raid3/test-11.t projects/clang380-import/tools/regression/geom_raid3/test-12.t projects/clang380-import/tools/regression/geom_raid3/test-2.t projects/clang380-import/tools/regression/geom_raid3/test-3.t projects/clang380-import/tools/regression/geom_raid3/test-4.t projects/clang380-import/tools/regression/geom_raid3/test-5.t projects/clang380-import/tools/regression/geom_raid3/test-6.t projects/clang380-import/tools/regression/geom_raid3/test-7.t projects/clang380-import/tools/regression/geom_raid3/test-8.t projects/clang380-import/tools/regression/geom_raid3/test-9.t projects/clang380-import/tools/regression/geom_shsec/conf.sh projects/clang380-import/tools/regression/geom_shsec/test-1.t projects/clang380-import/tools/regression/geom_shsec/test-2.t projects/clang380-import/tools/regression/geom_stripe/conf.sh projects/clang380-import/tools/regression/geom_stripe/test-1.t projects/clang380-import/tools/regression/geom_stripe/test-2.t projects/clang380-import/tools/regression/geom_subr.sh projects/clang380-import/tools/regression/geom_uzip/Makefile projects/clang380-import/usr.bin/netstat/mbuf.c projects/clang380-import/usr.sbin/bhyve/pci_virtio_net.c projects/clang380-import/usr.sbin/bsdconfig/share/dialog.subr projects/clang380-import/usr.sbin/ntp/scripts/mkver Directory Properties: projects/clang380-import/ (props changed) projects/clang380-import/gnu/lib/ (props changed) projects/clang380-import/include/ (props changed) projects/clang380-import/lib/libc/ (props changed) projects/clang380-import/share/ (props changed) projects/clang380-import/share/man/man4/ (props changed) projects/clang380-import/sys/ (props changed) projects/clang380-import/sys/boot/ (props changed) projects/clang380-import/sys/boot/powerpc/boot1.chrp/ (props changed) projects/clang380-import/sys/cddl/contrib/opensolaris/ (props changed) projects/clang380-import/sys/contrib/ipfilter/ (props changed) projects/clang380-import/usr.sbin/bhyve/ (props changed) Modified: projects/clang380-import/Makefile.inc1 ============================================================================== --- projects/clang380-import/Makefile.inc1 Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/Makefile.inc1 Mon Jan 11 19:36:44 2016 (r293687) @@ -570,9 +570,8 @@ _worldtmp: .PHONY .else rm -rf ${WORLDTMP}/legacy/usr/include # XXX - These three can depend on any header file. - rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c + rm -f ${OBJTREE}${.CURDIR}/lib/libsysdecode/ioctl.c rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/kdump_subr.c - rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c .endif .for _dir in \ lib usr legacy/bin legacy/usr @@ -1425,11 +1424,13 @@ _vtfontcvt= usr.bin/vtfontcvt _sed= usr.bin/sed .endif -.if ${BOOTSTRAPPING} < 1000002 +.if ${BOOTSTRAPPING} < 1000033 _libopenbsd= lib/libopenbsd _m4= usr.bin/m4 +_lex= usr.bin/lex ${_bt}-usr.bin/m4: ${_bt}-lib/libopenbsd +${_bt}-usr.bin/lex: ${_bt}-usr.bin/m4 .endif .if ${BOOTSTRAPPING} < 1000026 @@ -1443,12 +1444,6 @@ ${_bt}-usr.sbin/nmtree: ${_bt}-lib/libne _cat= bin/cat .endif -.if ${BOOTSTRAPPING} < 1000033 -_lex= usr.bin/lex - -${_bt}-usr.bin/lex: ${_bt}-usr.bin/m4 -.endif - # r277259 crunchide: Correct 64-bit section header offset # r281674 crunchide: always include both 32- and 64-bit ELF support # r285986 crunchen: use STRIPBIN rather than STRIP Modified: projects/clang380-import/bin/sh/eval.c ============================================================================== --- projects/clang380-import/bin/sh/eval.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/bin/sh/eval.c Mon Jan 11 19:36:44 2016 (r293687) @@ -1039,12 +1039,12 @@ evalcommand(union node *cmd, int flags, reffunc(cmdentry.u.func); savehandler = handler; if (setjmp(jmploc.loc)) { - freeparam(&shellparam); - shellparam = saveparam; popredir(); unreffunc(cmdentry.u.func); poplocalvars(); localvars = savelocalvars; + freeparam(&shellparam); + shellparam = saveparam; funcnest--; handler = savehandler; longjmp(handler->loc, 1); Modified: projects/clang380-import/bin/sh/tests/builtins/Makefile ============================================================================== --- projects/clang380-import/bin/sh/tests/builtins/Makefile Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/bin/sh/tests/builtins/Makefile Mon Jan 11 19:36:44 2016 (r293687) @@ -111,6 +111,7 @@ FILES+= local1.0 FILES+= local2.0 FILES+= local3.0 FILES+= local4.0 +FILES+= local5.0 .if ${MK_NLS} != "no" FILES+= locale1.0 .endif Copied: projects/clang380-import/bin/sh/tests/builtins/local5.0 (from r293685, head/bin/sh/tests/builtins/local5.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang380-import/bin/sh/tests/builtins/local5.0 Mon Jan 11 19:36:44 2016 (r293687, copy of r293685, head/bin/sh/tests/builtins/local5.0) @@ -0,0 +1,15 @@ +# $FreeBSD$ + +f() { + local PATH IFS elem + IFS=: + for elem in ''$PATH''; do + PATH=/var/empty/$elem:$PATH + done + ls -d / >/dev/null +} + +p1=$(command -v ls) +f +p2=$(command -v ls) +[ "$p1" = "$p2" ] Modified: projects/clang380-import/bin/sh/var.c ============================================================================== --- projects/clang380-import/bin/sh/var.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/bin/sh/var.c Mon Jan 11 19:36:44 2016 (r293687) @@ -791,6 +791,7 @@ poplocalvars(void) { struct localvar *lvp; struct var *vp; + int islocalevar; INTOFF; while ((lvp = localvars) != NULL) { @@ -803,10 +804,20 @@ poplocalvars(void) } else if ((lvp->flags & (VUNSET|VSTRFIXED)) == VUNSET) { (void)unsetvar(vp->text); } else { + islocalevar = (vp->flags | lvp->flags) & VEXPORT && + localevar(lvp->text); if ((vp->flags & VTEXTFIXED) == 0) ckfree(vp->text); vp->flags = lvp->flags; vp->text = lvp->text; + if (vp->func) + (*vp->func)(vp->text + vp->name_len + 1); + if (islocalevar) { + change_env(vp->text, vp->flags & VEXPORT && + (vp->flags & VUNSET) == 0); + setlocale(LC_ALL, ""); + updatecharset(); + } } ckfree(lvp); } Modified: projects/clang380-import/contrib/hyperv/tools/hv_kvp_daemon.c ============================================================================== --- projects/clang380-import/contrib/hyperv/tools/hv_kvp_daemon.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/contrib/hyperv/tools/hv_kvp_daemon.c Mon Jan 11 19:36:44 2016 (r293687) @@ -1437,7 +1437,7 @@ main(int argc, char *argv[]) for (;;) { - r = poll (hv_kvp_poll_fd, 1, 100); + r = poll (hv_kvp_poll_fd, 1, INFTIM); KVP_LOG(LOG_DEBUG, "poll returned r = %d, revent = 0x%x\n", r, hv_kvp_poll_fd[0].revents); Modified: projects/clang380-import/gnu/lib/libgcc/Makefile ============================================================================== --- projects/clang380-import/gnu/lib/libgcc/Makefile Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/gnu/lib/libgcc/Makefile Mon Jan 11 19:36:44 2016 (r293687) @@ -2,6 +2,9 @@ GCCDIR= ${.CURDIR}/../../../contrib/gcc GCCLIB= ${.CURDIR}/../../../contrib/gcclibs +COMPILERRTDIR= ${.CURDIR}/../../../contrib/compiler-rt +UNWINDINCDIR= ${.CURDIR}/../../../contrib/llvm/projects/libunwind/include +UNWINDSRCDIR= ${.CURDIR}/../../../contrib/llvm/projects/libunwind/src SHLIB_NAME= libgcc_s.so.1 SHLIBDIR?= /lib @@ -67,8 +70,37 @@ LIB2ADD = $(LIB2FUNCS_EXTRA) LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA) # Additional sources to handle exceptions; overridden by targets as needed. +.if ${MK_LLVM_LIBUNWIND} != "no" + +.PATH: ${COMPILERRTDIR}/lib/builtins +.PATH: ${UNWINDSRCDIR} +LIB2ADDEH = gcc_personality_v0.c \ + int_util.c \ + Unwind-EHABI.cpp \ + Unwind-sjlj.c \ + UnwindLevel1-gcc-ext.c \ + UnwindLevel1.c \ + UnwindRegistersRestore.S \ + UnwindRegistersSave.S \ + libunwind.cpp + +CFLAGS+= -I${UNWINDINCDIR} -I${.CURDIR} +.if empty(CXXFLAGS:M-std=*) +CXXFLAGS+= -std=c++11 +.endif +CXXFLAGS+= -fno-rtti + +.else # MK_LLVM_LIBUNWIND + +.if ${TARGET_CPUARCH} == "arm" +LIB2ADDEH = unwind-arm.c libunwind.S pr-support.c unwind-c.c +.else LIB2ADDEH = unwind-dw2.c unwind-dw2-fde-glibc.c unwind-sjlj.c gthr-gnat.c \ unwind-c.c +.endif + +.endif # MK_LLVM_LIBUNWIND + LIB2ADDEHSTATIC = $(LIB2ADDEH) LIB2ADDEHSHARED = $(LIB2ADDEH) @@ -116,7 +148,6 @@ CFLAGS.clang+= -fheinous-gnu-extensions LIB1ASMSRC = lib1funcs.asm LIB1ASMFUNCS = _dvmd_tls _bb_init_func -LIB2ADDEH = unwind-arm.c libunwind.S pr-support.c unwind-c.c # Some compilers generate __aeabi_ functions libgcc_s is missing LIBADD+= compiler_rt .endif @@ -160,7 +191,10 @@ LIB2_DIVMOD_FUNCS:= ${LIB2_DIVMOD_FUNCS: .endfor .endif -COMMONHDRS= tm.h tconfig.h options.h unwind.h gthr-default.h +COMMONHDRS= tm.h tconfig.h options.h gthr-default.h +.if ${MK_LLVM_LIBUNWIND} == no +COMMONHDRS+= unwind.h +.endif #----------------------------------------------------------------------- # @@ -170,6 +204,9 @@ HIDE = -fvisibility=hidden -DHIDE_EXPOR CC_T = ${CC} -c ${CFLAGS} ${HIDE} -fPIC CC_P = ${CC} -c ${CFLAGS} ${HIDE} -p -fPIC CC_S = ${CC} -c ${CFLAGS} ${PICFLAG} -DSHARED +CXX_T = ${CXX} -c ${CXXFLAGS} ${HIDE} -fPIC +CXX_P = ${CXX} -c ${CXXFLAGS} ${HIDE} -p -fPIC +CXX_S = ${CXX} -c ${CXXFLAGS} ${PICFLAG} -DSHARED #----------------------------------------------------------------------- # @@ -284,16 +321,26 @@ EH_OBJS_S = ${LIB2ADDEHSHARED:R:S/$/.So/ EH_CFLAGS = -fexceptions -D__GLIBC__=3 -DElfW=__ElfN SOBJS += ${EH_OBJS_S} -.for _src in ${LIB2ADDEHSTATIC} +.for _src in ${LIB2ADDEHSTATIC:M*.c} ${_src:R:S/$/.o/}: ${_src} ${COMMONHDRS} ${CC_T} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} ${_src:R:S/$/.po/}: ${_src} ${COMMONHDRS} ${CC_P} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} .endfor -.for _src in ${LIB2ADDEHSHARED} +.for _src in ${LIB2ADDEHSTATIC:M*.cpp} +${_src:R:S/$/.o/}: ${_src} ${COMMONHDRS} + ${CXX_T} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} +${_src:R:S/$/.po/}: ${_src} ${COMMONHDRS} + ${CXX_P} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} +.endfor +.for _src in ${LIB2ADDEHSHARED:M*.c} ${_src:R:S/$/.So/}: ${_src} ${COMMONHDRS} ${CC_S} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} .endfor +.for _src in ${LIB2ADDEHSHARED:M*.cpp} +${_src:R:S/$/.So/}: ${_src} ${COMMONHDRS} + ${CXX_S} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} +.endfor #----------------------------------------------------------------------- Modified: projects/clang380-import/include/limits.h ============================================================================== --- projects/clang380-import/include/limits.h Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/include/limits.h Mon Jan 11 19:36:44 2016 (r293687) @@ -59,10 +59,12 @@ #define _POSIX_TZNAME_MAX 3 #endif +#if __POSIX_VISIBLE >= 200112 #define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */ #define BC_DIM_MAX 2048 /* max array elements in bc(1) */ #define BC_SCALE_MAX 99 /* max scale value in bc(1) */ #define BC_STRING_MAX 1000 /* max const string length in bc(1) */ +#define CHARCLASS_NAME_MAX 14 /* max character class name size */ #define COLL_WEIGHTS_MAX 10 /* max weights for order keyword */ #define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */ #define LINE_MAX 2048 /* max bytes in an input line */ @@ -72,11 +74,14 @@ #define _POSIX2_BC_DIM_MAX 2048 #define _POSIX2_BC_SCALE_MAX 99 #define _POSIX2_BC_STRING_MAX 1000 +#define _POSIX2_CHARCLASS_NAME_MAX 14 +#define _POSIX2_COLL_WEIGHTS_MAX 2 #define _POSIX2_EQUIV_CLASS_MAX 2 #define _POSIX2_EXPR_NEST_MAX 32 #define _POSIX2_LINE_MAX 2048 #define _POSIX2_RE_DUP_MAX 255 #endif +#endif #if __POSIX_VISIBLE >= 199309 #define _POSIX_AIO_LISTIO_MAX 2 @@ -110,8 +115,6 @@ #define _POSIX_TRACE_SYS_MAX 8 #define _POSIX_TRACE_USER_EVENT_MAX 32 #define _POSIX_TTY_NAME_MAX 9 -#define _POSIX2_CHARCLASS_NAME_MAX 14 -#define _POSIX2_COLL_WEIGHTS_MAX 2 #define _POSIX_RE_DUP_MAX _POSIX2_RE_DUP_MAX #endif Modified: projects/clang380-import/lib/csu/arm/Makefile ============================================================================== --- projects/clang380-import/lib/csu/arm/Makefile Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/lib/csu/arm/Makefile Mon Jan 11 19:36:44 2016 (r293687) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include +STATIC_CFLAGS+= -mlong-calls FILES= ${OBJS} FILESMODE= ${LIBMODE} @@ -23,14 +24,14 @@ CLEANFILES+= crt1.s gcrt1.s Scrt1.s # directly compiled to .o files. crt1.s: crt1.c - ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c + ${CC} ${CFLAGS} ${STATIC_CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c sed ${SED_FIX_NOTE} ${.TARGET} crt1.o: crt1.s ${CC} ${ACFLAGS} -c -o ${.TARGET} crt1.s gcrt1.s: crt1.c - ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c + ${CC} ${CFLAGS} ${STATIC_CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c sed ${SED_FIX_NOTE} ${.TARGET} gcrt1.o: gcrt1.s Modified: projects/clang380-import/lib/libc/sys/sendfile.2 ============================================================================== --- projects/clang380-import/lib/libc/sys/sendfile.2 Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/lib/libc/sys/sendfile.2 Mon Jan 11 19:36:44 2016 (r293687) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 7, 2010 +.Dd January 7, 2016 .Dt SENDFILE 2 .Os .Sh NAME @@ -46,7 +46,7 @@ The .Fn sendfile system call -sends a regular file specified by descriptor +sends a regular file or shared memory object specified by descriptor .Fa fd out a stream socket specified by descriptor .Fa s . @@ -101,32 +101,55 @@ the system will write the total number o variable pointed to by .Fa sbytes . .Pp -The +The least significant 16 bits of .Fa flags argument is a bitmap of these values: -.Bl -item -offset indent -.It -.Dv SF_NODISKIO . -This flag causes any -.Fn sendfile -call which would block on disk I/O to instead -return -.Er EBUSY . -Busy servers may benefit by transferring requests that would -block to a separate I/O worker thread. -.It -.Dv SF_MNOWAIT . -Do not wait for some kernel resource to become available, -in particular, -.Vt mbuf -and -.Vt sf_buf . -The flag does not make the -.Fn sendfile -syscall truly non-blocking, since other resources are still allocated -in a blocking fashion. -.It -.Dv SF_SYNC . +.Bl -tag -offset indent +.It Dv SF_NODISKIO +This flag causes +.Nm +to return +.Er EBUSY +instead of blocking when a busy page is encountered. +This rare situation can happen if some other process is now working +with the same region of the file. +It is advised to retry the operation after a short period. +.Pp +Note that in older +.Fx +versions the +.Dv SF_NODISKIO +had slightly different notion. +The flag prevented +.Nm +to run I/O operations in case if an invalid (not cached) page is encountered, +thus avoiding blocking on I/O. +Starting with +.Fx 11 +.Nm +sending files off the +.Xr ffs 7 +filesystem doesn't block on I/O +(see +.Sx IMPLEMENTATION NOTES +), so the condition no longer applies. +However, it is safe if an application utilizes +.Dv SF_NODISKIO +and on +.Er EBUSY +performs the same action as it did in +older +.Fx +versions, e.g. +.Xr aio_read 2, +.Xr read 2 +or +.Nm +in a different context. +.It Dv SF_NOCACHE +The data sent to socket will not be cached by the virtual memory system, +and will be freed directly to the pool of free pages. +.It Dv SF_SYNC .Nm sleeps until the network stack no longer references the VM pages of the file, making subsequent modifications to it safe. @@ -134,6 +157,22 @@ Please note that this is not a guarantee been sent. .El .Pp +The most significant 16 bits of +.Fa flags +specify amount of pages that +.Nm +may read ahead when reading the file. +A macro +.Fn SF_FLAGS +is provided to combine readahead amount and flags. +Example shows specifing readahead of 16 pages and +.Dv SF_NOCACHE +flag: +.Pp +.Bd -literal -offset indent -compact + SF_FLAGS(16, SF_NOCACHE) +.Ed +.Pp When using a socket marked for non-blocking I/O, .Fn sendfile may send fewer bytes than requested. @@ -149,6 +188,18 @@ The .Fx implementation of .Fn sendfile +doesn't block on disk I/O when it sends a file off the +.Xr ffs 7 +filesystem. +The syscall returns success before the actual I/O completes, and data +is put into the socket later unattended. +However, the order of data in the socket is preserved, so it is safe +to do further writes to the socket. +.Pp +The +.Fx +implementation of +.Fn sendfile is "zero-copy", meaning that it has been optimized so that copying of the file data is avoided. .Sh TUNING On some architectures, this system call internally uses a special @@ -232,12 +283,10 @@ The argument is not a valid socket descriptor. .It Bq Er EBUSY -Completing the entire transfer would have required disk I/O, so -it was aborted. -Partial data may have been sent. -(This error can only occur when +A busy page was encountered and .Dv SF_NODISKIO -is specified.) +had been specified. +Partial data may have been sent. .It Bq Er EFAULT An invalid address was specified for an argument. .It Bq Er EINTR @@ -310,9 +359,19 @@ first appeared in .Fx 3.0 . This manual page first appeared in .Fx 3.1 . +In +.Fx 10 +support for sending shared memory descriptors had been introduced. +In +.Fx 11 +a non-blocking implementation had been introduced. .Sh AUTHORS -The +The initial implementation of .Fn sendfile system call and this manual page were written by .An David G. Lawrence Aq Mt dg@dglawrence.com . +The +.Fx 11 +implementation was written by +.An Gleb Smirnoff Aq Mt glebius@FreeBSD.org . Modified: projects/clang380-import/lib/libstand/uuid_to_string.c ============================================================================== --- projects/clang380-import/lib/libstand/uuid_to_string.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/lib/libstand/uuid_to_string.c Mon Jan 11 19:36:44 2016 (r293687) @@ -46,7 +46,7 @@ tohex(char **buf, int len, uint32_t val) char *walker = *buf; int i; - for (i = len - 1; i >= 0; i++) { + for (i = len - 1; i >= 0; i--) { walker[i] = hexstr[val & 0xf]; val >>= 4; } @@ -107,5 +107,5 @@ uuid_to_string(const uuid_t *u, char **s tohex(&w, 2, u->node[3]); tohex(&w, 2, u->node[4]); tohex(&w, 2, u->node[5]); - *w++ - '\0'; + *w++ = '\0'; } Modified: projects/clang380-import/release/release.sh ============================================================================== --- projects/clang380-import/release/release.sh Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/release/release.sh Mon Jan 11 19:36:44 2016 (r293687) @@ -275,6 +275,7 @@ extra_chroot_setup() { PBUILD_FLAGS="${PBUILD_FLAGS} OSREL=${REVISION}" chroot ${CHROOTDIR} make -C /usr/ports/textproc/docproj \ ${PBUILD_FLAGS} OPTIONS_UNSET="FOP IGOR" \ + FORCE_PKG_REGISTER=1 \ install clean distclean fi fi Modified: projects/clang380-import/share/man/man4/ismt.4 ============================================================================== --- projects/clang380-import/share/man/man4/ismt.4 Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/share/man/man4/ismt.4 Mon Jan 11 19:36:44 2016 (r293687) @@ -33,7 +33,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 9, 2014 +.Dd January 11, 2016 .Dt ISMT 4 .Os .Sh NAME @@ -54,6 +54,6 @@ in the Intel Atom S1200 and C2000 CPUs. The .Nm driver first appeared in -.Fx 11.0 . +.Fx 10.3 . .Sh AUTHORS .An Jim Harris Aq Mt jimharris@FreeBSD.org Modified: projects/clang380-import/share/man/man5/src.conf.5 ============================================================================== --- projects/clang380-import/share/man/man5/src.conf.5 Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/share/man/man5/src.conf.5 Mon Jan 11 19:36:44 2016 (r293687) @@ -1,7 +1,7 @@ .\" DO NOT EDIT-- this file is automatically generated. .\" from FreeBSD: head/tools/build/options/makeman 292283 2015-12-15 18:42:30Z bdrewery .\" $FreeBSD$ -.Dd December 15, 2015 +.Dd January 9, 2016 .Dt SRC.CONF 5 .Os .Sh NAME @@ -948,9 +948,30 @@ Set to not build the .Nm libthr (1:1 threading) library. +.It Va WITHOUT_LLDB +.\" from FreeBSD: head/tools/build/options/WITHOUT_LLDB 289275 2015-10-14 00:23:31Z emaste +Set to not build the LLDB debugger. +.Pp +It is a default setting on +arm/arm, arm/armeb, arm/armv6, arm/armv6hf, i386/i386, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, pc98/i386, powerpc/powerpc, powerpc/powerpc64 and sparc64/sparc64. .It Va WITH_LLDB .\" from FreeBSD: head/tools/build/options/WITH_LLDB 255722 2013-09-20 01:52:02Z emaste Set to build the LLDB debugger. +.Pp +It is a default setting on +amd64/amd64 and arm64/aarch64. +.It Va WITHOUT_LLVM_LIBUNWIND +.\" from FreeBSD: head/tools/build/options/WITHOUT_LLVM_LIBUNWIND 293450 2016-01-09 00:42:07Z emaste +Set to use GCC's stack unwinder (instead of LLVM's libunwind). +.Pp +It is a default setting on +amd64/amd64, arm/arm, arm/armeb, arm/armv6, arm/armv6hf, i386/i386, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, pc98/i386, powerpc/powerpc, powerpc/powerpc64 and sparc64/sparc64. +.It Va WITH_LLVM_LIBUNWIND +.\" from FreeBSD: head/tools/build/options/WITH_LLVM_LIBUNWIND 293450 2016-01-09 00:42:07Z emaste +Set to use LLVM's libunwind stack unwinder (instead of GCC's unwinder). +.Pp +It is a default setting on +arm64/aarch64. .It Va WITHOUT_LOCALES .\" from FreeBSD: head/tools/build/options/WITHOUT_LOCALES 156932 2006-03-21 07:50:50Z ru Set to not build localization files; see Modified: projects/clang380-import/share/misc/committers-src.dot ============================================================================== --- projects/clang380-import/share/misc/committers-src.dot Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/share/misc/committers-src.dot Mon Jan 11 19:36:44 2016 (r293687) @@ -344,6 +344,7 @@ adrian -> loos adrian -> monthadar adrian -> ray adrian -> rmh +adrian -> sephe ae -> melifaro @@ -404,6 +405,7 @@ das -> rodrigc delphij -> gabor delphij -> rafan +delphij -> sephe des -> anholt des -> hmp Modified: projects/clang380-import/share/mk/src.opts.mk ============================================================================== --- projects/clang380-import/share/mk/src.opts.mk Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/share/mk/src.opts.mk Mon Jan 11 19:36:44 2016 (r293687) @@ -231,9 +231,9 @@ __DEFAULT_NO_OPTIONS+=CLANG CLANG_BOOTST # In-tree binutils/gcc are older versions without modern architecture support. .if ${__T} == "aarch64" || ${__T} == "riscv64" BROKEN_OPTIONS+=BINUTILS BINUTILS_BOOTSTRAP GCC GCC_BOOTSTRAP GDB -__DEFAULT_YES_OPTIONS+=ELFCOPY_AS_OBJCOPY +__DEFAULT_YES_OPTIONS+=ELFCOPY_AS_OBJCOPY LLVM_LIBUNWIND .else -__DEFAULT_NO_OPTIONS+=ELFCOPY_AS_OBJCOPY +__DEFAULT_NO_OPTIONS+=ELFCOPY_AS_OBJCOPY LLVM_LIBUNWIND .endif .if ${__T} == "riscv64" BROKEN_OPTIONS+=PROFILE # "sorry, unimplemented: profiler support for RISC-V" Modified: projects/clang380-import/sys/amd64/amd64/elf_machdep.c ============================================================================== --- projects/clang380-import/sys/amd64/amd64/elf_machdep.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/amd64/amd64/elf_machdep.c Mon Jan 11 19:36:44 2016 (r293687) @@ -80,6 +80,7 @@ struct sysentvec elf64_freebsd_sysvec = .sv_shared_page_len = PAGE_SIZE, .sv_schedtail = NULL, .sv_thread_detach = NULL, + .sv_trap = NULL, }; INIT_SYSENTVEC(elf64_sysvec, &elf64_freebsd_sysvec); Modified: projects/clang380-import/sys/amd64/amd64/trap.c ============================================================================== --- projects/clang380-import/sys/amd64/amd64/trap.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/amd64/amd64/trap.c Mon Jan 11 19:36:44 2016 (r293687) @@ -322,6 +322,13 @@ trap(struct trapframe *frame) break; case T_PAGEFLT: /* page fault */ + /* + * Emulator can take care about this trap? + */ + if (*p->p_sysent->sv_trap != NULL && + (*p->p_sysent->sv_trap)(td) == 0) + goto userout; + addr = frame->tf_addr; i = trap_pfault(frame, TRUE); if (i == -1) Modified: projects/clang380-import/sys/amd64/linux/linux_sysvec.c ============================================================================== --- projects/clang380-import/sys/amd64/linux/linux_sysvec.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/amd64/linux/linux_sysvec.c Mon Jan 11 19:36:44 2016 (r293687) @@ -129,6 +129,7 @@ static void linux_set_syscall_retval(str static int linux_fetch_syscall_args(struct thread *td, struct syscall_args *sa); static void linux_exec_setregs(struct thread *td, struct image_params *imgp, u_long stack); +static int linux_vsyscall(struct thread *td); /* * Linux syscalls return negative errno's, we do positive and map them @@ -746,6 +747,53 @@ exec_linux_imgact_try(struct image_param return(error); } +#define LINUX_VSYSCALL_START (-10UL << 20) +#define LINUX_VSYSCALL_SZ 1024 + +const unsigned long linux_vsyscall_vector[] = { + LINUX_SYS_gettimeofday, + LINUX_SYS_linux_time, + /* getcpu not implemented */ +}; + +static int +linux_vsyscall(struct thread *td) +{ + struct trapframe *frame; + uint64_t retqaddr; + int code, traced; + int error; + + frame = td->td_frame; + + /* Check %rip for vsyscall area */ + if (__predict_true(frame->tf_rip < LINUX_VSYSCALL_START)) + return (EINVAL); + if ((frame->tf_rip & (LINUX_VSYSCALL_SZ - 1)) != 0) + return (EINVAL); + code = (frame->tf_rip - LINUX_VSYSCALL_START) / LINUX_VSYSCALL_SZ; + if (code >= nitems(linux_vsyscall_vector)) + return (EINVAL); + + /* + * vsyscall called as callq *(%rax), so we must + * use return address from %rsp and also fixup %rsp + */ + error = copyin((void *)frame->tf_rsp, &retqaddr, sizeof(retqaddr)); + if (error) + return (error); + + frame->tf_rip = retqaddr; + frame->tf_rax = linux_vsyscall_vector[code]; + frame->tf_rsp += 8; + + traced = (frame->tf_flags & PSL_T); + + amd64_syscall(td, traced); + + return (0); +} + struct sysentvec elf_linux_sysvec = { .sv_size = LINUX_SYS_MAXSYSCALL, .sv_table = linux_sysent, @@ -778,7 +826,8 @@ struct sysentvec elf_linux_sysvec = { .sv_shared_page_base = SHAREDPAGE, .sv_shared_page_len = PAGE_SIZE, .sv_schedtail = linux_schedtail, - .sv_thread_detach = linux_thread_detach + .sv_thread_detach = linux_thread_detach, + .sv_trap = linux_vsyscall, }; static void Modified: projects/clang380-import/sys/amd64/linux32/linux32_sysvec.c ============================================================================== --- projects/clang380-import/sys/amd64/linux32/linux32_sysvec.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/amd64/linux32/linux32_sysvec.c Mon Jan 11 19:36:44 2016 (r293687) @@ -1040,6 +1040,7 @@ struct sysentvec elf_linux_sysvec = { .sv_shared_page_len = PAGE_SIZE, .sv_schedtail = linux_schedtail, .sv_thread_detach = linux_thread_detach, + .sv_trap = NULL, }; static void Modified: projects/clang380-import/sys/arm/arm/elf_machdep.c ============================================================================== --- projects/clang380-import/sys/arm/arm/elf_machdep.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/arm/arm/elf_machdep.c Mon Jan 11 19:36:44 2016 (r293687) @@ -86,6 +86,7 @@ struct sysentvec elf32_freebsd_sysvec = .sv_shared_page_len = PAGE_SIZE, .sv_schedtail = NULL, .sv_thread_detach = NULL, + .sv_trap = NULL, }; INIT_SYSENTVEC(elf32_sysvec, &elf32_freebsd_sysvec); Modified: projects/clang380-import/sys/arm64/arm64/elf_machdep.c ============================================================================== --- projects/clang380-import/sys/arm64/arm64/elf_machdep.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/arm64/arm64/elf_machdep.c Mon Jan 11 19:36:44 2016 (r293687) @@ -87,6 +87,8 @@ static struct sysentvec elf64_freebsd_sy .sv_shared_page_base = SHAREDPAGE, .sv_shared_page_len = PAGE_SIZE, .sv_schedtail = NULL, + .sv_thread_detach = NULL, + .sv_trap = NULL, }; INIT_SYSENTVEC(elf64_sysvec, &elf64_freebsd_sysvec); Modified: projects/clang380-import/sys/boot/common/ufsread.c ============================================================================== --- projects/clang380-import/sys/boot/common/ufsread.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/boot/common/ufsread.c Mon Jan 11 19:36:44 2016 (r293687) @@ -211,7 +211,6 @@ fsread(ufs_ino_t inode, void *buf, size_ break; } if (sblock_try[n] == -1) { - printf("Not ufs\n"); return -1; } dsk_meta++; Modified: projects/clang380-import/sys/boot/efi/boot1/Makefile ============================================================================== --- projects/clang380-import/sys/boot/efi/boot1/Makefile Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/boot/efi/boot1/Makefile Mon Jan 11 19:36:44 2016 (r293687) @@ -41,14 +41,13 @@ CFLAGS+= -fPIC LDFLAGS+= -Wl,-znocombreloc .endif -.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "i386" # # Add libstand for the runtime functions used by the compiler - for example # __aeabi_* (arm) or __divdi3 (i386). +# as well as required string and memory functions for all platforms. # DPADD+= ${LIBSTAND} LDADD+= -lstand -.endif DPADD+= ${LDSCRIPT} Modified: projects/clang380-import/sys/boot/efi/boot1/boot1.c ============================================================================== --- projects/clang380-import/sys/boot/efi/boot1/boot1.c Mon Jan 11 19:32:07 2016 (r293686) +++ projects/clang380-import/sys/boot/efi/boot1/boot1.c Mon Jan 11 19:36:44 2016 (r293687) @@ -24,6 +24,7 @@ __FBSDID("$FreeBSD$"); #include <sys/dirent.h> #include <machine/elf.h> #include <machine/stdarg.h> +#include <stand.h> #include <efi.h> #include <eficonsctl.h> @@ -33,28 +34,8 @@ __FBSDID("$FreeBSD$"); #define BSIZEMAX 16384 -typedef int putc_func_t(char c, void *arg); - -struct sp_data { - char *sp_buf; - u_int sp_len; - u_int sp_size; -}; - -static const char digits[] = "0123456789abcdef"; - -static void panic(const char *fmt, ...) __dead2; -static int printf(const char *fmt, ...); -static int putchar(char c, void *arg); -static int vprintf(const char *fmt, va_list ap); -static int vsnprintf(char *str, size_t sz, const char *fmt, va_list ap); - -static int __printf(const char *fmt, putc_func_t *putc, void *arg, va_list ap); -static int __putc(char c, void *arg); -static int __puts(const char *s, putc_func_t *putc, void *arg); -static int __sputc(char c, void *arg); -static char *__uitoa(char *buf, u_int val, int base); -static char *__ultoa(char *buf, u_long val, int base); +void panic(const char *fmt, ...) __dead2; +void putchar(int c); static int domount(EFI_DEVICE_PATH *device, EFI_BLOCK_IO *blkio, int quiet); static void load(const char *fname); @@ -62,39 +43,6 @@ static void load(const char *fname); static EFI_SYSTEM_TABLE *systab; static EFI_HANDLE *image; -static void -bcopy(const void *src, void *dst, size_t len) -{ - const char *s = src; - char *d = dst; - - while (len-- != 0) - *d++ = *s++; -} - -static void -memcpy(void *dst, const void *src, size_t len) -{ - bcopy(src, dst, len); -} - -static void -bzero(void *b, size_t len) -{ - char *p = b; - - while (len-- != 0) - *p++ = 0; -} - -static int -strcmp(const char *s1, const char *s2) -{ - for (; *s1 == *s2 && *s1; s1++, s2++) - ; - return ((u_char)*s1 - (u_char)*s2); -} - static EFI_GUID BlockIoProtocolGUID = BLOCK_IO_PROTOCOL; static EFI_GUID DevicePathGUID = DEVICE_PATH_PROTOCOL; static EFI_GUID LoadedImageGUID = LOADED_IMAGE_PROTOCOL; @@ -250,7 +198,6 @@ fsstat(ufs_ino_t inode) break; } if (sblock_try[n] == -1) { - printf("Not ufs\n"); return -1; } dsk_meta++; @@ -346,38 +293,22 @@ load(const char *fname) EFI_ERROR_CODE(status)); } -static void +void panic(const char *fmt, ...) { - char buf[128]; va_list ap; + printf("panic: "); va_start(ap, fmt); - vsnprintf(buf, sizeof buf, fmt, ap); - printf("panic: %s\n", buf); + vprintf(fmt, ap); va_end(ap); + printf("\n"); while (1) {} } -static int -printf(const char *fmt, ...) -{ - va_list ap; - int ret; - - /* Don't annoy the user as we probe for partitions */ - if (strcmp(fmt,"Not ufs\n") == 0) - return 0; - - va_start(ap, fmt); - ret = vprintf(fmt, ap); - va_end(ap); - return (ret); -} - -static int -putchar(char c, void *arg) +void +putchar(int c) { CHAR16 buf[2]; @@ -389,187 +320,4 @@ putchar(char c, void *arg) buf[0] = c; buf[1] = 0; systab->ConOut->OutputString(systab->ConOut, buf); - return (1); -} - -static int -vprintf(const char *fmt, va_list ap) -{ - int ret; - - ret = __printf(fmt, putchar, 0, ap); - return (ret); -} - -static int -vsnprintf(char *str, size_t sz, const char *fmt, va_list ap) -{ - struct sp_data sp; - int ret; - - sp.sp_buf = str; - sp.sp_len = 0; - sp.sp_size = sz; - ret = __printf(fmt, __sputc, &sp, ap); - return (ret); -} - -static int -__printf(const char *fmt, putc_func_t *putc, void *arg, va_list ap) -{ - char buf[(sizeof(long) * 8) + 1]; - char *nbuf; - u_long ul; - u_int ui; - int lflag; - int sflag; - char *s; - int pad; - int ret; - int c; - - nbuf = &buf[sizeof buf - 1]; - ret = 0; - while ((c = *fmt++) != 0) { - if (c != '%') { - ret += putc(c, arg); - continue; - } - lflag = 0; - sflag = 0; - pad = 0; -reswitch: c = *fmt++; - switch (c) { - case '#': - sflag = 1; - goto reswitch; - case '%': - ret += putc('%', arg); - break; - case 'c': - c = va_arg(ap, int); - ret += putc(c, arg); - break; - case 'd': - if (lflag == 0) { - ui = (u_int)va_arg(ap, int); - if (ui < (int)ui) { - ui = -ui; - ret += putc('-', arg); - } - s = __uitoa(nbuf, ui, 10); - } else { - ul = (u_long)va_arg(ap, long); - if (ul < (long)ul) { - ul = -ul; - ret += putc('-', arg); - } - s = __ultoa(nbuf, ul, 10); - } - ret += __puts(s, putc, arg); - break; - case 'l': - lflag = 1; - goto reswitch; - case 'o': - if (lflag == 0) { - ui = (u_int)va_arg(ap, u_int); - s = __uitoa(nbuf, ui, 8); - } else { - ul = (u_long)va_arg(ap, u_long); - s = __ultoa(nbuf, ul, 8); - } - ret += __puts(s, putc, arg); - break; - case 'p': - ul = (u_long)va_arg(ap, void *); - s = __ultoa(nbuf, ul, 16); - ret += __puts("0x", putc, arg); - ret += __puts(s, putc, arg); - break; - case 's': - s = va_arg(ap, char *); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601111936.u0BJaicT070260>