Module Name:    src
Committed By:   skrll
Date:           Sun Nov 15 10:25:17 UTC 2009

Modified Files:
        src/external/gpl3/binutils/dist/bfd: config.bfd elfxx-mips.c
        src/external/gpl3/binutils/dist/gas: write.c
        src/external/gpl3/binutils/dist/ld: configure.tgt
        src/external/gpl3/binutils/dist/ld/emulparams: elf32bmipn32-defs.sh
        src/external/gpl3/binutils/dist/opcodes: mips-opc.c

Log Message:
Pull across most of the changes from matt-nb5-mips64.

Only remaining change is bfd/elf.c:_bfd_elf_is_local_label_name which
should probably be done via mips_elf_is_local_label_name.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/external/gpl3/binutils/dist/bfd/config.bfd
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/gpl3/binutils/dist/bfd/elfxx-mips.c
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/gpl3/binutils/dist/gas/write.c
cvs rdiff -u -r1.3 -r1.4 src/external/gpl3/binutils/dist/ld/configure.tgt
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/binutils/dist/ld/emulparams/elf32bmipn32-defs.sh
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/binutils/dist/opcodes/mips-opc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/binutils/dist/bfd/config.bfd
diff -u src/external/gpl3/binutils/dist/bfd/config.bfd:1.3 src/external/gpl3/binutils/dist/bfd/config.bfd:1.4
--- src/external/gpl3/binutils/dist/bfd/config.bfd:1.3	Fri Aug 21 15:15:09 2009
+++ src/external/gpl3/binutils/dist/bfd/config.bfd	Sun Nov 15 10:25:16 2009
@@ -876,11 +876,11 @@
 #ifdef BFD64
   mips64*el-*-netbsd*)
     targ_defvec=bfd_elf32_nlittlemips_vec
-    targ_selvecs="bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf32_nbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec ecoff_little_vec ecoff_big_vec"
+    targ_selvecs="bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf32_nbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec"
     ;;
   mips64*-*-netbsd*)
     targ_defvec=bfd_elf32_nbigmips_vec
-    targ_selvecs="bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf32_nlittlemips_vec bfd_elf32_ntradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec ecoff_little_vec ecoff_big_vec"
+    targ_selvecs="bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf32_nlittlemips_vec bfd_elf32_ntradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec"
     ;;
 #endif
   mips*el-*-netbsd*)

Index: src/external/gpl3/binutils/dist/bfd/elfxx-mips.c
diff -u src/external/gpl3/binutils/dist/bfd/elfxx-mips.c:1.1.1.1 src/external/gpl3/binutils/dist/bfd/elfxx-mips.c:1.2
--- src/external/gpl3/binutils/dist/bfd/elfxx-mips.c:1.1.1.1	Tue Aug 18 09:26:42 2009
+++ src/external/gpl3/binutils/dist/bfd/elfxx-mips.c	Sun Nov 15 10:25:16 2009
@@ -7706,10 +7706,24 @@
 		     reloc types into the output file as R_MIPS_REL32
 		     relocs.  Make room for this reloc in .rel(a).dyn.  */
 		  mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
-		  if (MIPS_ELF_READONLY_SECTION (sec))
-		    /* We tell the dynamic linker that there are
-		       relocations against the text segment.  */
-		    info->flags |= DF_TEXTREL;
+		  /* In the N32 and 64-bit ABIs there may be multiple
+		     consecutive relocations for the same offset.  If we have
+		     a R_MIPS_GPREL32 followed by a R_MIPS_64 then that
+		     relocation is complete and needs no futher adjustment.  */
+		  if ((rel == relocs
+		      || rel[-1].r_offset != rel->r_offset
+		      || r_type != R_MIPS_64
+		      || ELF_R_TYPE(abfd, rel[-1].r_info) != R_MIPS_GPREL32)
+		      && (MIPS_ELF_READONLY_SECTION (sec))
+		    {
+		      /* We tell the dynamic linker that there are
+		         relocations against the text segment.  */
+		      info->flags |= DF_TEXTREL;
+		      info->callbacks->warning
+			(info,
+			 _("relocation emitted against readonly section"),
+			 NULL, abfd, sec, rel->r_offset);
+		    }
 		}
 	      else
 		{

Index: src/external/gpl3/binutils/dist/gas/write.c
diff -u src/external/gpl3/binutils/dist/gas/write.c:1.1.1.1 src/external/gpl3/binutils/dist/gas/write.c:1.2
--- src/external/gpl3/binutils/dist/gas/write.c:1.1.1.1	Tue Aug 18 09:30:19 2009
+++ src/external/gpl3/binutils/dist/gas/write.c	Sun Nov 15 10:25:16 2009
@@ -821,10 +821,12 @@
 	      continue;
 	  }
 
