Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Aug 2008 00:34:50 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 148481 for review
Message-ID:  <200808260034.m7Q0Yo5o031687@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=148481

Change 148481 by jb@freebsd3 on 2008/08/26 00:34:41

	IF7

Affected files ...

.. //depot/projects/dtrace7/src/etc/defaults/rc.conf#8 integrate
.. //depot/projects/dtrace7/src/etc/rc.d/Makefile#4 integrate
.. //depot/projects/dtrace7/src/etc/rc.d/kernel#2 delete
.. //depot/projects/dtrace7/src/lib/libarchive/test/test_compat_tar_hardlink.c#3 integrate
.. //depot/projects/dtrace7/src/lib/libarchive/test/test_pax_filename_encoding.c#3 integrate
.. //depot/projects/dtrace7/src/lib/libarchive/test/test_tar_large.c#3 integrate
.. //depot/projects/dtrace7/src/lib/libarchive/test/test_ustar_filenames.c#2 integrate
.. //depot/projects/dtrace7/src/lib/libarchive/test/test_write_disk_hardlink.c#3 integrate
.. //depot/projects/dtrace7/src/lib/libarchive/test/test_write_format_tar_ustar.c#2 integrate
.. //depot/projects/dtrace7/src/sys/amd64/amd64/bpf_jit_machdep.c#2 integrate
.. //depot/projects/dtrace7/src/sys/amd64/amd64/bpf_jit_machdep.h#2 integrate
.. //depot/projects/dtrace7/src/sys/boot/sparc64/loader/main.c#2 integrate
.. //depot/projects/dtrace7/src/sys/conf/newvers.sh#7 integrate
.. //depot/projects/dtrace7/src/sys/conf/options.sparc64#2 integrate
.. //depot/projects/dtrace7/src/sys/dev/mxge/if_mxge_var.h#3 integrate
.. //depot/projects/dtrace7/src/sys/i386/i386/bpf_jit_machdep.c#2 integrate
.. //depot/projects/dtrace7/src/sys/i386/i386/bpf_jit_machdep.h#2 integrate
.. //depot/projects/dtrace7/src/sys/kern/vfs_mount.c#6 integrate
.. //depot/projects/dtrace7/src/sys/net/bpf_jitter.c#2 integrate
.. //depot/projects/dtrace7/src/sys/net/bpf_jitter.h#2 integrate
.. //depot/projects/dtrace7/src/sys/netgraph/ng_l2tp.c#4 integrate
.. //depot/projects/dtrace7/src/sys/netinet/ip_divert.c#3 integrate
.. //depot/projects/dtrace7/src/sys/netinet/raw_ip.c#5 integrate
.. //depot/projects/dtrace7/src/sys/netinet/udp_usrreq.c#4 integrate
.. //depot/projects/dtrace7/src/sys/netinet6/icmp6.c#3 integrate
.. //depot/projects/dtrace7/src/sys/netinet6/raw_ip6.c#5 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/include/asi.h#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/include/cache.h#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/include/cpufunc.h#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/include/pcpu.h#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/pci/ofw_pci.h#3 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/pci/ofw_pcibus.c#5 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/pci/psycho.c#6 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/cheetah.c#3 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/clock.c#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/exception.S#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/locore.S#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/machdep.c#4 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/mp_locore.S#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/mp_machdep.c#5 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/pmap.c#4 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/prof_machdep.c#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/spitfire.c#3 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/stack_machdep.c#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/support.S#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/swtch.S#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/tick.c#2 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/tlb.c#3 integrate
.. //depot/projects/dtrace7/src/sys/sparc64/sparc64/trap.c#3 integrate
.. //depot/projects/dtrace7/src/tools/tools/crypto/cryptotest.c#3 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/Makefile#4 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/bsdtar.c#4 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/matching.c#4 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/test/Makefile#2 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_copy.c#2 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_option_T.c#2 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_option_q.c#1 branch
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_patterns.c#2 integrate
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_patterns.tgz.err.uu#1 branch
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_patterns.tgz.out.uu#1 branch
.. //depot/projects/dtrace7/src/usr.bin/tar/test/test_patterns.tgz.uu#1 branch
.. //depot/projects/dtrace7/src/usr.sbin/mountd/mountd.c#3 integrate

