diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5c790a177a998ba9ab5e40a4e50013cbdad738e1..1a448c7d208f674138692f5ba6d066a786319715 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2013-05-06  Alan Modra  <amodra@gmail.com>
+
+	* config/rs6000/linux.h (DEFAULT_ASM_ENDIAN): Define.
+	(LINK_OS_LINUX_EMUL): Use ENDIAN_SELECT.
+	* config/rs6000/linux64.h (DEFAULT_ASM_ENDIAN): Define.
+	* config/rs6000/sysv4le.h (DEFAULT_ASM_ENDIAN): Define.
+	(LINK_TARGET_SPEC): Use ENDIAN_SELECT.
+	* config/rs6000/sysv4.h (DEFAULT_ASM_ENDIAN): Define as -mbig.
+
 2013-05-06  Alan Modra  <amodra@gmail.com>
 
 	* config/rs6000/sysv4.h (ENDIAN_SELECT): Define, extracted from
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
index 5329f01874b596c4d214f1640b2d2151c98f01b5..f7f2d80c4f2b0ab81bfa3f9f2dd35e78325b58a8 100644
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -79,10 +79,17 @@
 #undef	LINK_OS_DEFAULT_SPEC
 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
 
+#undef  DEFAULT_ASM_ENDIAN
 #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
-#define LINK_OS_LINUX_EMUL "%{!mbig: %{!mbig-endian: -m elf32lppclinux}}%{mbig|mbig-endian: -m elf32ppclinux}"
+#define DEFAULT_ASM_ENDIAN " -mlittle"
+#define LINK_OS_LINUX_EMUL ENDIAN_SELECT(" -m elf32ppclinux",	\
+					 " -m elf32lppclinux",	\
+					 " -m elf32lppclinux")
 #else
-#define LINK_OS_LINUX_EMUL "%{!mlittle: %{!mlittle-endian: -m elf32ppclinux}}%{mlittle|mlittle-endian: -m elf32lppclinux}"
+#define DEFAULT_ASM_ENDIAN " -mbig"
+#define LINK_OS_LINUX_EMUL ENDIAN_SELECT(" -m elf32ppclinux",	\
+					 " -m elf32lppclinux",	\
+					 " -m elf32ppclinux")
 #endif
 
 #undef LINK_OS_LINUX_SPEC
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index 4129eb8228bbec91d4ff523dd8548be4dd149da1..3f280581feb54f61d77d6bcf9607fa60e2c85e9d 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -366,7 +366,9 @@ extern int dot_symbols;
 #define GNU_USER_DYNAMIC_LINKER64 \
   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
 
+#undef  DEFAULT_ASM_ENDIAN
 #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
+#define DEFAULT_ASM_ENDIAN " -mlittle"
 #define LINK_OS_LINUX_EMUL32 ENDIAN_SELECT(" -m elf32ppclinux",		\
 					   " -m elf32lppclinux",	\
 					   " -m elf32lppclinux")
@@ -374,6 +376,7 @@ extern int dot_symbols;
 					   " -m elf64lppc",		\
 					   " -m elf64lppc")
 #else
+#define DEFAULT_ASM_ENDIAN " -mbig"
 #define LINK_OS_LINUX_EMUL32 ENDIAN_SELECT(" -m elf32ppclinux",		\
 					   " -m elf32lppclinux",	\
 					   " -m elf32ppclinux")
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 8676a12e5026a226ad1ec44b665ba72b5ccec57c..0cc8ffb8cb37b140c1db6bb45ee9b67bd7b6625e 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -527,11 +527,7 @@ extern int fixuplabelno;
   "mcall-i960-old:"		LITTLE_OPT ";"	\
   ":"				DEFAULT_OPT "}"
 
-#if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
-#define DEFAULT_ASM_ENDIAN " -mlittle"
-#else
 #define DEFAULT_ASM_ENDIAN " -mbig"
-#endif
 
 #undef	ASM_SPEC
 #define	ASM_SPEC "%(asm_cpu) \
diff --git a/gcc/config/rs6000/sysv4le.h b/gcc/config/rs6000/sysv4le.h
index 40ab10a3062954fab1e06680cc46e3f7ba8335c2..3901122a73875e553f0550105718ad785140c10d 100644
--- a/gcc/config/rs6000/sysv4le.h
+++ b/gcc/config/rs6000/sysv4le.h
@@ -25,12 +25,12 @@
 #undef	CC1_ENDIAN_DEFAULT_SPEC
 #define	CC1_ENDIAN_DEFAULT_SPEC "%(cc1_endian_little)"
 
+#undef	DEFAULT_ASM_ENDIAN
+#define	DEFAULT_ASM_ENDIAN " -mlittle"
+
 #undef	LINK_TARGET_SPEC
-#define	LINK_TARGET_SPEC "\
-%{mbig: --oformat elf32-powerpc } %{mbig-endian: --oformat elf32-powerpc } \
-%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \
-    %{mcall-linux: --oformat elf32-powerpc} \
-  }}}}"
+#define	LINK_TARGET_SPEC \
+  ENDIAN_SELECT(" --oformat elf32-powerpc", "", "")
 
 #undef	MULTILIB_DEFAULTS
 #define	MULTILIB_DEFAULTS { "mlittle", "mcall-sysv" }