diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 60e4cfac10a3725bbbbc7293fdb91bdfbbc2c7bb..5f5c2c0a2c42400cf7e9952e14d507da3029920a 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,8 @@
+2003-10-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+	* mips_sgi_mach_dep.s: Use _ABIO32 instead of external
+	_MIPS_SIM_ABI32.
+
 2003-10-18  Alan Modra  <amodra@bigpond.net.au>
 
 	* include/private/gcconfig.h (ALIGNMENT <powerpc linux>): Remove
diff --git a/boehm-gc/mips_sgi_mach_dep.s b/boehm-gc/mips_sgi_mach_dep.s
index 56390280a718845293455066595083420c477f8f..cadacf5ed4d8888bec58bc8d9fd72041f51b574a 100644
--- a/boehm-gc/mips_sgi_mach_dep.s
+++ b/boehm-gc/mips_sgi_mach_dep.s
@@ -24,7 +24,7 @@
 #   endif
     SAVE_GP(GPOFF)
     REG_S 	ra,RAOFF(sp)
-#   if (_MIPS_SIM == _MIPS_SIM_ABI32)
+#   if (_MIPS_SIM == _ABIO32)
     	call_push($2)
     	call_push($3)
 #   endif
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5abaefd2e218b1bcfe447934658d68d9b0442158..6219b2897472510b30ca5db12a46ca7b2f1b194f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-10-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+	* config/mips/linux.h (TARGET_OS_CPP_BUILTINS): Define _ABIO32.
+	Use it in _MIPS_SIM definition.
+	* config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Likewise.
+
 2003-10-20  Zack Weinberg  <zack@codesourcery.com>
 
 	* config/i386/i386.c (print_reg): Abort if REGNO (x) is a
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
index de7286d04f9e8a2bc7dd94852521e4e9f43bc612..1785a147036d5d09bd76200a573d2225b73ab490 100644
--- a/gcc/config/mips/linux.h
+++ b/gcc/config/mips/linux.h
@@ -81,7 +81,8 @@ Boston, MA 02111-1307, USA.  */
       }								\
      else							\
       {								\
-        builtin_define ("_MIPS_SIM=_MIPS_SIM_ABI32");		\
+	builtin_define ("_ABIO32=1");			\
+	builtin_define ("_MIPS_SIM=_ABIO32");		\
         builtin_define ("_MIPS_SZLONG=32");			\
         builtin_define ("_MIPS_SZPTR=32");			\
       }								\
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 7af1026c828c06cb372e97e6e7f43be4ca137132..1b51913a0221598ac04d1a2c2b120df488b2531d 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -3465,7 +3465,7 @@ while (0)
    we need to load our GP.  We don't preserve $gp or $ra, since each
    init/fini chunk is supposed to initialize $gp, and crti/crtn
    already take care of preserving $ra and, when appropriate, $gp.  */
