svn commit: r215464 - in projects/binutils-2.17: . cddl contrib/gcc contrib/gcc/config contrib/gcc/config/ia64 contrib/ipfilter/man contrib/top gnu/usr.bin/binutils/ld gnu/usr.bin/cc/cc_tools lib/l...

Dimitry Andric dim at FreeBSD.org
Thu Nov 18 18:30:04 UTC 2010


Author: dim
Date: Thu Nov 18 18:30:03 2010
New Revision: 215464
URL: http://svn.freebsd.org/changeset/base/215464

Log:
  Sync: merge r215396 through r215463 from ^/head.

Deleted:
  projects/binutils-2.17/lib/libautofs/
  projects/binutils-2.17/sbin/mount_autofs/
Modified:
  projects/binutils-2.17/Makefile.inc1
  projects/binutils-2.17/cddl/Makefile.inc
  projects/binutils-2.17/contrib/gcc/cgraphunit.c
  projects/binutils-2.17/contrib/gcc/config/elfos.h
  projects/binutils-2.17/contrib/gcc/config/ia64/hpux.h
  projects/binutils-2.17/contrib/gcc/config/ia64/ia64.c
  projects/binutils-2.17/contrib/gcc/output.h
  projects/binutils-2.17/contrib/gcc/toplev.c
  projects/binutils-2.17/contrib/gcc/varasm.c
  projects/binutils-2.17/contrib/ipfilter/man/ipnat.8
  projects/binutils-2.17/contrib/ipfilter/man/mkfilters.1
  projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.amd64
  projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/Makefile
  projects/binutils-2.17/lib/libusb/libusb.3
  projects/binutils-2.17/share/man/man4/ata.4
  projects/binutils-2.17/share/mk/Makefile
  projects/binutils-2.17/share/mk/bsd.crunchgen.mk
  projects/binutils-2.17/sys/amd64/amd64/amd64_mem.c
  projects/binutils-2.17/sys/boot/ofw/libofw/ofw_copy.c
  projects/binutils-2.17/sys/boot/ofw/libofw/ofw_net.c
  projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.c
  projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.h
  projects/binutils-2.17/sys/boot/powerpc/ofw/start.c
  projects/binutils-2.17/sys/cam/ata/ata_xpt.c
  projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
  projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  projects/binutils-2.17/sys/compat/ndis/ntoskrnl_var.h
  projects/binutils-2.17/sys/compat/ndis/subr_ntoskrnl.c
  projects/binutils-2.17/sys/crypto/aesni/aesni_wrap.c
  projects/binutils-2.17/sys/dev/ata/ata-pci.h
  projects/binutils-2.17/sys/dev/ata/ata-sata.c
  projects/binutils-2.17/sys/dev/ata/chipsets/ata-via.c
  projects/binutils-2.17/sys/dev/mii/atphy.c
  projects/binutils-2.17/sys/dev/nfe/if_nfe.c
  projects/binutils-2.17/sys/i386/i386/i686_mem.c
  projects/binutils-2.17/sys/kern/kern_rmlock.c
  projects/binutils-2.17/sys/kern/subr_bus.c
  projects/binutils-2.17/sys/netinet/sctp.h
  projects/binutils-2.17/sys/netinet/sctp_uio.h
  projects/binutils-2.17/sys/netinet/sctp_usrreq.c
  projects/binutils-2.17/sys/netinet/tcp.h
  projects/binutils-2.17/sys/netinet/tcp_output.c
  projects/binutils-2.17/sys/netinet/tcp_reass.c
  projects/binutils-2.17/sys/netinet/tcp_usrreq.c
  projects/binutils-2.17/sys/netinet/tcp_var.h
  projects/binutils-2.17/sys/netinet6/nd6.c
  projects/binutils-2.17/sys/sys/bus.h
  projects/binutils-2.17/sys/x86/cpufreq/hwpstate.c
  projects/binutils-2.17/tools/tools/mctest/mctest.cc
  projects/binutils-2.17/usr.bin/netstat/inet.c
  projects/binutils-2.17/usr.bin/netstat/main.c
  projects/binutils-2.17/usr.bin/netstat/netstat.1
  projects/binutils-2.17/usr.bin/netstat/netstat.h
  projects/binutils-2.17/usr.sbin/iostat/iostat.8
  projects/binutils-2.17/usr.sbin/iostat/iostat.c
Directory Properties:
  projects/binutils-2.17/   (props changed)
  projects/binutils-2.17/cddl/contrib/opensolaris/   (props changed)
  projects/binutils-2.17/contrib/bind9/   (props changed)
  projects/binutils-2.17/contrib/binutils/   (props changed)
  projects/binutils-2.17/contrib/bzip2/   (props changed)
  projects/binutils-2.17/contrib/ee/   (props changed)
  projects/binutils-2.17/contrib/expat/   (props changed)
  projects/binutils-2.17/contrib/file/   (props changed)
  projects/binutils-2.17/contrib/gdb/   (props changed)
  projects/binutils-2.17/contrib/gdtoa/   (props changed)
  projects/binutils-2.17/contrib/gnu-sort/   (props changed)
  projects/binutils-2.17/contrib/groff/   (props changed)
  projects/binutils-2.17/contrib/less/   (props changed)
  projects/binutils-2.17/contrib/libpcap/   (props changed)
  projects/binutils-2.17/contrib/llvm/   (props changed)
  projects/binutils-2.17/contrib/llvm/tools/clang/   (props changed)
  projects/binutils-2.17/contrib/ncurses/   (props changed)
  projects/binutils-2.17/contrib/netcat/   (props changed)
  projects/binutils-2.17/contrib/ntp/   (props changed)
  projects/binutils-2.17/contrib/one-true-awk/   (props changed)
  projects/binutils-2.17/contrib/openbsm/   (props changed)
  projects/binutils-2.17/contrib/openpam/   (props changed)
  projects/binutils-2.17/contrib/pf/   (props changed)
  projects/binutils-2.17/contrib/sendmail/   (props changed)
  projects/binutils-2.17/contrib/tcpdump/   (props changed)
  projects/binutils-2.17/contrib/tcsh/   (props changed)
  projects/binutils-2.17/contrib/top/   (props changed)
  projects/binutils-2.17/contrib/top/install-sh   (props changed)
  projects/binutils-2.17/contrib/tzcode/stdtime/   (props changed)
  projects/binutils-2.17/contrib/tzcode/zic/   (props changed)
  projects/binutils-2.17/contrib/tzdata/   (props changed)
  projects/binutils-2.17/contrib/wpa/   (props changed)
  projects/binutils-2.17/contrib/xz/   (props changed)
  projects/binutils-2.17/crypto/openssh/   (props changed)
  projects/binutils-2.17/crypto/openssl/   (props changed)
  projects/binutils-2.17/lib/libc/   (props changed)
  projects/binutils-2.17/lib/libc/stdtime/   (props changed)
  projects/binutils-2.17/lib/libutil/   (props changed)
  projects/binutils-2.17/lib/libz/   (props changed)
  projects/binutils-2.17/sbin/   (props changed)
  projects/binutils-2.17/sbin/ipfw/   (props changed)
  projects/binutils-2.17/share/mk/bsd.arch.inc.mk   (props changed)
  projects/binutils-2.17/share/zoneinfo/   (props changed)
  projects/binutils-2.17/sys/   (props changed)
  projects/binutils-2.17/sys/amd64/include/xen/   (props changed)
  projects/binutils-2.17/sys/cddl/contrib/opensolaris/   (props changed)
  projects/binutils-2.17/sys/contrib/dev/acpica/   (props changed)
  projects/binutils-2.17/sys/contrib/pf/   (props changed)
  projects/binutils-2.17/sys/contrib/x86emu/   (props changed)
  projects/binutils-2.17/sys/dev/xen/xenpci/   (props changed)
  projects/binutils-2.17/usr.bin/calendar/   (props changed)
  projects/binutils-2.17/usr.bin/csup/   (props changed)
  projects/binutils-2.17/usr.bin/procstat/   (props changed)
  projects/binutils-2.17/usr.sbin/zic/   (props changed)

