[PATCH] Fix handling of R_MIPS_PC16 relocations
Thiemo Seufer
ica2_ts@csv.ica.uni-stuttgart.de
Sun Aug 26 14:30:00 GMT 2001
Hi All,
when I compared the MIPS ELF64 spec with the actual code in binutils,
I found the R_MIPS_PC16 relocation to be wrongly implemented. I found
also a R_MIPS_GNU_REL16_S2 relocation which behaves exactly as
R_MIPS_PC16 should do, which was seemingly invented to support
embedded PIC.
The AFAICS only way to get such a reloc (except by embedded PIC)
is via a branch to an external label. There is no such test in
binutils, and gcc doesn't seem to use it also, so this feature
was possibly never used. The native SGI assembler handles this
even simpler: branches to external labels are illegal there.
I haven't found a way to get a R_MIPS_PC16 reloc with the
native tools on IRIX.
The potential problem with this patch: There is no good way to
distinguish R_MIPS_PC16 from R_MIPS_GNU_REL16_S2 because both
are mapped to BFD_RELOC_16_PCREL_S2. This means new embedded
PIC objects will use R_MIPS_PC16 instead of the GNU extension.
Old embedded PIC objects can be read, though.
I extended the branch testcases accordingly and tested it for
mips-elf, mips64el-elf and mips64-linux.
Thiemo
2001-08-21 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
/bfd/ChangeLog (elf_mips_howto_table): Fix rightshift for R_MIPS_PC16.
(mips_reloc_map): Map R_MIPS_PC16 to the BFD_RELOC_16_PCREL_S2.
(mips_elf_calculate_relocation): Fix handling of R_MIPS_PC16.
(_bfd_mips_elf_relocate_section): Likewise.
/gas/ChangeLog
* config/tc-mips.c (tc_gen_reloc): Allow BFD_RELOC_16_PCREL_S2.
/gas/testsuite/ChangeLog
* gas/mips/beq.d: Check branches to external labels.
* gas/mips/beq.s: Likewise.
* gas/mips/bge.d: Likewise.
* 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/elempic.d: Switch from R_MIPS_GNU_REL16_S2 to R_MIPS_PC16.
* gas/mips/empic.d: Likewise.
* gas/mips/empic.s: Likewise.
* gas/mips/telempic.d: Likewise.
* gas/mips/tempic.d: Likewise.
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/bfd/elf32-mips.c src/bfd/elf32-mips.c
--- src-orig/bfd/elf32-mips.c Wed Jul 4 13:55:24 2001
+++ src/bfd/elf32-mips.c Tue Aug 21 18:15:03 2001
@@ -638,7 +639,7 @@ static reloc_howto_type elf_mips_howto_t
/* 16 bit PC relative reference. */
HOWTO (R_MIPS_PC16, /* type */
- 0, /* rightshift */
+ 2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
true, /* pc_relative */
@@ -1970,7 +1971,7 @@ static CONST struct elf_reloc_map mips_r
{ BFD_RELOC_MIPS_GPREL, 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_MIPS_GPREL32, R_MIPS_GPREL32 },
{ BFD_RELOC_MIPS_GOT_HI16, R_MIPS_GOT_HI16 },
@@ -6357,6 +6358,7 @@ mips_elf_calculate_relocation (abfd,
break;
case R_MIPS_GNU_REL16_S2:
+ case R_MIPS_PC16:
value = symbol + mips_elf_sign_extend (addend << 2, 18) - p;
overflowed_p = mips_elf_overflow_p (value, 18);
value = (value >> 2) & howto->dst_mask;
@@ -6473,12 +6475,6 @@ mips_elf_calculate_relocation (abfd,
value = (addend + symbol + gp0 - gp) & howto->dst_mask;
break;
- case R_MIPS_PC16:
- value = mips_elf_sign_extend (addend, 16) + symbol - p;
- value = (bfd_vma) ((bfd_signed_vma) value / 4);
- overflowed_p = mips_elf_overflow_p (value, 16);
- break;
-
case R_MIPS_GOT_HI16:
case R_MIPS_CALL_HI16:
/* We're allowed to handle these two relocations identically.
@@ -6932,7 +6928,7 @@ _bfd_mips_elf_relocate_section (output_b
addend -= (_bfd_get_gp_value (output_bfd)
- _bfd_get_gp_value (input_bfd));
else if (r_type == R_MIPS_26 || r_type == R_MIPS16_26
- || r_type == R_MIPS_GNU_REL16_S2)
+ || r_type == R_MIPS_GNU_REL16_S2 || r_type == R_MIPS_PC16)
/* The addend is stored without its two least
significant bits (which are always zero.) In a
non-relocateable link, calculate_relocation will do
@@ -6955,7 +6951,7 @@ _bfd_mips_elf_relocate_section (output_b
the two low-order bits are not stored in the object file;
they are implicitly zero. */
else if (r_type == R_MIPS_26 || r_type == R_MIPS16_26
- || r_type == R_MIPS_GNU_REL16_S2)
+ || r_type == R_MIPS_GNU_REL16_S2 || r_type == R_MIPS_PC16)
addend >>= 2;
if (rela_relocation_p)
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/config/tc-mips.c src/gas/config/tc-mips.c
--- src-orig/gas/config/tc-mips.c Tue Aug 21 19:13:58 2001
+++ src/gas/config/tc-mips.c Fri Aug 24 22:30:21 2001
@@ -11369,17 +11662,7 @@ tc_gen_reloc (section, fixp)
}
}
- /* 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,
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/beq.d src/gas/testsuite/gas/mips/beq.d
--- src-orig/gas/testsuite/gas/mips/beq.d Tue May 15 16:33:52 2001
+++ src/gas/testsuite/gas/mips/beq.d Tue Aug 21 17:25:46 2001
@@ -37,4 +37,10 @@ Disassembly of section .text:
0+2006c <[^>]*> nop
0+20070 <[^>]*> jal 0+0000 <text_label>
[ ]*20070: (MIPS_JMP|JMPADDR|R_MIPS_26) .text
+0+20074 <[^>]*> nop
+0+20078 <[^>]*> b 0+20078 <text_label\+0x20078>
+[ ]*20078: R_MIPS_PC16 external_label
+0+2007c <[^>]*> nop
+0+20080 <[^>]*> bal 0+20080 <text_label\+0x20080>
+[ ]*20080: R_MIPS_PC16 external_label
...
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/beq.s src/gas/testsuite/gas/mips/beq.s
--- src-orig/gas/testsuite/gas/mips/beq.s Mon May 3 09:28:50 1999
+++ src/gas/testsuite/gas/mips/beq.s Tue Aug 21 17:49:33 2001
@@ -22,6 +22,10 @@ text_label:
b text_label
bal text_label
+# Branch to an external label.
+ b external_label
+ bal external_label
+
# Round to a 16 byte boundary, for ease in testing multiple targets.
nop
nop
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/bge.d src/gas/testsuite/gas/mips/bge.d
--- src-orig/gas/testsuite/gas/mips/bge.d Tue May 15 16:33:52 2001
+++ src/gas/testsuite/gas/mips/bge.d Tue Aug 21 17:41:59 2001
@@ -50,4 +50,20 @@ Disassembly of section .text:
0+00a4 <[^>]*> nop
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
...
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/bge.s src/gas/testsuite/gas/mips/bge.s
--- src-orig/gas/testsuite/gas/mips/bge.s Mon May 3 09:28:50 1999
+++ src/gas/testsuite/gas/mips/bge.s Tue Aug 21 17:48:35 2001
@@ -24,6 +24,12 @@ text_label:
bgel $4,$5,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
+
# Round to a 16 byte boundary, for ease in testing multiple targets.
nop
nop
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/bgeu.d src/gas/testsuite/gas/mips/bgeu.d
--- src-orig/gas/testsuite/gas/mips/bgeu.d Tue May 15 16:33:52 2001
+++ src/gas/testsuite/gas/mips/bgeu.d Tue Aug 21 18:12:13 2001
@@ -44,4 +44,20 @@ Disassembly of section .text:
0+008c <[^>]*> nop
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
...
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/bgeu.s src/gas/testsuite/gas/mips/bgeu.s
--- src-orig/gas/testsuite/gas/mips/bgeu.s Mon May 3 09:28:50 1999
+++ src/gas/testsuite/gas/mips/bgeu.s Tue Aug 21 17:57:36 2001
@@ -22,6 +22,12 @@ text_label:
bgeul $4,$5,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
+
# Round to a 16 byte boundary, for ease in testing multiple targets.
nop
nop
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/blt.d src/gas/testsuite/gas/mips/blt.d
--- src-orig/gas/testsuite/gas/mips/blt.d Tue May 15 16:33:52 2001
+++ src/gas/testsuite/gas/mips/blt.d Tue Aug 21 17:52:50 2001
@@ -50,4 +50,20 @@ Disassembly of section .text:
0+00a4 <[^>]*> nop
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
...
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/blt.s src/gas/testsuite/gas/mips/blt.s
--- src-orig/gas/testsuite/gas/mips/blt.s Mon May 3 09:28:50 1999
+++ src/gas/testsuite/gas/mips/blt.s Tue Aug 21 17:49:12 2001
@@ -24,6 +24,12 @@ text_label:
bltl $4,$5,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
+
# Round to a 16 byte boundary, for ease in testing multiple targets.
nop
nop
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/bltu.d src/gas/testsuite/gas/mips/bltu.d
--- src-orig/gas/testsuite/gas/mips/bltu.d Tue May 15 16:33:52 2001
+++ src/gas/testsuite/gas/mips/bltu.d Tue Aug 21 18:05:47 2001
@@ -44,4 +44,20 @@ Disassembly of section .text:
0+008c <[^>]*> nop
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
...
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/bltu.s src/gas/testsuite/gas/mips/bltu.s
--- src-orig/gas/testsuite/gas/mips/bltu.s Mon May 3 09:28:50 1999
+++ src/gas/testsuite/gas/mips/bltu.s Tue Aug 21 18:03:14 2001
@@ -22,6 +22,12 @@ text_label:
bltul $4,$5,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
+
# Round to a 16 byte boundary, for ease in testing multiple targets.
nop
nop
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/elempic.d src/gas/testsuite/gas/mips/elempic.d
--- src-orig/gas/testsuite/gas/mips/elempic.d Sat Aug 25 02:48:49 2001
+++ src/gas/testsuite/gas/mips/elempic.d Sat Aug 25 05:31:22 2001
@@ -25,13 +25,13 @@
RELOCATION RECORDS FOR \[\.text\]:
OFFSET [ ]+ TYPE VALUE
-0+0000004 R_MIPS_GNU_REL16_S2 g1
-0+000000c R_MIPS_GNU_REL16_S2 g2
-0+0000014 R_MIPS_GNU_REL16_S2 g2
-0+000001c R_MIPS_GNU_REL16_S2 \.foo
-0+0000024 R_MIPS_GNU_REL16_S2 \.text
-0+000002c R_MIPS_GNU_REL16_S2 \.foo
-0+0000034 R_MIPS_GNU_REL16_S2 \.text
+0+0000004 R_MIPS_PC16 g1
+0+000000c R_MIPS_PC16 g2
+0+0000014 R_MIPS_PC16 g2
+0+000001c R_MIPS_PC16 \.foo
+0+0000024 R_MIPS_PC16 \.text
+0+000002c R_MIPS_PC16 \.foo
+0+0000034 R_MIPS_PC16 \.text
0+000003c R_MIPS_GNU_REL_HI16 g1
0+0000040 R_MIPS_GNU_REL_LO16 g1
0+0000044 R_MIPS_GNU_REL_HI16 \.foo
@@ -46,16 +46,16 @@
0+0000078 R_MIPS_64 \.text
0+0000080 R_MIPS_PC64 g1
0+0000088 R_MIPS_PC64 \.foo
-0+0000098 R_MIPS_GNU_REL16_S2 \.text
-0+000009c R_MIPS_GNU_REL16_S2 \.text
+0+0000098 R_MIPS_PC16 \.text
+0+000009c R_MIPS_PC16 \.text
0+00000a0 R_MIPS_GNU_REL_HI16 \.text
0+00000a4 R_MIPS_GNU_REL_LO16 \.text
0+00000a8 R_MIPS_GNU_REL_HI16 \.text
0+00000ac R_MIPS_GNU_REL_LO16 \.text
0+00000b0 R_MIPS_32 \.text
0+00000b8 R_MIPS_64 \.text
-0+00000cc R_MIPS_GNU_REL16_S2 \.text
-0+00000d0 R_MIPS_GNU_REL16_S2 \.text
+0+00000cc R_MIPS_PC16 \.text
+0+00000d0 R_MIPS_PC16 \.text
0+00000dc R_MIPS_32 \.text
0+00000e8 R_MIPS_64 \.text
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/empic.d src/gas/testsuite/gas/mips/empic.d
--- src-orig/gas/testsuite/gas/mips/empic.d Sun Aug 12 13:34:58 2001
+++ src/gas/testsuite/gas/mips/empic.d Mon Aug 20 05:41:20 2001
@@ -24,13 +24,13 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR \[\.text\]:
OFFSET [ ]+ TYPE VALUE
-0+0000004 R_MIPS_GNU_REL16_S2 g1
-0+000000c R_MIPS_GNU_REL16_S2 g2
-0+0000014 R_MIPS_GNU_REL16_S2 g2
-0+000001c R_MIPS_GNU_REL16_S2 \.foo
-0+0000024 R_MIPS_GNU_REL16_S2 \.text
-0+000002c R_MIPS_GNU_REL16_S2 \.foo
-0+0000034 R_MIPS_GNU_REL16_S2 \.text
+0+0000004 R_MIPS_PC16 g1
+0+000000c R_MIPS_PC16 g2
+0+0000014 R_MIPS_PC16 g2
+0+000001c R_MIPS_PC16 \.foo
+0+0000024 R_MIPS_PC16 \.text
+0+000002c R_MIPS_PC16 \.foo
+0+0000034 R_MIPS_PC16 \.text
0+000003c R_MIPS_GNU_REL_HI16 g1
0+0000040 R_MIPS_GNU_REL_LO16 g1
0+0000044 R_MIPS_GNU_REL_HI16 \.foo
@@ -45,16 +45,16 @@ OFFSET [ ]+ TYPE VALUE
0+0000078 R_MIPS_64 \.text
0+0000080 R_MIPS_PC64 g1
0+0000088 R_MIPS_PC64 \.foo
-0+0000098 R_MIPS_GNU_REL16_S2 \.text
-0+000009c R_MIPS_GNU_REL16_S2 \.text
+0+0000098 R_MIPS_PC16 \.text
+0+000009c R_MIPS_PC16 \.text
0+00000a0 R_MIPS_GNU_REL_HI16 \.text
0+00000a4 R_MIPS_GNU_REL_LO16 \.text
0+00000a8 R_MIPS_GNU_REL_HI16 \.text
0+00000ac R_MIPS_GNU_REL_LO16 \.text
0+00000b0 R_MIPS_32 \.text
0+00000b8 R_MIPS_64 \.text
-0+00000cc R_MIPS_GNU_REL16_S2 \.text
-0+00000d0 R_MIPS_GNU_REL16_S2 \.text
+0+00000cc R_MIPS_PC16 \.text
+0+00000d0 R_MIPS_PC16 \.text
0+00000dc R_MIPS_32 \.text
0+00000e8 R_MIPS_64 \.text
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/empic.s src/gas/testsuite/gas/mips/empic.s
--- src-orig/gas/testsuite/gas/mips/empic.s Wed Dec 13 02:59:48 2000
+++ src/gas/testsuite/gas/mips/empic.s Mon Aug 20 05:51:44 2001
@@ -3,20 +3,20 @@
.text
.set noreorder
nop
-l2: jal g1 # R_MIPS_GNU_REL16_S2 g1 -1
+l2: jal g1 # R_MIPS_PC16 g1 -1
nop
- b g2 # R_MIPS_GNU_REL16_S2 g2 -1
+ b g2 # R_MIPS_PC16 g2 -1
nop
- b g2 # R_MIPS_GNU_REL16_S2 g2 -1
+ b g2 # R_MIPS_PC16 g2 -1
nop
- jal l1 # R_MIPS_GNU_REL16_S2 .foo 3F
+ jal l1 # R_MIPS_PC16 .foo 3F
nop
- jal l2 # R_MIPS_GNU_REL16_S2 .text 0 or -9
+ jal l2 # R_MIPS_PC16 .text 0 or -9
nop
- b l1+8 # R_MIPS_GNU_REL16_S2 .foo 41
+ b l1+8 # R_MIPS_PC16 .foo 41
nop
l3:
- b l2 # R_MIPS_GNU_REL16_S2 .text 0 or -D
+ b l2 # R_MIPS_PC16 .text 0 or -D
nop
la $3,g1-l3 # R_MIPS_GNU_REL_HI16 g1 0
# R_MIPS_GNU_REL_LO16 g1 C
@@ -37,8 +37,8 @@ l3:
.dword l1-l3 # R_MIPS_PC64 .foo 154
.dword l2-l3 # -30
l5:
- b 2f # R_MIPS_GNU_REL16_S2 .text 32
- b 2f+4 # R_MIPS_GNU_REL16_S2 .text 33
+ b 2f # R_MIPS_PC16 .text 32
+ b 2f+4 # R_MIPS_PC16 .text 33
la $3,2f-l5 # R_MIPS_GNU_REL_HI16 .text 0
# R_MIPS_GNU_REL_LO16 .text D8
la $3,2f+8-l5 # R_MIPS_GNU_REL_HI16 .text 0
@@ -51,8 +51,8 @@ l5:
.dword 2f-l5 # R_MIPS_PC64 .text F8 or 34
nop
2: # at address 0xCC.
- b 2b # R_MIPS_GNU_REL16_S2 .text 32
- b 2b+4 # R_MIPS_GNU_REL16_S2 .text 33
+ b 2b # R_MIPS_PC16 .text 32
+ b 2b+4 # R_MIPS_PC16 .text 33
la $3,2b-l5 # 34
la $3,2b+8-l5 # 3C
.word 2b # R_MIPS_32 .text CC
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/telempic.d src/gas/testsuite/gas/mips/telempic.d
--- src-orig/gas/testsuite/gas/mips/telempic.d Sun Aug 12 13:35:04 2001
+++ src/gas/testsuite/gas/mips/telempic.d Mon Aug 20 05:48:02 2001
@@ -25,13 +25,13 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR \[\.text\]:
OFFSET [ ]+ TYPE VALUE
-0+0000004 R_MIPS_GNU_REL16_S2 g1
-0+000000c R_MIPS_GNU_REL16_S2 g2
-0+0000014 R_MIPS_GNU_REL16_S2 g2
-0+000001c R_MIPS_GNU_REL16_S2 \.foo
-0+0000024 R_MIPS_GNU_REL16_S2 \.text
-0+000002c R_MIPS_GNU_REL16_S2 \.foo
-0+0000034 R_MIPS_GNU_REL16_S2 \.text
+0+0000004 R_MIPS_PC16 g1
+0+000000c R_MIPS_PC16 g2
+0+0000014 R_MIPS_PC16 g2
+0+000001c R_MIPS_PC16 \.foo
+0+0000024 R_MIPS_PC16 \.text
+0+000002c R_MIPS_PC16 \.foo
+0+0000034 R_MIPS_PC16 \.text
0+000003c R_MIPS_GNU_REL_HI16 g1
0+0000040 R_MIPS_GNU_REL_LO16 g1
0+0000044 R_MIPS_GNU_REL_HI16 \.foo
@@ -46,16 +46,16 @@ OFFSET [ ]+ TYPE VALUE
0+0000078 R_MIPS_64 \.text
0+0000080 R_MIPS_PC64 g1
0+0000088 R_MIPS_PC64 \.foo
-0+0000098 R_MIPS_GNU_REL16_S2 \.text
-0+000009c R_MIPS_GNU_REL16_S2 \.text
+0+0000098 R_MIPS_PC16 \.text
+0+000009c R_MIPS_PC16 \.text
0+00000a0 R_MIPS_GNU_REL_HI16 \.text
0+00000a4 R_MIPS_GNU_REL_LO16 \.text
0+00000a8 R_MIPS_GNU_REL_HI16 \.text
0+00000ac R_MIPS_GNU_REL_LO16 \.text
0+00000b0 R_MIPS_32 \.text
0+00000b8 R_MIPS_64 \.text
-0+00000cc R_MIPS_GNU_REL16_S2 \.text
-0+00000d0 R_MIPS_GNU_REL16_S2 \.text
+0+00000cc R_MIPS_PC16 \.text
+0+00000d0 R_MIPS_PC16 \.text
0+00000dc R_MIPS_32 \.text
0+00000e8 R_MIPS_64 \.text
diff -BurpNX /bigdisk/src/binutils-exclude src-orig/gas/testsuite/gas/mips/tempic.d src/gas/testsuite/gas/mips/tempic.d
--- src-orig/gas/testsuite/gas/mips/tempic.d Sun Aug 12 13:35:04 2001
+++ src/gas/testsuite/gas/mips/tempic.d Mon Aug 20 05:55:37 2001
@@ -25,13 +25,13 @@ SYMBOL TABLE:
RELOCATION RECORDS FOR \[\.text\]:
OFFSET [ ]+ TYPE VALUE
-0+0000004 R_MIPS_GNU_REL16_S2 g1
-0+000000c R_MIPS_GNU_REL16_S2 g2
-0+0000014 R_MIPS_GNU_REL16_S2 g2
-0+000001c R_MIPS_GNU_REL16_S2 \.foo
-0+0000024 R_MIPS_GNU_REL16_S2 \.text
-0+000002c R_MIPS_GNU_REL16_S2 \.foo
-0+0000034 R_MIPS_GNU_REL16_S2 \.text
+0+0000004 R_MIPS_PC16 g1
+0+000000c R_MIPS_PC16 g2
+0+0000014 R_MIPS_PC16 g2
+0+000001c R_MIPS_PC16 \.foo
+0+0000024 R_MIPS_PC16 \.text
+0+000002c R_MIPS_PC16 \.foo
+0+0000034 R_MIPS_PC16 \.text
0+000003c R_MIPS_GNU_REL_HI16 g1
0+0000040 R_MIPS_GNU_REL_LO16 g1
0+0000044 R_MIPS_GNU_REL_HI16 \.foo
@@ -46,16 +46,16 @@ OFFSET [ ]+ TYPE VALUE
0+0000078 R_MIPS_64 \.text
0+0000080 R_MIPS_PC64 g1
0+0000088 R_MIPS_PC64 \.foo
-0+0000098 R_MIPS_GNU_REL16_S2 \.text
-0+000009c R_MIPS_GNU_REL16_S2 \.text
+0+0000098 R_MIPS_PC16 \.text
+0+000009c R_MIPS_PC16 \.text
0+00000a0 R_MIPS_GNU_REL_HI16 \.text
0+00000a4 R_MIPS_GNU_REL_LO16 \.text
0+00000a8 R_MIPS_GNU_REL_HI16 \.text
0+00000ac R_MIPS_GNU_REL_LO16 \.text
0+00000b0 R_MIPS_32 \.text
0+00000b8 R_MIPS_64 \.text
-0+00000cc R_MIPS_GNU_REL16_S2 \.text
-0+00000d0 R_MIPS_GNU_REL16_S2 \.text
+0+00000cc R_MIPS_PC16 \.text
+0+00000d0 R_MIPS_PC16 \.text
0+00000dc R_MIPS_32 \.text
0+00000e8 R_MIPS_64 \.text
More information about the Binutils
mailing list