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>