Modified: projects/binutils-2.17/Makefile.inc1
==============================================================================
--- projects/binutils-2.17/Makefile.inc1	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/Makefile.inc1	Thu Nov 18 18:30:03 2010	(r215464)
@@ -322,7 +322,7 @@ LIB32WMAKEENV+=	MAKEOBJDIRPREFIX=${OBJTR
 
 LIB32WMAKE=	${LIB32WMAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
 		-DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_INFO \
-		-DWITHOUT_HTML -DNO_CTF DESTDIR=${LIB32TMP}
+		-DWITHOUT_HTML -DNO_CTF -DNO_LINT DESTDIR=${LIB32TMP}
 LIB32IMAKE=	${LIB32WMAKE:NINSTALL=*:NDESTDIR=*} -DNO_INCS
 .endif
 

Modified: projects/binutils-2.17/cddl/Makefile.inc
==============================================================================
--- projects/binutils-2.17/cddl/Makefile.inc	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/cddl/Makefile.inc	Thu Nov 18 18:30:03 2010	(r215464)
@@ -9,3 +9,8 @@ CFLAGS+=	-DNEED_SOLARIS_BOOLEAN
 
 WARNS?=		6
 CSTD?=		gnu89
+
+# Do not lint the CDDL stuff. It is all externally maintained and
+# lint output is wasteful noise here.
+
+NO_LINT=

Modified: projects/binutils-2.17/contrib/gcc/cgraphunit.c
==============================================================================
--- projects/binutils-2.17/contrib/gcc/cgraphunit.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/cgraphunit.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -1536,8 +1536,6 @@ cgraph_optimize (void)
       return;
     }
 
-  process_pending_assemble_externals ();
-
   /* Frontend may output common variables after the unit has been finalized.
      It is safe to deal with them here as they are always zero initialized.  */
   cgraph_varpool_analyze_pending_decls ();

Modified: projects/binutils-2.17/contrib/gcc/config/elfos.h
==============================================================================
--- projects/binutils-2.17/contrib/gcc/config/elfos.h	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/config/elfos.h	Thu Nov 18 18:30:03 2010	(r215464)
@@ -496,3 +496,13 @@ Boston, MA 02110-1301, USA.  */
         fprintf ((FILE), "\"\n");					\
     }									\
   while (0)
+
+/* A C statement (sans semicolon) to output to the stdio stream STREAM
+   any text necessary for declaring the name of an external symbol
+   named NAME whch is referenced in this compilation but not defined.
+   It is needed to properly support non-default visibility.  */
+
+#ifndef ASM_OUTPUT_EXTERNAL
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
+  default_elf_asm_output_external (FILE, DECL, NAME)
+#endif

Modified: projects/binutils-2.17/contrib/gcc/config/ia64/hpux.h
==============================================================================
--- projects/binutils-2.17/contrib/gcc/config/ia64/hpux.h	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/config/ia64/hpux.h	Thu Nov 18 18:30:03 2010	(r215464)
@@ -144,10 +144,6 @@ do {								\
    definitions, so do not use them in gthr-posix.h.  */
 #define GTHREAD_USE_WEAK 0
 
-/* Put out the needed function declarations at the end.  */
-
-#define TARGET_ASM_FILE_END ia64_hpux_file_end
-
 #undef CTORS_SECTION_ASM_OP
 #define CTORS_SECTION_ASM_OP  "\t.section\t.init_array,\t\"aw\",\"init_array\""
 

Modified: projects/binutils-2.17/contrib/gcc/config/ia64/ia64.c
==============================================================================
--- projects/binutils-2.17/contrib/gcc/config/ia64/ia64.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/config/ia64/ia64.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -250,10 +250,6 @@ static section *ia64_select_rtx_section 
 static void ia64_output_dwarf_dtprel (FILE *, int, rtx)
      ATTRIBUTE_UNUSED;
 static unsigned int ia64_section_type_flags (tree, const char *, int);
-static void ia64_hpux_add_extern_decl (tree decl)
-     ATTRIBUTE_UNUSED;
-static void ia64_hpux_file_end (void)
-     ATTRIBUTE_UNUSED;
 static void ia64_init_libfuncs (void)
      ATTRIBUTE_UNUSED;
 static void ia64_hpux_init_libfuncs (void)
@@ -5015,49 +5011,6 @@ ia64_secondary_reload_class (enum reg_cl
 }
 
 
-/* Emit text to declare externally defined variables and functions, because
-   the Intel assembler does not support undefined externals.  */
-
-void
-ia64_asm_output_external (FILE *file, tree decl, const char *name)
-{
-  int save_referenced;
-
-  /* GNU as does not need anything here, but the HP linker does need
-     something for external functions.  */
-
-  if (TARGET_GNU_AS
-      && (!TARGET_HPUX_LD
-	  || TREE_CODE (decl) != FUNCTION_DECL
-	  || strstr (name, "__builtin_") == name))
-    return;
-
-  /* ??? The Intel assembler creates a reference that needs to be satisfied by
-     the linker when we do this, so we need to be careful not to do this for
-     builtin functions which have no library equivalent.  Unfortunately, we
-     can't tell here whether or not a function will actually be called by
-     expand_expr, so we pull in library functions even if we may not need
-     them later.  */
-  if (! strcmp (name, "__builtin_next_arg")
-      || ! strcmp (name, "alloca")
-      || ! strcmp (name, "__builtin_constant_p")
-      || ! strcmp (name, "__builtin_args_info"))
-    return;
-
-  if (TARGET_HPUX_LD)
-    ia64_hpux_add_extern_decl (decl);
-  else
-    {
-      /* assemble_name will set TREE_SYMBOL_REFERENCED, so we must save and
-         restore it.  */
-      save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl));
-      if (TREE_CODE (decl) == FUNCTION_DECL)
-        ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
-      (*targetm.asm_out.globalize_label) (file, name);
-      TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = save_referenced;
-    }
-}
-
 /* Parse the -mfixed-range= option string.  */
 
 static void
