This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: On resolving the MIPS gas branch reloc issue


Eric Christopher wrote:
> 
> > Comments?
> > 
> 
> I like it. Clean, appears to be useful, and does what it should. Give it
> a shot through the testsuite and gcc (yes, i realize it probably
> shouldn't be generated, but I'm paranoid) and let me know. Also, Alan or
> Nick should ack the global parts if they like them.

Well, this patch changes the definition of R_MIPS_PC16 (used for branch
relocations) from a plain addend to a rightshift 2 addend. This reflects
the hardware capabilities.
The old version, written according to the ABI spec, was useless, therefore
it was unused with the exception of some half-working/half-broken behaviour
in binutils, and the ABI people at MIPS say it was a typo in the spec and
should have never been defined this way.

The Embedded PIC ABI did something similiar earlier but with a GNU
extension relocation. To keep compatible to it, we need now one new
BFD_RELOC_MIPSEMB_16_PCREL_S2 bfd reloc, because BFD has no way to
find out the ABI early enough.

This patch fixes the problem of branches to globals in the same file,
which were disallowed in december. Tested for mips64-linux and mips-linux
with no new regressions.


Thiemo


2003-02-26  Thiemo Seufer <seufer at csv dot ica dot uni-stuttgart dot de>

	/bfd/ChangeLog
	* elf32-mips.c (elf_mips_howto_table_rel): Change definition of
	R_MIPS_PC16 to rightshift 2.
	(elf_reloc_map mips_reloc_map): Map to rightshifted BFD reloc.
	(bfd_elf32_bfd_reloc_type_lookup): Support
	BFD_RELOC_MIPSEMB_16_PCREL_S2.
	* elf64-mips.c (mips_elf64_howto_table_rel): Change definition of
	R_MIPS_PC16 to rightshift 2.
	(mips_elf64_howto_table_rela): Likewise.
	(mips_reloc_map): Map to rightshifted BFD reloc.
	* elfn32-mips.c: The same as in elf64-mips.c.
	* elfxx-mips.c (mips_elf_got_for_ibfd): Typo in comment.
	(mips_elf_calculate_relocation): Handle rightshifted addends for
	R_MIPS_PC16.
	* reloc.c (BFD_RELOC_MIPSEMB_16_PCREL_S2): New BFD relocation for
	MIPS Embedded PIC. Remove superfluous empty COMMENT.
	* libbfd.h: Regenerate.
	* bfd-in2.h: Regenerate.

	/gas/ChangeLog
	* config/tc-mips.c (append_insn): Add handling of
	BFD_RELOC_MIPSEMB_16_PCREL_S2. Avoid emitting unneeded
	BFD_RELOC_16_PCREL_S2 relocs and add earlier warnings about
	misaligned address and reange overflow.
	(macro_build): Add handling of BFD_RELOC_MIPSEMB_16_PCREL_S2. Add
	earlier warnings about misaligned address and reange overflow.
	(mips_ip): Add handling of BFD_RELOC_MIPSEMB_16_PCREL_S2.
	(md_apply_fix): Likewise. Fix warning output.
	(tc_gen_reloc): Add handling of BFD_RELOC_MIPSEMB_16_PCREL_S2.
	Allow BFD_RELOC_16_PCREL_S2 for all ABIs.
	(md_convert_frag): Add handling of BFD_RELOC_MIPSEMB_16_PCREL_S2.

	/tas/testsuite/ChangeLog
	* gas/mips/bge.d: Reactivate external branch tests.
	* gas/mips/bge.s: Likewise.
	* gas/mips/bgeu.d: Likewise.
	* gas/mips/bgeu.s: Likewise.
	* gas/mips/blt.d: Likewise.
	* gas/mips/blt.s: Likewise.
	* gas/mips/bltu.d: Likewise.
	* gas/mips/bltu.s: Likewise.
	* gas/mips/branch-misc-2.d: New File.
	* gas/mips/branch-misc-2.l: Remove.
	* gas/mips/mips.exp: Adjust branch-misc-2 test.


diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/elf32-mips.c source/bfd/elf32-mips.c
--- source-orig/bfd/elf32-mips.c	Sat Jan 25 01:30:58 2003
+++ source/bfd/elf32-mips.c	Wed Feb 26 07:31:24 2003
@@ -261,9 +261,11 @@ static reloc_howto_type elf_mips_howto_t
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
-  /* 16 bit PC relative reference.  */
+  /* 16 bit PC relative reference.  Note that the ABI document has a typo
+     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
+     We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
-	 0,			/* rightshift */
+	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
 	 TRUE,			/* pc_relative */
@@ -1401,7 +1403,7 @@ static const struct elf_reloc_map mips_r
   { BFD_RELOC_GPREL16, R_MIPS_GPREL16 },
   { BFD_RELOC_MIPS_LITERAL, R_MIPS_LITERAL },
   { BFD_RELOC_MIPS_GOT16, R_MIPS_GOT16 },