Differences ...

==== //depot/projects/dtrace7/src/etc/defaults/rc.conf#8 (text+ko) ====

@@ -15,7 +15,7 @@
 # For a more detailed explanation of all the rc.conf variables, please
 # refer to the rc.conf(5) manual page.
 #
-# $FreeBSD: src/etc/defaults/rc.conf,v 1.318.2.9 2008/05/06 10:50:51 mtm Exp $
+# $FreeBSD: src/etc/defaults/rc.conf,v 1.318.2.10 2008/08/25 16:37:58 des Exp $
 
 ##############################################################
 ###  Important initial Boot-time options  ####################
@@ -544,7 +544,6 @@
 sysvipc_enable="NO"	# Load System V IPC primitives at startup (or NO).
 linux_enable="NO"	# Linux binary compatibility loaded at startup (or NO).
 svr4_enable="NO"	# SysVR4 emulation loaded at startup (or NO).
-
 clear_tmp_enable="NO"	# Clear /tmp at startup.
 clear_tmp_X="YES" 	# Clear and recreate X11-related directories in /tmp
 ldconfig_insecure="NO"	# Set to YES to disable ldconfig security checks

==== //depot/projects/dtrace7/src/etc/rc.d/Makefile#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/etc/rc.d/Makefile,v 1.84.2.4 2008/04/15 20:23:59 emax Exp $
+# $FreeBSD: src/etc/rc.d/Makefile,v 1.84.2.5 2008/08/25 16:37:58 des Exp $
 
 .include <bsd.own.mk>
 
@@ -18,7 +18,7 @@
 	ip6addrctl ip6fw ipfilter ipfs ipfw ipmon \
 	ipnat ipsec ipxrouted isdnd \
 	jail \
-	kadmind kerberos kernel keyserv kldxref kpasswdd \
+	kadmind kerberos keyserv kldxref kpasswdd \
 	ldconfig local localpkg lockd lpd \
 	mixer motd mountcritlocal mountcritremote mountlate \
 	mdconfig mdconfig2 mountd moused mroute6d mrouted msgs \

==== //depot/projects/dtrace7/src/lib/libarchive/test/test_compat_tar_hardlink.c#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_compat_tar_hardlink.c,v 1.1.2.2 2008/05/21 04:14:39 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/test/test_compat_tar_hardlink.c,v 1.1.2.3 2008/08/25 01:55:40 kientzle Exp $");
 
 /*
  * Background:  There are two written standards for the tar file format.
@@ -93,7 +93,11 @@
 	assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR);
 
 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_read_finish(a);
+#else
 	assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
+#endif
 }
 
 DEFINE_TEST(test_compat_tar_hardlink)

==== //depot/projects/dtrace7/src/lib/libarchive/test/test_pax_filename_encoding.c#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_pax_filename_encoding.c,v 1.1.2.2 2008/08/10 04:32:47 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/test/test_pax_filename_encoding.c,v 1.1.2.3 2008/08/25 01:55:40 kientzle Exp $");
 
 #include <locale.h>
 
@@ -149,7 +149,11 @@
 	archive_entry_free(entry);
 
 	assertEqualInt(0, archive_write_close(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_write_finish(a);
+#else
 	assertEqualInt(0, archive_write_finish(a));
+#endif
 
 	/*
 	 * Now read the entries back.
@@ -175,7 +179,11 @@
 	assertEqualString(longname, archive_entry_pathname(entry));
 
 	assertEqualInt(0, archive_read_close(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_read_finish(a);
+#else
 	assertEqualInt(0, archive_read_finish(a));
+#endif
 }
 
 /*
@@ -249,7 +257,11 @@
 	archive_entry_free(entry);
 
 	assertEqualInt(0, archive_write_close(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_write_finish(a);
+#else
 	assertEqualInt(0, archive_write_finish(a));
+#endif
 
 	/*
 	 * Now read the entries back.
@@ -293,5 +305,9 @@
 	assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &entry));
 
 	assertEqualInt(0, archive_read_close(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_read_finish(a);
+#else
 	assertEqualInt(0, archive_read_finish(a));
+#endif
 }

==== //depot/projects/dtrace7/src/lib/libarchive/test/test_tar_large.c#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_tar_large.c,v 1.1.2.2 2008/08/10 04:32:47 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/test/test_tar_large.c,v 1.1.2.3 2008/08/25 01:55:40 kientzle Exp $");
 
 #include <errno.h>
 #include <stdlib.h>
@@ -179,7 +179,6 @@
 #else
 static off_t
 memory_read_skip(struct archive *a, void *_private, off_t skip)
-#endif
 {
 	struct memdata *private = _private;
 
@@ -198,6 +197,7 @@
 	}
 	return (skip);
 }
+#endif
 
 DEFINE_TEST(test_tar_large)
 {

==== //depot/projects/dtrace7/src/lib/libarchive/test/test_ustar_filenames.c#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_ustar_filenames.c,v 1.1.2.1 2008/08/10 04:32:47 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/test/test_ustar_filenames.c,v 1.1.2.2 2008/08/25 01:55:40 kientzle Exp $");
 
 /*
  * Exercise various lengths of filenames in ustar archives.
@@ -111,7 +111,11 @@
 
 	/* Close out the archive. */
 	assertA(0 == archive_write_close(a));
