diff options
author | Alan Modra <amodra@gmail.com> | 2016-08-25 16:11:40 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-08-25 23:41:11 +0930 |
commit | 4811ccb48f0d24b9ae2ce37a06af575fbd83a55d (patch) | |
tree | 56012ec2400331c13ccac35ded31ab07b35e0cdd | |
parent | c4dd0ba27f10cb4cb27a9d89f9620648f9cb5165 (diff) | |
download | gdb-4811ccb48f0d24b9ae2ce37a06af575fbd83a55d.zip gdb-4811ccb48f0d24b9ae2ce37a06af575fbd83a55d.tar.gz gdb-4811ccb48f0d24b9ae2ce37a06af575fbd83a55d.tar.bz2 |
powerpc ld configure
This fixes a few problems in the powerpc ld configury.
1) Using powerpc*le-* to test for powerpcle and powerpc64le would
incorrectly match a target triple like powerpc-apple-elf.
2) In the same vein, *64* could match 64 in the user supplied MANUF-OS
part of the target triple.
3) tooldir vars were missing, and some target aliases would result in
ridiculous values for those tdir_* vars given.
4) Since 2016-04-25, BE support was added automatically when asking
for an LE target. If that is a good idea, then so is adding LE
support when asking for BE.
* configure.tgt (powerpc*-*-linux* et al): Rewrite, adding LE
support for BE. First output all target endian configury
values, then opposite endian. Handle more tooldirs. Fix
bogus matches with strings in MANUF-OS part of target triple.
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/configure.tgt | 99 |
2 files changed, 74 insertions, 32 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 02375ed..95a63ea 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2016-08-25 Alan Modra <amodra@gmail.com> + + * configure.tgt (powerpc*-*-linux* et al): Rewrite, adding LE + support for BE. First output all target endian configury + values, then opposite endian. Handle more tooldirs. Fix + bogus matches with strings in MANUF-OS part of target triple. + 2016-08-23 Alan Modra <amodra@gmail.com> * testsuite/lib/ld-lib.exp (run_cc_link_tests): Don't fail tests diff --git a/ld/configure.tgt b/ld/configure.tgt index a3db909..6f3cd4f 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -597,40 +597,75 @@ powerpc*-*-elf* | powerpc*-*-eabi* | powerpc*-*-sysv* \ | 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" - 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" - targ_extra_libpath=elf32ppclinux - targ64_extra_emuls=elf64ppc - targ64_extra_libpath=elf64ppc - ;; + powerpc64*) + targ_emul=elf64ppc + targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim" + targ_extra_libpath="elf32ppc elf32ppclinux" ;; + *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" + targ_extra_libpath=elf32ppclinux + targ64_extra_emuls=elf64ppc + targ64_extra_libpath=elf64ppc ;; esac + td=tdir_elf32ppc + td64=tdir_elf64ppc + s=s/ppc/lppc/g case "${targ}" in - powerpc*le-*) - # PR 19985: Include big endian emulations. - for z in targ_extra_emuls targ_extra_libpath targ64_extra_emuls targ64_extra_libpath - do - eval ${z}=\"\$${z} `eval echo \\$${z} | sed -e 's/ppc/lppc/g'`\" - done - targ_extra_emuls="$targ_extra_emuls $targ_emul" - eval targ_emul=\"`eval echo \\$targ_emul | sed -e 's/ppc/lppc/g'`\" - esac ;; + powerpcle-* | powerpc64le-*) + for z in td td64 targ_emul targ_extra_emuls \ + targ_extra_libpath targ64_extra_emuls \ + targ64_extra_libpath + do + eval ${z}=\"\`echo \$${z} \| sed -e $s\`\" + done + s=s/lppc/ppc/g ;; + esac + # Why oh why did we set tooldir based on target_alias + # rather than on target? + eval tdir_${targ_emul}="${targ_alias}" + cpu=`echo "${targ_alias}" | sed -e 's/-.*//'` + rest=`echo "${targ_alias}" | sed -e 's/^[^-]*//'` + le=le + case "${cpu}" in + *little) le=little + esac + ta32=`echo "${cpu}" | sed -e s/64//`"${rest}" + ta64=`echo "${cpu}" | sed -e 's/64//;s/$/64/;s/'${le}'64$/64'${le}'/;s/be64$/64be/'`"${rest}" + eval test -n \"\$${td}\" || eval ${td}="${ta32}" + eval test -n \"\$${td}linux\" || eval ${td}linux="${ta32}" + eval test -n \"\$${td}sim\" || eval ${td}sim="${ta32}" + eval test -n \"\$${td64}\" || eval ${td64}="${ta64}" + # Now provide the other endian + for z in targ_extra_emuls targ_extra_libpath + do + eval ${z}=\"\$${z} \`echo ${targ_emul} \$${z} \| sed -e $s\`\" + done + for z in targ64_extra_emuls targ64_extra_libpath + do + eval ${z}=\"\$${z} \`echo \$${z} \| sed -e $s\`\" + done + td=`echo "${td}" | sed -e $s` + td64=`echo "${td64}" | sed -e $s` + case "${targ}" in + powerpcle-* | powerpc64le-*) + cpu=`echo "${cpu}" | sed -e s/${le}\$//` ;; + *) + cpu=`echo "${cpu}" | sed -e s/be\$//`${le} ;; + esac + ta32=`echo "${cpu}" | sed -e s/64//`"${rest}" + ta64=`echo "${cpu}" | sed -e 's/64//;s/$/64/;s/'${le}'64$/64'${le}/`"${rest}" + eval test -n \"\$${td}\" || eval ${td}="${ta32}" + eval test -n \"\$${td}linux\" || eval ${td}linux="${ta32}" + eval test -n \"\$${td}sim\" || eval ${td}sim="${ta32}" + eval test -n \"\$${td64}\" || eval ${td64}="${ta64}" + ;; powerpc-*-nto*) targ_emul=elf32ppcnto ;; powerpcle-*-nto*) targ_emul=elf32lppcnto ;; powerpc-*-rtems*) targ_emul=elf32ppc ;; |