diff options
author | Nick Clifton <nickc@redhat.com> | 2013-01-04 17:22:53 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-01-04 17:22:53 +0000 |
commit | e407c74b5b6020cd4f5de18ba74f3959fd9ac190 (patch) | |
tree | c5be2351d7fe51c434754043257f78779e8ce777 /ld | |
parent | fb098a1efcc97442a25ec05fb705089095ca5f3f (diff) | |
download | fsf-binutils-gdb-e407c74b5b6020cd4f5de18ba74f3959fd9ac190.zip fsf-binutils-gdb-e407c74b5b6020cd4f5de18ba74f3959fd9ac190.tar.gz fsf-binutils-gdb-e407c74b5b6020cd4f5de18ba74f3959fd9ac190.tar.bz2 |
* archures.c: Add support for MIPS r5900
* bfd-in2.h: Add support for MIPS r5900
* config.bfd: Add support for Sony Playstation 2
* cpu-mips.c: Add support for MIPS r5900
* elfxx-mips.c: Add support for MIPS r5900 (extension of r4000)
* config/tc-mips.c: Add support for MIPS r5900
Add M_LQ_AB and M_SQ_AB to support large values for instructions lq and sq.
* config/tc-mips.c (can_swap_branch_p, get_append_method): Detect some conditional short loops to fix a bug on the r5900 by NOP in the branch delay slot.
* config/tc-mips.c (M_MUL): Support 3 operands in multu on r5900.
* config/tc-mips.c (M_TRUNCWS): Support trunc.w.s on r5900 in MIPS ISA I.
* config/tc-mips.c (s_mipsset): Force 32 bit floating point on r5900.
* configure.in: Detect CPU type when target string contains r5900 (e.g. mips64r5900el-linux-gnu).
* config/tc-mips.c (mips_ip): Check parameter range of instructions mfps and mtps on r5900.
* elf/mips.h: Add MIPS machine variant number for r5900 which is compatible with old Playstation 2 software.
* opcode/mips.h: Add support for r5900 instructions including lq and sq.
* configure.tgt: Support ELF files for Sony Playstation 2 (for ps2dev and ps2sdk).
* emulparams/elf32lr5900n32.sh: Create linker script for Sony Playstation 2 ELF files using MIPS ABI n32.
* emulparams/elf32lr5900.sh: Create linker script for Sony Playstation 2 ELF files using MIPS ABI o32.
* Makefile.am: Add linker scripts for Sony Playstation 2 ELF files.
* opcodes/mips-dis.c: Add names for CP0 registers of r5900.
* opcodes/mips-opc.c: Add M_SQ_AB and M_LQ_AB to support larger range for instructions sq and lq.
* opcodes/mips-opc.c: Add support for MIPS r5900 CPU.
Add support for 128 bit MMI (Multimedia Instructions).
Add support for EE instructions (Emotion Engine).
Disable unsupported floating point instructions (64 bit and undefined compare operations).
Enable instructions of MIPS ISA IV which are supported by r5900.
Disable 64 bit co processor instructions.
Disable 64 bit multiplication and division instructions.
Disable instructions for co-processor 2 and 3, because these are not supported (preparation for later VU0 support (Vector Unit)).
Disable cvt.w.s because this behaves like trunc.w.s and the correct execution can't be ensured on r5900.
Add trunc.w.s using the opcode encoding of cvt.w.s on r5900. This will confuse less developers and compilers.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 11 | ||||
-rw-r--r-- | ld/Makefile.am | 12 | ||||
-rw-r--r-- | ld/Makefile.in | 14 | ||||
-rw-r--r-- | ld/configure.tgt | 24 | ||||
-rw-r--r-- | ld/emulparams/elf32lr5900.sh | 17 | ||||
-rw-r--r-- | ld/emulparams/elf32lr5900n32.sh | 23 |
6 files changed, 101 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 1ef5336..cc3b25a 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,14 @@ +2013-01-04 Juergen Urban <JuergenUrban@gmx.de> + + * configure.tgt: Support ELF files for Sony Playstation 2 (for + ps2dev and ps2sdk). + * emulparams/elf32lr5900n32.sh: Create linker script for Sony + Playstation 2 ELF files using MIPS ABI n32. + * emulparams/elf32lr5900.sh: Create linker script for Sony + Playstation 2 ELF files using MIPS ABI o32. + * Makefile.am: Add linker scripts for Sony Playstation 2 ELF + files. + 2013-01-02 H.J. Lu <hongjiu.lu@intel.com> * ldver.c (ldversion): Update copyright year to 2013. diff --git a/ld/Makefile.am b/ld/Makefile.am index 995e748..22eac64 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -230,6 +230,8 @@ ALL_EMULATION_SOURCES = \ eelf32ebmipvxworks.c \ eelf32elmip.c \ eelf32elmipvxworks.c \ + eelf32lr5900.c \ + eelf32lr5900n32.c \ eelf32epiphany.c \ eelf32epiphany_4x4.c \ eelf32fr30.c \ @@ -1041,6 +1043,16 @@ eelf32elmipvxworks.c: $(srcdir)/emulparams/elf32elmipvxworks.sh \ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)" +eelf32lr5900.c: $(srcdir)/emulparams/elf32lr5900.sh \ + $(srcdir)/emulparams/elf32bmip.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} elf32lr5900 "$(tdir_elf32lr5900)" +eelf32lr5900n32.c: $(srcdir)/emulparams/elf32lr5900n32.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} elf32lr5900n32 "$(tdir_elf32lr5900n32)" eelf32epiphany.c: $(srcdir)/emulparams/elf32epiphany.sh \ $(ELF_DEPS) ${GEN_DEPENDS} ${GENSCRIPTS} elf32epiphany "$(tdir_epiphany)" diff --git a/ld/Makefile.in b/ld/Makefile.in index 4e61665..8d68159 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -538,6 +538,8 @@ ALL_EMULATION_SOURCES = \ eelf32ebmipvxworks.c \ eelf32elmip.c \ eelf32elmipvxworks.c \ + eelf32lr5900.c \ + eelf32lr5900n32.c \ eelf32epiphany.c \ eelf32epiphany_4x4.c \ eelf32fr30.c \ @@ -1162,6 +1164,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ebmipvxworks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32elmip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32elmipvxworks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lr5900.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lr5900n32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32epiphany.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32epiphany_4x4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32fr30.Po@am__quote@ @@ -2515,6 +2519,16 @@ eelf32elmipvxworks.c: $(srcdir)/emulparams/elf32elmipvxworks.sh \ $(ELF_DEPS) $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mipself.em \ $(srcdir)/emultempl/vxworks.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)" +eelf32lr5900.c: $(srcdir)/emulparams/elf32lr5900.sh \ + $(srcdir)/emulparams/elf32bmip.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} elf32lr5900 "$(tdir_elf32lr5900)" +eelf32lr5900n32.c: $(srcdir)/emulparams/elf32lr5900n32.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} elf32lr5900n32 "$(tdir_elf32lr5900n32)" eelf32epiphany.c: $(srcdir)/emulparams/elf32epiphany.sh \ $(ELF_DEPS) ${GEN_DEPENDS} ${GENSCRIPTS} elf32epiphany "$(tdir_epiphany)" diff --git a/ld/configure.tgt b/ld/configure.tgt index 61cc346..ea55895 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -1,3 +1,21 @@ +# configure.tgt +# +# Copyright 2013 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + # This is the linker target specific file. This is invoked by the # autoconf generated configure script. Putting it in a separate shell # file lets us skip running autoconf when modifying target specific @@ -438,6 +456,12 @@ mips*el-sde-elf*) targ_emul=elf32ltsmip mips*-sde-elf* | mips*-mti-elf*) targ_emul=elf32btsmip targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" ;; +mips64*el-ps2-elf*) targ_emul=elf32lr5900n32 + targ_extra_emuls="elf32lr5900" + targ_extra_libpath=$targ_extra_emuls ;; +mips*el-ps2-elf*) targ_emul=elf32lr5900 + targ_extra_emuls="elf32lr5900n32" + targ_extra_libpath=$targ_extra_emuls ;; mips*el-*-elf*) targ_emul=elf32elmip ;; mips*-*-elf*) targ_emul=elf32ebmip ;; mips*-*-rtems*) targ_emul=elf32ebmip ;; diff --git a/ld/emulparams/elf32lr5900.sh b/ld/emulparams/elf32lr5900.sh new file mode 100644 index 0000000..e8745ff --- /dev/null +++ b/ld/emulparams/elf32lr5900.sh @@ -0,0 +1,17 @@ +. ${srcdir}/emulparams/elf32bmip.sh + +OUTPUT_FORMAT="elf32-littlemips" +BIG_OUTPUT_FORMAT="elf32-bigmips" +LITTLE_OUTPUT_FORMAT="elf32-littlemips" + +TEXT_START_ADDR=0x0100000 +ARCH=mips:5900 +MACHINE= +MAXPAGESIZE=128 +EMBEDDED=yes +DYNAMIC_LINK=FALSE + +unset DATA_ADDR +SHLIB_TEXT_START_ADDR=0 +unset GENERATE_SHLIB_SCRIPT + diff --git a/ld/emulparams/elf32lr5900n32.sh b/ld/emulparams/elf32lr5900n32.sh new file mode 100644 index 0000000..69f7afb --- /dev/null +++ b/ld/emulparams/elf32lr5900n32.sh @@ -0,0 +1,23 @@ +. ${srcdir}/emulparams/elf32bmipn32-defs.sh + +OUTPUT_FORMAT="elf32-nlittlemips" +BIG_OUTPUT_FORMAT="elf32-nbigmips" +LITTLE_OUTPUT_FORMAT="elf32-nlittlemips" + +TEXT_START_ADDR=0x0100000 +ARCH=mips:5900 +MACHINE= +MAXPAGESIZE=128 +EMBEDDED=yes +DYNAMIC_LINK=FALSE + +OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' +OTHER_SECTIONS=' + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } + .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } +' + +unset DATA_ADDR +SHLIB_TEXT_START_ADDR=0 +unset GENERATE_SHLIB_SCRIPT + |