@@ -9223,55 +9176,33 @@ ia64_hpux_function_arg_padding (enum mac
    return DEFAULT_FUNCTION_ARG_PADDING (mode, type);
 }
 
-/* Linked list of all external functions that are to be emitted by GCC.
-   We output the name if and only if TREE_SYMBOL_REFERENCED is set in
-   order to avoid putting out names that are never really used.  */
-
-struct extern_func_list GTY(())
-{
-  struct extern_func_list *next;
-  tree decl;
-};
-
-static GTY(()) struct extern_func_list *extern_func_head;
-
-static void
-ia64_hpux_add_extern_decl (tree decl)
-{
-  struct extern_func_list *p = ggc_alloc (sizeof (struct extern_func_list));
-
-  p->decl = decl;
-  p->next = extern_func_head;
-  extern_func_head = p;
-}
-
-/* Print out the list of used global functions.  */
+/* Emit text to declare externally defined variables and functions, because
+   the Intel assembler does not support undefined externals.  */
 
-static void
-ia64_hpux_file_end (void)
+void
+ia64_asm_output_external (FILE *file, tree decl, const char *name)
 {
-  struct extern_func_list *p;
-
-  for (p = extern_func_head; p; p = p->next)
-    {
-      tree decl = p->decl;
-      tree id = DECL_ASSEMBLER_NAME (decl);
-
-      gcc_assert (id);
-
-      if (!TREE_ASM_WRITTEN (decl) && TREE_SYMBOL_REFERENCED (id))
-        {
-	  const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
-
-	  TREE_ASM_WRITTEN (decl) = 1;
-	  (*targetm.asm_out.globalize_label) (asm_out_file, name);
-	  fputs (TYPE_ASM_OP, asm_out_file);
-	  assemble_name (asm_out_file, name);
-	  fprintf (asm_out_file, "," TYPE_OPERAND_FMT "\n", "function");
-        }
+  /* We output the name if and only if TREE_SYMBOL_REFERENCED is
+     set in order to avoid putting out names that are never really
+     used. */
+  if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
+    {
+      /* maybe_assemble_visibility will return 1 if the assembler
+	 visibility directive is outputed.  */
+      int need_visibility = ((*targetm.binds_local_p) (decl)
+			     && maybe_assemble_visibility (decl));
+
+      /* GNU as does not need anything here, but the HP linker does
+	 need something for external functions.  */
+      if ((TARGET_HPUX_LD || !TARGET_GNU_AS)
+	  && TREE_CODE (decl) == FUNCTION_DECL)
+	{
+	  ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
+	  (*targetm.asm_out.globalize_label) (file, name);
+	}
+      else if (need_visibility && !TARGET_GNU_AS)
+	(*targetm.asm_out.globalize_label) (file, name);
     }
-
-  extern_func_head = 0;
 }
 
 /* Set SImode div/mod functions, init_integral_libfuncs only initializes

Modified: projects/binutils-2.17/contrib/gcc/output.h
==============================================================================
--- projects/binutils-2.17/contrib/gcc/output.h	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/output.h	Thu Nov 18 18:30:03 2010	(r215464)
@@ -200,9 +200,9 @@ extern void assemble_variable (tree, int
    DONT_OUTPUT_DATA is from assemble_variable.  */
 extern void align_variable (tree decl, bool dont_output_data);
 
-/* Output something to declare an external symbol to the assembler.
-   (Most assemblers don't need this, so we normally output nothing.)
-   Do nothing if DECL is not external.  */
+/* Queue for outputing something to declare an external symbol to the
+   assembler.  (Most assemblers don't need this, so we normally output
+   nothing.)  Do nothing if DECL is not external.  */
 extern void assemble_external (tree);
 
 /* Assemble code to leave SIZE bytes of zeros.  */
@@ -607,6 +607,10 @@ extern void default_file_start (void);
 extern void file_end_indicate_exec_stack (void);
 extern bool default_valid_pointer_mode (enum machine_mode);
 
+extern void default_elf_asm_output_external (FILE *file, tree,
+					     const char *);
+extern int maybe_assemble_visibility (tree);
+
 extern int default_address_cost (rtx);
 
 /* dbxout helper functions */

Modified: projects/binutils-2.17/contrib/gcc/toplev.c
==============================================================================
--- projects/binutils-2.17/contrib/gcc/toplev.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/toplev.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -1080,9 +1080,7 @@ compile_file (void)
 
   dw2_output_indirect_constants ();
 
-  /* Flush any pending external directives.  cgraph did this for
-     assemble_external calls from the front end, but the RTL
-     expander can also generate them.  */
+  /* Flush any pending external directives.  */
   process_pending_assemble_externals ();
 
   /* Attach a special .ident directive to the end of the file to identify

Modified: projects/binutils-2.17/contrib/gcc/varasm.c
==============================================================================
--- projects/binutils-2.17/contrib/gcc/varasm.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/gcc/varasm.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -126,7 +126,6 @@ static unsigned HOST_WIDE_INT array_size
 static unsigned min_align (unsigned, unsigned);
 static void output_constructor (tree, unsigned HOST_WIDE_INT, unsigned int);
 static void globalize_decl (tree);
-static void maybe_assemble_visibility (tree);
 #ifdef BSS_SECTION_ASM_OP
 #ifdef ASM_OUTPUT_BSS
 static void asm_output_bss (FILE *, tree, const char *,
@@ -1957,11 +1956,10 @@ assemble_external (tree decl ATTRIBUTE_U
   if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
     return;
 
-  if (flag_unit_at_a_time)
-    pending_assemble_externals = tree_cons (0, decl,
-					    pending_assemble_externals);
-  else
-    assemble_external_real (decl);
+  /* We want to output external symbols at very last to check if they
+     are references or not.  */
+  pending_assemble_externals = tree_cons (0, decl,
+					  pending_assemble_externals);
 #endif
 }
 