-#if _MIPS_SIM == _MIPS_SIM_ABI32
+#if (defined _ABIO32 && _MIPS_SIM == _ABIO32)
 #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)	\
    asm (SECTION_OP "\n\
 	.set noreorder\n\
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 627a5f81711059debe89b82d7903e7e939aaaf23..7d553b7fede1b2f1e508b9eef31c36ad22897bc8 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,8 @@
+2003-10-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+	* src/mips/ffi.c: Use _ABIN32, _ABIO32 instead of external
+	_MIPS_SIM_NABI32, _MIPS_SIM_ABI32.
+
 2003-10-19  Andreas Tobler  <a.tobler@schweiz.ch>
 
 	* src/powerpc/ffi_darwin.c (ffi_prep_args): Declare bytes again.
diff --git a/libffi/src/mips/ffi.c b/libffi/src/mips/ffi.c
index 93f79239dfc0b6bcc9647a3639f8868a9908570f..01ad20e4c0dd9efd45d3656ffd4c3f33ea4d6627 100644
--- a/libffi/src/mips/ffi.c
+++ b/libffi/src/mips/ffi.c
@@ -29,7 +29,7 @@
 
 #include <stdlib.h>
 
-#if _MIPS_SIM == _MIPS_SIM_NABI32
+#if _MIPS_SIM == _ABIN32
 #define FIX_ARGP \
 FFI_ASSERT(argp <= &stack[bytes]); \
 if (argp == &stack[bytes]) \
@@ -55,7 +55,7 @@ static void ffi_prep_args(char *stack,
   register char *argp;
   register ffi_type **p_arg;
 
-#if _MIPS_SIM == _MIPS_SIM_NABI32
+#if _MIPS_SIM == _ABIN32
   /* If more than 8 double words are used, the remainder go
      on the stack. We reorder stuff on the stack here to 
      support this easily. */
@@ -69,7 +69,7 @@ static void ffi_prep_args(char *stack,
 
   memset(stack, 0, bytes);
 
-#if _MIPS_SIM == _MIPS_SIM_NABI32
+#if _MIPS_SIM == _ABIN32
   if ( ecif->cif->rstruct_flag != 0 )
 #else
   if ( ecif->cif->rtype->type == FFI_TYPE_STRUCT )
@@ -92,7 +92,7 @@ static void ffi_prep_args(char *stack,
 	FIX_ARGP;
       }
 
-#if _MIPS_SIM == _MIPS_SIM_ABI32
+#if _MIPS_SIM == _ABIO32
 #define OFFSET 0
 #else
 #define OFFSET sizeof(int)
@@ -146,7 +146,7 @@ static void ffi_prep_args(char *stack,
 	    }
 	  else
 	    {
-#if _MIPS_SIM == _MIPS_SIM_ABI32	      
+#if _MIPS_SIM == _ABIO32	      
 	      memcpy(argp, *p_argv, z);
 #else
 	      {
@@ -178,7 +178,7 @@ static void ffi_prep_args(char *stack,
   return;
 }
 
-#if _MIPS_SIM == _MIPS_SIM_NABI32
+#if _MIPS_SIM == _ABIN32
 
 /* The n32 spec says that if "a chunk consists solely of a double 
    float field (but not a double, which is part of a union), it
@@ -267,7 +267,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
 {
   cif->flags = 0;
 
-#if _MIPS_SIM == _MIPS_SIM_ABI32
+#if _MIPS_SIM == _ABIO32
   /* Set the flags necessary for O32 processing */
 
   if (cif->rtype->type != FFI_TYPE_STRUCT)
@@ -322,7 +322,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
     }
 #endif
 
-#if _MIPS_SIM == _MIPS_SIM_NABI32
+#if _MIPS_SIM == _ABIN32
   /* Set the flags necessary for N32 processing */
   {
     unsigned shift = 0;
@@ -441,14 +441,14 @@ void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
     
   switch (cif->abi) 
     {
-#if _MIPS_SIM == _MIPS_SIM_ABI32
+#if _MIPS_SIM == _ABIO32
     case FFI_O32:
       ffi_call_O32(ffi_prep_args, &ecif, cif->bytes, 
 		   cif->flags, ecif.rvalue, fn);
       break;
 #endif
 
-#if _MIPS_SIM == _MIPS_SIM_NABI32
+#if _MIPS_SIM == _ABIN32
     case FFI_N32:
       ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, 
 		   cif->flags, ecif.rvalue, fn);
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 6706b0f4ea3d26dca7ee1692f863439aa4be361a..b93dac9bb370145bde7f51cfe60fb98c158d9723 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,8 @@
+2003-10-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+	* config/cpu/mips/atomicity.h (__atomic_add): Use _ABIO32 instead
+	of external _MIPS_SIM_ABI32.
+
 2003-10-20  Phil Edwards  <phil@codesourcery.com>
 
 	* configure.ac:  Fix comment typo.
diff --git a/libstdc++-v3/config/cpu/mips/atomicity.h b/libstdc++-v3/config/cpu/mips/atomicity.h
index 51f3e864462576d8c369a9fd225234e71797301e..f24b059b8e9dbf81993ccde827d82a80c19ec977 100644
--- a/libstdc++-v3/config/cpu/mips/atomicity.h
+++ b/libstdc++-v3/config/cpu/mips/atomicity.h
@@ -42,7 +42,7 @@ __exchange_and_add (volatile _Atomic_word *__mem, int __val)
     ("/* Inline exchange & add */\n\t"
      "1:\n\t"
      ".set	push\n\t"
-#if _MIPS_SIM == _MIPS_SIM_ABI32
+#if _MIPS_SIM == _ABIO32
      ".set	mips2\n\t"
 #endif
      "ll	%0,%3\n\t"
@@ -68,7 +68,7 @@ __atomic_add (volatile _Atomic_word *__mem, int __val)
     ("/* Inline atomic add */\n\t"
      "1:\n\t"
      ".set	push\n\t"
-#if _MIPS_SIM == _MIPS_SIM_ABI32
+#if _MIPS_SIM == _ABIO32
      ".set	mips2\n\t"
 #endif
      "ll	%0,%2\n\t"