-  { BFD_RELOC_16_PCREL, R_MIPS_PC16 },
+  { BFD_RELOC_16_PCREL_S2, R_MIPS_PC16 },
   { BFD_RELOC_MIPS_CALL16, R_MIPS_CALL16 },
   { BFD_RELOC_GPREL32, R_MIPS_GPREL32 },
   { BFD_RELOC_MIPS_GOT_HI16, R_MIPS_GOT_HI16 },
@@ -1458,7 +1460,7 @@ bfd_elf32_bfd_reloc_type_lookup (abfd, c
       return &elf_mips_gnu_rel_hi16;
     case BFD_RELOC_PCREL_LO16:
       return &elf_mips_gnu_rel_lo16;
-    case BFD_RELOC_16_PCREL_S2:
+    case BFD_RELOC_MIPSEMB_16_PCREL_S2:
       return &elf_mips_gnu_rel16_s2;
     case BFD_RELOC_64_PCREL:
       return &elf_mips_gnu_pcrel64;
diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/elf64-mips.c source/bfd/elf64-mips.c
--- source-orig/bfd/elf64-mips.c	Sat Jan 25 01:30:58 2003
+++ source/bfd/elf64-mips.c	Wed Feb 26 07:31:24 2003
@@ -300,9 +300,11 @@ static reloc_howto_type mips_elf64_howto
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
-  /* 16 bit PC relative reference.  */
+  /* 16 bit PC relative reference.  Note that the ABI document has a typo
+     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
+     We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
-	 0,			/* rightshift */
+	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
 	 TRUE,			/* pc_relative */
@@ -795,9 +797,11 @@ static reloc_howto_type mips_elf64_howto
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
-  /* 16 bit PC relative reference.  */
+  /* 16 bit PC relative reference.  Note that the ABI document has a typo
+     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
+     We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
-	 0,			/* rightshift */
+	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
 	 TRUE,			/* pc_relative */
@@ -1894,7 +1898,7 @@ static const struct elf_reloc_map mips_r
   /* There is no BFD reloc for R_MIPS_REL32.  */
   { BFD_RELOC_64, R_MIPS_64 },
   { BFD_RELOC_CTOR, R_MIPS_64 },
-  { BFD_RELOC_16_PCREL, R_MIPS_PC16 },
+  { BFD_RELOC_16_PCREL_S2, R_MIPS_PC16 },
   { BFD_RELOC_HI16_S, R_MIPS_HI16 },
   { BFD_RELOC_LO16, R_MIPS_LO16 },
   { BFD_RELOC_GPREL16, R_MIPS_GPREL16 },
diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/elfn32-mips.c source/bfd/elfn32-mips.c
--- source-orig/bfd/elfn32-mips.c	Sat Jan 25 01:30:58 2003
+++ source/bfd/elfn32-mips.c	Wed Feb 26 07:31:24 2003
@@ -275,9 +275,11 @@ static reloc_howto_type elf_mips_howto_t
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
-  /* 16 bit PC relative reference.  */
+  /* 16 bit PC relative reference.  Note that the ABI document has a typo
+     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
+     We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
-	 0,			/* rightshift */
+	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
 	 TRUE,			/* pc_relative */
@@ -772,9 +774,11 @@ static reloc_howto_type elf_mips_howto_t
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
-  /* 16 bit PC relative reference.  */
+  /* 16 bit PC relative reference.  Note that the ABI document has a typo
+     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
+     We do the right thing here.  */
   HOWTO (R_MIPS_PC16,		/* type */
-	 0,			/* rightshift */
+	 2,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
 	 16,			/* bitsize */
 	 TRUE,			/* pc_relative */
@@ -1837,7 +1841,7 @@ static const struct elf_reloc_map mips_r
   /* There is no BFD reloc for R_MIPS_REL32.  */
   { BFD_RELOC_CTOR, R_MIPS_32 },
   { BFD_RELOC_64, R_MIPS_64 },
-  { BFD_RELOC_16_PCREL, R_MIPS_PC16 },
+  { BFD_RELOC_16_PCREL_S2, R_MIPS_PC16 },
   { BFD_RELOC_HI16_S, R_MIPS_HI16 },
   { BFD_RELOC_LO16, R_MIPS_LO16 },
   { BFD_RELOC_GPREL16, R_MIPS_GPREL16 },
diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/elfxx-mips.c source/bfd/elfxx-mips.c
--- source-orig/bfd/elfxx-mips.c	Wed Jan 29 18:30:31 2003
+++ source/bfd/elfxx-mips.c	Wed Feb 26 07:23:02 2003
@@ -496,7 +496,6 @@ static struct mips_got_info *mips_elf_go
 static bfd *reldyn_sorting_bfd;
 
 /* Nonzero if ABFD is using the N32 ABI.  */
-
 #define ABI_N32_P(abfd) \
   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
 
@@ -2130,7 +2129,7 @@ mips_elf_bfd2got_entry_eq (entry1, entry
   return e1->bfd == e2->bfd;
 }
 
-/* In a multi-got link, determine the GOT to be used for IBDF.  G must
+/* In a multi-got link, determine the GOT to be used for IBFD.  G must
    be the master GOT data.  */
 
 static struct mips_got_info *
@@ -3317,12 +3316,6 @@ mips_elf_calculate_relocation (abfd, inp
       value &= howto->dst_mask;
       break;
 
-    case R_MIPS_GNU_REL16_S2:
-      value = symbol + mips_elf_sign_extend (addend << 2, 18) - p;
-      overflowed_p = mips_elf_overflow_p (value, 18);
-      value = (value >> 2) & howto->dst_mask;
-      break;
-
     case R_MIPS_GNU_REL_HI16:
       /* Instead of subtracting 'p' here, we should be subtracting the
 	 equivalent value for the LO part of the reloc, since the value
@@ -3451,8 +3444,10 @@ mips_elf_calculate_relocation (abfd, inp
       break;
 
     case R_MIPS_PC16:
-      value = mips_elf_sign_extend (addend, 16) + symbol - p;
-      overflowed_p = mips_elf_overflow_p (value, 16);
+    case R_MIPS_GNU_REL16_S2:
+      value = mips_elf_sign_extend (addend << 2, 18) + symbol - p;
+      overflowed_p = mips_elf_overflow_p (value, 18);
+      value = (value >> 2) & howto->dst_mask;
       break;
 
     case R_MIPS_GOT_HI16:
diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/reloc.c source/bfd/reloc.c
--- source-orig/bfd/reloc.c	Sat Jan 25 01:30:59 2003
+++ source/bfd/reloc.c	Wed Feb 26 07:20:19 2003
@@ -2080,7 +2080,10 @@ ENUM
   BFD_RELOC_PCREL_LO16
 ENUMDOC
   Like BFD_RELOC_LO16, but PC relative.
-
+ENUM
+  BFD_RELOC_MIPSEMB_16_PCREL_S2
+ENUMDOC
+  Like BFD_RELOC_16_PCREL_S2, but for MIPS Embedded PIC.
 ENUM
   BFD_RELOC_MIPS_LITERAL
 ENUMDOC
@@ -2149,7 +2152,6 @@ ENUMX
   BFD_RELOC_FRV_GPRELLO
 ENUMDOC
   Fujitsu Frv Relocations.
-COMMENT
 COMMENT
 ENUMDOC
   MIPS ELF relocations.
diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/libbfd.h source/bfd/libbfd.h
--- source-orig/bfd/libbfd.h	Sat Jan 25 01:30:59 2003
+++ source/bfd/libbfd.h	Wed Feb 26 07:20:19 2003
@@ -850,6 +850,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_LO16",
   "BFD_RELOC_PCREL_HI16_S",
   "BFD_RELOC_PCREL_LO16",
+  "BFD_RELOC_MIPSEMB_16_PCREL_S2",
   "BFD_RELOC_MIPS_LITERAL",
   "BFD_RELOC_MIPS_GOT16",
   "BFD_RELOC_MIPS_CALL16",
diff -urpNX /bigdisk/src/gcc-exclude source-orig/bfd/bfd-in2.h source/bfd/bfd-in2.h
--- source-orig/bfd/bfd-in2.h	Wed Jan 29 18:30:31 2003
+++ source/bfd/bfd-in2.h	Wed Feb 26 07:20:19 2003
@@ -2301,6 +2301,9 @@ to compensate for the borrow when the lo
 /* Like BFD_RELOC_LO16, but PC relative.  */
   BFD_RELOC_PCREL_LO16,
 
+/* Like BFD_RELOC_16_PCREL_S2, but for MIPS Embedded PIC.  */
+  BFD_RELOC_MIPSEMB_16_PCREL_S2,
+
 /* Relocation against a MIPS literal section.  */
   BFD_RELOC_MIPS_LITERAL,
 
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/config/tc-mips.c source/gas/config/tc-mips.c
--- source-orig/gas/config/tc-mips.c	Wed Jan 29 18:30:32 2003
+++ source/gas/config/tc-mips.c	Wed Feb 26 07:20:19 2003
@@ -2016,7 +2016,8 @@ append_insn (place, ip, address_expr, re
 
   if (place == NULL
       && address_expr
-      && *reloc_type == BFD_RELOC_16_PCREL_S2
+      && (*reloc_type == BFD_RELOC_16_PCREL_S2
+	  || *reloc_type == BFD_RELOC_MIPSEMB_16_PCREL_S2)
       && (pinfo & INSN_UNCOND_BRANCH_DELAY || pinfo & INSN_COND_BRANCH_DELAY
 	  || pinfo & INSN_COND_BRANCH_LIKELY)
       && mips_relax_branch
@@ -2138,6 +2139,18 @@ append_insn (place, ip, address_expr, re
 	      break;
 
 	    case BFD_RELOC_16_PCREL_S2:
+	      if ((address_expr->X_add_number & 3) != 0)
+		as_bad (_("branch to misaligned address (0x%lx)"),
+			(unsigned long) address_expr->X_add_number);
+	      if (mips_relax_branch)
+		goto need_reloc;
+	      if ((address_expr->X_add_number + 0x20000) & ~0x3ffff)
+		as_bad (_("branch address range overflow (0x%lx)"),
+			(unsigned long) address_expr->X_add_number);
+	      ip->insn_opcode |= (address_expr->X_add_number >> 2) & 0xffff;
+	      break;
+
+	    case BFD_RELOC_MIPSEMB_16_PCREL_S2:
 	      goto need_reloc;
 
 	    default:
@@ -2152,7 +2165,8 @@ append_insn (place, ip, address_expr, re
 	    {
 	      fixp[0] = fix_new_exp (frag_now, f - frag_now->fr_literal, 4,
 				     address_expr,
-				     *reloc_type == BFD_RELOC_16_PCREL_S2,
+				     (*reloc_type == BFD_RELOC_16_PCREL_S2
+				      || *reloc_type == BFD_RELOC_MIPSEMB_16_PCREL_S2),
 				     reloc_type[0]);
 
 	      /* These relocations can have an addend that won't fit in
@@ -3107,20 +3121,32 @@ macro_build (place, counter, ep, name, f
 
 	case 'p':
 	  assert (ep != NULL);
+
 	  /*
 	   * This allows macro() to pass an immediate expression for
 	   * creating short branches without creating a symbol.
-	   * Note that the expression still might come from the assembly
-	   * input, in which case the value is not checked for range nor
-	   * is a relocation entry generated (yuck).
+	   *
+	   * We don't allow branch relaxation for these branches, as
+	   * they should only appear in ".set nomacro" anyway.
 	   */
 	  if (ep->X_op == O_constant)
 	    {
+	      if ((ep->X_add_number & 3) != 0)
+		as_bad (_("branch to misaligned address (0x%lx)"),
+			(unsigned long) ep->X_add_number);
+	      if ((ep->X_add_number + 0x20000) & ~0x3ffff)
+		as_bad (_("branch address range overflow (0x%lx)"),
+			(unsigned long) ep->X_add_number);
 	      insn.insn_opcode |= (ep->X_add_number >> 2) & 0xffff;
 	      ep = NULL;
 	    }
 	  else
-	    *r = BFD_RELOC_16_PCREL_S2;
+	    {
+	      if (mips_pic == EMBEDDED_PIC)
+		*r = BFD_RELOC_MIPSEMB_16_PCREL_S2;
+	      else
+		*r = BFD_RELOC_16_PCREL_S2;
+	    }
 	  continue;
 
 	case 'a':
@@ -9185,7 +9211,10 @@ mips_ip (str, ip)
 	      continue;
 
 	    case 'p':		/* pc relative offset */
-	      *offset_reloc = BFD_RELOC_16_PCREL_S2;
+	      if (mips_pic == EMBEDDED_PIC)
+		*offset_reloc = BFD_RELOC_MIPSEMB_16_PCREL_S2;
+	      else
+		*offset_reloc = BFD_RELOC_16_PCREL_S2;
 	      my_getExpression (&offset_expr, s);
 	      s = expr_end;
 	      continue;
@@ -11335,7 +11364,8 @@ md_apply_fix3 (fixP, valP, seg)
 	  /* BFD's REL handling, for MIPS, is _very_ weird.
 	     This gives the right results, but it can't possibly
 	     be the way things are supposed to work.  */
-	  if (fixP->fx_r_type != BFD_RELOC_16_PCREL_S2
+	  if ((fixP->fx_r_type != BFD_RELOC_16_PCREL_S2
+	       && fixP->fx_r_type != BFD_RELOC_MIPSEMB_16_PCREL_S2)
 	      || S_GET_SEGMENT (fixP->fx_addsy) != undefined_section)
 	    value += fixP->fx_frag->fr_address + fixP->fx_where;
 	}
@@ -11505,9 +11535,10 @@ md_apply_fix3 (fixP, valP, seg)
       break;
 
     case BFD_RELOC_16_PCREL_S2:
+    case BFD_RELOC_MIPSEMB_16_PCREL_S2:
       if ((value & 0x3) != 0)
 	as_bad_where (fixP->fx_file, fixP->fx_line,
-		      _("Branch to odd address (%lx)"), (long) value);
+		      _("Branch to misaligned address (%lx)"), (long) value);
 
       /*
        * We need to save the bits in the instruction since fixup_segment()
@@ -11520,8 +11551,7 @@ md_apply_fix3 (fixP, valP, seg)
 	 do the store, so it must be done here.  This is probably
 	 a bug somewhere.  */
       if (!fixP->fx_done
-	  && (fixP->fx_r_type != BFD_RELOC_16_PCREL_S2
-	      || fixP->fx_addsy == NULL			/* ??? */
+	  && (fixP->fx_addsy == NULL			/* ??? */
 	      || ! S_IS_DEFINED (fixP->fx_addsy)))
 	value -= fixP->fx_frag->fr_address + fixP->fx_where;
 
@@ -13509,6 +13539,7 @@ tc_gen_reloc (section, fixp)
 	case BFD_RELOC_32_PCREL:
 	case BFD_RELOC_64_PCREL:
 	case BFD_RELOC_16_PCREL_S2:
+	case BFD_RELOC_MIPSEMB_16_PCREL_S2:
 	case BFD_RELOC_PCREL_HI16_S:
 	case BFD_RELOC_PCREL_LO16:
 	  break;
@@ -13532,17 +13563,7 @@ tc_gen_reloc (section, fixp)
     reloc->addend += S_GET_VALUE (fixp->fx_addsy);
 #endif
 
-  /* To support a PC relative reloc when generating embedded PIC code
-     for ECOFF, we use a Cygnus extension.  We check for that here to
-     make sure that we don't let such a reloc escape normally.  */
-  if ((OUTPUT_FLAVOR == bfd_target_ecoff_flavour
-       || OUTPUT_FLAVOR == bfd_target_elf_flavour)
-      && code == BFD_RELOC_16_PCREL_S2
-      && mips_pic != EMBEDDED_PIC)
-    reloc->howto = NULL;
-  else
-    reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
-
+  reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
   if (reloc->howto == NULL)
     {
       as_bad_where (fixp->fx_file, fixp->fx_line,
@@ -13628,8 +13649,9 @@ md_convert_frag (abfd, asec, fragp)
 	  exp.X_add_number = fragp->fr_offset;
 
 	  fixp = fix_new_exp (fragp, buf - (bfd_byte *)fragp->fr_literal,
-			      4, &exp, 1,
-			      BFD_RELOC_16_PCREL_S2);
+			      4, &exp, 1, ((mips_pic == EMBEDDED_PIC)
+					   ? BFD_RELOC_MIPSEMB_16_PCREL_S2
+					   : BFD_RELOC_16_PCREL_S2));
 	  fixp->fx_file = fragp->fr_file;
 	  fixp->fx_line = fragp->fr_line;
 
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/bge.d source/gas/testsuite/gas/mips/bge.d
--- source-orig/gas/testsuite/gas/mips/bge.d	Thu Dec 19 23:55:25 2002
+++ source/gas/testsuite/gas/mips/bge.d	Wed Feb 26 07:20:19 2003
@@ -51,20 +51,20 @@ Disassembly of section .text:
 0+00a8 <[^>]*> slt	at,a1,a0
 0+00ac <[^>]*> bnezl	at,0+0000 <text_label>
 0+00b0 <[^>]*> nop
-#0+00b4 <[^>]*> slt	at,a0,a1
-#0+00b8 <[^>]*> beqz	at,000000b8 <text_label\+0xb8>
-#[ 	]*b8: R_MIPS_PC16	external_label
-#0+00bc <[^>]*> nop
-#0+00c0 <[^>]*> slt	at,a1,a0
-#0+00c4 <[^>]*> bnez	at,000000c4 <text_label\+0xc4>
-#[ 	]*c4: R_MIPS_PC16	external_label
-#0+00c8 <[^>]*> nop
-#0+00cc <[^>]*> slt	at,a0,a1
-#0+00d0 <[^>]*> beqzl	at,000000d0 <text_label\+0xd0>
-#[ 	]*d0: R_MIPS_PC16	external_label
-#0+00d4 <[^>]*> nop
-#0+00d8 <[^>]*> slt	at,a1,a0
-#0+00dc <[^>]*> bnezl	at,000000dc <text_label\+0xdc>
-#[ 	]*dc: R_MIPS_PC16	external_label
-#0+00e0 <[^>]*> nop
+0+00b4 <[^>]*> slt	at,a0,a1
+0+00b8 <[^>]*> beqz	at,000000b8 <text_label\+0xb8>
+[ 	]*b8: R_MIPS_PC16	external_label
+0+00bc <[^>]*> nop
+0+00c0 <[^>]*> slt	at,a1,a0
+0+00c4 <[^>]*> bnez	at,000000c4 <text_label\+0xc4>
+[ 	]*c4: R_MIPS_PC16	external_label
+0+00c8 <[^>]*> nop
+0+00cc <[^>]*> slt	at,a0,a1
+0+00d0 <[^>]*> beqzl	at,000000d0 <text_label\+0xd0>
+[ 	]*d0: R_MIPS_PC16	external_label
+0+00d4 <[^>]*> nop
+0+00d8 <[^>]*> slt	at,a1,a0
+0+00dc <[^>]*> bnezl	at,000000dc <text_label\+0xdc>
+[ 	]*dc: R_MIPS_PC16	external_label
+0+00e0 <[^>]*> nop
 	...
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/bge.s source/gas/testsuite/gas/mips/bge.s
--- source-orig/gas/testsuite/gas/mips/bge.s	Thu Dec 19 23:55:25 2002
+++ source/gas/testsuite/gas/mips/bge.s	Wed Feb 26 07:20:19 2003
@@ -25,10 +25,10 @@ text_label:	
 	bgtl	$4,$5,text_label
 
 # Branch to an external label.
-#	bge	$4,$5,external_label
-#	bgt	$4,$5,external_label
-#	bgel	$4,$5,external_label
-#	bgtl	$4,$5,external_label
+	bge	$4,$5,external_label
+	bgt	$4,$5,external_label
+	bgel	$4,$5,external_label
+	bgtl	$4,$5,external_label
 
 # Round to a 16 byte boundary, for ease in testing multiple targets.
 	nop
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/bgeu.d source/gas/testsuite/gas/mips/bgeu.d
--- source-orig/gas/testsuite/gas/mips/bgeu.d	Thu Dec 19 23:55:25 2002
+++ source/gas/testsuite/gas/mips/bgeu.d	Wed Feb 26 07:20:19 2003
@@ -45,20 +45,20 @@ Disassembly of section .text:
 0+0090 <[^>]*> sltu	at,a1,a0
 0+0094 <[^>]*> bnezl	at,0+0000 <text_label>
 0+0098 <[^>]*> nop
-#0+009c <[^>]*> sltu	at,a0,a1
-#0+00a0 <[^>]*> beqz	at,000000a0 <text_label\+0xa0>
-#[ 	]*a0: R_MIPS_PC16	external_label
-#0+00a4 <[^>]*> nop
-#0+00a8 <[^>]*> sltu	at,a1,a0
-#0+00ac <[^>]*> bnez	at,000000ac <text_label\+0xac>
-#[ 	]*ac: R_MIPS_PC16	external_label
-#0+00b0 <[^>]*> nop
-#0+00b4 <[^>]*> sltu	at,a0,a1
-#0+00b8 <[^>]*> beqzl	at,000000b8 <text_label\+0xb8>
-#[ 	]*b8: R_MIPS_PC16	external_label
-#0+00bc <[^>]*> nop
-#0+00c0 <[^>]*> sltu	at,a1,a0
-#0+00c4 <[^>]*> bnezl	at,000000c4 <text_label\+0xc4>
-#[ 	]*c4: R_MIPS_PC16	external_label
-#0+00c8 <[^>]*> nop
+0+009c <[^>]*> sltu	at,a0,a1
+0+00a0 <[^>]*> beqz	at,000000a0 <text_label\+0xa0>
+[ 	]*a0: R_MIPS_PC16	external_label
+0+00a4 <[^>]*> nop
+0+00a8 <[^>]*> sltu	at,a1,a0
+0+00ac <[^>]*> bnez	at,000000ac <text_label\+0xac>
+[ 	]*ac: R_MIPS_PC16	external_label
+0+00b0 <[^>]*> nop
+0+00b4 <[^>]*> sltu	at,a0,a1
+0+00b8 <[^>]*> beqzl	at,000000b8 <text_label\+0xb8>
+[ 	]*b8: R_MIPS_PC16	external_label
+0+00bc <[^>]*> nop
+0+00c0 <[^>]*> sltu	at,a1,a0
+0+00c4 <[^>]*> bnezl	at,000000c4 <text_label\+0xc4>
+[ 	]*c4: R_MIPS_PC16	external_label
+0+00c8 <[^>]*> nop
 	...
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/bgeu.s source/gas/testsuite/gas/mips/bgeu.s
--- source-orig/gas/testsuite/gas/mips/bgeu.s	Thu Dec 19 23:55:25 2002
+++ source/gas/testsuite/gas/mips/bgeu.s	Wed Feb 26 07:20:19 2003
@@ -23,10 +23,10 @@ text_label:	
 	bgtul	$4,$5,text_label
 
 # Branch to an external label.
-#	bgeu	$4,$5,external_label
-#	bgtu	$4,$5,external_label
-#	bgeul	$4,$5,external_label
-#	bgtul	$4,$5,external_label
+	bgeu	$4,$5,external_label
+	bgtu	$4,$5,external_label
+	bgeul	$4,$5,external_label
+	bgtul	$4,$5,external_label
 
 # Round to a 16 byte boundary, for ease in testing multiple targets.
 	nop
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/blt.d source/gas/testsuite/gas/mips/blt.d
--- source-orig/gas/testsuite/gas/mips/blt.d	Thu Dec 19 23:55:25 2002
+++ source/gas/testsuite/gas/mips/blt.d	Wed Feb 26 07:20:19 2003
@@ -51,20 +51,20 @@ Disassembly of section .text:
 0+00a8 <[^>]*> slt	at,a1,a0
 0+00ac <[^>]*> beqzl	at,0+0000 <text_label>
 0+00b0 <[^>]*> nop
-#0+00b4 <[^>]*> slt	at,a0,a1
-#0+00b8 <[^>]*> bnez	at,000000b8 <text_label\+0xb8>
-#[ 	]*b8: R_MIPS_PC16	external_label
-#0+00bc <[^>]*> nop
-#0+00c0 <[^>]*> slt	at,a1,a0
-#0+00c4 <[^>]*> beqz	at,000000c4 <text_label\+0xc4>
-#[ 	]*c4: R_MIPS_PC16	external_label
-#0+00c8 <[^>]*> nop
-#0+00cc <[^>]*> slt	at,a0,a1
-#0+00d0 <[^>]*> bnezl	at,000000d0 <text_label\+0xd0>
-#[ 	]*d0: R_MIPS_PC16	external_label
-#0+00d4 <[^>]*> nop
-#0+00d8 <[^>]*> slt	at,a1,a0
-#0+00dc <[^>]*> beqzl	at,000000dc <text_label\+0xdc>
-#[ 	]*dc: R_MIPS_PC16	external_label
-#0+00e0 <[^>]*> nop
+0+00b4 <[^>]*> slt	at,a0,a1
+0+00b8 <[^>]*> bnez	at,000000b8 <text_label\+0xb8>
+[ 	]*b8: R_MIPS_PC16	external_label
+0+00bc <[^>]*> nop
+0+00c0 <[^>]*> slt	at,a1,a0
+0+00c4 <[^>]*> beqz	at,000000c4 <text_label\+0xc4>
+[ 	]*c4: R_MIPS_PC16	external_label
+0+00c8 <[^>]*> nop
+0+00cc <[^>]*> slt	at,a0,a1
+0+00d0 <[^>]*> bnezl	at,000000d0 <text_label\+0xd0>
+[ 	]*d0: R_MIPS_PC16	external_label
+0+00d4 <[^>]*> nop
+0+00d8 <[^>]*> slt	at,a1,a0
+0+00dc <[^>]*> beqzl	at,000000dc <text_label\+0xdc>
+[ 	]*dc: R_MIPS_PC16	external_label
+0+00e0 <[^>]*> nop
 	...
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/blt.s source/gas/testsuite/gas/mips/blt.s
--- source-orig/gas/testsuite/gas/mips/blt.s	Thu Dec 19 23:55:26 2002
+++ source/gas/testsuite/gas/mips/blt.s	Wed Feb 26 07:20:19 2003
@@ -25,10 +25,10 @@ text_label:	
 	blel	$4,$5,text_label
 
 # Branch to an external label.
-#	blt	$4,$5,external_label
-#	ble	$4,$5,external_label
-#	bltl	$4,$5,external_label
-#	blel	$4,$5,external_label
+	blt	$4,$5,external_label
+	ble	$4,$5,external_label
+	bltl	$4,$5,external_label
+	blel	$4,$5,external_label
 
 # Round to a 16 byte boundary, for ease in testing multiple targets.
 	nop
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/bltu.d source/gas/testsuite/gas/mips/bltu.d
--- source-orig/gas/testsuite/gas/mips/bltu.d	Thu Dec 19 23:55:26 2002
+++ source/gas/testsuite/gas/mips/bltu.d	Wed Feb 26 07:20:19 2003
@@ -45,20 +45,20 @@ Disassembly of section .text:
 0+0090 <[^>]*> sltu	at,a1,a0
 0+0094 <[^>]*> beqzl	at,0+0000 <text_label>
 0+0098 <[^>]*> nop
-#0+009c <[^>]*> sltu	at,a0,a1
-#0+00a0 <[^>]*> bnez	at,000000a0 <text_label\+0xa0>
-#[ 	]*a0: R_MIPS_PC16	external_label
-#0+00a4 <[^>]*> nop
-#0+00a8 <[^>]*> sltu	at,a1,a0
-#0+00ac <[^>]*> beqz	at,000000ac <text_label\+0xac>
-#[ 	]*ac: R_MIPS_PC16	external_label
-#0+00b0 <[^>]*> nop
-#0+00b4 <[^>]*> sltu	at,a0,a1
-#0+00b8 <[^>]*> bnezl	at,000000b8 <text_label\+0xb8>
-#[ 	]*b8: R_MIPS_PC16	external_label
-#0+00bc <[^>]*> nop
-#0+00c0 <[^>]*> sltu	at,a1,a0
-#0+00c4 <[^>]*> beqzl	at,000000c4 <text_label\+0xc4>
-#[ 	]*c4: R_MIPS_PC16	external_label
-#0+00c8 <[^>]*> nop
+0+009c <[^>]*> sltu	at,a0,a1
+0+00a0 <[^>]*> bnez	at,000000a0 <text_label\+0xa0>
+[ 	]*a0: R_MIPS_PC16	external_label
+0+00a4 <[^>]*> nop
+0+00a8 <[^>]*> sltu	at,a1,a0
+0+00ac <[^>]*> beqz	at,000000ac <text_label\+0xac>
+[ 	]*ac: R_MIPS_PC16	external_label
+0+00b0 <[^>]*> nop
+0+00b4 <[^>]*> sltu	at,a0,a1
+0+00b8 <[^>]*> bnezl	at,000000b8 <text_label\+0xb8>
+[ 	]*b8: R_MIPS_PC16	external_label
+0+00bc <[^>]*> nop
+0+00c0 <[^>]*> sltu	at,a1,a0
+0+00c4 <[^>]*> beqzl	at,000000c4 <text_label\+0xc4>
+[ 	]*c4: R_MIPS_PC16	external_label
+0+00c8 <[^>]*> nop
 	...
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/bltu.s source/gas/testsuite/gas/mips/bltu.s
--- source-orig/gas/testsuite/gas/mips/bltu.s	Thu Dec 19 23:55:26 2002
+++ source/gas/testsuite/gas/mips/bltu.s	Wed Feb 26 07:20:19 2003
@@ -23,10 +23,10 @@ text_label:	
 	bleul	$4,$5,text_label
 
 # Branch to an external label.
-#	bltu	$4,$5,external_label
-#	bleu	$4,$5,external_label
-#	bltul	$4,$5,external_label
-#	bleul	$4,$5,external_label
+	bltu	$4,$5,external_label
+	bleu	$4,$5,external_label
+	bltul	$4,$5,external_label
+	bleul	$4,$5,external_label
 
 # Round to a 16 byte boundary, for ease in testing multiple targets.
 	nop
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/branch-misc-2.d source/gas/testsuite/gas/mips/branch-misc-2.d
--- source-orig/gas/testsuite/gas/mips/branch-misc-2.d	Thu Jan  1 01:00:00 1970
+++ source/gas/testsuite/gas/mips/branch-misc-2.d	Wed Feb 26 07:20:19 2003
@@ -0,0 +1,39 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS branch-misc-2
+
+# Test the backward branches to globals symbols in current file.
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+	\.\.\.
+	\.\.\.
+	\.\.\.
+0+003c <[^>]*> 0411ffff 	bal	0000003c <x>
+[ 	]*3c: R_MIPS_PC16	g1
+0+0040 <[^>]*> 00000000 	nop
+0+0044 <[^>]*> 0411ffff 	bal	00000044 <x\+0x8>
+[ 	]*44: R_MIPS_PC16	g2
+0+0048 <[^>]*> 00000000 	nop
+0+004c <[^>]*> 0411ffff 	bal	0000004c <x\+0x10>
+[ 	]*4c: R_MIPS_PC16	g3
+0+0050 <[^>]*> 00000000 	nop
+0+0054 <[^>]*> 0411ffff 	bal	00000054 <x\+0x18>
+[ 	]*54: R_MIPS_PC16	g4
+0+0058 <[^>]*> 00000000 	nop
+0+005c <[^>]*> 0411ffff 	bal	0000005c <x\+0x20>
+[ 	]*5c: R_MIPS_PC16	g5
+0+0060 <[^>]*> 00000000 	nop
+0+0064 <[^>]*> 0411ffff 	bal	00000064 <x\+0x28>
+[ 	]*64: R_MIPS_PC16	g6
+0+0068 <[^>]*> 00000000 	nop
+	\.\.\.
+	\.\.\.
+	\.\.\.
+0+00a8 <[^>]*> 1000ffff 	b	000000a8 <g6>
+[ 	]*a8: R_MIPS_PC16	x1
+0+00ac <[^>]*> 00000000 	nop
+0+00b0 <[^>]*> 1000ffff 	b	000000b0 <g6\+0x8>
+[ 	]*b0: R_MIPS_PC16	x2
+0+00b4 <[^>]*> 00000000 	nop
+	\.\.\.
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/branch-misc-2.l source/gas/testsuite/gas/mips/branch-misc-2.l
--- source-orig/gas/testsuite/gas/mips/branch-misc-2.l	Thu Dec 12 05:40:22 2002
+++ source/gas/testsuite/gas/mips/branch-misc-2.l	Thu Jan  1 01:00:00 1970
@@ -1,9 +0,0 @@
-.*: Assembler messages:
-.*:21: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:22: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:23: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:24: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:25: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:26: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:35: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
-.*:36: Error: Can not represent BFD_RELOC_16_PCREL_S2 relocation in this object file format
diff -urpNX /bigdisk/src/gcc-exclude source-orig/gas/testsuite/gas/mips/mips.exp source/gas/testsuite/gas/mips/mips.exp
--- source-orig/gas/testsuite/gas/mips/mips.exp	Wed Jan 29 18:30:33 2003
+++ source/gas/testsuite/gas/mips/mips.exp	Wed Feb 26 07:20:19 2003
@@ -407,7 +407,7 @@ if { [istarget mips*-*-*] } then {
     run_dump_test_arches "blt"		[mips_arch_list_matching mips2]
     run_dump_test_arches "bltu"		[mips_arch_list_matching mips2]
     run_dump_test_arches "branch-misc-1" [mips_arch_list_matching mips1]
-    run_list_test_arches "branch-misc-2" "" [mips_arch_list_matching mips1]
+    run_dump_test_arches "branch-misc-2" [mips_arch_list_matching mips1]
 
     if $ilocks {
 	run_dump_test "div-ilocks"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]