-	/* Never adjust a reloc against local symbol in a merge section
-	   with non-zero addend.  */
+	/* Never adjust a reloc against local symbol in a merge section with
+	   a non-zero addend if the addend would place the relocation otside
+	   the section's limits.  */
 	if ((symsec->flags & SEC_MERGE) != 0
-	    && (fixp->fx_offset != 0 || fixp->fx_subsy != NULL))
+	    && (S_GET_VALUE(sym) + fixp->fx_offset >= bfd_get_section_size(symsec)
+	        || fixp->fx_subsy != NULL))
 	  continue;
 
 	/* Never adjust a reloc against TLS local symbol.  */

Index: src/external/gpl3/binutils/dist/ld/configure.tgt
diff -u src/external/gpl3/binutils/dist/ld/configure.tgt:1.3 src/external/gpl3/binutils/dist/ld/configure.tgt:1.4
--- src/external/gpl3/binutils/dist/ld/configure.tgt:1.3	Fri Aug 21 15:15:09 2009
+++ src/external/gpl3/binutils/dist/ld/configure.tgt	Sun Nov 15 10:25:17 2009
@@ -362,11 +362,11 @@
 mips*-sgi-irix*)	targ_emul=mipsbig ;;
 mips*el-*-ecoff*)	targ_emul=mipsidtl ;;
 mips*-*-ecoff*)		targ_emul=mipsidt ;;
-mips64*el-*-netbsd*)	targ_emul=elf32ltsmipn32
-			targ_extra_emuls="elf64btsmip elf64ltsmip elf32ltsmip elf32btsmipn32 elf32btsmip"
+mips64*el-*-netbsd*)	targ_emul=elf64ltsmip
+			targ_extra_emuls="elf64btsmip elf32ltsmipn32 elf32ltsmip elf32btsmipn32 elf32btsmip"
 			;;
-mips64*-*-netbsd*)	targ_emul=elf32btsmipn32
-			targ_extra_emuls="elf64ltsmip elf64btsmip elf32btsmip elf32ltsmipn32 elf32ltsmip"
+mips64*-*-netbsd*)	targ_emul=elf64btsmip
+			targ_extra_emuls="elf64ltsmip elf32btsmipn32 elf32btsmip elf32ltsmipn32 elf32ltsmip"
 			;;
 mips*el-*-netbsd*)	targ_emul=elf32ltsmip
 			targ_extra_emuls="elf32btsmip elf64ltsmip elf64btsmip"

Index: src/external/gpl3/binutils/dist/ld/emulparams/elf32bmipn32-defs.sh
diff -u src/external/gpl3/binutils/dist/ld/emulparams/elf32bmipn32-defs.sh:1.1.1.1 src/external/gpl3/binutils/dist/ld/emulparams/elf32bmipn32-defs.sh:1.2
--- src/external/gpl3/binutils/dist/ld/emulparams/elf32bmipn32-defs.sh:1.1.1.1	Tue Aug 18 10:05:15 2009
+++ src/external/gpl3/binutils/dist/ld/emulparams/elf32bmipn32-defs.sh	Sun Nov 15 10:25:17 2009
@@ -6,6 +6,7 @@
 
 # Handle both big- and little-ended 32-bit MIPS objects.
 ARCH=mips
+MACHINE=
 OUTPUT_FORMAT="elf32-bigmips"
 BIG_OUTPUT_FORMAT="elf32-bigmips"
 LITTLE_OUTPUT_FORMAT="elf32-littlemips"

Index: src/external/gpl3/binutils/dist/opcodes/mips-opc.c
diff -u src/external/gpl3/binutils/dist/opcodes/mips-opc.c:1.1.1.1 src/external/gpl3/binutils/dist/opcodes/mips-opc.c:1.2
--- src/external/gpl3/binutils/dist/opcodes/mips-opc.c:1.1.1.1	Tue Aug 18 10:00:00 2009
+++ src/external/gpl3/binutils/dist/opcodes/mips-opc.c	Sun Nov 15 10:25:17 2009
@@ -950,6 +950,8 @@
 /* mtc2 is at the bottom of the table.  */
 /* mthc2 is at the bottom of the table.  */
 /* mtc3 is at the bottom of the table.  */
+{"mfcr",    "t,s",	0x70000018, 0xfc00ffff,	WR_t|RD_s,		0,		I64	},
+{"mtcr",    "t,s",	0x70000019, 0xfc00ffff,	WR_t|RD_s,		0,		I64	},
 {"mtdr",    "t,G",	0x7080003d, 0xffe007ff,	COD|RD_t|WR_C0,		0,		N5	},
 {"mthi",    "s",	0x00000011, 0xfc1fffff,	RD_s|WR_HI,		0,		I1	},
 {"mthi",    "s,7",	0x00000011, 0xfc1fe7ff, RD_s|WR_HI,		0,		D32	},

Reply via email to