@@ -5064,13 +5062,18 @@ default_assemble_visibility (tree decl, 
 
 /* A helper function to call assemble_visibility when needed for a decl.  */
 
-static void
+int
 maybe_assemble_visibility (tree decl)
 {
   enum symbol_visibility vis = DECL_VISIBILITY (decl);
 
   if (vis != VISIBILITY_DEFAULT)
-    targetm.asm_out.visibility (decl, vis);
+    {
+      targetm.asm_out.visibility (decl, vis);
+      return 1;
+    }
+  else
+    return 0;
 }
 
 /* Returns 1 if the target configuration supports defining public symbols
@@ -6224,4 +6227,19 @@ output_object_blocks (void)
   htab_traverse (object_block_htab, output_object_block_htab, NULL);
 }
 
+/* Emit text to declare externally defined symbols. It is needed to
+   properly support non-default visibility.  */
+void
+default_elf_asm_output_external (FILE *file ATTRIBUTE_UNUSED,
+				 tree decl,
+				 const char *name ATTRIBUTE_UNUSED)
+{
+  /* We output the name if and only if TREE_SYMBOL_REFERENCED is
+     set in order to avoid putting out names that are never really
+     used. */
+  if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
+      && targetm.binds_local_p (decl))
+    maybe_assemble_visibility (decl);
+}
+
 #include "gt-varasm.h"

Modified: projects/binutils-2.17/contrib/ipfilter/man/ipnat.8
==============================================================================
--- projects/binutils-2.17/contrib/ipfilter/man/ipnat.8	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/ipfilter/man/ipnat.8	Thu Nov 18 18:30:03 2010	(r215464)
@@ -66,6 +66,6 @@ and active rules/table entries.
 .SH FILES
 /dev/ipnat
 .br
-/usr/share/examples/ipf  Directory with examples.
+/usr/share/examples/ipfilter  Directory with examples.
 .SH SEE ALSO
 ipnat(5), ipf(8), ipfstat(8)

Modified: projects/binutils-2.17/contrib/ipfilter/man/mkfilters.1
==============================================================================
--- projects/binutils-2.17/contrib/ipfilter/man/mkfilters.1	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/contrib/ipfilter/man/mkfilters.1	Thu Nov 18 18:30:03 2010	(r215464)
@@ -6,7 +6,7 @@ mkfilters \- generate a minimal firewall
 .SH SYNOPSIS
 .B mkfilters
 .SH FILES
-/usr/share/examples/ipf/mkfilters
+/usr/share/examples/ipfilter/mkfilters
 .SH DESCRIPTION
 .PP
 \fBmkfilters\fP is a perl script that generates a minimal filter rule set for

Modified: projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.amd64
==============================================================================
--- projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.amd64	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.amd64	Thu Nov 18 18:30:03 2010	(r215464)
@@ -12,7 +12,7 @@ e${NATIVE_EMULATION}.c: emulparams/${NAT
 	    ${NATIVE_EMULATION} "" no ${NATIVE_EMULATION} ${TARGET_TUPLE}
 
 X86_EMULATION=	elf_i386_fbsd
-_i386_path=	\"${TOOLS_PREFIX}/usr/lib/i386\"
+_i386_path=	\"${TOOLS_PREFIX}/usr/lib32\"
 EMS+=		${X86_EMULATION}
 .for ext in ${ELF_SCR_EXT}
 LDSCRIPTS+=	${X86_EMULATION}.${ext}

Modified: projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/Makefile
==============================================================================
--- projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/Makefile	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/Makefile	Thu Nov 18 18:30:03 2010	(r215464)
@@ -307,7 +307,7 @@ GENSRCS+=	gcov-iov.h
 
 # Multilib config file
 multilib.h:
-.if ${TARGET_ARCH} == "powerpc64"
+.if ${TARGET_ARCH} == "powerpc64" || ${TARGET_ARCH} == "amd64"
 	echo 'static const char *const multilib_raw[] = { \
 	    ". !m64 !m32;", \
 	    "64:../lib m64 !m32;", \

Modified: projects/binutils-2.17/lib/libusb/libusb.3
==============================================================================
--- projects/binutils-2.17/lib/libusb/libusb.3	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/lib/libusb/libusb.3	Thu Nov 18 18:30:03 2010	(r215464)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd October 14, 2010
+.Dd November 18, 2010
 .Dt LIBUSB 3
 .Os
 .Sh NAME
@@ -380,10 +380,15 @@ LIBUSB_ERROR code on failure.
 .Pp
 .Ft int
 .Fn libusb_control_transfer "libusb_device_handle *devh" "uint8_t bmRequestType" "uint8_t bRequest" "uint16_t wValue" "uint16_t wIndex" "unsigned char *data" "uint16_t wLength" "unsigned int timeout"
-Perform a USB control transfer. Returns 0 on success, LIBUSB_ERROR_TIMEOUT 
-if the transfer timeout, LIBUSB_ERROR_PIPE if the control request was not 
-supported, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and 
-LIBUSB_ERROR code on other failure.
+Perform a USB control transfer. Returns the actual number of bytes
+transferred on success in the range from and including zero until and
+including
+.Xa wLength .
+On error a libusb error code is returned, for example
+LIBUSB_ERROR_TIMEOUT if the transfer timeout, LIBUSB_ERROR_PIPE if the
+control request was not supported, LIBUSB_ERROR_NO_DEVICE if the
+device has been disconnected or another LIBUSB_ERROR code on other failures.
+The libusb error codes are always negative.
 .
 .Pp
 .Ft int

Modified: projects/binutils-2.17/share/man/man4/ata.4
==============================================================================
--- projects/binutils-2.17/share/man/man4/ata.4	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/share/man/man4/ata.4	Thu Nov 18 18:30:03 2010	(r215464)
@@ -183,7 +183,7 @@ SIS963, SIS964, SIS965.
 .It VIA:
 VT6410, VT6420, VT6421, VT82C586, VT82C586B, VT82C596, VT82C596B, VT82C686,
 VT82C686A, VT82C686B, VT8231, VT8233, VT8233A, VT8233C, VT8235, VT8237,
-VT8237A, VT8237S, VT8251, CX700, VX800, VX855.
+VT8237A, VT8237S, VT8251, CX700, VX800, VX855, VX900.
 .El
 .Pp
 Unknown ATA chipsets are supported in PIO modes, and if the standard

Modified: projects/binutils-2.17/share/mk/Makefile
==============================================================================
--- projects/binutils-2.17/share/mk/Makefile	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/share/mk/Makefile	Thu Nov 18 18:30:03 2010	(r215464)
@@ -5,7 +5,7 @@ FILES=	bsd.README
 FILES+=	bsd.arch.inc.mk
 FILES+=	bsd.compat.mk bsd.cpu.mk bsd.dep.mk bsd.doc.mk bsd.dtrace.mk
 FILES+=	bsd.endian.mk
-FILES+=	bsd.files.mk bsd.incs.mk bsd.info.mk bsd.init.mk
+FILES+=	bsd.files.mk bsd.crunchgen.mk bsd.incs.mk bsd.info.mk bsd.init.mk
 FILES+=	bsd.kmod.mk
 FILES+=	bsd.lib.mk bsd.libnames.mk bsd.links.mk bsd.man.mk bsd.nls.mk
 FILES+=	bsd.obj.mk bsd.own.mk

Modified: projects/binutils-2.17/share/mk/bsd.crunchgen.mk
==============================================================================
--- projects/binutils-2.17/share/mk/bsd.crunchgen.mk	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/share/mk/bsd.crunchgen.mk	Thu Nov 18 18:30:03 2010	(r215464)
@@ -51,17 +51,14 @@ $(OUTPUTS): $(CRUNCH_SRCDIR_${P})/Makefi
 .else
 $(OUTPUTS): $(.CURDIR)/../../$(D)/$(P)/Makefile
 .endif
-# Disable building links for bsdbox - whatever is installing the binaries into
-# the embedded system should (for now) do the linking there. This may change
-# in the future. -adrian
-#.ifndef CRUNCH_SUPPRESS_LINK_${P}
-#LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(P)
-#.endif
-#.for A in $(CRUNCH_ALIAS_$(P))
-#.ifndef CRUNCH_SUPPRESS_LINK_${A}
-#LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(A)
-#.endif
-#.endfor
+.ifndef CRUNCH_SUPPRESS_LINK_${P}
+LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(P)
+.endif
+.for A in $(CRUNCH_ALIAS_$(P))
+.ifndef CRUNCH_SUPPRESS_LINK_${A}
+LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(A)
+.endif
+.endfor
 .endfor
 .endfor
 

Modified: projects/binutils-2.17/sys/amd64/amd64/amd64_mem.c
==============================================================================
--- projects/binutils-2.17/sys/amd64/amd64/amd64_mem.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/amd64/amd64/amd64_mem.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -307,20 +307,21 @@ amd64_mrstoreone(void *arg)
 	struct mem_range_desc *mrd;
 	u_int64_t omsrv, msrv;
 	int i, j, msr;
-	u_int cr4save;
+	u_long cr0, cr4;
 
 	mrd = sc->mr_desc;
 
 	/* Disable PGE. */
-	cr4save = rcr4();
-	if (cr4save & CR4_PGE)
-		load_cr4(cr4save & ~CR4_PGE);
+	cr4 = rcr4();
+	load_cr4(cr4 & ~CR4_PGE);
 
 	/* Disable caches (CD = 1, NW = 0). */
-	load_cr0((rcr0() & ~CR0_NW) | CR0_CD);
+	cr0 = rcr0();
+	load_cr0((cr0 & ~CR0_NW) | CR0_CD);
 
 	/* Flushes caches and TLBs. */
 	wbinvd();
+	invltlb();
 
 	/* Disable MTRRs (E = 0). */
 	wrmsr(MSR_MTRRdefType, rdmsr(MSR_MTRRdefType) & ~MTRR_DEF_ENABLE);
@@ -388,17 +389,16 @@ amd64_mrstoreone(void *arg)
 		wrmsr(msr + 1, msrv);
 	}
 