-	assertA(0 == archive_write_finish(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_write_finish(a);
+#else
+	assertEqualInt(0, archive_write_finish(a));
+#endif
 
 	/*
 	 * Now, read the data back.
@@ -153,7 +157,11 @@
 	failure("This fails if entries were written that should not have been written.  dlen=%d, flen=%d", dlen, flen);
 	assertEqualInt(1, archive_read_next_header(a, &ae));
 	assert(0 == archive_read_close(a));
-	assert(0 == archive_read_finish(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_read_finish(a);
+#else
+	assertEqualInt(0, archive_read_finish(a));
+#endif
 }
 
 DEFINE_TEST(test_ustar_filenames)

==== //depot/projects/dtrace7/src/lib/libarchive/test/test_write_disk_hardlink.c#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_write_disk_hardlink.c,v 1.1.2.2 2008/08/10 04:32:47 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/test/test_write_disk_hardlink.c,v 1.1.2.3 2008/08/25 01:55:40 kientzle Exp $");
 
 #define UMASK 022
 
@@ -131,7 +131,11 @@
 	assertEqualInt(sizeof(data), archive_write_data(ad, data, sizeof(data)));
 	assertEqualIntA(ad, 0, archive_write_finish_entry(ad));
 	archive_entry_free(ae);
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_write_finish(ad);
+#else
 	assertEqualInt(0, archive_write_finish(ad));
+#endif
 
 	/* Test the entries on disk. */
 	assert(0 == stat("link1a", &st));

==== //depot/projects/dtrace7/src/lib/libarchive/test/test_write_format_tar_ustar.c#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/test/test_write_format_tar_ustar.c,v 1.1.2.1 2008/08/10 04:32:47 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/test/test_write_format_tar_ustar.c,v 1.1.2.2 2008/08/25 01:55:40 kientzle Exp $");
 
 static int
 is_null(const char *p, size_t l)
@@ -188,7 +188,11 @@
 	assertEqualIntA(a, 0, archive_write_header(a, entry));
 	archive_entry_free(entry);
 
+#if ARCHIVE_VERSION_NUMBER < 2000000
+	archive_write_finish(a);
+#else
 	assert(0 == archive_write_finish(a));
+#endif
 
 	/*
 	 * Verify the archive format.

==== //depot/projects/dtrace7/src/sys/amd64/amd64/bpf_jit_machdep.c#2 (text+ko) ====

@@ -1,6 +1,6 @@
 /*-
- * Copyright (c) 2002 - 2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (c) 2005 Jung-uk Kim <jkim@FreeBSD.org>
+ * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
+ * Copyright (C) 2005-2008 Jung-uk Kim <jkim@FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,18 +30,22 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,v 1.4 2006/01/03 20:26:02 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,v 1.4.2.1 2008/08/25 19:06:02 jkim Exp $");
 
+#ifdef _KERNEL
 #include "opt_bpf.h"
-
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/malloc.h>
+#include <net/if.h>
+#else
+#include <stdlib.h>
+#endif
+
+#include <sys/types.h>
 
-#include <net/if.h>
 #include <net/bpf.h>
 #include <net/bpf_jitter.h>
 
@@ -53,7 +57,7 @@
  * emit routine to update the jump table
  */
 static void
-emit_length(bpf_bin_stream *stream, u_int value, u_int len)
+emit_length(bpf_bin_stream *stream, __unused u_int value, u_int len)
 {
 
 	(stream->refs)[stream->bpf_pc] += len;
@@ -105,13 +109,17 @@
 
 	/* Do not compile an empty filter. */
 	if (nins == 0)
-		return NULL;
+		return (NULL);
 
 	/* Allocate the reference table for the jumps */
+#ifdef _KERNEL
 	stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int),
 	    M_BPFJIT, M_NOWAIT);
+#else
+	stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int));
+#endif
 	if (stream.refs == NULL)
