Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Jun 2015 06:54:21 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r283871 - in projects/clang-trunk: . bin/ps contrib/diff/src contrib/gcc/config/arm contrib/netbsd-tests/lib/libc/c063 contrib/traceroute etc/tests lib/libc/arm lib/libc/arm/aeabi lib/l...
Message-ID:  <201506010654.t516sLO8081918@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Mon Jun  1 06:54:21 2015
New Revision: 283871
URL: https://svnweb.freebsd.org/changeset/base/283871

Log:
  Merge ^/head r283771 through r283870.

Added:
  projects/clang-trunk/tools/build/options/WITHOUT_MANDOCDB
     - copied unchanged from r283870, head/tools/build/options/WITHOUT_MANDOCDB
Deleted:
  projects/clang-trunk/etc/tests/
Modified:
  projects/clang-trunk/Makefile.inc1
  projects/clang-trunk/bin/ps/ps.c
  projects/clang-trunk/contrib/diff/src/context.c
  projects/clang-trunk/contrib/gcc/config/arm/lib1funcs.asm
  projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
  projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_openat.c
  projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
  projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
  projects/clang-trunk/contrib/traceroute/traceroute.8
  projects/clang-trunk/contrib/traceroute/traceroute.c
  projects/clang-trunk/lib/libc/arm/SYS.h
  projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_double.S
  projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_float.S
  projects/clang-trunk/lib/libc/arm/gen/_setjmp.S
  projects/clang-trunk/lib/libc/arm/gen/setjmp.S
  projects/clang-trunk/lib/libc/arm/string/ffs.S
  projects/clang-trunk/lib/libc/arm/string/memmove.S
  projects/clang-trunk/lib/libc/arm/string/memset.S
  projects/clang-trunk/lib/libc/arm/string/strcmp.S
  projects/clang-trunk/lib/libc/arm/string/strlen.S
  projects/clang-trunk/lib/libc/arm/string/strncmp.S
  projects/clang-trunk/lib/libc/xdr/xdr.c
  projects/clang-trunk/lib/libc/xdr/xdr_array.c
  projects/clang-trunk/lib/libc/xdr/xdr_float.c
  projects/clang-trunk/lib/libc/xdr/xdr_mem.c
  projects/clang-trunk/lib/libc/xdr/xdr_rec.c
  projects/clang-trunk/lib/libc/xdr/xdr_reference.c
  projects/clang-trunk/lib/libc/xdr/xdr_sizeof.c
  projects/clang-trunk/lib/libc/xdr/xdr_stdio.c
  projects/clang-trunk/lib/libdpv/dpv.c
  projects/clang-trunk/lib/libprocstat/libprocstat.c
  projects/clang-trunk/libexec/ypxfr/ypxfr_main.c
  projects/clang-trunk/share/man/man5/src.conf.5
  projects/clang-trunk/share/mk/src.opts.mk
  projects/clang-trunk/sys/amd64/amd64/trap.c
  projects/clang-trunk/sys/arm/arm/copystr.S
  projects/clang-trunk/sys/arm/include/_types.h
  projects/clang-trunk/sys/arm/include/asm.h
  projects/clang-trunk/sys/arm/include/proc.h
  projects/clang-trunk/sys/boot/fdt/dts/arm/sun4i-a10.dtsi
  projects/clang-trunk/sys/boot/fdt/dts/arm/sun7i-a20.dtsi
  projects/clang-trunk/sys/dev/cxgbe/t4_main.c
  projects/clang-trunk/sys/dev/cxgbe/t4_sge.c
  projects/clang-trunk/sys/dev/uart/uart_dev_ns8250.c
  projects/clang-trunk/sys/libkern/arm/memcpy.S
  projects/clang-trunk/sys/ufs/ffs/ffs_softdep.c
  projects/clang-trunk/sys/vm/vm_page.c
  projects/clang-trunk/tests/Makefile
  projects/clang-trunk/tests/sys/kern/ptrace_test.c
  projects/clang-trunk/usr.bin/Makefile
  projects/clang-trunk/usr.bin/man/Makefile
  projects/clang-trunk/usr.bin/mandoc/Makefile
  projects/clang-trunk/usr.sbin/pw/Makefile
  projects/clang-trunk/usr.sbin/pw/grupd.c
  projects/clang-trunk/usr.sbin/pw/pw.c
  projects/clang-trunk/usr.sbin/pw/pw_conf.c
  projects/clang-trunk/usr.sbin/pw/pw_group.c
  projects/clang-trunk/usr.sbin/pw/pw_user.c
  projects/clang-trunk/usr.sbin/pw/pwupd.c
  projects/clang-trunk/usr.sbin/yppoll/yppoll.8
  projects/clang-trunk/usr.sbin/yppoll/yppoll.c
  projects/clang-trunk/usr.sbin/yppush/yppush_main.c
Directory Properties:
  projects/clang-trunk/   (props changed)
  projects/clang-trunk/contrib/gcc/   (props changed)
  projects/clang-trunk/etc/   (props changed)
  projects/clang-trunk/lib/libc/   (props changed)
  projects/clang-trunk/share/   (props changed)
  projects/clang-trunk/sys/   (props changed)
  projects/clang-trunk/sys/boot/   (props changed)

Modified: projects/clang-trunk/Makefile.inc1
==============================================================================
--- projects/clang-trunk/Makefile.inc1	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/Makefile.inc1	Mon Jun  1 06:54:21 2015	(r283871)
@@ -1276,8 +1276,8 @@ _sed=		usr.bin/sed
 .endif
 
 .if ${BOOTSTRAPPING} < 1000002