-	/* Flush caches, TLBs. */
+	/* Flush caches and TLBs. */
 	wbinvd();
+	invltlb();
 
 	/* Enable MTRRs. */
 	wrmsr(MSR_MTRRdefType, rdmsr(MSR_MTRRdefType) | MTRR_DEF_ENABLE);
 
-	/* Enable caches (CD = 0, NW = 0). */
-	load_cr0(rcr0() & ~(CR0_CD | CR0_NW));
-
-	/* Restore PGE. */
-	load_cr4(cr4save);
+	/* Restore caches and PGE. */
+	load_cr0(cr0);
+	load_cr4(cr4);
 }
 
 /*

Modified: projects/binutils-2.17/sys/boot/ofw/libofw/ofw_copy.c
==============================================================================
--- projects/binutils-2.17/sys/boot/ofw/libofw/ofw_copy.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/boot/ofw/libofw/ofw_copy.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -91,16 +91,22 @@ ofw_mapmem(vm_offset_t dest, const size_
                 return (ENOMEM);
         }
 
-        if (OF_call_method("claim", mmu, 3, 1, destp, dlen, 0, &addr) == -1) {
-                printf("ofw_mapmem: virtual claim failed\n");
-                return (ENOMEM);
-        }
-
-        if (OF_call_method("map", mmu, 4, 0, destp, destp, dlen, 0) == -1) {
-                printf("ofw_mapmem: map failed\n");
-                return (ENOMEM);
-        }
+	/*
+	 * We only do virtual memory management when real_mode is false.
+	 */
+	if (real_mode == 0) {
+		if (OF_call_method("claim", mmu, 3, 1, destp, dlen, 0, &addr)
+		    == -1) {
+			printf("ofw_mapmem: virtual claim failed\n");
+			return (ENOMEM);
+		}
 
+		if (OF_call_method("map", mmu, 4, 0, destp, destp, dlen, 0)
+		    == -1) {
+			printf("ofw_mapmem: map failed\n");
+			return (ENOMEM);
+		}
+	}
         last_dest = (vm_offset_t) destp;
         last_len  = dlen;
 