-		return NULL;
+		return (NULL);
 
 	/* Reset the reference table */
 	for (i = 0; i < nins + 1; i++)
@@ -131,145 +139,167 @@
 		ins = prog;
 
 		/* create the procedure header */
-		PUSH(RBP);
-		MOVrq(RBP, RSP);
-		MOVoqd(RBP, -8, ESI);
-		MOVoqd(RBP, -12, EDX);
-		PUSH(RBX);
-		MOVrq(RBX, RDI);
+		MOVrq2(RBX, R8);
+		MOVrq(RDI, RBX);
+		MOVrd2(ESI, R9D);
+		MOVrd(EDX, EDI);
 
 		for (i = 0; i < nins; i++) {
 			stream.bpf_pc++;
 
 			switch (ins->code) {
 			default:
-				return NULL;
+#ifdef _KERNEL
+				return (NULL);
+#else
+				abort();
+#endif
 
 			case BPF_RET|BPF_K:
-				MOVid(EAX, ins->k);
-				POP(RBX);
-				LEAVE_RET();
+				MOVid(ins->k, EAX);
+				MOVrq3(R8, RBX);
+				RET();
 				break;
 
 			case BPF_RET|BPF_A:
-				POP(RBX);
-				LEAVE_RET();
+				MOVrq3(R8, RBX);
+				RET();
 				break;
 
 			case BPF_LD|BPF_W|BPF_ABS:
-				MOVid(ECX, ins->k);
-				MOVrd(ESI, ECX);
-				ADDib(ECX, sizeof(int));
-				CMPodd(ECX, RBP, -12);
-				JLEb(5);
-				ZERO_EAX();
-				POP(RBX);
-				LEAVE_RET();
-				MOVobd(EAX, RBX, RSI);
+				MOVid(ins->k, ESI);
+				CMPrd(EDI, ESI);
+				JAb(12);
+				MOVrd(EDI, ECX);
+				SUBrd(ESI, ECX);
+				CMPid(sizeof(int32_t), ECX);
+				JAEb(6);
+				ZEROrd(EAX);
+				MOVrq3(R8, RBX);
+				RET();
+				MOVobd(RBX, RSI, EAX);
 				BSWAP(EAX);
 				break;
 
 			case BPF_LD|BPF_H|BPF_ABS:
-				ZERO_EAX();
-				MOVid(ECX, ins->k);
-				MOVrd(ESI, ECX);
-				ADDib(ECX, sizeof(short));
-				CMPodd(ECX, RBP, -12);
-				JLEb(3);
-				POP(RBX);
-				LEAVE_RET();
-				MOVobw(AX, RBX, RSI);
+				ZEROrd(EAX);
+				MOVid(ins->k, ESI);
+				CMPrd(EDI, ESI);
+				JAb(12);
+				MOVrd(EDI, ECX);
+				SUBrd(ESI, ECX);
+				CMPid(sizeof(int16_t), ECX);
+				JAEb(4);
+				MOVrq3(R8, RBX);
+				RET();
+				MOVobw(RBX, RSI, AX);
 				SWAP_AX();
 				break;
 
 			case BPF_LD|BPF_B|BPF_ABS:
-				ZERO_EAX();
-				MOVid(ECX, ins->k);
-				CMPodd(ECX, RBP, -12);
-				JLEb(3);
-				POP(RBX);
-				LEAVE_RET();
-				MOVobb(AL, RBX, RCX);
+				ZEROrd(EAX);
+				MOVid(ins->k, ESI);
+				CMPrd(EDI, ESI);
+				JBb(4);
+				MOVrq3(R8, RBX);
+				RET();
+				MOVobb(RBX, RSI, AL);
 				break;
 
 			case BPF_LD|BPF_W|BPF_LEN:
-				MOVodd(EAX, RBP, -8);
+				MOVrd3(R9D, EAX);
 				break;
 
 			case BPF_LDX|BPF_W|BPF_LEN:
-				MOVodd(EDX, RBP, -8);
+				MOVrd3(R9D, EDX);
 				break;
 
 			case BPF_LD|BPF_W|BPF_IND:
-				MOVid(ECX, ins->k);
-				ADDrd(ECX, EDX);
-				MOVrd(ESI, ECX);
-				ADDib(ECX, sizeof(int));
-				CMPodd(ECX, RBP, -12);
-				JLEb(5);
-				ZERO_EAX();
-				POP(RBX);
-				LEAVE_RET();
-				MOVobd(EAX, RBX, RSI);
+				CMPrd(EDI, EDX);
+				JAb(27);
+				MOVid(ins->k, ESI);
+				MOVrd(EDI, ECX);
+				SUBrd(EDX, ECX);
+				CMPrd(ESI, ECX);
+				JBb(14);
+				ADDrd(EDX, ESI);
+				MOVrd(EDI, ECX);
+				SUBrd(ESI, ECX);
+				CMPid(sizeof(int32_t), ECX);
+				JAEb(6);
+				ZEROrd(EAX);
+				MOVrq3(R8, RBX);
+				RET();
+				MOVobd(RBX, RSI, EAX);
 				BSWAP(EAX);
 				break;
 
 			case BPF_LD|BPF_H|BPF_IND:
-				ZERO_EAX();
-				MOVid(ECX, ins->k);
-				ADDrd(ECX, EDX);
-				MOVrd(ESI, ECX);
-				ADDib(ECX, sizeof(short));
-				CMPodd(ECX, RBP, -12);
-				JLEb(3);
-				POP(RBX);
-				LEAVE_RET();
-				MOVobw(AX, RBX, RSI);
+				ZEROrd(EAX);
+				CMPrd(EDI, EDX);
+				JAb(27);
+				MOVid(ins->k, ESI);
+				MOVrd(EDI, ECX);
+				SUBrd(EDX, ECX);
+				CMPrd(ESI, ECX);
+				JBb(14);
+				ADDrd(EDX, ESI);
+				MOVrd(EDI, ECX);
+				SUBrd(ESI, ECX);
+				CMPid(sizeof(int16_t), ECX);
+				JAEb(4);
+				MOVrq3(R8, RBX);
+				RET();
+				MOVobw(RBX, RSI, AX);
 				SWAP_AX();
 				break;
 
 			case BPF_LD|BPF_B|BPF_IND:
-				ZERO_EAX();
-				MOVid(ECX, ins->k);
-				ADDrd(ECX, EDX);
-				CMPodd(ECX, RBP, -12);
-				JLEb(3);
-				POP(RBX);
-				LEAVE_RET();
-				MOVobb(AL, RBX, RCX);
+				ZEROrd(EAX);
+				CMPrd(EDI, EDX);
+				JAEb(13);
+				MOVid(ins->k, ESI);
+				MOVrd(EDI, ECX);
+				SUBrd(EDX, ECX);
+				CMPrd(ESI, ECX);
+				JAb(4);
+				MOVrq3(R8, RBX);
+				RET();
+				ADDrd(EDX, ESI);
+				MOVobb(RBX, RSI, AL);
 				break;
 
 			case BPF_LDX|BPF_MSH|BPF_B:
-				MOVid(ECX, ins->k);
-				CMPodd(ECX, RBP, -12);
-				JLEb(5);
-				ZERO_EAX();
-				POP(RBX);
-				LEAVE_RET();
-				ZERO_EDX();
-				MOVobb(DL, RBX, RCX);
-				ANDib(DL, 0xf);
-				SHLib(EDX, 2);
+				MOVid(ins->k, ESI);
+				CMPrd(EDI, ESI);
+				JBb(6);
+				ZEROrd(EAX);
+				MOVrq3(R8, RBX);
+				RET();
+				ZEROrd(EDX);
+				MOVobb(RBX, RSI, DL);
+				ANDib(0x0f, DL);
+				SHLib(2, EDX);
 				break;
 
 			case BPF_LD|BPF_IMM:
-				MOVid(EAX, ins->k);
+				MOVid(ins->k, EAX);
 				break;
 
 			case BPF_LDX|BPF_IMM:
-				MOVid(EDX, ins->k);
+				MOVid(ins->k, EDX);
 				break;
 
 			case BPF_LD|BPF_MEM:
-				MOViq(RCX, (uintptr_t)mem);
-				MOVid(ESI, ins->k * 4);
-				MOVobd(EAX, RCX, RSI);
+				MOViq((uintptr_t)mem, RCX);
+				MOVid(ins->k * 4, ESI);
+				MOVobd(RCX, RSI, EAX);
 				break;
 
 			case BPF_LDX|BPF_MEM:
-				MOViq(RCX, (uintptr_t)mem);
-				MOVid(ESI, ins->k * 4);
-				MOVobd(EDX, RCX, RSI);
+				MOViq((uintptr_t)mem, RCX);
+				MOVid(ins->k * 4, ESI);
+				MOVobd(RCX, RSI, EDX);
 				break;
 
 			case BPF_ST:
@@ -278,15 +308,15 @@
 				 * be optimized if the previous instruction
 				 * was already of this type
 				 */
-				MOViq(RCX, (uintptr_t)mem);
-				MOVid(ESI, ins->k * 4);
-				MOVomd(RCX, RSI, EAX);
+				MOViq((uintptr_t)mem, RCX);
+				MOVid(ins->k * 4, ESI);
+				MOVomd(EAX, RCX, RSI);
 				break;
 
 			case BPF_STX:
-				MOViq(RCX, (uintptr_t)mem);
-				MOVid(ESI, ins->k * 4);
-				MOVomd(RCX, RSI, EDX);
+				MOViq((uintptr_t)mem, RCX);
+				MOVid(ins->k * 4, ESI);
+				MOVomd(EDX, RCX, RSI);
 				break;
 
 			case BPF_JMP|BPF_JA:
@@ -295,113 +325,102 @@
 				break;
 
 			case BPF_JMP|BPF_JGT|BPF_K:
-				CMPid(EAX, ins->k);
-				/* 5 is the size of the following JMP */
-				JG(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc] + 5 );
-				JMP(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				CMPid(ins->k, EAX);
+				JCC(JA, JBE);
 				break;
 
 			case BPF_JMP|BPF_JGE|BPF_K:
-				CMPid(EAX, ins->k);
-				JGE(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				CMPid(ins->k, EAX);
+				JCC(JAE, JB);
 				break;
 
 			case BPF_JMP|BPF_JEQ|BPF_K:
-				CMPid(EAX, ins->k);
-				JE(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				CMPid(ins->k, EAX);
+				JCC(JE, JNE);
 				break;
 
 			case BPF_JMP|BPF_JSET|BPF_K:
-				MOVrd(ECX, EAX);
-				ANDid(ECX, ins->k);
-				JE(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				TESTid(ins->k, EAX);
+				JCC(JNE, JE);
 				break;
 
 			case BPF_JMP|BPF_JGT|BPF_X:
-				CMPrd(EAX, EDX);
-				JA(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				CMPrd(EDX, EAX);
+				JCC(JA, JBE);
 				break;
 
 			case BPF_JMP|BPF_JGE|BPF_X:
-				CMPrd(EAX, EDX);
-				JAE(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				CMPrd(EDX, EAX);
+				JCC(JAE, JB);
 				break;
 
 			case BPF_JMP|BPF_JEQ|BPF_X:
-				CMPrd(EAX, EDX);
-				JE(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				CMPrd(EDX, EAX);
+				JCC(JE, JNE);
 				break;
 
 			case BPF_JMP|BPF_JSET|BPF_X:
-				MOVrd(ECX, EAX);
-				ANDrd(ECX, EDX);
-				JE(stream.refs[stream.bpf_pc + ins->jf] -
-				    stream.refs[stream.bpf_pc] + 5);
-				JMP(stream.refs[stream.bpf_pc + ins->jt] -
-				    stream.refs[stream.bpf_pc]);
+				if (ins->jt == 0 && ins->jf == 0)
+					break;
+				TESTrd(EDX, EAX);
+				JCC(JNE, JE);
 				break;
 
 			case BPF_ALU|BPF_ADD|BPF_X:
-				ADDrd(EAX, EDX);
+				ADDrd(EDX, EAX);
 				break;
 
 			case BPF_ALU|BPF_SUB|BPF_X:
-				SUBrd(EAX, EDX);
+				SUBrd(EDX, EAX);
 				break;
 
 			case BPF_ALU|BPF_MUL|BPF_X:
+				MOVrd(EDX, ECX);
+				MULrd(EDX);
 				MOVrd(ECX, EDX);
-				MULrd(EDX);
-				MOVrd(EDX, ECX);
 				break;
 
 			case BPF_ALU|BPF_DIV|BPF_X:
-				CMPid(EDX, 0);
-				JNEb(5);
-				ZERO_EAX();
-				POP(RBX);
-				LEAVE_RET();
+				TESTrd(EDX, EDX);
+				JNEb(6);
+				ZEROrd(EAX);
+				MOVrq3(R8, RBX);
+				RET();
+				MOVrd(EDX, ECX);
+				ZEROrd(EDX);
+				DIVrd(ECX);
 				MOVrd(ECX, EDX);
-				ZERO_EDX();
-				DIVrd(ECX);
-				MOVrd(EDX, ECX);
 				break;
 
 			case BPF_ALU|BPF_AND|BPF_X:
-				ANDrd(EAX, EDX);
+				ANDrd(EDX, EAX);
 				break;
 
 			case BPF_ALU|BPF_OR|BPF_X:
-				ORrd(EAX, EDX);
+				ORrd(EDX, EAX);
 				break;
 
 			case BPF_ALU|BPF_LSH|BPF_X:
-				MOVrd(ECX, EDX);
+				MOVrd(EDX, ECX);
 				SHL_CLrb(EAX);
 				break;
 
 			case BPF_ALU|BPF_RSH|BPF_X:
-				MOVrd(ECX, EDX);
+				MOVrd(EDX, ECX);
 				SHR_CLrb(EAX);
 				break;
 
@@ -414,34 +433,34 @@
 				break;
 
 			case BPF_ALU|BPF_MUL|BPF_K:
+				MOVrd(EDX, ECX);
+				MOVid(ins->k, EDX);
+				MULrd(EDX);
 				MOVrd(ECX, EDX);
-				MOVid(EDX, ins->k);
-				MULrd(EDX);
-				MOVrd(EDX, ECX);
 				break;
 
 			case BPF_ALU|BPF_DIV|BPF_K:
+				MOVrd(EDX, ECX);
+				ZEROrd(EDX);
+				MOVid(ins->k, ESI);
+				DIVrd(ESI);
 				MOVrd(ECX, EDX);
-				ZERO_EDX();
-				MOVid(ESI, ins->k);
-				DIVrd(ESI);
-				MOVrd(EDX, ECX);
 				break;
 
 			case BPF_ALU|BPF_AND|BPF_K:
-				ANDid(EAX, ins->k);
+				ANDid(ins->k, EAX);
 				break;
 
 			case BPF_ALU|BPF_OR|BPF_K:
-				ORid(EAX, ins->k);
+				ORid(ins->k, EAX);
 				break;
 
 			case BPF_ALU|BPF_LSH|BPF_K:
-				SHLib(EAX, (ins->k) & 255);
+				SHLib((ins->k) & 0xff, EAX);
 				break;
 
 			case BPF_ALU|BPF_RSH|BPF_K:
-				SHRib(EAX, (ins->k) & 255);
+				SHRib((ins->k) & 0xff, EAX);
 				break;
 
 			case BPF_ALU|BPF_NEG:
@@ -449,11 +468,11 @@
 				break;
 
 			case BPF_MISC|BPF_TAX:
-				MOVrd(EDX, EAX);
+				MOVrd(EAX, EDX);
 				break;
 
 			case BPF_MISC|BPF_TXA:
-				MOVrd(EAX, EDX);
+				MOVrd(EDX, EAX);
 				break;
 			}
 			ins++;
@@ -463,11 +482,19 @@
 		if (pass == 2)
 			break;
 
+#ifdef _KERNEL
 		stream.ibuf = (char *)malloc(stream.cur_ip, M_BPFJIT, M_NOWAIT);
 		if (stream.ibuf == NULL) {
 			free(stream.refs, M_BPFJIT);
-			return NULL;
+			return (NULL);
+		}
+#else
+		stream.ibuf = (char *)malloc(stream.cur_ip);
+		if (stream.ibuf == NULL) {
+			free(stream.refs);
+			return (NULL);
 		}
+#endif
 
 		/*
 		 * modify the reference table to contain the offsets and
@@ -488,7 +515,11 @@
 	 * the reference table is needed only during compilation,
 	 * now we can free it
 	 */
+#ifdef _KERNEL
 	free(stream.refs, M_BPFJIT);
+#else
+	free(stream.refs);
+#endif
 
-	return (bpf_filter_func)stream.ibuf;
+	return ((bpf_filter_func)stream.ibuf);
 }

==== //depot/projects/dtrace7/src/sys/amd64/amd64/bpf_jit_machdep.h#2 (text+ko) ====

@@ -1,6 +1,6 @@
 /*-
- * Copyright (c) 2002 - 2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (c) 2005 Jung-uk Kim <jkim@FreeBSD.org>
+ * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
+ * Copyright (C) 2005-2008 Jung-uk Kim <jkim@FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.h,v 1.3 2005/12/06 20:11:07 jkim Exp $
+ * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.h,v 1.3.2.1 2008/08/25 19:06:02 jkim Exp $
  */
 
 #ifndef _BPF_JIT_MACHDEP_H_
@@ -45,6 +45,14 @@
 #define RBP	5
 #define RSI	6
 #define RDI	7
+#define R8	0
+#define R9	1
+#define R10	2
+#define R11	3
+#define R12	4
+#define R13	5
+#define R14	6
+#define R15	7
 
 #define EAX	0
 #define ECX	1
@@ -54,6 +62,14 @@
 #define EBP	5
 #define ESI	6
 #define EDI	7
+#define R8D	0
+#define R9D	1
+#define R10D	2
+#define R11D	3
+#define R12D	4
+#define R13D	5
+#define R14D	6
+#define R15D	7
 
 #define AX	0
 #define CX	1
@@ -104,254 +120,257 @@
  * native Instruction Macros
  */
 
-/* mov r32,i32 */
-#define MOVid(r32, i32) do {						\
+/* movl i32,r32 */
+#define MOVid(i32, r32) do {						\
 	emitm(&stream, (11 << 4) | (1 << 3) | (r32 & 0x7), 1);		\
 	emitm(&stream, i32, 4);						\
 } while (0)
 
-/* mov r64,i64 */
-#define MOViq(r64, i64) do {						\
+/* movq i64,r64 */
+#define MOViq(i64, r64) do {						\
 	emitm(&stream, 0x48, 1);					\
 	emitm(&stream, (11 << 4) | (1 << 3) | (r64 & 0x7), 1);		\
 	emitm(&stream, i64, 4);						\
 	emitm(&stream, (i64 >> 32), 4);					\
 } while (0)
 
-/* mov dr32,sr32 */
-#define MOVrd(dr32, sr32) do {						\
-	emitm(&stream, (8 << 4) | 3 | (1 << 3), 1);			\
+/* movl sr32,dr32 */
+#define MOVrd(sr32, dr32) do {						\
+	emitm(&stream, 0x89, 1);					\
+	emitm(&stream,							\
+	    (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1);		\
+} while (0)
+
+/* movl sr32,dr32 (dr32 = %r8-15d) */
+#define MOVrd2(sr32, dr32) do {						\
+	emitm(&stream, 0x8941, 2);					\
+	emitm(&stream,							\
+	    (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1);		\
+} while (0)
+
+/* movl sr32,dr32 (sr32 = %r8-15d) */
+#define MOVrd3(sr32, dr32) do {						\
+	emitm(&stream, 0x8944, 2);					\
 	emitm(&stream,							\
-	    (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1);		\
+	    (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1);		\
 } while (0)

>>> TRUNCATED FOR MAIL (1000 lines) <<<



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