PERFORCE change 148481 for review
John Birrell
jb at FreeBSD.org
Tue Aug 26 00:34:51 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=148481
Change 148481 by jb at 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 at FreeBSD.org>
+ * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
+ * Copyright (C) 2005-2008 Jung-uk Kim <jkim at 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 at FreeBSD.org>
+ * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
+ * Copyright (C) 2005-2008 Jung-uk Kim <jkim at 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) <<<
More information about the p4-projects
mailing list