diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 103c57c93da..007317843f1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2013-04-25 Alan Modra + + * config.bfd: Add powerpc64le-linux. + 2013-04-24 H.J. Lu * config.bfd (targ_selvecs): Add bfd_elf32_x86_64_vec for diff --git a/bfd/config.bfd b/bfd/config.bfd index aef60c792b7..228e7c1a5dd 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -1242,7 +1242,8 @@ case "${targ}" in targ_selvecs="bfd_elf64_powerpcle_vec bfd_elf32_powerpc_vec bfd_elf32_powerpcle_vec rs6000coff_vec rs6000coff64_vec aix5coff64_vec" want64=true ;; - powerpc64le-*-elf* | powerpcle-*-elf64*) + powerpc64le-*-elf* | powerpcle-*-elf64* | powerpc64le-*-linux* | \ + powerpc64le-*-*bsd*) targ_defvec=bfd_elf64_powerpcle_vec targ_selvecs="bfd_elf64_powerpc_vec bfd_elf32_powerpcle_vec bfd_elf32_powerpc_vec rs6000coff_vec rs6000coff64_vec aix5coff64_vec" want64=true diff --git a/gas/ChangeLog b/gas/ChangeLog index d3c27065cdd..0fd3002cdca 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2013-04-25 Alan Modra + + * configure.in: Allow little-endian linux. + * configure: Regenerate. + 2013-04-24 Sandra Loosemore * config/tc-nios2.c (nios2_control_register_arg_p): Rename diff --git a/gas/configure b/gas/configure index 382f8d3522b..6f9f5ba5bae 100755 --- a/gas/configure +++ b/gas/configure @@ -11986,12 +11986,6 @@ $as_echo "$as_me: WARNING: GAS support for ${generic_target} is preliminary and $as_echo "#define AIX_WEAK_SUPPORT 1" >>confdefs.h - ;; - ppc-*-linux-*) - case "$endian" in - big) ;; - *) as_fn_error "GNU/Linux must be configured big endian" "$LINENO" 5 ;; - esac ;; ppc-*-solaris*) if test ${this_target} = $target; then diff --git a/gas/configure.in b/gas/configure.in index 88cbff8cd56..37f6d5f5e7e 100644 --- a/gas/configure.in +++ b/gas/configure.in @@ -176,12 +176,6 @@ changequote([,])dnl AC_DEFINE(AIX_WEAK_SUPPORT, 1, [Define if using AIX 5.2 value for C_WEAKEXT.]) ;; - ppc-*-linux-*) - case "$endian" in - big) ;; - *) AC_MSG_ERROR(GNU/Linux must be configured big endian) ;; - esac - ;; ppc-*-solaris*) if test ${this_target} = $target; then AC_DEFINE(TARGET_SOLARIS_COMMENT, 1, diff --git a/gold/ChangeLog b/gold/ChangeLog index 67d7571eae3..9fd5ded4cfd 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,7 @@ +2013-04-25 Alan Modra + + * configure.tgt: Add powerpcle and powerpc64le. + 2013-04-22 Alan Modra PR gold/15355 diff --git a/gold/configure.tgt b/gold/configure.tgt index 504de2f2353..d61647e0ee3 100644 --- a/gold/configure.tgt +++ b/gold/configure.tgt @@ -104,6 +104,14 @@ powerpc-*) targ_big_endian=true targ_extra_big_endian=false ;; +powerpcle-*) + targ_obj=powerpc + targ_machine=EM_PPC + targ_size=32 + targ_extra_size=64 + targ_big_endian=false + targ_extra_big_endian=true + ;; powerpc64-*) targ_obj=powerpc targ_machine=EM_PPC64 @@ -112,6 +120,14 @@ powerpc64-*) targ_big_endian=true targ_extra_big_endian=false ;; +powerpc64le-*) + targ_obj=powerpc + targ_machine=EM_PPC64 + targ_size=64 + targ_extra_size=32 + targ_big_endian=false + targ_extra_big_endian=true + ;; armeb*-*-*|armbe*-*-*) targ_obj=arm targ_extra_obj=arm-reloc-property diff --git a/ld/ChangeLog b/ld/ChangeLog index 5014b5f91ca..ff69706efc6 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2013-04-25 Alan Modra + + * Makefile.am (ALL_EMULATION_SOURCES): Add eelf32lppclinux.c. + (eelf32lppclinux.c): New rule. + * Makefile.in: Regenerate. + * configure.tgt: Merge powerpc-linux and other powerpc-elf targets + with corresponding little-endian targets. + * emulparams/elf32lppc.sh: Update comment. + * emulparams/elf32lppclinux.sh: New. + 2013-04-24 H.J. Lu * configure.tgt (targ_extra_emuls): Adds elf32_x86_64 for diff --git a/ld/Makefile.am b/ld/Makefile.am index e1d05d8d731..e0366f36658 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -247,6 +247,7 @@ ALL_EMULATION_SOURCES = \ eelf32lm32fd.c \ eelf32lmip.c \ eelf32lppc.c \ + eelf32lppclinux.c \ eelf32lppcnto.c \ eelf32lppcsim.c \ eelf32lsmip.c \ @@ -1106,6 +1107,12 @@ eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \ ldemul-list.h \ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)" +eelf32lppclinux.c: $(srcdir)/emulparams/elf32lppclinux.sh \ + $(srcdir)/emulparams/elf32lppc.sh $(srcdir)/emulparams/elf32ppc.sh \ + $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \ + ldemul-list.h \ + $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32lppclinux "$(tdir_elf32lppclinux)" eelf32lppcnto.c: $(srcdir)/emulparams/elf32lppcnto.sh \ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \ diff --git a/ld/Makefile.in b/ld/Makefile.in index 180a0eda656..042e9f23a2a 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -555,6 +555,7 @@ ALL_EMULATION_SOURCES = \ eelf32lm32fd.c \ eelf32lmip.c \ eelf32lppc.c \ + eelf32lppclinux.c \ eelf32lppcnto.c \ eelf32lppcsim.c \ eelf32lsmip.c \ @@ -1188,6 +1189,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lm32fd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lmip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppclinux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppcnto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppcsim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lr5900.Po@am__quote@ @@ -2591,6 +2593,12 @@ eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \ ldemul-list.h \ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32lppc "$(tdir_elf32lppc)" +eelf32lppclinux.c: $(srcdir)/emulparams/elf32lppclinux.sh \ + $(srcdir)/emulparams/elf32lppc.sh $(srcdir)/emulparams/elf32ppc.sh \ + $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \ + ldemul-list.h \ + $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32lppclinux "$(tdir_elf32lppclinux)" eelf32lppcnto.c: $(srcdir)/emulparams/elf32lppcnto.sh \ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emulparams/elf32ppccommon.sh \ $(srcdir)/emultempl/ppc32elf.em $(ELF_DEPS) \ diff --git a/ld/configure.tgt b/ld/configure.tgt index cd840e94df4..65884fae8e6 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -547,45 +547,29 @@ powerpc64-*-freebsd*) tdir_elf32ppc=`echo "${targ_alias}" | sed -e 's/64//'` tdir_elf32ppc_fbsd=$tdir_elf32ppc ;; -powerpc*-*-linux*) case "${targ}" in - *64*) targ_emul=elf64ppc - targ_extra_emuls="elf32ppclinux elf32ppc elf32ppcsim" - targ_extra_libpath="elf32ppclinux elf32ppc" - tdir_elf32ppc=`echo "${targ_alias}" | sed -e 's/64//'` - tdir_elf32ppclinux=$tdir_elf32ppc - tdir_elf32ppcsim=$tdir_elf32ppc - ;; - *) targ_emul=elf32ppclinux - targ_extra_emuls="elf32ppc elf32ppcsim" - targ_extra_libpath=elf32ppc - targ64_extra_emuls=elf64ppc - targ64_extra_libpath=elf64ppc - ;; - esac ;; -powerpc*le-*-elf* | powerpc*le-*-eabi* | powerpc*le-*-solaris* \ - | powerpc*le-*-sysv* | powerpc*le-*-vxworks*) - case "${targ}" in - *64*) targ_emul=elf64lppc - targ_extra_emuls="elf32lppc elf32lppcsim" - targ_extra_libpath=elf32lppc - tdir_elf32lppc=`echo "${targ_alias}" | sed -e 's/64//'` - tdir_elf32lppcsim=$tdir_elf32lppc - ;; - *) targ_emul=elf32lppc - targ_extra_emuls=elf32lppcsim - targ64_extra_emuls=elf64lppc - targ64_extra_libpath=elf64lppc - ;; - esac ;; +powerpc-*-vxworks*) + targ_emul=elf32ppcvxworks + targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim" ;; powerpc*-*-elf* | powerpc*-*-eabi* | powerpc*-*-sysv* \ - | powerpc*-*-netbsd* | powerpc-*-openbsd* | powerpc*-*-kaos*) + | powerpc*-*-linux* | powerpc*-*-netbsd* | powerpc*-*-openbsd* \ + | powerpc*-*-solaris* | powerpc*-*-kaos* | powerpc*-*-vxworks*) case "${targ}" in *64*) targ_emul=elf64ppc targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim" targ_extra_libpath="elf32ppc elf32ppclinux" - tdir_elf32ppc=`echo "${targ_alias}" | sed -e 's/64//'` - tdir_elf32ppclinux=$tdir_elf32ppc - tdir_elf32ppcsim=$tdir_elf32ppc + td=tdir_elf32ppc + case "${targ}" in + powerpc*le-*) td=tdir_elf32lppc;; + esac + eval ${td}=`echo "${targ_alias}" | sed -e 's/64//'` + eval ${td}linux=\$${td} + eval ${td}sim=\$${td} + ;; + *linux*) targ_emul=elf32ppclinux + targ_extra_emuls="elf32ppc elf32ppcsim" + targ_extra_libpath=elf32ppc + targ64_extra_emuls=elf64ppc + targ64_extra_libpath=elf64ppc ;; *) targ_emul=elf32ppc targ_extra_emuls="elf32ppclinux elf32ppcsim" @@ -593,10 +577,14 @@ powerpc*-*-elf* | powerpc*-*-eabi* | powerpc*-*-sysv* \ targ64_extra_emuls=elf64ppc targ64_extra_libpath=elf64ppc ;; + esac + case "${targ}" in + powerpc*le-*) + for z in targ_emul targ_extra_emuls targ_extra_libpath targ64_extra_emuls targ64_extra_libpath + do + eval ${z}=\"`eval echo \\$${z} | sed -e 's/ppc/lppc/g'`\" + done esac ;; -powerpc-*-vxworks*) - targ_emul=elf32ppcvxworks - targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim" ;; powerpc-*-nto*) targ_emul=elf32ppcnto ;; powerpcle-*-nto*) targ_emul=elf32lppcnto ;; powerpc-*-rtems*) targ_emul=elf32ppc ;; diff --git a/ld/emulparams/elf32lppc.sh b/ld/emulparams/elf32lppc.sh index 18cce4898ee..8d4e3a0c078 100644 --- a/ld/emulparams/elf32lppc.sh +++ b/ld/emulparams/elf32lppc.sh @@ -1,5 +1,5 @@ # If you change this file, please also look at files which source this one: -# elf32lppcsim.sh +# elf32lppcsim.sh elf32lppclinux.sh . ${srcdir}/emulparams/elf32ppc.sh OUTPUT_FORMAT="elf32-powerpcle" diff --git a/ld/emulparams/elf32lppclinux.sh b/ld/emulparams/elf32lppclinux.sh new file mode 100644 index 00000000000..9a56372ef96 --- /dev/null +++ b/ld/emulparams/elf32lppclinux.sh @@ -0,0 +1,8 @@ +. ${srcdir}/emulparams/elf32lppc.sh +TEXT_START_ADDR=0x10000000 +unset EXECUTABLE_SYMBOLS +unset OTHER_END_SYMBOLS +test -z "${RELOCATING}" || OTHER_SECTIONS="/DISCARD/ : { *(.fixup) }" +OTHER_RELRO_SECTIONS=" + .got1 ${RELOCATING-0} : { *(.got1) } + .got2 ${RELOCATING-0} : { *(.got2) }"