From 8f1dbf8d00452dd55f764e6df7ed1a7209164600 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 6 May 2013 09:50:29 +0930 Subject: [PATCH] sysv4.h (ENDIAN_SELECT): Define, extracted from * config/rs6000/sysv4.h (ENDIAN_SELECT): Define, extracted from (ASM_SPEC): ..here. Emit DEFAULT_ASM_ENDIAN too. (DEFAULT_ASM_ENDIAN): Define. (CC1_SPEC, LINK_TARGET_SPEC): Use ENDIAN_SELECT. * config/rs6000/linux64.h (ASM_SPEC32): Remove endian options. Update -K PIC clause from sysv4.h. (ASM_SPEC_COMMON): Use ENDIAN_SELECT. (LINK_OS_LINUX_EMUL32, LINK_OS_LINUX_EMUL64): Likewise. From-SVN: r198619 --- gcc/ChangeLog | 11 +++++++++ gcc/config/rs6000/linux64.h | 30 ++++++++++++----------- gcc/config/rs6000/sysv4.h | 49 ++++++++++++++++++------------------- 3 files changed, 51 insertions(+), 39 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e2cfb396000..5c790a177a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2013-05-06 Alan Modra + + * config/rs6000/sysv4.h (ENDIAN_SELECT): Define, extracted from + (ASM_SPEC): ..here. Emit DEFAULT_ASM_ENDIAN too. + (DEFAULT_ASM_ENDIAN): Define. + (CC1_SPEC, LINK_TARGET_SPEC): Use ENDIAN_SELECT. + * config/rs6000/linux64.h (ASM_SPEC32): Remove endian options. + Update -K PIC clause from sysv4.h. + (ASM_SPEC_COMMON): Use ENDIAN_SELECT. + (LINK_OS_LINUX_EMUL32, LINK_OS_LINUX_EMUL64): Likewise. + 2013-05-06 Alan Modra * config/rs6000/rs6000.md (bswapdi 2nd splitter): Don't swap words diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 15336dd7d23..4129eb8228b 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -180,20 +180,14 @@ extern int dot_symbols; #endif #define ASM_SPEC32 "-a32 \ -%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \ -%{memb} %{!memb: %{msdata=eabi: -memb}} \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-freebsd: -mbig} \ - %{mcall-i960-old: -mlittle} \ - %{mcall-linux: -mbig} \ - %{mcall-netbsd: -mbig} \ -}}}}" +%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \ +%{memb|msdata=eabi: -memb}" #define ASM_SPEC64 "-a64" #define ASM_SPEC_COMMON "%(asm_cpu) \ -%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \ -%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}" +%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \ + ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) #undef SUBSUBTARGET_EXTRA_SPECS #define SUBSUBTARGET_EXTRA_SPECS \ @@ -373,11 +367,19 @@ extern int dot_symbols; CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64) #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN) -#define LINK_OS_LINUX_EMUL32 "%{!mbig: %{!mbig-endian: -m elf32lppclinux}}%{mbig|mbig-endian: -m elf32ppclinux}" -#define LINK_OS_LINUX_EMUL64 "%{!mbig: %{!mbig-endian: -m elf64lppc}}%{mbig|mbig-endian: -m elf64ppc}" +#define LINK_OS_LINUX_EMUL32 ENDIAN_SELECT(" -m elf32ppclinux", \ + " -m elf32lppclinux", \ + " -m elf32lppclinux") +#define LINK_OS_LINUX_EMUL64 ENDIAN_SELECT(" -m elf64ppc", \ + " -m elf64lppc", \ + " -m elf64lppc") #else -#define LINK_OS_LINUX_EMUL32 "%{!mlittle: %{!mlittle-endian: -m elf32ppclinux}}%{mlittle|mlittle-endian: -m elf32lppclinux}" -#define LINK_OS_LINUX_EMUL64 "%{!mlittle: %{!mlittle-endian: -m elf64ppc}}%{mlittle|mlittle-endian: -m elf64lppc}" +#define LINK_OS_LINUX_EMUL32 ENDIAN_SELECT(" -m elf32ppclinux", \ + " -m elf32lppclinux", \ + " -m elf32ppclinux") +#define LINK_OS_LINUX_EMUL64 ENDIAN_SELECT(" -m elf64ppc", \ + " -m elf64lppc", \ + " -m elf64ppc") #endif #define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index e54c253a4c7..8676a12e502 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -517,19 +517,28 @@ extern int fixuplabelno; while (0) #endif +/* Select one of BIG_OPT, LITTLE_OPT or DEFAULT_OPT depending + on various -mbig, -mlittle and -mcall- options. */ +#define ENDIAN_SELECT(BIG_OPT, LITTLE_OPT, DEFAULT_OPT) \ +"%{mlittle|mlittle-endian:" LITTLE_OPT ";" \ + "mbig|mbig-endian:" BIG_OPT ";" \ + "mcall-aixdesc|mcall-freebsd|mcall-netbsd|" \ + "mcall-openbsd|mcall-linux:" BIG_OPT ";" \ + "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) \ %{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \ %{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \ -%{memb|msdata=eabi: -memb} \ -%{mlittle|mlittle-endian:-mlittle; \ - mbig|mbig-endian :-mbig; \ - mcall-aixdesc | \ - mcall-freebsd | \ - mcall-netbsd | \ - mcall-openbsd | \ - mcall-linux :-mbig; \ - mcall-i960-old :-mlittle}" +%{memb|msdata=eabi: -memb}" \ +ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) #define CC1_ENDIAN_BIG_SPEC "" @@ -547,17 +556,10 @@ extern int fixuplabelno; #endif /* Pass -G xxx to the compiler and set correct endian mode. */ -#define CC1_SPEC "%{G*} %(cc1_cpu) \ -%{mlittle|mlittle-endian: %(cc1_endian_little); \ - mbig |mbig-endian : %(cc1_endian_big); \ - mcall-aixdesc | \ - mcall-freebsd | \ - mcall-netbsd | \ - mcall-openbsd | \ - mcall-linux : -mbig %(cc1_endian_big); \ - mcall-i960-old : -mlittle %(cc1_endian_little); \ - : %(cc1_endian_default)} \ -%{meabi: %{!mcall-*: -mcall-sysv }} \ +#define CC1_SPEC "%{G*} %(cc1_cpu)" \ + ENDIAN_SELECT(" %(cc1_endian_big)", " %(cc1_endian_little)", \ + " %(cc1_endian_default)") \ +"%{meabi: %{!mcall-*: -mcall-sysv }} \ %{!meabi: %{!mno-eabi: \ %{mrelocatable: -meabi } \ %{mcall-freebsd: -mno-eabi } \ @@ -601,11 +603,8 @@ extern int fixuplabelno; %{symbolic:-Bsymbolic -G -dy -z text }" /* Override the default target of the linker. */ -#define LINK_TARGET_SPEC "\ -%{mlittle: --oformat elf32-powerpcle } %{mlittle-endian: --oformat elf32-powerpcle } \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-i960-old: --oformat elf32-powerpcle} \ - }}}}" +#define LINK_TARGET_SPEC \ + ENDIAN_SELECT("", " --oformat elf32-powerpcle", "") /* Any specific OS flags. */ #define LINK_OS_SPEC "\