Modified: projects/binutils-2.17/sys/boot/ofw/libofw/ofw_net.c
==============================================================================
--- projects/binutils-2.17/sys/boot/ofw/libofw/ofw_net.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/boot/ofw/libofw/ofw_net.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -90,11 +90,11 @@ ofwn_probe(struct netif *nif, void *mach
 static int
 ofwn_put(struct iodesc *desc, void *pkt, size_t len)
 {
-	struct ether_header	*eh;
 	size_t			sendlen;
 	ssize_t			rv;
 
 #if defined(NETIF_DEBUG)
+	struct ether_header	*eh;
 	printf("netif_put: desc=0x%x pkt=0x%x len=%d\n", desc, pkt, len);
 	eh = pkt;
 	printf("dst: %s ", ether_sprintf(eh->ether_dhost));

Modified: projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.c
==============================================================================
--- projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -69,12 +69,15 @@ int (*openfirmware)(void *);
 phandle_t chosen;
 ihandle_t mmu;
 ihandle_t memory;
+int	  real_mode = 0;
 
 /* Initialiser */
 
 void
 OF_init(int (*openfirm)(void *))
 {
+	phandle_t options;
+	char	  mode[8];
 
 	openfirmware = openfirm;
 
@@ -89,6 +92,15 @@ OF_init(int (*openfirm)(void *))
 	}
 	if (OF_getprop(chosen, "mmu", &mmu, sizeof(mmu)) == -1)
 		OF_exit();
+
+	/* 
+	 * Check if we run in real mode. If so, we do not need to map
+	 * memory later on.
+	 */
+	options = OF_finddevice("/options");
+	OF_getprop(options, "real-mode?", mode, sizeof(mode));
+	if (strncmp(mode, "true", 4) == 0)
+		real_mode = 1;
 }
 
 /*

Modified: projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.h
==============================================================================
--- projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.h	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/boot/ofw/libofw/openfirm.h	Thu Nov 18 18:30:03 2010	(r215464)
@@ -72,6 +72,7 @@ typedef unsigned long int	cell_t;
 extern int		(*openfirmware)(void *);
 extern phandle_t	chosen;
 extern ihandle_t	memory, mmu;
+extern int		real_mode;
 
 /*
  * This isn't actually an Open Firmware function, but it seemed like the right

Modified: projects/binutils-2.17/sys/boot/powerpc/ofw/start.c
==============================================================================
--- projects/binutils-2.17/sys/boot/powerpc/ofw/start.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/boot/powerpc/ofw/start.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -50,7 +50,20 @@ _start:				\n\
 	addi	%r1,%r1,stack at l	\n\
 	addi	%r1,%r1,8192	\n\
 				\n\
-	b	startup		\n\
+	/* Clear the .bss!!! */	\n\
+	li      %r0,0		\n\
+	lis     %r8,_edata at ha	\n\
+	addi    %r8,%r8,_edata at l\n\
+	lis     %r9,_end at ha	\n\
+	addi    %r9,%r9,_end at l	\n\
+				\n\
+1:	cmpw    0,%r8,%r9	\n\
+	bge     2f		\n\
+	stw     %r0,0(%r8)	\n\
+	addi    %r8,%r8,4	\n\
+	b       1b		\n\
+				\n\
+2:	b	startup		\n\
 ");
 
 void

Modified: projects/binutils-2.17/sys/cam/ata/ata_xpt.c
==============================================================================
--- projects/binutils-2.17/sys/cam/ata/ata_xpt.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/cam/ata/ata_xpt.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -963,6 +963,8 @@ noerror:
 		xpt_action((union ccb *)&cts);
 		if (cts.xport_specific.sata.valid & CTS_SATA_VALID_CAPS)
 			caps &= cts.xport_specific.sata.caps;
+		else
+			caps = 0;
 		/* Store result to SIM. */
 		bzero(&cts, sizeof(cts));
 		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NONE);
@@ -1103,6 +1105,8 @@ notsata:
 		xpt_action((union ccb *)&cts);
 		if (cts.xport_specific.sata.valid & CTS_SATA_VALID_CAPS)
 			caps &= cts.xport_specific.sata.caps;
+		else
+			caps = 0;
 		/* Store result to SIM. */
 		bzero(&cts, sizeof(cts));
 		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NONE);

