svn commit: r275912 - in projects/clang350-import: . bin/sh bin/sh/tests/execution cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/lib/libdtrace/common cddl/contrib/opensolaris/lib/libzfs...
Dimitry Andric
dim at FreeBSD.org
Thu Dec 18 18:44:27 UTC 2014
Author: dim
Date: Thu Dec 18 18:44:22 2014
New Revision: 275912
URL: https://svnweb.freebsd.org/changeset/base/275912
Log:
Merge ^/head r275759 through r275911.
Added:
projects/clang350-import/bin/sh/tests/execution/set-x4.0
- copied unchanged from r275905, head/bin/sh/tests/execution/set-x4.0
projects/clang350-import/contrib/elftoolchain/readelf/
- copied from r275905, head/contrib/elftoolchain/readelf/
projects/clang350-import/contrib/llvm/patches/patch-r275759-clang-r221170-ppc-vaarg.diff
- copied unchanged from r275905, head/contrib/llvm/patches/patch-r275759-clang-r221170-ppc-vaarg.diff
projects/clang350-import/sys/boot/fdt/dts/mips/beripad-sockit.dts
- copied unchanged from r275905, head/sys/boot/fdt/dts/mips/beripad-sockit.dts
projects/clang350-import/sys/dev/ofw/ofw_cpu.c
- copied unchanged from r275905, head/sys/dev/ofw/ofw_cpu.c
projects/clang350-import/sys/kern/kern_procctl.c
- copied unchanged from r275905, head/sys/kern/kern_procctl.c
projects/clang350-import/sys/mips/conf/BERI_SOCKIT
- copied unchanged from r275905, head/sys/mips/conf/BERI_SOCKIT
projects/clang350-import/tools/tools/nanobsd/defaults.sh
- copied unchanged from r275905, head/tools/tools/nanobsd/defaults.sh
projects/clang350-import/usr.sbin/vigr/
- copied from r275905, head/usr.sbin/vigr/
Deleted:
projects/clang350-import/sys/powerpc/ofw/ofw_cpu.c
Modified:
projects/clang350-import/Makefile.inc1
projects/clang350-import/UPDATING
projects/clang350-import/bin/sh/output.c
projects/clang350-import/bin/sh/tests/execution/Makefile
projects/clang350-import/cddl/contrib/opensolaris/cmd/zdb/zdb.c
projects/clang350-import/cddl/contrib/opensolaris/lib/libdtrace/common/drti.c
projects/clang350-import/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_iter.c
projects/clang350-import/contrib/binutils/gas/config/tc-ppc.c
projects/clang350-import/contrib/elftoolchain/elfcopy/main.c
projects/clang350-import/contrib/elftoolchain/elfcopy/segments.c
projects/clang350-import/contrib/unbound/iterator/iterator.c
projects/clang350-import/contrib/unbound/iterator/iterator.h
projects/clang350-import/etc/Makefile
projects/clang350-import/etc/devd/usb.conf
projects/clang350-import/etc/mtree/BSD.include.dist
projects/clang350-import/etc/mtree/BSD.tests.dist
projects/clang350-import/etc/mtree/BSD.usr.dist
projects/clang350-import/gnu/usr.bin/cc/cc1plus/Makefile
projects/clang350-import/gnu/usr.bin/groff/Makefile
projects/clang350-import/gnu/usr.bin/groff/src/Makefile
projects/clang350-import/gnu/usr.bin/groff/src/devices/Makefile
projects/clang350-import/gnu/usr.bin/groff/src/libs/Makefile
projects/clang350-import/gnu/usr.bin/groff/src/preproc/Makefile
projects/clang350-import/gnu/usr.bin/groff/src/roff/Makefile
projects/clang350-import/gnu/usr.bin/groff/src/utils/Makefile
projects/clang350-import/lib/libc/iconv/iconv.3
projects/clang350-import/lib/libc/net/sctp_sys_calls.c
projects/clang350-import/lib/libc/sys/kqueue.2
projects/clang350-import/lib/libc/sys/procctl.2
projects/clang350-import/lib/msun/ld128/k_expl.h
projects/clang350-import/lib/msun/ld80/k_expl.h
projects/clang350-import/lib/msun/src/catrig.c
projects/clang350-import/lib/msun/src/catrigf.c
projects/clang350-import/lib/msun/src/k_exp.c
projects/clang350-import/lib/msun/src/k_expf.c
projects/clang350-import/lib/msun/src/math_private.h
projects/clang350-import/lib/msun/src/s_ccosh.c
projects/clang350-import/lib/msun/src/s_ccoshf.c
projects/clang350-import/lib/msun/src/s_cexp.c
projects/clang350-import/lib/msun/src/s_cexpf.c
projects/clang350-import/lib/msun/src/s_conj.c
projects/clang350-import/lib/msun/src/s_conjf.c
projects/clang350-import/lib/msun/src/s_conjl.c
projects/clang350-import/lib/msun/src/s_cproj.c
projects/clang350-import/lib/msun/src/s_cprojf.c
projects/clang350-import/lib/msun/src/s_cprojl.c
projects/clang350-import/lib/msun/src/s_csinh.c
projects/clang350-import/lib/msun/src/s_csinhf.c
projects/clang350-import/lib/msun/src/s_csqrt.c
projects/clang350-import/lib/msun/src/s_csqrtf.c
projects/clang350-import/lib/msun/src/s_csqrtl.c
projects/clang350-import/lib/msun/src/s_ctanh.c
projects/clang350-import/lib/msun/src/s_ctanhf.c
projects/clang350-import/sbin/ffsinfo/ffsinfo.c
projects/clang350-import/sbin/ifconfig/Makefile
projects/clang350-import/sbin/ifconfig/ifconfig.8
projects/clang350-import/sbin/ifconfig/ifvxlan.c
projects/clang350-import/sbin/ping6/ping6.c
projects/clang350-import/sbin/shutdown/shutdown.8
projects/clang350-import/sbin/shutdown/shutdown.c
projects/clang350-import/share/man/man4/vxlan.4
projects/clang350-import/share/man/man7/build.7
projects/clang350-import/share/man/man9/rmlock.9
projects/clang350-import/share/man/man9/sx.9
projects/clang350-import/sys/amd64/amd64/exception.S
projects/clang350-import/sys/amd64/vmm/io/vatpic.c
projects/clang350-import/sys/arm/mv/mv_common.c
projects/clang350-import/sys/arm/mv/mv_pci.c
projects/clang350-import/sys/boot/fdt/dts/arm/socfpga-sockit-beri.dts
projects/clang350-import/sys/boot/fdt/dts/mips/beri-netfpga.dts
projects/clang350-import/sys/boot/fdt/dts/mips/beri-sim.dts
projects/clang350-import/sys/boot/fdt/dts/mips/beripad-de4.dts
projects/clang350-import/sys/cam/ctl/ctl.c
projects/clang350-import/sys/cam/ctl/ctl.h
projects/clang350-import/sys/cam/ctl/ctl_backend.h
projects/clang350-import/sys/cam/ctl/ctl_backend_block.c
projects/clang350-import/sys/cam/ctl/ctl_cmd_table.c
projects/clang350-import/sys/cam/ctl/ctl_frontend_iscsi.c
projects/clang350-import/sys/cam/ctl/ctl_frontend_iscsi.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/uberblock.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_leaf.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
projects/clang350-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
projects/clang350-import/sys/compat/freebsd32/freebsd32.h
projects/clang350-import/sys/compat/freebsd32/freebsd32_misc.c
projects/clang350-import/sys/compat/linprocfs/linprocfs.c
projects/clang350-import/sys/compat/svr4/svr4_socket.c
projects/clang350-import/sys/conf/files
projects/clang350-import/sys/conf/files.powerpc
projects/clang350-import/sys/dev/cxgbe/tom/t4_ddp.c
projects/clang350-import/sys/dev/drm/drm_sysctl.c
projects/clang350-import/sys/dev/drm2/drm_sysctl.c
projects/clang350-import/sys/dev/fdt/fdt_common.c
projects/clang350-import/sys/dev/fdt/fdt_common.h
projects/clang350-import/sys/dev/iscsi/iscsi.c
projects/clang350-import/sys/dev/iscsi/iscsi_proto.h
projects/clang350-import/sys/dev/malo/if_malo_pci.c
projects/clang350-import/sys/dev/mmc/mmc.c
projects/clang350-import/sys/dev/mwl/if_mwl_pci.c
projects/clang350-import/sys/dev/sis/if_sis.c
projects/clang350-import/sys/dev/usb/net/if_urndis.c
projects/clang350-import/sys/dev/usb/serial/umodem.c
projects/clang350-import/sys/fs/ext2fs/ext2_alloc.c
projects/clang350-import/sys/fs/ext2fs/ext2_lookup.c
projects/clang350-import/sys/fs/ext2fs/ext2_vnops.c
projects/clang350-import/sys/fs/fuse/fuse_vnops.c
projects/clang350-import/sys/fs/msdosfs/msdosfs_lookup.c
projects/clang350-import/sys/fs/nandfs/nandfs_vnops.c
projects/clang350-import/sys/fs/nfsclient/nfs_clvnops.c
projects/clang350-import/sys/fs/nfsserver/nfs_nfsdserv.c
projects/clang350-import/sys/fs/tmpfs/tmpfs_vnops.c
projects/clang350-import/sys/fs/unionfs/union_subr.c
projects/clang350-import/sys/fs/unionfs/union_vnops.c
projects/clang350-import/sys/kern/init_main.c
projects/clang350-import/sys/kern/kern_conf.c
projects/clang350-import/sys/kern/kern_exit.c
projects/clang350-import/sys/kern/kern_fork.c
projects/clang350-import/sys/kern/kern_thread.c
projects/clang350-import/sys/kern/sys_process.c
projects/clang350-import/sys/kern/uipc_socket.c
projects/clang350-import/sys/kern/uipc_usrreq.c
projects/clang350-import/sys/kern/vfs_syscalls.c
projects/clang350-import/sys/kern/vfs_vnops.c
projects/clang350-import/sys/mips/beri/beri_machdep.c
projects/clang350-import/sys/mips/beri/files.beri
projects/clang350-import/sys/net80211/ieee80211_scan_sta.c
projects/clang350-import/sys/netinet/sctp_pcb.c
projects/clang350-import/sys/netinet6/sctp6_usrreq.c
projects/clang350-import/sys/nfsclient/nfs_vnops.c
projects/clang350-import/sys/nfsserver/nfs_serv.c
projects/clang350-import/sys/security/mac_lomac/mac_lomac.c
projects/clang350-import/sys/sys/elf_common.h
projects/clang350-import/sys/sys/proc.h
projects/clang350-import/sys/sys/procctl.h
projects/clang350-import/sys/ufs/ffs/ffs_alloc.c
projects/clang350-import/sys/ufs/ffs/ffs_snapshot.c
projects/clang350-import/sys/ufs/ufs/ufs_lookup.c
projects/clang350-import/tools/build/mk/OptionalObsoleteFiles.inc
projects/clang350-import/tools/tools/nanobsd/nanobsd.sh
projects/clang350-import/usr.bin/id/id.c
projects/clang350-import/usr.bin/killall/killall.c
projects/clang350-import/usr.bin/sed/compile.c
projects/clang350-import/usr.sbin/Makefile
projects/clang350-import/usr.sbin/bsdinstall/distextract/Makefile
projects/clang350-import/usr.sbin/bsdinstall/distextract/distextract.c
projects/clang350-import/usr.sbin/chkgrp/chkgrp.c
projects/clang350-import/usr.sbin/ctladm/ctladm.8
projects/clang350-import/usr.sbin/ctld/discovery.c
projects/clang350-import/usr.sbin/ctld/login.c
projects/clang350-import/usr.sbin/iscsid/discovery.c
projects/clang350-import/usr.sbin/iscsid/login.c
projects/clang350-import/usr.sbin/jail/command.c
projects/clang350-import/usr.sbin/kldxref/Makefile
projects/clang350-import/usr.sbin/lpr/lpr/lpr.c
projects/clang350-import/usr.sbin/pw/tests/pw_useradd.sh
projects/clang350-import/usr.sbin/pw/tests/pw_usermod.sh
Directory Properties:
projects/clang350-import/ (props changed)
projects/clang350-import/cddl/ (props changed)
projects/clang350-import/cddl/contrib/opensolaris/ (props changed)
projects/clang350-import/cddl/contrib/opensolaris/lib/libzfs/ (props changed)
projects/clang350-import/contrib/binutils/ (props changed)
projects/clang350-import/contrib/llvm/ (props changed)
projects/clang350-import/contrib/llvm/tools/clang/ (props changed)
projects/clang350-import/contrib/unbound/ (props changed)
projects/clang350-import/etc/ (props changed)
projects/clang350-import/lib/libc/ (props changed)
projects/clang350-import/sbin/ (props changed)
projects/clang350-import/share/ (props changed)
projects/clang350-import/share/man/man4/ (props changed)
projects/clang350-import/sys/ (props changed)
projects/clang350-import/sys/amd64/vmm/ (props changed)
projects/clang350-import/sys/boot/ (props changed)
projects/clang350-import/sys/cddl/contrib/opensolaris/ (props changed)
projects/clang350-import/sys/conf/ (props changed)
projects/clang350-import/usr.sbin/jail/ (props changed)
Modified: projects/clang350-import/Makefile.inc1
==============================================================================
--- projects/clang350-import/Makefile.inc1 Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/Makefile.inc1 Thu Dec 18 18:44:22 2014 (r275912)
@@ -113,6 +113,8 @@ _REDUNDENT_LIB_DIRS+= ${LOCAL_LIB_DIR
.for _DIR in ${LOCAL_LIB_DIRS}
.if empty(_REDUNDENT_LIB_DIRS:M${_DIR}) && exists(${.CURDIR}/${_DIR}/Makefile)
SUBDIR+= ${_DIR}
+.else
+.warning ${_DIR} not added to SUBDIR list. See UPDATING 20141121.
.endif
.endfor
.endif
@@ -261,7 +263,8 @@ BMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \
MK_HTML=no MK_INFO=no NO_LINT=yes MK_MAN=no \
-DNO_PIC MK_PROFILE=no -DNO_SHARED \
-DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
- MK_CLANG_FULL=no MK_LLDB=no MK_TESTS=no
+ MK_CLANG_EXTRAS=no MK_CLANG_FULL=no \
+ MK_LLDB=no MK_TESTS=no
# build-tools stage
TMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \
@@ -271,7 +274,9 @@ TMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \
BOOTSTRAPPING=${OSRELDATE} \
SSP_CFLAGS= \
-DNO_LINT \
- -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no MK_CLANG_FULL=no MK_LLDB=no MK_TESTS=no
+ -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
+ MK_CLANG_EXTRAS=no MK_CLANG_FULL=no \
+ MK_LLDB=no MK_TESTS=no
# cross-tools stage
XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \
@@ -524,8 +529,9 @@ _worldtmp:
-p ${WORLDTMP}/usr/lib >/dev/null
.endif
.if ${MK_TESTS} != "no"
+ mkdir -p ${WORLDTMP}${TESTSBASE}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
- -p ${WORLDTMP}/usr >/dev/null
+ -p ${WORLDTMP}${TESTSBASE} >/dev/null
.endif
.for _mtree in ${LOCAL_MTREE}
mtree -deU -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} > /dev/null
@@ -788,7 +794,7 @@ _zoneinfo= zic tzsetup
ITOOLS= [ awk cap_mkdb cat chflags chmod chown \
date echo egrep find grep id install ${_install-info} \
ln lockf make mkdir mtree mv pwd_mkdb \
- rm sed services_mkdb sh sysctl test true uname wc ${_zoneinfo} \
+ rm sed services_mkdb sh strip sysctl test true uname wc ${_zoneinfo} \
${LOCAL_ITOOLS}
# Needed for share/man
@@ -864,8 +870,9 @@ distributeworld installworld: _installch
-p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib >/dev/null
.endif
.if ${MK_TESTS} != "no" && ${dist} == "tests"
+ -mkdir -p ${DESTDIR}/${DISTDIR}/${dist}${TESTSBASE}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
- -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null
+ -p ${DESTDIR}/${DISTDIR}/${dist}${TESTSBASE} >/dev/null
.endif
.if defined(NO_ROOT)
${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \
@@ -1474,7 +1481,8 @@ NXBMAKE= ${NXBENV} ${MAKE} \
MK_HTML=no MK_INFO=no NO_LINT=yes MK_MAN=no \
-DNO_PIC MK_PROFILE=no -DNO_SHARED \
-DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
- MK_CLANG_FULL=no MK_LLDB=no
+ MK_CLANG_EXTRAS=no MK_CLANG_FULL=no \
+ MK_LLDB=no
native-xtools: .MAKE
mkdir -p ${OBJTREE}/nxb-bin/bin
@@ -2083,8 +2091,9 @@ _xi-mtree:
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${XDDESTDIR}/usr/include >/dev/null
.if ${MK_TESTS} != "no"
+ mkdir -p ${XDDESTDIR}${TESTSBASE}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
- -p ${XDDESTDIR}/usr >/dev/null
+ -p ${XDDESTDIR}${TESTSBASE} >/dev/null
.endif
.ORDER: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries
Modified: projects/clang350-import/UPDATING
==============================================================================
--- projects/clang350-import/UPDATING Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/UPDATING Thu Dec 18 18:44:22 2014 (r275912)
@@ -31,6 +31,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20141121:
+ The handling of LOCAL_LIB_DIRS has been altered to skip addition of
+ directories to top level SUBDIR variable when their parent
+ directory is included in LOCAL_DIRS. Users with build systems with
+ such hierarchies and without SUBDIR entries in the parent
+ directory Makefiles should add them or add the directories to
+ LOCAL_DIRS.
+
20141109:
faith(4) and faithd(8) has been removed from base system. It
has been obsolete for a very long time.
Modified: projects/clang350-import/bin/sh/output.c
==============================================================================
--- projects/clang350-import/bin/sh/output.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/bin/sh/output.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -54,6 +54,8 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
+#include <wchar.h>
+#include <wctype.h>
#include "shell.h"
#include "syntax.h"
@@ -111,42 +113,86 @@ outstr(const char *p, struct output *fil
outbin(p, strlen(p), file);
}
+static void
+byteseq(int ch, struct output *file)
+{
+ char seq[4];
+
+ seq[0] = '\\';
+ seq[1] = (ch >> 6 & 0x3) + '0';
+ seq[2] = (ch >> 3 & 0x7) + '0';
+ seq[3] = (ch & 0x7) + '0';
+ outbin(seq, 4, file);
+}
+
+static void
+outdqstr(const char *p, struct output *file)
+{
+ const char *end;
+ mbstate_t mbs;
+ size_t clen;
+ wchar_t wc;
+
+ memset(&mbs, '\0', sizeof(mbs));
+ end = p + strlen(p);
+ outstr("$'", file);
+ while ((clen = mbrtowc(&wc, p, end - p + 1, &mbs)) != 0) {
+ if (clen == (size_t)-2) {
+ while (p < end)
+ byteseq(*p++, file);
+ break;
+ }
+ if (clen == (size_t)-1) {
+ memset(&mbs, '\0', sizeof(mbs));
+ byteseq(*p++, file);
+ continue;
+ }
+ if (wc == L'\n')
+ outcslow('\n', file), p++;
+ else if (wc == L'\r')
+ outstr("\\r", file), p++;
+ else if (wc == L'\t')
+ outstr("\\t", file), p++;
+ else if (!iswprint(wc)) {
+ for (; clen > 0; clen--)
+ byteseq(*p++, file);
+ } else {
+ if (wc == L'\'' || wc == L'\\')
+ outcslow('\\', file);
+ outbin(p, clen, file);
+ p += clen;
+ }
+ }
+ outcslow('\'', file);
+}
+
/* Like outstr(), but quote for re-input into the shell. */
void
outqstr(const char *p, struct output *file)
{
- char ch;
- int inquotes;
+ int i;
if (p[0] == '\0') {
outstr("''", file);
return;
}
- if (p[strcspn(p, "|&;<>()$`\\\"' \t\n*?[~#=")] == '\0' ||
+ for (i = 0; p[i] != '\0'; i++) {
+ if ((p[i] > '\0' && p[i] < ' ' && p[i] != '\n') ||
+ (p[i] & 0x80) != 0 || p[i] == '\'') {
+ outdqstr(p, file);
+ return;
+ }
+ }
+
+ if (p[strcspn(p, "|&;<>()$`\\\" \n*?[~#=")] == '\0' ||
strcmp(p, "[") == 0) {
outstr(p, file);
return;
}
- inquotes = 0;
- while ((ch = *p++) != '\0') {
- switch (ch) {
- case '\'':
- /* Can't quote single quotes inside single quotes. */
- if (inquotes)
- outcslow('\'', file);
- inquotes = 0;
- outstr("\\'", file);
- break;
- default:
- if (!inquotes)
- outcslow('\'', file);
- inquotes = 1;
- outc(ch, file);
- }
- }
- if (inquotes)
- outcslow('\'', file);
+ outcslow('\'', file);
+ outstr(p, file);
+ outcslow('\'', file);
}
void
Modified: projects/clang350-import/bin/sh/tests/execution/Makefile
==============================================================================
--- projects/clang350-import/bin/sh/tests/execution/Makefile Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/bin/sh/tests/execution/Makefile Thu Dec 18 18:44:22 2014 (r275912)
@@ -44,6 +44,7 @@ FILES+= set-n4.0
FILES+= set-x1.0
FILES+= set-x2.0
FILES+= set-x3.0
+FILES+= set-x4.0
FILES+= shellproc1.0
FILES+= subshell1.0 subshell1.0.stdout
FILES+= subshell2.0
Copied: projects/clang350-import/bin/sh/tests/execution/set-x4.0 (from r275905, head/bin/sh/tests/execution/set-x4.0)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/clang350-import/bin/sh/tests/execution/set-x4.0 Thu Dec 18 18:44:22 2014 (r275912, copy of r275905, head/bin/sh/tests/execution/set-x4.0)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+key=`printf '\r\t\001\200\300'`
+r=`{ set -x; : "$key"; } 2>&1 >/dev/null`
+case $r in
+*[![:print:]]*) echo fail; exit 3
+esac
Modified: projects/clang350-import/cddl/contrib/opensolaris/cmd/zdb/zdb.c
==============================================================================
--- projects/clang350-import/cddl/contrib/opensolaris/cmd/zdb/zdb.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/cddl/contrib/opensolaris/cmd/zdb/zdb.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -1184,7 +1184,7 @@ visit_indirect(spa_t *spa, const dnode_p
print_indirect(bp, zb, dnp);
if (BP_GET_LEVEL(bp) > 0 && !BP_IS_HOLE(bp)) {
- uint32_t flags = ARC_WAIT;
+ arc_flags_t flags = ARC_FLAG_WAIT;
int i;
blkptr_t *cbp;
int epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT;
@@ -1884,8 +1884,8 @@ dump_dir(objset_t *os)
if (dds.dds_type == DMU_OST_META) {
dds.dds_creation_txg = TXG_INITIAL;
usedobjs = BP_GET_FILL(os->os_rootbp);
- refdbytes = os->os_spa->spa_dsl_pool->
- dp_mos_dir->dd_phys->dd_used_bytes;
+ refdbytes = dsl_dir_phys(os->os_spa->spa_dsl_pool->dp_mos_dir)->
+ dd_used_bytes;
} else {
dmu_objset_space(os, &refdbytes, &scratch, &usedobjs, &scratch);
}
Modified: projects/clang350-import/cddl/contrib/opensolaris/lib/libdtrace/common/drti.c
==============================================================================
--- projects/clang350-import/cddl/contrib/opensolaris/lib/libdtrace/common/drti.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/cddl/contrib/opensolaris/lib/libdtrace/common/drti.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -110,7 +110,7 @@ dtrace_dof_init(void)
Elf32_Ehdr *elf;
#endif
dof_helper_t dh;
- Link_map *lmp;
+ Link_map *lmp = NULL;
#if defined(sun)
Lmid_t lmid;
#else
Modified: projects/clang350-import/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_iter.c
==============================================================================
--- projects/clang350-import/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_iter.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_iter.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -24,7 +24,7 @@
* Copyright (c) 2013 by Delphix. All rights reserved.
* Copyright (c) 2012 Pawel Jakub Dawidek <pawel at dawidek.net>.
* All rights reserved.
- * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
*/
#include <stdio.h>
@@ -193,9 +193,6 @@ zfs_iter_bookmarks(zfs_handle_t *zhp, zf
fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_CREATETXG));
fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_CREATION));
- /* Allocate an nvlist to hold the bookmarks. */
- bmarks = fnvlist_alloc();
-
if ((err = lzc_get_bookmarks(zhp->zfs_name, props, &bmarks)) != 0)
goto out;
Modified: projects/clang350-import/contrib/binutils/gas/config/tc-ppc.c
==============================================================================
--- projects/clang350-import/contrib/binutils/gas/config/tc-ppc.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/contrib/binutils/gas/config/tc-ppc.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -2509,121 +2509,168 @@ md_assemble (char *str)
(char *) NULL, 0);
}
#ifdef OBJ_ELF
- else if ((reloc = ppc_elf_suffix (&str, &ex)) != BFD_RELOC_UNUSED)
+ else
{
- /* Some TLS tweaks. */
- switch (reloc)
+ if (ex.X_op == O_symbol && str[0] == '(')
{
- default:
- break;
- case BFD_RELOC_PPC_TLS:
- insn = ppc_insert_operand (insn, operand, ppc_obj64 ? 13 : 2,
- (char *) NULL, 0);
- break;
- /* We'll only use the 32 (or 64) bit form of these relocations
- in constants. Instructions get the 16 bit form. */
- case BFD_RELOC_PPC_DTPREL:
- reloc = BFD_RELOC_PPC_DTPREL16;
- break;
- case BFD_RELOC_PPC_TPREL:
- reloc = BFD_RELOC_PPC_TPREL16;
- break;
- }
+ const char *sym_name = S_GET_NAME (ex.X_add_symbol);
+ if (sym_name[0] == '.')
+ ++sym_name;
- /* For the absolute forms of branches, convert the PC
- relative form back into the absolute. */
- if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
- {
- switch (reloc)
+ if (strcasecmp (sym_name, "__tls_get_addr") == 0)
{
- case BFD_RELOC_PPC_B26:
- reloc = BFD_RELOC_PPC_BA26;
- break;
- case BFD_RELOC_PPC_B16:
- reloc = BFD_RELOC_PPC_BA16;
- break;
- case BFD_RELOC_PPC_B16_BRTAKEN:
- reloc = BFD_RELOC_PPC_BA16_BRTAKEN;
- break;
- case BFD_RELOC_PPC_B16_BRNTAKEN:
- reloc = BFD_RELOC_PPC_BA16_BRNTAKEN;
- break;
- default:
- break;
+ expressionS tls_exp;
+
+ hold = input_line_pointer;
+ input_line_pointer = str + 1;
+ expression (&tls_exp);
+ if (tls_exp.X_op == O_symbol)
+ {
+ reloc = BFD_RELOC_UNUSED;
+ if (strncasecmp (input_line_pointer, "@tlsgd)", 7) == 0)
+ {
+ reloc = BFD_RELOC_PPC_TLSGD;
+ input_line_pointer += 7;
+ }
+ else if (strncasecmp (input_line_pointer, "@tlsld)", 7) == 0)
+ {
+ reloc = BFD_RELOC_PPC_TLSLD;
+ input_line_pointer += 7;
+ }
+ if (reloc != BFD_RELOC_UNUSED)
+ {
+ SKIP_WHITESPACE ();
+ str = input_line_pointer;
+
+ if (fc >= MAX_INSN_FIXUPS)
+ as_fatal (_("too many fixups"));
+ fixups[fc].exp = tls_exp;
+ fixups[fc].opindex = *opindex_ptr;
+ fixups[fc].reloc = reloc;
+ ++fc;
+ }
+ }
+ input_line_pointer = hold;
}
}
- if (ppc_obj64
- && (operand->flags & (PPC_OPERAND_DS | PPC_OPERAND_DQ)) != 0)
+ if ((reloc = ppc_elf_suffix (&str, &ex)) != BFD_RELOC_UNUSED)
{
+ /* Some TLS tweaks. */
switch (reloc)
{
- case BFD_RELOC_16:
- reloc = BFD_RELOC_PPC64_ADDR16_DS;
- break;
- case BFD_RELOC_LO16:
- reloc = BFD_RELOC_PPC64_ADDR16_LO_DS;
- break;
- case BFD_RELOC_16_GOTOFF:
- reloc = BFD_RELOC_PPC64_GOT16_DS;
- break;
- case BFD_RELOC_LO16_GOTOFF:
- reloc = BFD_RELOC_PPC64_GOT16_LO_DS;
- break;
- case BFD_RELOC_LO16_PLTOFF:
- reloc = BFD_RELOC_PPC64_PLT16_LO_DS;
- break;
- case BFD_RELOC_16_BASEREL:
- reloc = BFD_RELOC_PPC64_SECTOFF_DS;
- break;
- case BFD_RELOC_LO16_BASEREL:
- reloc = BFD_RELOC_PPC64_SECTOFF_LO_DS;
- break;
- case BFD_RELOC_PPC_TOC16:
- reloc = BFD_RELOC_PPC64_TOC16_DS;
- break;
- case BFD_RELOC_PPC64_TOC16_LO:
- reloc = BFD_RELOC_PPC64_TOC16_LO_DS;
- break;
- case BFD_RELOC_PPC64_PLTGOT16:
- reloc = BFD_RELOC_PPC64_PLTGOT16_DS;
- break;
- case BFD_RELOC_PPC64_PLTGOT16_LO:
- reloc = BFD_RELOC_PPC64_PLTGOT16_LO_DS;
- break;
- case BFD_RELOC_PPC_DTPREL16:
- reloc = BFD_RELOC_PPC64_DTPREL16_DS;
- break;
- case BFD_RELOC_PPC_DTPREL16_LO:
- reloc = BFD_RELOC_PPC64_DTPREL16_LO_DS;
- break;
- case BFD_RELOC_PPC_TPREL16:
- reloc = BFD_RELOC_PPC64_TPREL16_DS;
+ default:
break;
- case BFD_RELOC_PPC_TPREL16_LO:
- reloc = BFD_RELOC_PPC64_TPREL16_LO_DS;
+
+ case BFD_RELOC_PPC_TLS:
+ insn = ppc_insert_operand (insn, operand, ppc_obj64 ? 13 : 2,
+ (char *) NULL, 0);
break;
- case BFD_RELOC_PPC_GOT_DTPREL16:
- case BFD_RELOC_PPC_GOT_DTPREL16_LO:
- case BFD_RELOC_PPC_GOT_TPREL16:
- case BFD_RELOC_PPC_GOT_TPREL16_LO:
+
+ /* We'll only use the 32 (or 64) bit form of these relocations
+ in constants. Instructions get the 16 bit form. */
+ case BFD_RELOC_PPC_DTPREL:
+ reloc = BFD_RELOC_PPC_DTPREL16;
break;
- default:
- as_bad (_("unsupported relocation for DS offset field"));
+ case BFD_RELOC_PPC_TPREL:
+ reloc = BFD_RELOC_PPC_TPREL16;
break;
}
+
+ /* For the absolute forms of branches, convert the PC
+ relative form back into the absolute. */
+ if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
+ {
+ switch (reloc)
+ {
+ case BFD_RELOC_PPC_B26:
+ reloc = BFD_RELOC_PPC_BA26;
+ break;
+ case BFD_RELOC_PPC_B16:
+ reloc = BFD_RELOC_PPC_BA16;
+ break;
+ case BFD_RELOC_PPC_B16_BRTAKEN:
+ reloc = BFD_RELOC_PPC_BA16_BRTAKEN;
+ break;
+ case BFD_RELOC_PPC_B16_BRNTAKEN:
+ reloc = BFD_RELOC_PPC_BA16_BRNTAKEN;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (ppc_obj64
+ && (operand->flags & (PPC_OPERAND_DS | PPC_OPERAND_DQ)) != 0)
+ {
+ switch (reloc)
+ {
+ case BFD_RELOC_16:
+ reloc = BFD_RELOC_PPC64_ADDR16_DS;
+ break;
+ case BFD_RELOC_LO16:
+ reloc = BFD_RELOC_PPC64_ADDR16_LO_DS;
+ break;
+ case BFD_RELOC_16_GOTOFF:
+ reloc = BFD_RELOC_PPC64_GOT16_DS;
+ break;
+ case BFD_RELOC_LO16_GOTOFF:
+ reloc = BFD_RELOC_PPC64_GOT16_LO_DS;
+ break;
+ case BFD_RELOC_LO16_PLTOFF:
+ reloc = BFD_RELOC_PPC64_PLT16_LO_DS;
+ break;
+ case BFD_RELOC_16_BASEREL:
+ reloc = BFD_RELOC_PPC64_SECTOFF_DS;
+ break;
+ case BFD_RELOC_LO16_BASEREL:
+ reloc = BFD_RELOC_PPC64_SECTOFF_LO_DS;
+ break;
+ case BFD_RELOC_PPC_TOC16:
+ reloc = BFD_RELOC_PPC64_TOC16_DS;
+ break;
+ case BFD_RELOC_PPC64_TOC16_LO:
+ reloc = BFD_RELOC_PPC64_TOC16_LO_DS;
+ break;
+ case BFD_RELOC_PPC64_PLTGOT16:
+ reloc = BFD_RELOC_PPC64_PLTGOT16_DS;
+ break;
+ case BFD_RELOC_PPC64_PLTGOT16_LO:
+ reloc = BFD_RELOC_PPC64_PLTGOT16_LO_DS;
+ break;
+ case BFD_RELOC_PPC_DTPREL16:
+ reloc = BFD_RELOC_PPC64_DTPREL16_DS;
+ break;
+ case BFD_RELOC_PPC_DTPREL16_LO:
+ reloc = BFD_RELOC_PPC64_DTPREL16_LO_DS;
+ break;
+ case BFD_RELOC_PPC_TPREL16:
+ reloc = BFD_RELOC_PPC64_TPREL16_DS;
+ break;
+ case BFD_RELOC_PPC_TPREL16_LO:
+ reloc = BFD_RELOC_PPC64_TPREL16_LO_DS;
+ break;
+ case BFD_RELOC_PPC_GOT_DTPREL16:
+ case BFD_RELOC_PPC_GOT_DTPREL16_LO:
+ case BFD_RELOC_PPC_GOT_TPREL16:
+ case BFD_RELOC_PPC_GOT_TPREL16_LO:
+ break;
+ default:
+ as_bad (_("unsupported relocation for DS offset field"));
+ break;
+ }
+ }
}
/* We need to generate a fixup for this expression. */
if (fc >= MAX_INSN_FIXUPS)
as_fatal (_("too many fixups"));
fixups[fc].exp = ex;
- fixups[fc].opindex = 0;
+ fixups[fc].opindex = *opindex_ptr;
fixups[fc].reloc = reloc;
++fc;
}
-#endif /* OBJ_ELF */
-
+#else /* OBJ_ELF */
else
{
/* We need to generate a fixup for this expression. */
@@ -2634,6 +2681,7 @@ md_assemble (char *str)
fixups[fc].reloc = BFD_RELOC_UNUSED;
++fc;
}
+#endif /* OBJ_ELF */
if (need_paren)
{
@@ -5908,6 +5956,8 @@ md_apply_fix (fixS *fixP, valueT *valP,
break;
case BFD_RELOC_PPC_TLS:
+ case BFD_RELOC_PPC_TLSLD:
+ case BFD_RELOC_PPC_TLSGD:
break;
case BFD_RELOC_PPC_DTPMOD:
Modified: projects/clang350-import/contrib/elftoolchain/elfcopy/main.c
==============================================================================
--- projects/clang350-import/contrib/elftoolchain/elfcopy/main.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/contrib/elftoolchain/elfcopy/main.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -1109,7 +1109,8 @@ strip_main(struct elfcopy *ecp, int argc
if (ecp->strip == 0 &&
((ecp->flags & DISCARD_LOCAL) == 0) &&
- ((ecp->flags & DISCARD_LLABEL) == 0))
+ ((ecp->flags & DISCARD_LLABEL) == 0) &&
+ lookup_symop_list(ecp, NULL, SYMOP_STRIP) == NULL)
ecp->strip = STRIP_ALL;
if (optind == argc)
strip_usage();
Modified: projects/clang350-import/contrib/elftoolchain/elfcopy/segments.c
==============================================================================
--- projects/clang350-import/contrib/elftoolchain/elfcopy/segments.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/contrib/elftoolchain/elfcopy/segments.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -439,7 +439,7 @@ copy_phdr(struct elfcopy *ecp)
seg->fsz = seg->msz = 0;
for (i = 0; i < seg->nsec; i++) {
s = seg->v_sec[i];
- seg->msz = s->off + s->sz - seg->off;
+ seg->msz = s->vma + s->sz - seg->addr;
if (s->type != SHT_NOBITS)
seg->fsz = seg->msz;
}
Copied: projects/clang350-import/contrib/llvm/patches/patch-r275759-clang-r221170-ppc-vaarg.diff (from r275905, head/contrib/llvm/patches/patch-r275759-clang-r221170-ppc-vaarg.diff)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/clang350-import/contrib/llvm/patches/patch-r275759-clang-r221170-ppc-vaarg.diff Thu Dec 18 18:44:22 2014 (r275912, copy of r275905, head/contrib/llvm/patches/patch-r275759-clang-r221170-ppc-vaarg.diff)
@@ -0,0 +1,298 @@
+Pull in r221170 from upstream clang trunk (by Roman Divacky):
+
+ Implement vaarg lowering for ppc32. Lowering of scalars and
+ aggregates is supported. Complex numbers are not.
+
+Pull in r221174 from upstream clang trunk (by Roman Divacky):
+
+ Require asserts to unbreak the buildbots.
+
+Pull in r221284 from upstream clang trunk (by Roman Divacky):
+
+ Rewrite the test to not require asserts.
+
+Pull in r221285 from upstream clang trunk (by Roman Divacky):
+
+ Since the file has both ppc and ppc64 tests in it rename it.
+
+This adds va_args support for PowerPC (32 bit) to clang.
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/275759
+
+Index: tools/clang/lib/CodeGen/TargetInfo.cpp
+===================================================================
+--- tools/clang/lib/CodeGen/TargetInfo.cpp
++++ tools/clang/lib/CodeGen/TargetInfo.cpp
+@@ -2733,12 +2733,20 @@ llvm::Value *NaClX86_64ABIInfo::EmitVAArg(llvm::Va
+
+
+ // PowerPC-32
+-
+ namespace {
+-class PPC32TargetCodeGenInfo : public DefaultTargetCodeGenInfo {
++/// PPC32_SVR4_ABIInfo - The 32-bit PowerPC ELF (SVR4) ABI information.
++class PPC32_SVR4_ABIInfo : public DefaultABIInfo {
+ public:
+- PPC32TargetCodeGenInfo(CodeGenTypes &CGT) : DefaultTargetCodeGenInfo(CGT) {}
++ PPC32_SVR4_ABIInfo(CodeGen::CodeGenTypes &CGT) : DefaultABIInfo(CGT) {}
+
++ llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
++ CodeGenFunction &CGF) const;
++};
++
++class PPC32TargetCodeGenInfo : public TargetCodeGenInfo {
++public:
++ PPC32TargetCodeGenInfo(CodeGenTypes &CGT) : TargetCodeGenInfo(new PPC32_SVR4_ABIInfo(CGT)) {}
++
+ int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const {
+ // This is recovered from gcc output.
+ return 1; // r1 is the dedicated stack pointer
+@@ -2750,6 +2758,96 @@ namespace {
+
+ }
+
++llvm::Value *PPC32_SVR4_ABIInfo::EmitVAArg(llvm::Value *VAListAddr,
++ QualType Ty,
++ CodeGenFunction &CGF) const {
++ if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
++ // TODO: Implement this. For now ignore.
++ (void)CTy;
++ return NULL;
++ }
++
++ bool isI64 = Ty->isIntegerType() && getContext().getTypeSize(Ty) == 64;
++ bool isInt = Ty->isIntegerType() || Ty->isPointerType() || Ty->isAggregateType();
++ llvm::Type *CharPtr = CGF.Int8PtrTy;
++ llvm::Type *CharPtrPtr = CGF.Int8PtrPtrTy;
++
++ CGBuilderTy &Builder = CGF.Builder;
++ llvm::Value *GPRPtr = Builder.CreateBitCast(VAListAddr, CharPtr, "gprptr");
++ llvm::Value *GPRPtrAsInt = Builder.CreatePtrToInt(GPRPtr, CGF.Int32Ty);
++ llvm::Value *FPRPtrAsInt = Builder.CreateAdd(GPRPtrAsInt, Builder.getInt32(1));
++ llvm::Value *FPRPtr = Builder.CreateIntToPtr(FPRPtrAsInt, CharPtr);
++ llvm::Value *OverflowAreaPtrAsInt = Builder.CreateAdd(FPRPtrAsInt, Builder.getInt32(3));
++ llvm::Value *OverflowAreaPtr = Builder.CreateIntToPtr(OverflowAreaPtrAsInt, CharPtrPtr);
++ llvm::Value *RegsaveAreaPtrAsInt = Builder.CreateAdd(OverflowAreaPtrAsInt, Builder.getInt32(4));
++ llvm::Value *RegsaveAreaPtr = Builder.CreateIntToPtr(RegsaveAreaPtrAsInt, CharPtrPtr);
++ llvm::Value *GPR = Builder.CreateLoad(GPRPtr, false, "gpr");
++ // Align GPR when TY is i64.
++ if (isI64) {
++ llvm::Value *GPRAnd = Builder.CreateAnd(GPR, Builder.getInt8(1));
++ llvm::Value *CC64 = Builder.CreateICmpEQ(GPRAnd, Builder.getInt8(1));
++ llvm::Value *GPRPlusOne = Builder.CreateAdd(GPR, Builder.getInt8(1));
++ GPR = Builder.CreateSelect(CC64, GPRPlusOne, GPR);
++ }
++ llvm::Value *FPR = Builder.CreateLoad(FPRPtr, false, "fpr");
++ llvm::Value *OverflowArea = Builder.CreateLoad(OverflowAreaPtr, false, "overflow_area");
++ llvm::Value *OverflowAreaAsInt = Builder.CreatePtrToInt(OverflowArea, CGF.Int32Ty);
++ llvm::Value *RegsaveArea = Builder.CreateLoad(RegsaveAreaPtr, false, "regsave_area");
++ llvm::Value *RegsaveAreaAsInt = Builder.CreatePtrToInt(RegsaveArea, CGF.Int32Ty);
++
++ llvm::Value *CC = Builder.CreateICmpULT(isInt ? GPR : FPR,
++ Builder.getInt8(8), "cond");
++
++ llvm::Value *RegConstant = Builder.CreateMul(isInt ? GPR : FPR,
++ Builder.getInt8(isInt ? 4 : 8));
++
++ llvm::Value *OurReg = Builder.CreateAdd(RegsaveAreaAsInt, Builder.CreateSExt(RegConstant, CGF.Int32Ty));
++
++ if (Ty->isFloatingType())
++ OurReg = Builder.CreateAdd(OurReg, Builder.getInt32(32));
++
++ llvm::BasicBlock *UsingRegs = CGF.createBasicBlock("using_regs");
++ llvm::BasicBlock *UsingOverflow = CGF.createBasicBlock("using_overflow");
++ llvm::BasicBlock *Cont = CGF.createBasicBlock("cont");
++
++ Builder.CreateCondBr(CC, UsingRegs, UsingOverflow);
++
++ CGF.EmitBlock(UsingRegs);
++
++ llvm::Type *PTy = llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
++ llvm::Value *Result1 = Builder.CreateIntToPtr(OurReg, PTy);
++ // Increase the GPR/FPR indexes.
++ if (isInt) {
++ GPR = Builder.CreateAdd(GPR, Builder.getInt8(isI64 ? 2 : 1));
++ Builder.CreateStore(GPR, GPRPtr);
++ } else {
++ FPR = Builder.CreateAdd(FPR, Builder.getInt8(1));
++ Builder.CreateStore(FPR, FPRPtr);
++ }
++ CGF.EmitBranch(Cont);
++
++ CGF.EmitBlock(UsingOverflow);
++
++ // Increase the overflow area.
++ llvm::Value *Result2 = Builder.CreateIntToPtr(OverflowAreaAsInt, PTy);
++ OverflowAreaAsInt = Builder.CreateAdd(OverflowAreaAsInt, Builder.getInt32(isInt ? 4 : 8));
++ Builder.CreateStore(Builder.CreateIntToPtr(OverflowAreaAsInt, CharPtr), OverflowAreaPtr);
++ CGF.EmitBranch(Cont);
++
++ CGF.EmitBlock(Cont);
++
++ llvm::PHINode *Result = CGF.Builder.CreatePHI(PTy, 2, "vaarg.addr");
++ Result->addIncoming(Result1, UsingRegs);
++ Result->addIncoming(Result2, UsingOverflow);
++
++ if (Ty->isAggregateType()) {
++ llvm::Value *AGGPtr = Builder.CreateBitCast(Result, CharPtrPtr, "aggrptr") ;
++ return Builder.CreateLoad(AGGPtr, false, "aggr");
++ }
++
++ return Result;
++}
++
+ bool
+ PPC32TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
+ llvm::Value *Address) const {
+Index: tools/clang/test/CodeGen/ppc64-varargs-struct.c
+===================================================================
+--- tools/clang/test/CodeGen/ppc64-varargs-struct.c
++++ tools/clang/test/CodeGen/ppc64-varargs-struct.c
+@@ -1,30 +0,0 @@
+-// REQUIRES: ppc64-registered-target
+-// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
+-
+-#include <stdarg.h>
+-
+-struct x {
+- long a;
+- double b;
+-};
+-
+-void testva (int n, ...)
+-{
+- va_list ap;
+-
+- struct x t = va_arg (ap, struct x);
+-// CHECK: bitcast i8* %{{[a-z.0-9]*}} to %struct.x*
+-// CHECK: bitcast %struct.x* %t to i8*
+-// CHECK: bitcast %struct.x* %{{[0-9]+}} to i8*
+-// CHECK: call void @llvm.memcpy
+-
+- int v = va_arg (ap, int);
+-// CHECK: ptrtoint i8* %{{[a-z.0-9]*}} to i64
+-// CHECK: add i64 %{{[0-9]+}}, 4
+-// CHECK: inttoptr i64 %{{[0-9]+}} to i8*
+-// CHECK: bitcast i8* %{{[0-9]+}} to i32*
+-
+- __int128_t u = va_arg (ap, __int128_t);
+-// CHECK: bitcast i8* %{{[a-z.0-9]+}} to i128*
+-// CHECK-NEXT: load i128* %{{[0-9]+}}
+-}
+Index: tools/clang/test/CodeGen/ppc-varargs-struct.c
+===================================================================
+--- tools/clang/test/CodeGen/ppc-varargs-struct.c
++++ tools/clang/test/CodeGen/ppc-varargs-struct.c
+@@ -0,0 +1,112 @@
++// REQUIRES: ppc64-registered-target
++// REQUIRES: asserts
++// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
++// RUN: %clang_cc1 -triple powerpc-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-PPC
++
++#include <stdarg.h>
++
++struct x {
++ long a;
++ double b;
++};
++
++void testva (int n, ...)
++{
++ va_list ap;
++
++ struct x t = va_arg (ap, struct x);
++// CHECK: bitcast i8* %{{[a-z.0-9]*}} to %struct.x*
++// CHECK: bitcast %struct.x* %t to i8*
++// CHECK: bitcast %struct.x* %{{[0-9]+}} to i8*
++// CHECK: call void @llvm.memcpy
++// CHECK-PPC: [[ARRAYDECAY:%[a-z0-9]+]] = getelementptr inbounds [1 x %struct.__va_list_tag]* %ap, i32 0, i32 0
++// CHECK-PPC-NEXT: [[GPRPTR:%[a-z0-9]+]] = bitcast %struct.__va_list_tag* [[ARRAYDECAY]] to i8*
++// CHECK-PPC-NEXT: [[ZERO:%[0-9]+]] = ptrtoint i8* [[GPRPTR]] to i32
++// CHECK-PPC-NEXT: [[ONE:%[0-9]+]] = add i32 [[ZERO]], 1
++// CHECK-PPC-NEXT: [[TWO:%[0-9]+]] = inttoptr i32 [[ONE]] to i8*
++// CHECK-PPC-NEXT: [[THREE:%[0-9]+]] = add i32 [[ONE]], 3
++// CHECK-PPC-NEXT: [[FOUR:%[0-9]+]] = inttoptr i32 [[THREE]] to i8**
++// CHECK-PPC-NEXT: [[FIVE:%[0-9]+]] = add i32 [[THREE]], 4
++// CHECK-PPC-NEXT: [[SIX:%[0-9]+]] = inttoptr i32 [[FIVE]] to i8**
++// CHECK-PPC-NEXT: [[GPR:%[a-z0-9]+]] = load i8* [[GPRPTR]]
++// CHECK-PPC-NEXT: [[FPR:%[a-z0-9]+]] = load i8* [[TWO]]
++// CHECK-PPC-NEXT: [[OVERFLOW_AREA:%[a-z_0-9]+]] = load i8** [[FOUR]]
++// CHECK-PPC-NEXT: [[SEVEN:%[0-9]+]] = ptrtoint i8* [[OVERFLOW_AREA]] to i32
++// CHECK-PPC-NEXT: [[REGSAVE_AREA:%[a-z_0-9]+]] = load i8** [[SIX]]
++// CHECK-PPC-NEXT: [[EIGHT:%[0-9]+]] = ptrtoint i8* [[REGSAVE_AREA]] to i32
++// CHECK-PPC-NEXT: [[COND:%[a-z0-9]+]] = icmp ult i8 [[GPR]], 8
++// CHECK-PPC-NEXT: [[NINE:%[0-9]+]] = mul i8 [[GPR]], 4
++// CHECK-PPC-NEXT: [[TEN:%[0-9]+]] = sext i8 [[NINE]] to i32
++// CHECK-PPC-NEXT: [[ELEVEN:%[0-9]+]] = add i32 [[EIGHT]], [[TEN]]
++// CHECK-PPC-NEXT: br i1 [[COND]], label [[USING_REGS:%[a-z_0-9]+]], label [[USING_OVERFLOW:%[a-z_0-9]+]]
++//
++// CHECK-PPC1:[[USING_REGS]]
++// CHECK-PPC: [[TWELVE:%[0-9]+]] = inttoptr i32 [[ELEVEN]] to %struct.x*
++// CHECK-PPC-NEXT: [[THIRTEEN:%[0-9]+]] = add i8 [[GPR]], 1
++// CHECK-PPC-NEXT: store i8 [[THIRTEEN]], i8* [[GPRPTR]]
++// CHECK-PPC-NEXT: br label [[CONT:%[a-z0-9]+]]
++//
++// CHECK-PPC1:[[USING_OVERFLOW]]
++// CHECK-PPC: [[FOURTEEN:%[0-9]+]] = inttoptr i32 [[SEVEN]] to %struct.x*
++// CHECK-PPC-NEXT: [[FIFTEEN:%[0-9]+]] = add i32 [[SEVEN]], 4
++// CHECK-PPC-NEXT: [[SIXTEEN:%[0-9]+]] = inttoptr i32 [[FIFTEEN]] to i8*
++// CHECK-PPC-NEXT: store i8* [[SIXTEEN]], i8** [[FOUR]]
++// CHECK-PPC-NEXT: br label [[CONT]]
++//
++// CHECK-PPC1:[[CONT]]
++// CHECK-PPC: [[VAARG_ADDR:%[a-z.0-9]+]] = phi %struct.x* [ [[TWELVE]], [[USING_REGS]] ], [ [[FOURTEEN]], [[USING_OVERFLOW]] ]
++// CHECK-PPC-NEXT: [[AGGRPTR:%[a-z0-9]+]] = bitcast %struct.x* [[VAARG_ADDR]] to i8**
++// CHECK-PPC-NEXT: [[AGGR:%[a-z0-9]+]] = load i8** [[AGGRPTR]]
++// CHECK-PPC-NEXT: [[SEVENTEEN:%[0-9]+]] = bitcast %struct.x* %t to i8*
++// CHECK-PPC-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[SEVENTEEN]], i8* [[AGGR]], i32 16, i32 8, i1 false)
++
++ int v = va_arg (ap, int);
++// CHECK: ptrtoint i8* %{{[a-z.0-9]*}} to i64
++// CHECK: add i64 %{{[0-9]+}}, 4
++// CHECK: inttoptr i64 %{{[0-9]+}} to i8*
++// CHECK: bitcast i8* %{{[0-9]+}} to i32*
++// CHECK-PPC: [[ARRAYDECAY1:%[a-z0-9]+]] = getelementptr inbounds [1 x %struct.__va_list_tag]* %ap, i32 0, i32 0
++// CHECK-PPC-NEXT: [[GPRPTR1:%[a-z0-9]+]] = bitcast %struct.__va_list_tag* [[ARRAYDECAY1]] to i8*
++// CHECK-PPC-NEXT: [[EIGHTEEN:%[0-9]+]] = ptrtoint i8* [[GPRPTR1]] to i32
++// CHECK-PPC-NEXT: [[NINETEEN:%[0-9]+]] = add i32 [[EIGHTEEN]], 1
++// CHECK-PPC-NEXT: [[TWENTY:%[0-9]+]] = inttoptr i32 [[NINETEEN]] to i8*
++// CHECK-PPC-NEXT: [[TWENTYONE:%[0-9]+]] = add i32 [[NINETEEN]], 3
++// CHECK-PPC-NEXT: [[TWENTYTWO:%[0-9]+]] = inttoptr i32 [[TWENTYONE]] to i8**
++// CHECK-PPC-NEXT: [[TWENTYTHREE:%[0-9]+]] = add i32 [[TWENTYONE]], 4
++// CHECK-PPC-NEXT: [[TWENTYFOUR:%[0-9]+]] = inttoptr i32 [[TWENTYTHREE]] to i8**
++// CHECK-PPC-NEXT: [[GPR1:%[a-z0-9]+]] = load i8* [[GPRPTR1]]
++// CHECK-PPC-NEXT: [[FPR1:%[a-z0-9]+]] = load i8* [[TWENTY]]
++// CHECK-PPC-NEXT: [[OVERFLOW_AREA1:%[a-z_0-9]+]] = load i8** [[TWENTYTWO]]
++// CHECK-PPC-NEXT: [[TWENTYFIVE:%[0-9]+]] = ptrtoint i8* [[OVERFLOW_AREA1]] to i32
++// CHECK-PPC-NEXT: [[REGSAVE_AREA1:%[a-z_0-9]+]] = load i8** [[TWENTYFOUR]]
++// CHECK-PPC-NEXT: [[TWENTYSIX:%[0-9]+]] = ptrtoint i8* [[REGSAVE_AREA1]] to i32
++// CHECK-PPC-NEXT: [[COND1:%[a-z0-9]+]] = icmp ult i8 [[GPR1]], 8
++// CHECK-PPC-NEXT: [[TWENTYSEVEN:%[0-9]+]] = mul i8 [[GPR1]], 4
++// CHECK-PPC-NEXT: [[TWENTYEIGHT:%[0-9]+]] = sext i8 [[TWENTYSEVEN]] to i32
++// CHECK-PPC-NEXT: [[TWENTYNINE:%[0-9]+]] = add i32 [[TWENTYSIX]], [[TWENTYEIGHT]]
++// CHECK-PPC-NEXT: br i1 [[COND1]], label [[USING_REGS1:%[a-z_0-9]+]], label [[USING_OVERFLOW1:%[a-z_0-9]+]]
++//
++// CHECK-PPC1:[[USING_REGS1]]:
++// CHECK-PPC: [[THIRTY:%[0-9]+]] = inttoptr i32 [[TWENTYNINE]] to i32*
++// CHECK-PPC-NEXT: [[THIRTYONE:%[0-9]+]] = add i8 [[GPR1]], 1
++// CHECK-PPC-NEXT: store i8 [[THIRTYONE]], i8* [[GPRPTR1]]
++// CHECK-PPC-NEXT: br label [[CONT1:%[a-z0-9]+]]
++//
++// CHECK-PPC1:[[USING_OVERFLOW1]]:
++// CHECK-PPC: [[THIRTYTWO:%[0-9]+]] = inttoptr i32 [[TWENTYFIVE]] to i32*
++// CHECK-PPC-NEXT: [[THIRTYTHREE:%[0-9]+]] = add i32 [[TWENTYFIVE]], 4
++// CHECK-PPC-NEXT: [[THIRTYFOUR:%[0-9]+]] = inttoptr i32 [[THIRTYTHREE]] to i8*
++// CHECK-PPC-NEXT: store i8* [[THIRTYFOUR]], i8** [[TWENTYTWO]]
++// CHECK-PPC-NEXT: br label [[CONT1]]
++//
++// CHECK-PPC1:[[CONT1]]:
++// CHECK-PPC: [[VAARG_ADDR1:%[a-z.0-9]+]] = phi i32* [ [[THIRTY]], [[USING_REGS1]] ], [ [[THIRTYTWO]], [[USING_OVERFLOW1]] ]
++// CHECK-PPC-NEXT: [[THIRTYFIVE:%[0-9]+]] = load i32* [[VAARG_ADDR1]]
++// CHECK-PPC-NEXT: store i32 [[THIRTYFIVE]], i32* %v, align 4
++
++#ifdef __powerpc64__
++ __int128_t u = va_arg (ap, __int128_t);
++#endif
++// CHECK: bitcast i8* %{{[a-z.0-9]+}} to i128*
++// CHECK-NEXT: load i128* %{{[0-9]+}}
++}
Modified: projects/clang350-import/contrib/unbound/iterator/iterator.c
==============================================================================
--- projects/clang350-import/contrib/unbound/iterator/iterator.c Thu Dec 18 18:35:47 2014 (r275911)
+++ projects/clang350-import/contrib/unbound/iterator/iterator.c Thu Dec 18 18:44:22 2014 (r275912)
@@ -120,6 +120,7 @@ iter_new(struct module_qstate* qstate, i
iq->query_restart_count = 0;
iq->referral_count = 0;
iq->sent_count = 0;
+ iq->target_count = NULL;
iq->wait_priming_stub = 0;
iq->refetch_glue = 0;
iq->dnssec_expected = 0;
@@ -445,6 +446,26 @@ handle_cname_response(struct module_qsta
return 1;
}
+/** create target count structure for this query */
+static void
+target_count_create(struct iter_qstate* iq)
+{
+ if(!iq->target_count) {
+ iq->target_count = (int*)calloc(2, sizeof(int));
+ /* if calloc fails we simply do not track this number */
+ if(iq->target_count)
+ iq->target_count[0] = 1;
+ }
+}
+
+static void
+target_count_increase(struct iter_qstate* iq, int num)
+{
+ target_count_create(iq);
+ if(iq->target_count)
+ iq->target_count[1] += num;
+}
+
/**
* Generate a subrequest.
* Generate a local request event. Local events are tied to this module, and
@@ -516,6 +537,10 @@ generate_sub_request(uint8_t* qname, siz
subiq = (struct iter_qstate*)subq->minfo[id];
memset(subiq, 0, sizeof(*subiq));
subiq->num_target_queries = 0;
+ target_count_create(iq);
+ subiq->target_count = iq->target_count;
+ if(iq->target_count)
+ iq->target_count[0] ++; /* extra reference */
subiq->num_current_queries = 0;
subiq->depth = iq->depth+1;
outbound_list_init(&subiq->outlist);
@@ -1342,6 +1367,12 @@ query_for_targets(struct module_qstate*
if(iq->depth == ie->max_dependency_depth)
return 0;
+ if(iq->depth > 0 && iq->target_count &&
+ iq->target_count[1] > MAX_TARGET_COUNT) {
+ verbose(VERB_QUERY, "request has exceeded the maximum "
+ "number of glue fetches %d", iq->target_count[1]);
+ return 0;
+ }
iter_mark_cycle_targets(qstate, iq->dp);
missing = (int)delegpt_count_missing_targets(iq->dp);
@@ -1524,6 +1555,7 @@ processLastResort(struct module_qstate*
return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
}
iq->num_target_queries += qs;
+ target_count_increase(iq, qs);
if(qs != 0) {
qstate->ext_state[id] = module_wait_subquery;
return 0; /* and wait for them */
@@ -1533,6 +1565,12 @@ processLastResort(struct module_qstate*
verbose(VERB_QUERY, "maxdepth and need more nameservers, fail");
return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
+ if(iq->depth > 0 && iq->target_count &&
+ iq->target_count[1] > MAX_TARGET_COUNT) {
+ verbose(VERB_QUERY, "request has exceeded the maximum "
+ "number of glue fetches %d", iq->target_count[1]);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
/* mark cycle targets for parent-side lookups */
iter_mark_pside_cycle_targets(qstate, iq->dp);
/* see if we can issue queries to get nameserver addresses */
@@ -1562,6 +1600,7 @@ processLastResort(struct module_qstate*
if(query_count != 0) { /* suspend to await results */
verbose(VERB_ALGO, "try parent-side glue lookup");
iq->num_target_queries += query_count;
+ target_count_increase(iq, query_count);
qstate->ext_state[id] = module_wait_subquery;
return 0;
}
@@ -1717,6 +1756,7 @@ processQueryTargets(struct module_qstate
return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
}
iq->num_target_queries += extra;
+ target_count_increase(iq, extra);
if(iq->num_target_queries > 0) {
/* wait to get all targets, we want to try em */
verbose(VERB_ALGO, "wait for all targets for fallback");
@@ -1757,6 +1797,7 @@ processQueryTargets(struct module_qstate
/* errors ignored, these targets are not strictly necessary for
* this result, we do not have to reply with SERVFAIL */
iq->num_target_queries += extra;
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list