If gcc is configured to generate i686 code or better by default (like
when using the --with-arch=pentium3 configure option), then the __i686
macro will always be defined automatically and thus screw up the
compilation of some .S files.

http://bugs.gentoo.org/131108
http://sourceware.org/ml/libc-alpha/2006-04/msg00090.html

2006-04-25  Mike Frysinger  <vapier@gentoo.org>

	* sysdeps/i386/sysdep.h (__i686): Undefine.

Index: glibc-2.4/sysdeps/unix/sysv/linux/i386/sysdep.h
===================================================================
--- glibc-2.4/sysdeps/unix/sysv/linux/i386/sysdep.h	(revision 1469)
+++ glibc-2.4/sysdeps/unix/sysv/linux/i386/sysdep.h	(working copy)
@@ -29,6 +29,10 @@
 #include <dl-sysdep.h>
 #include <tls.h>

+#if defined __i686 && defined __ASSEMBLER__
+#undef __i686
+#define __i686 __i686
+#endif

 /* For Linux we can use the system call table in the header file
 	/usr/include/asm/unistd.h
Index: glibc-2.4/nptl/sysdeps/pthread/pt-initfini.c
===================================================================
--- glibc-2.4/nptl/sysdeps/pthread/pt-initfini.c	(revision 1469)
+++ glibc-2.4/nptl/sysdeps/pthread/pt-initfini.c	(working copy)
@@ -45,6 +45,11 @@
 /* Embed an #include to pull in the alignment and .end directives. */
 asm ("\n#include \"defs.h\"");

+asm ("\n#if defined __i686 && defined __ASSEMBLER__");
+asm ("\n#undef __i686");
+asm ("\n#define __i686 __i686");
+asm ("\n#endif");
+
 /* The initial common code ends here. */
 asm ("\n/*@HEADER_ENDS*/");