Modified: projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -1557,7 +1557,7 @@ zfs_vget(vfs_t *vfsp, ino_t ino, int fla
 	int 		err;
 
 	/*
-	 * zfs_zget() can't operate on virtual entires like .zfs/ or
+	 * zfs_zget() can't operate on virtual entries like .zfs/ or
 	 * .zfs/snapshot/ directories, that's why we return EOPNOTSUPP.
 	 * This will make NFS to switch to LOOKUP instead of using VGET.
 	 */

Modified: projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -67,6 +67,7 @@
 #include <sys/sf_buf.h>
 #include <sys/sched.h>
 #include <sys/acl.h>
+#include <vm/vm_pageout.h>
 
 /*
  * Programming rules.
@@ -481,7 +482,7 @@ again:
 				uiomove_fromphys(&m, off, bytes, uio);
 			VM_OBJECT_LOCK(obj);
 			vm_page_wakeup(m);
-		} else if (m != NULL && uio->uio_segflg == UIO_NOCOPY) {
+		} else if (uio->uio_segflg == UIO_NOCOPY) {
 			/*
 			 * The code below is here to make sendfile(2) work
 			 * correctly with ZFS. As pointed out by ups@
@@ -491,7 +492,7 @@ again:
 			 */
 			KASSERT(off == 0,
 			    ("unexpected offset in mappedread for sendfile"));
-			if ((m->oflags & VPO_BUSY) != 0) {
+			if (m != NULL && (m->oflags & VPO_BUSY) != 0) {
 				/*
 				 * Reference the page before unlocking and
 				 * sleeping so that the page daemon is less
@@ -501,8 +502,17 @@ again:
 				vm_page_flag_set(m, PG_REFERENCED);
 				vm_page_sleep(m, "zfsmrb");
 				goto again;
+			} else if (m == NULL) {
+				m = vm_page_alloc(obj, OFF_TO_IDX(start),
+				    VM_ALLOC_NOBUSY | VM_ALLOC_NORMAL);
+				if (m == NULL) {
+					VM_OBJECT_UNLOCK(obj);
+					VM_WAIT;
+					VM_OBJECT_LOCK(obj);
+					goto again;
+				}
 			}
-			vm_page_busy(m);
+			vm_page_io_start(m);
 			VM_OBJECT_UNLOCK(obj);
 			if (dirbytes > 0) {
 				error = dmu_read_uio(os, zp->z_id, uio,
@@ -520,7 +530,7 @@ again:
 			VM_OBJECT_LOCK(obj);
 			if (error == 0)
 				m->valid = VM_PAGE_BITS_ALL;
-			vm_page_wakeup(m);
+			vm_page_io_finish(m);
 			if (error == 0) {
 				uio->uio_resid -= bytes;
 				uio->uio_offset += bytes;

Modified: projects/binutils-2.17/sys/compat/ndis/ntoskrnl_var.h
==============================================================================
--- projects/binutils-2.17/sys/compat/ndis/ntoskrnl_var.h	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/compat/ndis/ntoskrnl_var.h	Thu Nov 18 18:30:03 2010	(r215464)
@@ -162,6 +162,16 @@ typedef struct mdl mdl, ndis_buffer;
 #define	WDM_MINOR_WINXP		0x20
 #define	WDM_MINOR_WIN2003	0x30
 
+enum nt_caching_type {
+	MmNonCached			= 0,
+	MmCached			= 1,
+	MmWriteCombined			= 2,
+	MmHardwareCoherentCached	= 3,
+	MmNonCachedUnordered		= 4,
+	MmUSWCCached			= 5,
+	MmMaximumCacheType		= 6
+};
+
 /*-
  * The ndis_kspin_lock type is called KSPIN_LOCK in MS-Windows.
  * According to the Windows DDK header files, KSPIN_LOCK is defined like this:

Modified: projects/binutils-2.17/sys/compat/ndis/subr_ntoskrnl.c
==============================================================================
--- projects/binutils-2.17/sys/compat/ndis/subr_ntoskrnl.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/compat/ndis/subr_ntoskrnl.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$");
 #include <vm/uma.h>
 #include <vm/vm_kern.h>
 #include <vm/vm_map.h>
+#include <vm/vm_extern.h>
 
 #include <compat/ndis/pe_var.h>
 #include <compat/ndis/cfg_var.h>
@@ -197,9 +198,10 @@ static uint32_t InterlockedDecrement(vol
 static void ExInterlockedAddLargeStatistic(uint64_t *, uint32_t);
 static void *MmAllocateContiguousMemory(uint32_t, uint64_t);
 static void *MmAllocateContiguousMemorySpecifyCache(uint32_t,
-	uint64_t, uint64_t, uint64_t, uint32_t);
+	uint64_t, uint64_t, uint64_t, enum nt_caching_type);
 static void MmFreeContiguousMemory(void *);
-static void MmFreeContiguousMemorySpecifyCache(void *, uint32_t, uint32_t);
+static void MmFreeContiguousMemorySpecifyCache(void *, uint32_t,
+	enum nt_caching_type);
 static uint32_t MmSizeOfMdl(void *, size_t);
 static void *MmMapLockedPages(mdl *, uint8_t);
 static void *MmMapLockedPagesSpecifyCache(mdl *,
@@ -2424,11 +2426,34 @@ MmAllocateContiguousMemorySpecifyCache(s
 	uint64_t		lowest;
 	uint64_t		highest;
 	uint64_t		boundary;
-	uint32_t		cachetype;
+	enum nt_caching_type	cachetype;
 {
+	vm_memattr_t		memattr;
+	void			*ret;
 
-	return (contigmalloc(size, M_DEVBUF, M_ZERO|M_NOWAIT, lowest,
-	    highest, PAGE_SIZE, boundary));
+	switch (cachetype) {
+	case MmNonCached:
+		memattr = VM_MEMATTR_UNCACHEABLE;
+		break;
+	case MmWriteCombined:
+		memattr = VM_MEMATTR_WRITE_COMBINING;
+		break;
+	case MmNonCachedUnordered:
+		memattr = VM_MEMATTR_UNCACHEABLE;
+		break;
+	case MmCached:
+	case MmHardwareCoherentCached:
+	case MmUSWCCached:
+	default:
+		memattr = VM_MEMATTR_DEFAULT;
+		break;
+	}
+
+	ret = (void *)kmem_alloc_contig(kernel_map, size, M_ZERO | M_NOWAIT,
+	    lowest, highest, PAGE_SIZE, boundary, memattr);
+	if (ret != NULL)
+		malloc_type_allocated(M_DEVBUF, round_page(size));
+	return (ret);
 }
 
 static void
@@ -2442,7 +2467,7 @@ static void
 MmFreeContiguousMemorySpecifyCache(base, size, cachetype)
 	void			*base;
 	uint32_t		size;
-	uint32_t		cachetype;
+	enum nt_caching_type	cachetype;
 {
 	contigfree(base, size, M_DEVBUF);
 }
@@ -4212,8 +4237,8 @@ image_patch_table ntoskrnl_functbl[] = {
 	IMPORT_FFUNC(ExInterlockedAddLargeStatistic, 2),
 	IMPORT_SFUNC(IoAllocateMdl, 5),
 	IMPORT_SFUNC(IoFreeMdl, 1),
-	IMPORT_SFUNC(MmAllocateContiguousMemory, 2),
-	IMPORT_SFUNC(MmAllocateContiguousMemorySpecifyCache, 5),
+	IMPORT_SFUNC(MmAllocateContiguousMemory, 2 + 1),
+	IMPORT_SFUNC(MmAllocateContiguousMemorySpecifyCache, 5 + 3),
 	IMPORT_SFUNC(MmFreeContiguousMemory, 1),
 	IMPORT_SFUNC(MmFreeContiguousMemorySpecifyCache, 3),
 	IMPORT_SFUNC_MAP(MmGetPhysicalAddress, pmap_kextract, 1),

Modified: projects/binutils-2.17/sys/crypto/aesni/aesni_wrap.c
==============================================================================
--- projects/binutils-2.17/sys/crypto/aesni/aesni_wrap.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/crypto/aesni/aesni_wrap.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -246,14 +246,21 @@ int
 aesni_cipher_setup(struct aesni_session *ses, struct cryptoini *encini)
 {
 	struct thread *td;
-	int error;
+	int error, saved_ctx;
 
 	td = curthread;
-	error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
+	if (!is_fpu_kern_thread(0)) {
+		error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
+		saved_ctx = 1;
+	} else {
+		error = 0;
+		saved_ctx = 0;
+	}
 	if (error == 0) {
 		error = aesni_cipher_setup_common(ses, encini->cri_key,
 		    encini->cri_klen);
-		fpu_kern_leave(td, &ses->fpu_ctx);
+		if (saved_ctx)
+			fpu_kern_leave(td, &ses->fpu_ctx);
 	}
 	return (error);
 }
@@ -264,16 +271,22 @@ aesni_cipher_process(struct aesni_sessio
 {
 	struct thread *td;
 	uint8_t *buf;
-	int error, allocated;
+	int error, allocated, saved_ctx;
 
 	buf = aesni_cipher_alloc(enccrd, crp, &allocated);
 	if (buf == NULL)
 		return (ENOMEM);
 
 	td = curthread;
-	error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
-	if (error != 0)
-		goto out;
+	if (!is_fpu_kern_thread(0)) {
+		error = fpu_kern_enter(td, &ses->fpu_ctx, FPU_KERN_NORMAL);
+		if (error != 0)
+			goto out;
+		saved_ctx = 1;
+	} else {
+		saved_ctx = 0;
+		error = 0;
+	}
 
 	if ((enccrd->crd_flags & CRD_F_KEY_EXPLICIT) != 0) {
 		error = aesni_cipher_setup_common(ses, enccrd->crd_key,
@@ -311,7 +324,8 @@ aesni_cipher_process(struct aesni_sessio
 			    ses->iv);
 		}
 	}
-	fpu_kern_leave(td, &ses->fpu_ctx);
+	if (saved_ctx)
+		fpu_kern_leave(td, &ses->fpu_ctx);
 	if (allocated)
 		crypto_copyback(crp->crp_flags, crp->crp_buf, enccrd->crd_skip,
 		    enccrd->crd_len, buf);

Modified: projects/binutils-2.17/sys/dev/ata/ata-pci.h
==============================================================================
--- projects/binutils-2.17/sys/dev/ata/ata-pci.h	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/dev/ata/ata-pci.h	Thu Nov 18 18:30:03 2010	(r215464)
@@ -512,7 +512,10 @@ struct ata_pci_controller {
 #define ATA_VIACX700            0x83241106
 #define ATA_VIASATAIDE          0x53241106
 #define ATA_VIAVX800            0x83531106
+#define ATA_VIASATAIDE2         0xc4091106
 #define ATA_VIAVX855            0x84091106
+#define ATA_VIASATAIDE3         0x90011106
+#define ATA_VIAVX900            0x84101106
 
 /* global prototypes ata-pci.c */
 int ata_pci_probe(device_t dev);

Modified: projects/binutils-2.17/sys/dev/ata/ata-sata.c
==============================================================================
--- projects/binutils-2.17/sys/dev/ata/ata-sata.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/dev/ata/ata-sata.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -153,8 +153,12 @@ ata_sata_phy_reset(device_t dev, int por
     if (quick) {
 	if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val))
 	    return (0);
-	if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE)
+	if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE) {
+	    ata_sata_scr_write(ch, port, ATA_SCONTROL,
+		ATA_SC_DET_IDLE | ((ch->pm_level > 0) ? 0 :
+		ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER));
 	    return ata_sata_connect(ch, port, quick);
+	}
     }
 
     if (bootverbose) {

Modified: projects/binutils-2.17/sys/dev/ata/chipsets/ata-via.c
==============================================================================
--- projects/binutils-2.17/sys/dev/ata/chipsets/ata-via.c	Thu Nov 18 18:22:58 2010	(r215463)
+++ projects/binutils-2.17/sys/dev/ata/chipsets/ata-via.c	Thu Nov 18 18:30:03 2010	(r215464)
@@ -63,6 +63,12 @@ static int ata_via_new_setmode(device_t 
 static int ata_via_sata_ch_attach(device_t dev);
 static int ata_via_sata_getrev(device_t dev, int target);
 static int ata_via_sata_setmode(device_t dev, int target, int mode);
+static void ata_via_sata_reset(device_t dev);
+static int ata_via_sata_scr_read(device_t dev, int port, int reg,
+    u_int32_t *result);
+static int ata_via_sata_scr_write(device_t dev, int port, int reg,
+    u_int32_t value);
+static int ata_via_sata_status(device_t dev);
 
 /* misc defines */
 #define VIA33           0
@@ -106,6 +112,7 @@ ata_via_probe(device_t dev)
      { ATA_VIACX700,  0x00, VIA133, VIASATA, ATA_SA150, "CX700" },
      { ATA_VIAVX800,  0x00, VIA133, VIASATA, ATA_SA150, "VX800" },
      { ATA_VIAVX855,  0x00, VIA133, 0x00,    ATA_UDMA6, "VX855" },
+     { ATA_VIAVX900,  0x00, VIA133, VIASATA, ATA_SA300, "VX900" },
      { 0, 0, 0, 0, 0, 0 }};
     static struct ata_chip_id new_ids[] =
     {{ ATA_VIA6410,   0x00, 0,      0x00,    ATA_UDMA6, "6410" },
@@ -123,7 +130,9 @@ ata_via_probe(device_t dev)
 
     if (pci_get_devid(dev) == ATA_VIA82C571 ||
 	pci_get_devid(dev) == ATA_VIACX700IDE ||
-	pci_get_devid(dev) == ATA_VIASATAIDE) {
+	pci_get_devid(dev) == ATA_VIASATAIDE ||
+	pci_get_devid(dev) == ATA_VIASATAIDE2 ||
+	pci_get_devid(dev) == ATA_VIASATAIDE3) {
 	if (!(ctlr->chip = ata_find_chip(dev, ids, -99))) 
 	    return ENXIO;
     }
@@ -150,11 +159,12 @@ ata_via_chipinit(device_t dev)
 	if (ata_ahci_chipinit(dev) != ENXIO)
 	    return (0);
     }
-    /* 2 SATA without SATA registers on first channel + 1 PATA on second */
+    /* 2 SATA with "SATA registers" at PCI config space + PATA on secondary */
     if (ctlr->chip->cfg2 & VIASATA) {
 	ctlr->ch_attach = ata_via_sata_ch_attach;
 	ctlr->setmode = ata_via_sata_setmode;
 	ctlr->getrev = ata_via_sata_getrev;
+	ctlr->reset = ata_via_sata_reset;
 	return 0;
     }
     /* Legacy SATA/SATA+PATA with SATA registers in BAR(5). */
@@ -402,18 +412,30 @@ ata_via_sata_ch_attach(device_t dev)
 
 	if (ata_pci_ch_attach(dev))
 		return ENXIO;
-	if (ch->unit == 0)
+	if (ch->unit == 0) {
+		ch->hw.status = ata_via_sata_status;
+		ch->hw.pm_read = ata_via_sata_scr_read;
+		ch->hw.pm_write = ata_via_sata_scr_write;
+		ch->flags |= ATA_PERIODIC_POLL;
 		ch->flags |= ATA_SATA;
+		ata_sata_scr_write(ch, 0, ATA_SERROR, 0xffffffff);
+		ata_sata_scr_write(ch, 1, ATA_SERROR, 0xffffffff);
+	}
 	return (0);
 }
 
 static int
 ata_via_sata_getrev(device_t dev, int target)
 {
+	device_t parent = device_get_parent(dev);
 	struct ata_channel *ch = device_get_softc(dev);
 
-	if (ch->unit == 0)
-		return (1);
+	if (ch->unit == 0) {
+		if (pci_read_config(parent, 0xa0 + target, 1) & 0x10)
+			return (2);
+		else
+			return (1);
+	}
 	return (0);
 }
 
@@ -427,5 +449,112 @@ ata_via_sata_setmode(device_t dev, int t
 	return (ata_via_old_setmode(dev, target, mode));
 }
 
+static void
+ata_via_sata_reset(device_t dev)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+	int devs;
+
+	if (ch->unit == 0) {
+		devs = ata_sata_phy_reset(dev, 0, 0);
+		DELAY(10000);
+		devs += ata_sata_phy_reset(dev, 1, 0);
+	} else
+		devs = 1;
+	if (devs)
+		ata_generic_reset(dev);
+	else
+		ch->devices = 0;
+}
+
+static int
+ata_via_sata_scr_read(device_t dev, int port, int reg, u_int32_t *result)
+{
+	struct ata_channel *ch;
+	device_t parent;
+	uint32_t val;
+
+	parent = device_get_parent(dev);
+	ch = device_get_softc(dev);
+	port = (port == 1) ? 1 : 0;
+	switch (reg) {
+	case ATA_SSTATUS:

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


More information about the svn-src-projects mailing list