+2019-05-28 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ * elfxx-mips.c (mips_elf_calculate_relocation) <R_MIPS_PCHI16>:
+ Remove overflow check.
+
2019-05-28 Alan Modra <amodra@gmail.com>
PR 24596
case R_MIPS_PCHI16:
value = mips_elf_high (symbol + addend - p);
- if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
- overflowed_p = mips_elf_overflow_p (value, 16);
value &= howto->dst_mask;
break;
+2019-05-28 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ * testsuite/ld-mips-elf/undefweak-overflow.s: Remove test case
+ for pcrel_hi/pcrel_lo.
+ * testsuite/ld-mips-elf/undefweak-overflow.d: Update to match.
+ * testsuite/ld-mips-elf/reloc-pcrel-r6.s: New test source.
+ * testsuite/ld-mips-elf/reloc-pcrel-r6.d: New test linker script.
+ * testsuite/ld-mips-elf/reloc-pcrel-r6.ld: New test.
+ * testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
+
2019-05-28 Alan Modra <amodra@gmail.com>
PR 24596
run_dump_test_n64 "pic-reloc-7"
run_dump_test_n64 "pic-reloc-7" [list [list name (microMIPS)] \
[list as "-mmicromips"]]
+
+run_dump_test_o32 "reloc-pcrel-r6"
--- /dev/null
+#name: MIPS r6 PC-relative hi+lo relocations
+#ld: -Treloc-pcrel-r6.ld -e0
+#as: -mips32r6
+#objdump: -dr --prefix-addresses --show-raw-insn
+#dump: reloc-pcrel-r6.d
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <test> ec9ed000 auipc a0,0xd000
+[0-9a-f]+ <[^>]*> 24840001 addiu a0,a0,1
+[0-9a-f]+ <[^>]*> ec9e0000 auipc a0,0x0
+[0-9a-f]+ <[^>]*> 2484eff8 addiu a0,a0,-4104
+[0-9a-f]+ <[^>]*> ec9e0001 auipc a0,0x1
+[0-9a-f]+ <[^>]*> 2484eff0 addiu a0,a0,-4112
+[0-9a-f]+ <[^>]*> ec9e4000 auipc a0,0x4000
+[0-9a-f]+ <[^>]*> 2484ffe9 addiu a0,a0,-23
+ \.\.\.
--- /dev/null
+SECTIONS
+{
+ x1 = 0x10000001; /* lower and far */
+ x2 = 0x3ffff000; /* lower and near */
+ . = 0x40000000;
+ .text : { *(.text) }
+ x3 = 0x4000f000; /* high and near */
+ x4 = 0x80000001; /* high and far */
+}
--- /dev/null
+ .text
+ .globl test
+ .globl x1
+ .globl x2
+ .globl x3
+ .globl x4
+ .ent test
+test:
+1:
+ auipc $a0,%pcrel_hi(x1)
+2:
+ addiu $a0,$a0,%pcrel_lo(x1+(2b-1b))
+1:
+ auipc $a0,%pcrel_hi(x2)
+2:
+ addiu $a0,$a0, %pcrel_lo(x2+(2b-1b))
+1:
+ auipc $a0,%pcrel_hi(x3)
+2:
+ addiu $a0,$a0,%pcrel_lo(x3+(2b-1b))
+1:
+ auipc $a0,%pcrel_hi(x4)
+2:
+ addiu $a0,$a0,%pcrel_lo(x4+(2b-1b))
+ .end test
+ .align 2, 0
+ .space 8
[ 0-9a-f]+: ec4ffffd lwpc v0,20000000 <_ftext>
[ 0-9a-f]+: ec5bfffe ldpc v0,20000000 <_ftext>
[ 0-9a-f]+: cbfffffa bc 20000000 <_ftext>
-[ 0-9a-f]+: ec9ee000 auipc a0,0xe000
-[ 0-9a-f]+: 2484ffe8 addiu a0,a0,-24
-[ 0-9a-f]+: 1000fff7 b 20000000 <_ftext>
+[ 0-9a-f]+: 1000fff9 b 20000000 <_ftext>
[ 0-9a-f]+: 00000000 nop
-[ 0-9a-f]+: 0411fff5 bal 20000000 <_ftext>
+[ 0-9a-f]+: 0411fff7 bal 20000000 <_ftext>
[ 0-9a-f]+: 3c...... lui a0,0x....
[ 0-9a-f]+: 0c000000 jal 20000000 <_ftext>
[ 0-9a-f]+: 00000000 nop
[ 0-9a-f]+: 00000000 nop
[0-9a-f]+ <micro>:
-[ 0-9a-f]+: 8e5f beqz a0,20000000 <_ftext>
+[ 0-9a-f]+: 8e63 beqz a0,20000000 <_ftext>
[ 0-9a-f]+: 0c00 nop
-[ 0-9a-f]+: cfdd b 20000000 <_ftext>
+[ 0-9a-f]+: cfe1 b 20000000 <_ftext>
[ 0-9a-f]+: 0c00 nop
-[ 0-9a-f]+: 9400 ffda b 20000000 <_ftext>
+[ 0-9a-f]+: 9400 ffde b 20000000 <_ftext>
[ 0-9a-f]+: 0c00 nop
-[ 0-9a-f]+: 4060 ffd7 bal 20000000 <_ftext>
+[ 0-9a-f]+: 4060 ffdb bal 20000000 <_ftext>
[ 0-9a-f]+: 0000 0000 nop
[ 0-9a-f]+: f400 0000 jal 20000000 <_ftext>
[ 0-9a-f]+: 0000 0000 nop
[ 0-9a-f]+: 0c00 nop
[0-9a-f]+ <mips16>:
-[ 0-9a-f]+: f7df 100c b 20000000 <_ftext>
+[ 0-9a-f]+: f7df 1010 b 20000000 <_ftext>
[ 0-9a-f]+: 1800 0000 jal 20000000 <_ftext>
[ 0-9a-f]+: 6500 nop
#pass
lwpc $2, foo
ldpc $2, foo
bc foo
- auipc $4, %pcrel_hi(foo)
- addiu $4, $4, %pcrel_lo(foo+4)
b foo
nop