-_m4=		lib/libohash \
-		usr.bin/m4
+_libohash=	lib/libohash
+_m4=		usr.bin/m4
 
 ${_bt}-usr.bin/m4: ${_bt}-lib/libohash
 .endif
@@ -1363,6 +1363,15 @@ _kerberos5_bootstrap_tools= \
 .ORDER: ${_kerberos5_bootstrap_tools:C/^/${_bt}-/g}
 .endif
 
+.if ${MK_MANDOCDB} != "no"
+_libohash?=	lib/libohash
+_makewhatis=	lib/libsqlite3 \
+		usr.bin/mandoc
+${_bt}-usr.bin/mandoc: ${_bt}-lib/libohash ${_bt}-lib/libsqlite3
+.else
+_makewhatis=usr.bin/makewhatis
+.endif
+
 # Rebuild up-to-date libmd for xinstall
 ${_bt}-usr.bin/xinstall: ${_bt}-lib/libmd
 
@@ -1383,7 +1392,8 @@ bootstrap-tools: .PHONY
     ${_awk} \
     ${_cat} \
     usr.bin/lorder \
-    usr.bin/makewhatis \
+    ${_libohash} \
+    ${_makewhatis} \
     usr.bin/rpcgen \
     ${_sed} \
     ${_yacc} \
@@ -1806,9 +1816,10 @@ kerberos5/lib/libroken__L: lib/libcrypt_
 kerberos5/lib/libwind__L: kerberos5/lib/libroken__L lib/libcom_err__L
 kerberos5/lib/libheimbase__L: lib/libthr__L
 kerberos5/lib/libheimipcc__L: kerberos5/lib/libroken__L kerberos5/lib/libheimbase__L lib/libthr__L
-lib/libsqlite3__L: lib/libthr__L
 .endif
 
+lib/libsqlite3__L: lib/libthr__L
+
 .if ${MK_GSSAPI} != "no"
 _lib_libgssapi=	lib/libgssapi
 .endif

Modified: projects/clang-trunk/bin/ps/ps.c
==============================================================================
--- projects/clang-trunk/bin/ps/ps.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/bin/ps/ps.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -180,7 +180,7 @@ main(int argc, char *argv[])
 	KINFO_STR *ks;
 	struct varent *vent;
 	struct winsize ws = { .ws_row = 0 };
-	const char *nlistf, *memf, *fmtstr, *str;
+	const char *nlistf, *memf, *str;
 	char *cols;
 	int all, ch, elem, flag, _fmt, i, lineno, linelen, left;
 	int descendancy, nentries, nkept, nselectors;
