Build i386.rpm libgomp and libsupc++.a(guard.o) as i486+, pre-i486 hardware isn't supported because NPTL doesn't support it anyway. Index: libgomp/configure.tgt =================================================================== --- libgomp/configure.tgt.orig 2010-01-28 13:47:59.000000000 -0800 +++ libgomp/configure.tgt 2010-06-25 10:32:26.706135558 -0700 @@ -48,14 +48,14 @@ ;; # Note that bare i386 is not included here. We need cmpxchg. - i[456]86-*-linux*) + i[3456]86-*-linux*) config_path="linux/x86 linux posix" case " ${CC} ${CFLAGS} " in *" -m64 "*) ;; *) if test -z "$with_arch"; then - XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" + XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" fi esac ;; @@ -67,7 +67,7 @@ config_path="linux/x86 linux posix" case " ${CC} ${CFLAGS} " in *" -m32 "*) - XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686" + XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" ;; esac ;; Index: libstdc++-v3/libsupc++/guard.cc =================================================================== --- libstdc++-v3/libsupc++/guard.cc.orig 2009-11-09 14:09:30.000000000 -0800 +++ libstdc++-v3/libsupc++/guard.cc 2010-06-25 10:32:26.710135964 -0700 @@ -30,6 +30,27 @@ #include #include #include +#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS +# define _GLIBCXX_ATOMIC_BUILTINS 1 +# define __sync_val_compare_and_swap(a, b, c) \ + ({ \ + typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \ + int sltas; \ + __asm __volatile ("lock; cmpxchgl %3, (%1)" \ + : "=a" (sltas) \ + : "r" (a), "0" (b), "r" (c) : "memory"); \ + sltas; \ + }) +# define __sync_lock_test_and_set(a, b) \ + ({ \ + typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \ + int sltas; \ + __asm __volatile ("xchgl (%1), %0" \ + : "=r" (sltas) \ + : "r" (a), "0" (b) : "memory"); \ + sltas; \ + }) +#endif #if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \ && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX) # include