--- /dev/null
+--- printflocal.h.orig 2009-11-12 13:40:46.000000000 -0800
++++ printflocal.h 2009-11-12 23:06:25.000000000 -0800
+@@ -32,6 +32,11 @@
+ * $FreeBSD: src/lib/libc/stdio/printflocal.h,v 1.3 2009/03/02 04:07:58 das Exp $
+ */
+
++/*
++ * Defining here VECTORS for all files that include this header (<rdar://problem/8466056>)
++ */
++#define VECTORS
++
+ /*
+ * Flags used during conversion.
+ */
+@@ -49,6 +49,9 @@
+ #define PTRDIFFT 0x800 /* ptrdiff_t */
+ #define INTMAXT 0x1000 /* intmax_t */
+ #define CHARINT 0x2000 /* print char using int format */
++#ifdef VECTORS
++#define VECTOR 0x4000 /* Altivec or SSE vector */
++#endif /* VECTORS */
+
+ /*
+ * Macros for converting digits to letters and vice versa
+@@ -60,6 +63,13 @@
+ /* Size of the static argument table. */
+ #define STATIC_ARG_TBL_SIZE 8
+
++#ifdef VECTORS
++typedef __attribute__ ((vector_size(16))) unsigned char VECTORTYPE;
++#ifdef __SSE2__
++#define V64TYPE
++#endif /* __SSE2__ */
++#endif /* VECTORS */
++
+ union arg {
+ int intarg;
+ u_int uintarg;
+@@ -87,6 +97,21 @@ union arg {
+ #endif
+ wint_t wintarg;
+ wchar_t *pwchararg;
++#ifdef VECTORS
++ VECTORTYPE vectorarg;
++ unsigned char vuchararg[16];
++ signed char vchararg[16];
++ unsigned short vushortarg[8];
++ signed short vshortarg[8];
++ unsigned int vuintarg[4];
++ signed int vintarg[4];
++ float vfloatarg[4];
++#ifdef V64TYPE
++ double vdoublearg[2];
++ unsigned long long vulonglongarg[2];
++ long long vlonglongarg[2];
++#endif /* V64TYPE */
++#endif /* VECTORS */
+ };
+
+ /* Handle positional parameters. */