@@ -649,11 +649,6 @@ main(int argc, char *argv[])
 		linelen = 0;
 		xo_open_instance("process");
 		STAILQ_FOREACH(vent, &varlist, next_ve) {
-	        	if (vent->var->flag & LJUST)
-				fmtstr = "%-*s";
-			else
-				fmtstr = "%*s";
-
 			ks = STAILQ_FIRST(&kinfo[i].ki_ks);
 			STAILQ_REMOVE_HEAD(&kinfo[i].ki_ks, ks_next);
 			/* Truncate rightmost column if necessary.  */

Modified: projects/clang-trunk/contrib/diff/src/context.c
==============================================================================
--- projects/clang-trunk/contrib/diff/src/context.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/diff/src/context.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -62,7 +62,7 @@ print_context_label (char const *mark,
 	{
 	  time_t sec = inf->stat.st_mtime;
 	  verify (info_preserved, sizeof inf->stat.st_mtime <= sizeof sec);
-	  sprintf (buf, "%jd.%.9d", (intmax_t)sec, nsec);
+	  sprintf (buf, "%jd.%.9ld", (intmax_t)sec, nsec);
 	}
       fprintf (outfile, "%s %s\t%s\n", mark, inf->name, buf);
     }

Modified: projects/clang-trunk/contrib/gcc/config/arm/lib1funcs.asm
==============================================================================
--- projects/clang-trunk/contrib/gcc/config/arm/lib1funcs.asm	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/gcc/config/arm/lib1funcs.asm	Mon Jun  1 06:54:21 2015	(r283871)
@@ -252,7 +252,7 @@ SYM (\name):
 
 #ifdef __thumb__
 #define THUMB_FUNC .thumb_func
-#define THUMB_CODE .force_thumb
+#define THUMB_CODE .thumb
 #else
 #define THUMB_FUNC
 #define THUMB_CODE

Modified: projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
==============================================================================
--- projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -40,6 +40,9 @@ __RCSID("$NetBSD: t_faccessat.c,v 1.2 20
 #include <string.h>
 #include <unistd.h>
 #include <sys/param.h>
+#ifdef __FreeBSD__
+#include <sys/stat.h>
+#endif
 
 #define DIR "dir"
 #define FILE "dir/faccessat"

Modified: projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_openat.c
==============================================================================
--- projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_openat.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_openat.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -40,6 +40,9 @@ __RCSID("$NetBSD: t_openat.c,v 1.2 2013/
 #include <string.h>
 #include <unistd.h>
 #include <sys/param.h>
+#ifdef __FreeBSD__
+#include <sys/stat.h>
+#endif
 
 #define DIR "dir"
 #define FILE "dir/openat"

Modified: projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
==============================================================================
--- projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -40,6 +40,9 @@ __RCSID("$NetBSD: t_readlinkat.c,v 1.3 2
 #include <string.h>
 #include <unistd.h>
 #include <sys/param.h>
+#ifdef __FreeBSD__
+#include <sys/stat.h>
+#endif
 
 #define DIR "dir"
 #define FILE "dir/readlinkat"

Modified: projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
==============================================================================
--- projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -40,6 +40,9 @@ __RCSID("$NetBSD: t_unlinkat.c,v 1.2 201
 #include <string.h>
 #include <unistd.h>
 #include <sys/param.h>
+#ifdef __FreeBSD__
+#include <sys/stat.h>
+#endif
 
 #define DIR "dir"
 #define FILE "dir/unlinkat"

Modified: projects/clang-trunk/contrib/traceroute/traceroute.8
==============================================================================
--- projects/clang-trunk/contrib/traceroute/traceroute.8	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/traceroute/traceroute.8	Mon Jun  1 06:54:21 2015	(r283871)
@@ -16,7 +16,7 @@
 .\"	$Id: traceroute.8,v 1.19 2000/09/21 08:44:19 leres Exp $
 .\"	$FreeBSD$
 .\"
-.Dd June 19, 2012
+.Dd May 31, 2015
 .Dt TRACEROUTE 8
 .Os
 .Sh NAME
@@ -65,7 +65,7 @@ Turn  on  AS#  lookups  and  use the giv
 default.
 .It Fl e
 Firewall evasion mode.
-Use fixed destination ports for UDP and TCP probes.
+Use fixed destination ports for UDP, UDP-Lite, TCP and SCTP probes.
 The destination port does NOT increment with each packet sent.
 .It Fl f Ar first_ttl
 Set the initial time-to-live used in the first outgoing probe packet.
@@ -110,21 +110,24 @@ Print hop addresses numerically rather t
 path).
 .It Fl P Ar proto
 Send packets of specified IP protocol. The currently supported protocols
-are: UDP, TCP, GRE and ICMP. Other protocols may also be specified (either by
-name or by number), though
+are: UDP, UDP-Lite, TCP, SCTP, GRE and ICMP. Other protocols may also be
+specified (either by name or by number), though
 .Nm
 does not implement any special knowledge of their packet formats. This
 option is useful for determining which router along a path may be
 blocking packets based on IP protocol number. But see BUGS below.
 .It Fl p Ar port
-Protocol specific. For UDP and TCP, sets
+Protocol specific. For UDP, UDP-Lite, TCP and SCTP, sets
 the base
 .Ar port
 number used in probes (default is 33434).
-Traceroute hopes that nothing is listening on UDP ports
-.Em base
+Traceroute hopes that nothing is listening on UDP ports (or UDP-Lite ports
+if used by
+.Nm
+and supported by the peer)
+.Em base + 1
 to
-.Em base + nhops * nprobes - 1
+.Em base + nhops * nprobes
 at the destination host (so an ICMP PORT_UNREACHABLE message will
 be returned to terminate the route tracing).  If something is
 listening on a port in the default range, this option can be used

Modified: projects/clang-trunk/contrib/traceroute/traceroute.c
==============================================================================
--- projects/clang-trunk/contrib/traceroute/traceroute.c	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/contrib/traceroute/traceroute.c	Mon Jun  1 06:54:21 2015	(r283871)
@@ -219,6 +219,7 @@ static const char rcsid[] =
 #include <netinet/ip.h>
 #include <netinet/ip_var.h>
 #include <netinet/ip_icmp.h>
+#include <netinet/sctp.h>
 #include <netinet/udp.h>
 #include <netinet/tcp.h>
 #include <netinet/tcpip.h>
@@ -367,9 +368,10 @@ void	freehostinfo(struct hostinfo *);
 void	getaddr(u_int32_t *, char *);
 struct	hostinfo *gethostinfo(char *);
 u_short	in_cksum(u_short *, int);
+u_int32_t sctp_crc32c(const void *, u_int32_t);
 char	*inetname(struct in_addr);
 int	main(int, char **);
-u_short p_cksum(struct ip *, u_short *, int);
+u_short p_cksum(struct ip *, u_short *, int, int);
 int	packet_ok(u_char *, int, struct sockaddr_in *, int);
 char	*pr_type(u_char);
 void	print(u_char *, int, struct sockaddr_in *);
@@ -389,8 +391,12 @@ int	usleep(u_int);
 
 void	udp_prep(struct outdata *);
 int	udp_check(const u_char *, int);
+void	udplite_prep(struct outdata *);
+int	udplite_check(const u_char *, int);
 void	tcp_prep(struct outdata *);
 int	tcp_check(const u_char *, int);
+void	sctp_prep(struct outdata *);
+int	sctp_check(const u_char *, int);
 void	gre_prep(struct outdata *);
 int	gre_check(const u_char *, int);
 void	gen_prep(struct outdata *);
@@ -424,6 +430,15 @@ struct	outproto protos[] = {
 		udp_check
 	},
 	{
+		"udplite",
+		"spt dpt cov sum",
+		IPPROTO_UDPLITE,
+		sizeof(struct udphdr),
+		32768 + 666,
+		udplite_prep,
+		udplite_check
+	},
+	{
 		"tcp",
 		"spt dpt seq     ack     xxflwin sum urp",
 		IPPROTO_TCP,
@@ -433,6 +448,15 @@ struct	outproto protos[] = {
 		tcp_check
 	},
 	{
+		"sctp",
+		"spt dpt vtag    crc     tyfllen tyfllen ",
+		IPPROTO_SCTP,
+		sizeof(struct sctphdr),
+		32768 + 666,
+		sctp_prep,
+		sctp_check
+	},
+	{
 		"gre",
 		"flg pro len clid",
 		IPPROTO_GRE,
@@ -452,7 +476,7 @@ struct	outproto protos[] = {
 	},
 	{
 		NULL,
-		NULL,
+		"",
 		0,
 		2 * sizeof(u_short),
 		0,
@@ -541,12 +565,12 @@ main(int argc, char **argv)
 		case 'a':
 			as_path = 1;
 			break;
-			
+
 		case 'A':
 			as_path = 1;
 			as_server = optarg;
 			break;
-			    
+
 		case 'd':
 			options |= SO_DEBUG;
 			break;
@@ -669,8 +693,11 @@ main(int argc, char **argv)
 
 	if (lsrr > 0)
 		optlen = (lsrr + 1) * sizeof(gwlist[0]);
-	minpacket = sizeof(*outip) + proto->hdrlen + sizeof(struct outdata) + optlen;
-	packlen = minpacket;			/* minimum sized packet */
+	minpacket = sizeof(*outip) + proto->hdrlen + optlen;
+	if (minpacket > 40)
+		packlen = minpacket;
+	else
+		packlen = 40;
 
 	/* Process destination and optional packet size */
 	switch (argc - optind) {
@@ -704,6 +731,11 @@ main(int argc, char **argv)
 #endif
 
 	protlen = packlen - sizeof(*outip) - optlen;
+	if ((proto->num == IPPROTO_SCTP) && (packlen & 3)) {
+		Fprintf(stderr, "%s: packet length must be a multiple of 4\n",
+		    prog);
+		exit(1);
+	}
 
 	outip = (struct ip *)malloc((unsigned)packlen);
 	if (outip == NULL) {
@@ -931,7 +963,7 @@ main(int argc, char **argv)
 			as_path = 0;
 		}
 	}
-	
+
 #if	defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
 	if (setpolicy(sndsock, "in bypass") < 0)
 		errx(1, "%s", ipsec_strerror());
@@ -1330,7 +1362,7 @@ packet_ok(register u_char *buf, int cc, 
 		hiplen = ((u_char *)icp + cc) - (u_char *)hip;
 		hlen = hip->ip_hl << 2;
 		inner = (u_char *)((u_char *)hip + hlen);
-		if (hlen + 12 <= cc
+		if (hlen + 16 <= cc
 		    && hip->ip_p == proto->num
 		    && (*proto->check)(inner, (u_char)seq))
 			return (type == ICMP_TIMXCEED ? -1 : code + 1);
@@ -1343,8 +1375,8 @@ packet_ok(register u_char *buf, int cc, 
 		Printf("\n%d bytes from %s to ", cc, inet_ntoa(from->sin_addr));
 		Printf("%s: icmp type %d (%s) code %d\n",
 		    inet_ntoa(ip->ip_dst), type, pr_type(type), icp->icmp_code);
-		for (i = 4; i < cc ; i += sizeof(*lp))
-			Printf("%2d: x%8.8x\n", i, *lp++);
+		for (i = 4; i <= cc - ICMP_MINLEN; i += sizeof(*lp))
+			Printf("%2d: %8.8x\n", i, ntohl(*lp++));
 	}
 #endif
 	return(0);
@@ -1383,7 +1415,7 @@ udp_prep(struct outdata *outdata)
 	outudp->uh_ulen = htons((u_short)protlen);
 	outudp->uh_sum = 0;
 	if (doipcksum) {
-	    u_short sum = p_cksum(outip, (u_short*)outudp, protlen);
+	    u_short sum = p_cksum(outip, (u_short*)outudp, protlen, protlen);
 	    outudp->uh_sum = (sum) ? sum : 0xffff;
 	}
 
@@ -1400,6 +1432,32 @@ udp_check(const u_char *data, int seq)
 }
 
 void
+udplite_prep(struct outdata *outdata)
+{
+	struct udphdr *const outudp = (struct udphdr *) outp;
+
+	outudp->uh_sport = htons(ident + (fixedPort ? outdata->seq : 0));
+	outudp->uh_dport = htons(port + (fixedPort ? 0 : outdata->seq));
+	outudp->uh_ulen = htons(8);
+	outudp->uh_sum = 0;
+	if (doipcksum) {
+	    u_short sum = p_cksum(outip, (u_short*)outudp, protlen, 8);
+	    outudp->uh_sum = (sum) ? sum : 0xffff;
+	}
+
+	return;
+}
+
+int
+udplite_check(const u_char *data, int seq)
+{
+	struct udphdr *const udp = (struct udphdr *) data;
+
+	return (ntohs(udp->uh_sport) == ident + (fixedPort ? seq : 0) &&
+	    ntohs(udp->uh_dport) == port + (fixedPort ? 0 : seq));
+}
+
+void
 tcp_prep(struct outdata *outdata)
 {
 	struct tcphdr *const tcp = (struct tcphdr *) outp;
@@ -1412,10 +1470,8 @@ tcp_prep(struct outdata *outdata)
 	tcp->th_flags = TH_SYN;
 	tcp->th_sum = 0;
 
-	if (doipcksum) {
-	    u_short sum = p_cksum(outip, (u_short*)tcp, protlen);
-	    tcp->th_sum = (sum) ? sum : 0xffff;
-	}
+	if (doipcksum)
+	    tcp->th_sum = p_cksum(outip, (u_short*)tcp, protlen, protlen);
 }
 
 int
@@ -1429,6 +1485,47 @@ tcp_check(const u_char *data, int seq)
 }
 
 void
+sctp_prep(struct outdata *outdata)
+{
+	struct sctphdr *const sctp = (struct sctphdr *) outp;
+	struct sctp_chunkhdr *chk;
+
+	sctp->src_port = htons(ident);
+	sctp->dest_port = htons(port + (fixedPort ? 0 : outdata->seq));
+	sctp->v_tag = (sctp->src_port << 16) | sctp->dest_port;
+	sctp->checksum = htonl(0);
+	if (protlen >=
+	    (int)(sizeof(struct sctphdr) + sizeof(struct sctp_chunkhdr))) {
+		chk = (struct sctp_chunkhdr *)(sctp + 1);
+		chk->chunk_type = SCTP_SHUTDOWN_ACK;
+		chk->chunk_flags = 0;
+		chk->chunk_length = htons(4);
+	}
+	if (protlen >=
+	    (int)(sizeof(struct sctphdr) + 2 * sizeof(struct sctp_chunkhdr))) {
+		chk = chk + 1;
+		chk->chunk_type = SCTP_PAD_CHUNK;
+		chk->chunk_flags = 0;
+		chk->chunk_length = htons(protlen -
+		    (sizeof(struct sctphdr) + sizeof(struct sctp_chunkhdr)));
+	}
+	if (doipcksum) {
+		sctp->checksum = sctp_crc32c(sctp, protlen);
+	}
+}
+
+int
+sctp_check(const u_char *data, int seq)
+{
+	struct sctphdr *const sctp = (struct sctphdr *) data;
+
+	return (ntohs(sctp->src_port) == ident
+	    && ntohs(sctp->dest_port) == port + (fixedPort ? 0 : seq)
+	    && sctp->v_tag ==
+	    (u_int32_t)((sctp->src_port << 16) | sctp->dest_port));
+}
+
+void
 gre_prep(struct outdata *outdata)
 {
 	struct grehdr *const gre = (struct grehdr *) outp;
@@ -1494,8 +1591,8 @@ print(register u_char *buf, register int
 /*
  * Checksum routine for UDP and TCP headers.
  */
-u_short 
-p_cksum(struct ip *ip, u_short *data, int len)
+u_short
+p_cksum(struct ip *ip, u_short *data, int len, int cov)
 {
 	static struct ipovly ipo;
 	u_short sum[2];
@@ -1506,7 +1603,7 @@ p_cksum(struct ip *ip, u_short *data, in
 	ipo.ih_dst = ip->ip_dst;
 
 	sum[1] = in_cksum((u_short*)&ipo, sizeof(ipo)); /* pseudo ip hdr cksum */
-	sum[0] = in_cksum(data, len);                   /* payload data cksum */
+	sum[0] = in_cksum(data, cov);                   /* payload data cksum */
 
 	return ~in_cksum(sum, sizeof(sum));
 }
@@ -1547,6 +1644,98 @@ in_cksum(register u_short *addr, registe
 }
 
 /*
+ * CRC32C routine for the Stream Control Transmission Protocol
+ */
+
+#define CRC32C(c, d) (c = (c>>8) ^ crc_c[(c^(d))&0xFF])
+
+static u_int32_t crc_c[256] = {
+	0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4,
+	0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
+	0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B,
+	0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
+	0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B,
+	0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
+	0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54,
+	0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
+	0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A,
+	0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
+	0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5,
+	0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
+	0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45,
+	0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
+	0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A,
+	0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
+	0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48,
+	0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
+	0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687,
+	0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
+	0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927,
+	0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
+	0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8,
+	0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
+	0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096,
+	0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
+	0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859,
+	0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
+	0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9,
+	0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
+	0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36,
+	0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
+	0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C,
+	0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
+	0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043,
+	0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
+	0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3,
+	0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
+	0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C,
+	0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
+	0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652,
+	0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
+	0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D,
+	0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
+	0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D,
+	0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
+	0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2,
+	0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
+	0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530,
+	0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
+	0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF,
+	0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
+	0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F,
+	0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
+	0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90,
+	0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
+	0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE,
+	0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
+	0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321,
+	0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
+	0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81,
+	0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
+	0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E,
+	0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
+};
+
+u_int32_t
+sctp_crc32c(const void *packet, u_int32_t len)
+{
+	u_int32_t i, crc32c;
+	u_int8_t byte0, byte1, byte2, byte3;
+	const u_int8_t *buf = (const u_int8_t *)packet;
+
+	crc32c = ~0;
+	for (i = 0; i < len; i++)
+		CRC32C(crc32c, buf[i]);
+	crc32c = ~crc32c;
+	byte0  = crc32c & 0xff;
+	byte1  = (crc32c>>8) & 0xff;
+	byte2  = (crc32c>>16) & 0xff;
+	byte3  = (crc32c>>24) & 0xff;
+	crc32c = ((byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3);
+	return htonl(crc32c);
+}
+
+/*
  * Subtract 2 timeval structs:  out = out - in.
  * Out is assumed to be within about LONG_MAX seconds of in.
  */

Modified: projects/clang-trunk/lib/libc/arm/SYS.h
==============================================================================
--- projects/clang-trunk/lib/libc/arm/SYS.h	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/SYS.h	Mon Jun  1 06:54:21 2015	(r283871)
@@ -39,15 +39,11 @@
 #include <sys/syscall.h>
 #include <machine/swi.h>
 
-#ifdef __ARM_EABI__
 #define SYSTRAP(x)							\
 			mov ip, r7;					\
 			ldr r7, =SYS_ ## x;				\
 			swi 0;						\
 			mov r7, ip
-#else
-#define SYSTRAP(x)	swi 0 | SYS_ ## x
-#endif
 
 #define	CERROR		_C_LABEL(cerror)
 #define	CURBRK		_C_LABEL(curbrk)

Modified: projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_double.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_double.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_double.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -56,7 +56,7 @@ ENTRY(__aeabi_cdcmple)
 	cmp	r0, #1
 	bne	1f
 	/* Yes, clear Z and C */
-	msr	cpsr_c, #(0)
+	mov	ip, #(0)
 	b	99f
 
 1:
@@ -70,14 +70,15 @@ ENTRY(__aeabi_cdcmple)
 	cmp	r0, #1
 	bne	2f
 	/* Yes, set Z and C */
-	msr	cpsr_c, #(PCR_Z | PCR_C)
+	mov	ip, #(PCR_Z | PCR_C)
 	b 99f
 
 2:
 	/* Not less than or equal, set C and clear Z */
-	msr	cpsr_c, #(PCR_C)
+	mov	ip, #(PCR_C)
 
 99:
+	msr	cpsr_c, ip
 	pop	{r4, r5, r6, r7, ip, pc}
 END(__aeabi_cdcmple)
 
@@ -112,6 +113,7 @@ ENTRY(__aeabi_cdcmpeq)
 	RET
 
 1:
-	msr	cpsr_c, #(PCR_C)
+	mov	ip, #(PCR_C)
+	msr	cpsr_c, ip
 	RET
 END(__aeabi_cdcmpeq)

Modified: projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_float.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_float.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/aeabi/aeabi_asm_float.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -54,7 +54,7 @@ ENTRY(__aeabi_cfcmple)
 	cmp	r0, #1
 	bne	1f
 	/* Yes, clear Z and C */
-	msr	cpsr_c, #(0)
+	mov	ip, #(0)
 	b	99f
 
 1:
@@ -66,14 +66,15 @@ ENTRY(__aeabi_cfcmple)
 	cmp	r0, #1
 	bne	2f
 	/* Yes, set Z and C */
-	msr	cpsr_c, #(PCR_Z | PCR_C)
+	mov	ip, #(PCR_Z | PCR_C)
 	b 99f
 
 2:
 	/* Not less than or equal, set C and clear Z */
-	msr	cpsr_c, #(PCR_C)
+	mov	ip, #(PCR_C)
 
 99:
+	msr	cpsr_c, ip
 	pop	{r4, r5, ip, pc}
 END(__aeabi_cfcmple)
 
@@ -103,6 +104,7 @@ ENTRY(__aeabi_cfcmpeq)
 	RET
 
 1:
-	msreq	cpsr_c, #(PCR_C)
+	mov	ip, #(PCR_C)
+	msr	cpsr_c, ip
 	RET
 END(__aeabi_cfcmpeq)

Modified: projects/clang-trunk/lib/libc/arm/gen/_setjmp.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/gen/_setjmp.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/gen/_setjmp.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -36,7 +36,7 @@
 #error FPA is not supported anymore
 #endif
 
-#if defined(__ARM_EABI__) && !defined(_STANDALONE)
+#if !defined(_STANDALONE)
 	.fpu	vfp
 #endif
 
@@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$");
 ENTRY(_setjmp)
 	ldr	r1, .L_setjmp_magic
 
-#if defined(__ARM_EABI__) && !defined(_STANDALONE)
+#if !defined(_STANDALONE)
 	ldr	r2, .Lfpu_present
 #ifdef PIC
 	GOT_INIT(r3, .L_setjmp_got, .L_setjmp_gotinit)
@@ -79,7 +79,7 @@ ENTRY(_setjmp)
 	vmrs	r2, fpscr
 	str	r2, [r0, #(_JB_REG_FPSCR * 4)]
 1:
-#endif /* __ARM_EABI__ */
+#endif /* !_STANDALONE */
 
 	str	r1, [r0]
 
@@ -99,11 +99,11 @@ END(_setjmp)
 
 .L_setjmp_magic:
 	.word	_JB_MAGIC__SETJMP
-#if defined(__ARM_EABI__) && !defined(_STANDALONE)
+#if !defined(_STANDALONE)
 	GOT_INITSYM(.L_setjmp_got, .L_setjmp_gotinit)
 .Lfpu_present:
 	.word	PIC_SYM(_libc_arm_fpu_present, GOTOFF)
-#endif /* __ARM_EABI__ */
+#endif /* !_STANDALONE */
 
 WEAK_ALIAS(___longjmp, _longjmp)
 ENTRY(_longjmp)
@@ -114,7 +114,7 @@ ENTRY(_longjmp)
 	teq	ip, r3				/* magic correct? */
 	bne	botch				/*   no, botch */
 
-#if defined(__ARM_EABI__) && !defined(_STANDALONE)
+#if !defined(_STANDALONE)
 	teq	r3, r2				/* did magic change? */
 	beq	1f				/*   no, don't restore VFP */
 	add	ip, r0, #(_JB_REG_D8 * 4)
@@ -122,7 +122,7 @@ ENTRY(_longjmp)
 	ldr	ip, [r0, #(_JB_REG_FPSCR * 4)]
 	vmsr	fpscr, ip
 1:
-#endif /* __ARM_EABI__ */
+#endif /* !_STANDALONE */
 
 	add	r0, r0, #(_JB_REG_R4 * 4)
        	/* Restore integer registers */

Modified: projects/clang-trunk/lib/libc/arm/gen/setjmp.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/gen/setjmp.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/gen/setjmp.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -36,9 +36,7 @@
 #error FPA is not supported anymore
 #endif
 
-#ifdef __ARM_EABI__
 	.fpu	vfp
-#endif
 
 #include <machine/asm.h>
 #include <machine/setjmp.h>
@@ -66,7 +64,6 @@ ENTRY(setjmp)
 
 	ldr	r1, .Lsetjmp_magic
 
-#ifdef __ARM_EABI__
 	ldr	r2, .Lfpu_present
 #ifdef PIC
 	GOT_INIT(r3, .Lsetjmp_got, .Lsetjmp_gotinit)
@@ -84,7 +81,6 @@ ENTRY(setjmp)
 	vmrs	r2, fpscr
 	str	r2, [r0, #(_JB_REG_FPSCR * 4)]
 1:
-#endif /* __ARM_EABI__ */
 
 	str	r1, [r0]		/* store magic */
 
@@ -102,11 +98,9 @@ ENTRY(setjmp)
 
 .Lsetjmp_magic:
 	.word	_JB_MAGIC_SETJMP
-#ifdef __ARM_EABI__
 	GOT_INITSYM(.Lsetjmp_got, .Lsetjmp_gotinit)
 .Lfpu_present:
 	.word	PIC_SYM(_libc_arm_fpu_present, GOTOFF)
-#endif /* __ARM_EABI__ */
 END(setjmp)
 
 .weak _C_LABEL(longjmp)
@@ -126,7 +120,6 @@ ENTRY(__longjmp)
 	bl	PIC_SYM(_C_LABEL(sigprocmask), PLT)
 	ldmfd	sp!, {r0-r2, r14}
 
-#ifdef __ARM_EABI__
 	tst	r2, #(_JB_MAGIC_SETJMP ^ _JB_MAGIC_SETJMP_VFP)
 						/* is this a VFP magic? */
 	beq	1f				/*   no, don't restore VFP */
@@ -135,7 +128,6 @@ ENTRY(__longjmp)
 	ldr	ip, [r0, #(_JB_REG_FPSCR * 4)]
 	vmsr	fpscr, ip
 1:
-#endif /* __ARM_EABI__ */
 
 	add	r0, r0, #(_JB_REG_R4 * 4)
 	/* Restore integer registers */

Modified: projects/clang-trunk/lib/libc/arm/string/ffs.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/string/ffs.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/string/ffs.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -78,6 +78,7 @@ ENTRY(ffs)
 	.byte	31,  0,  0,  0,  0, 24,  0, 20  /* 48-55 */
 	.byte   30,  0, 23, 19, 29, 18, 17,  0  /* 56-63 */
 #else
+	itt	ne
 	clzne	r0, r0
 	rsbne	r0, r0, #32
 	RET

Modified: projects/clang-trunk/lib/libc/arm/string/memmove.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/string/memmove.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/string/memmove.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -48,7 +48,9 @@ ENTRY(bcopy)
 #endif
 	/* Do the buffers overlap? */
 	cmp	r0, r1
+	it	eq
 	RETeq		/* Bail now if src/dst are the same */
+	ite	cc
 	subcc	r3, r0, r1	/* if (dst > src) r3 = dst - src */
 	subcs	r3, r1, r0	/* if (src > dsr) r3 = src - dst */
 	cmp	r3, r2		/* if (r3 < len) we have an overlap */
@@ -56,8 +58,10 @@ ENTRY(bcopy)
 
 	/* Determine copy direction */
 	cmp	r1, r0
+	it	cc
 	bcc	.Lmemmove_backwards
 
+	itt	eq
 	moveq	r0, #0			/* Quick abort for len=0 */
 	RETeq
 
@@ -88,6 +92,7 @@ ENTRY(bcopy)
 	bge	.Lmemmove_floop32
 
 	cmn	r2, #0x10
+	ittt	ge
 	ldmiage	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */
 	stmiage	r0!, {r3, r4, r12, lr}
 	subge	r2, r2, #0x10         
@@ -98,6 +103,7 @@ ENTRY(bcopy)
 
 	/* blat 12 bytes at a time */
 .Lmemmove_floop12:
+	ittt	ge
 	ldmiage	r1!, {r3, r12, lr}
 	stmiage	r0!, {r3, r12, lr}
 	subsge	r2, r2, #0x0c         
@@ -108,8 +114,10 @@ ENTRY(bcopy)
 	blt	.Lmemmove_fl4
 
 	subs	r2, r2, #4
+	itt	lt
 	ldrlt	r3, [r1], #4
 	strlt	r3, [r0], #4
+	ittt	ge
 	ldmiage	r1!, {r3, r12}
 	stmiage	r0!, {r3, r12}
 	subge	r2, r2, #4
@@ -117,14 +125,17 @@ ENTRY(bcopy)
 .Lmemmove_fl4:
 	/* less than 4 bytes to go */
 	adds	r2, r2, #4
+	it	eq
 	ldmiaeq	sp!, {r0, pc}		/* done */
 
 	/* copy the crud byte at a time */
 	cmp	r2, #2
 	ldrb	r3, [r1], #1
 	strb	r3, [r0], #1
+	itt	ge
 	ldrbge	r3, [r1], #1
 	strbge	r3, [r0], #1
+	itt	gt
 	ldrbgt	r3, [r1], #1
 	strbgt	r3, [r0], #1
 	ldmia	sp!, {r0, pc}
@@ -137,8 +148,10 @@ ENTRY(bcopy)
 	/* align destination with byte copies */
 	ldrb	r3, [r1], #1
 	strb	r3, [r0], #1
+	itt	ge
 	ldrbge	r3, [r1], #1
 	strbge	r3, [r0], #1
+	itt	gt
 	ldrbgt	r3, [r1], #1
 	strbgt	r3, [r0], #1
 	subs	r2, r2, r12
@@ -355,10 +368,12 @@ ENTRY(bcopy)
 
 .Lmemmove_bl32:
 	cmn	r2, #0x10            
+	ittt	ge
 	ldmdbge	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */
 	stmdbge	r0!, {r3, r4, r12, lr}
 	subge	r2, r2, #0x10         
 	adds	r2, r2, #0x14         
+	ittt	ge
 	ldmdbge	r1!, {r3, r12, lr}	/* blat a remaining 12 bytes */
 	stmdbge	r0!, {r3, r12, lr}
 	subge	r2, r2, #0x0c         
@@ -368,8 +383,10 @@ ENTRY(bcopy)
 	adds	r2, r2, #8
 	blt	.Lmemmove_bl4
 	subs	r2, r2, #4
+	itt	lt
 	ldrlt	r3, [r1, #-4]!
 	strlt	r3, [r0, #-4]!
+	ittt	ge
 	ldmdbge	r1!, {r3, r12}
 	stmdbge	r0!, {r3, r12}
 	subge	r2, r2, #4
@@ -377,14 +394,17 @@ ENTRY(bcopy)
 .Lmemmove_bl4:
 	/* less than 4 bytes to go */
 	adds	r2, r2, #4
+	it	eq
 	RETeq			/* done */
 
 	/* copy the crud byte at a time */
 	cmp	r2, #2
 	ldrb	r3, [r1, #-1]!
 	strb	r3, [r0, #-1]!
+	itt	ge
 	ldrbge	r3, [r1, #-1]!
 	strbge	r3, [r0, #-1]!
+	itt	gt
 	ldrbgt	r3, [r1, #-1]!
 	strbgt	r3, [r0, #-1]!
 	RET
@@ -396,8 +416,10 @@ ENTRY(bcopy)
 	/* align destination with byte copies */
 	ldrb	r3, [r1, #-1]!
 	strb	r3, [r0, #-1]!
+	itt	ge
 	ldrbge	r3, [r1, #-1]!
 	strbge	r3, [r0, #-1]!
+	itt	gt
 	ldrbgt	r3, [r1, #-1]!
 	strbgt	r3, [r0, #-1]!
 	subs	r2, r2, r12

Modified: projects/clang-trunk/lib/libc/arm/string/memset.S
==============================================================================
--- projects/clang-trunk/lib/libc/arm/string/memset.S	Mon Jun  1 06:50:39 2015	(r283870)
+++ projects/clang-trunk/lib/libc/arm/string/memset.S	Mon Jun  1 06:54:21 2015	(r283871)
@@ -114,6 +114,7 @@ ENTRY(memset)
 	orr	r3, r3, r3, lsl #16	/* Extend value to 32-bits */
 #endif
 #ifdef _ARM_ARCH_5E
+	itt	ne
 	subne	r1, r1, #0x04		/* Quad-align if necessary */
 	strne	r3, [ip], #0x04
 	cmp	r1, #0x10
@@ -127,18 +128,22 @@ ENTRY(memset)
 .Lmemset_loop128:
 	subs	r1, r1, #0x80
 #ifdef _ARM_ARCH_5E
+	itttt	ge
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
+	itttt	ge
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
+	itttt	ge
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
+	itttt	ge
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
@@ -162,6 +167,7 @@ ENTRY(memset)
 	stmiage	ip!, {r2-r3}
 #endif
 	bgt	.Lmemset_loop128
+	it	eq
 	RETeq			/* Zero length so just exit */
 
 	add	r1, r1, #0x80		/* Adjust for extra sub */
@@ -169,6 +175,7 @@ ENTRY(memset)
 	/* Do 32 bytes at a time */
 .Lmemset_loop32:
 	subs	r1, r1, #0x20
+	itttt	ge
 #ifdef _ARM_ARCH_5E
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
@@ -181,11 +188,13 @@ ENTRY(memset)
 	stmiage	ip!, {r2-r3}
 #endif
 	bgt	.Lmemset_loop32
+	it	eq
 	RETeq			/* Zero length so just exit */
 
 	adds	r1, r1, #0x10		/* Partially adjust for extra sub */
 
 	/* Deal with 16 bytes or more */
+	itt	ge
 #ifdef _ARM_ARCH_5E
 	strdge	r2, [ip], #0x08
 	strdge	r2, [ip], #0x08
@@ -193,20 +202,25 @@ ENTRY(memset)
 	stmiage	ip!, {r2-r3}
 	stmiage	ip!, {r2-r3}
 #endif
+	it	eq
 	RETeq			/* Zero length so just exit */
 
+	it	lt
 	addlt	r1, r1, #0x10		/* Possibly adjust for extra sub */
 
 	/* We have at least 4 bytes so copy as words */
 .Lmemset_loop4:
 	subs	r1, r1, #0x04
+	it	ge
 	strge	r3, [ip], #0x04
 	bgt	.Lmemset_loop4
+	it	eq
 	RETeq			/* Zero length so just exit */
 
 #ifdef _ARM_ARCH_5E
 	/* Compensate for 64-bit alignment check */

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506010654.t516sLO8081918>