diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2008-08-06 19:44:47 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2008-08-06 19:44:47 +0000 |
commit | 738e53487d7edb6b7428b889dcb0721d3d9e2c43 (patch) | |
tree | 6d055845fb85211181d8a9e38a0fa8076e990443 /gas/testsuite | |
parent | d57a3c85f6eee87b04852e98cce75af080969951 (diff) | |
download | gdb-738e53487d7edb6b7428b889dcb0721d3d9e2c43.zip gdb-738e53487d7edb6b7428b889dcb0721d3d9e2c43.tar.gz gdb-738e53487d7edb6b7428b889dcb0721d3d9e2c43.tar.bz2 |
bfd/
* reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare.
* libbfd.h, bfd-in2.h: Regenerate.
* elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved
R_MIPS16_GOT16 and R_MIPS16_CALL16 entries.
(mips16_reloc_map): Add mappings.
* elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved
R_MIPS16_GOT16 and R_MIPS16_CALL16 entries.
(mips16_elf64_howto_table_rela): Likewise.
(mips16_reloc_map): Add mappings.
* elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved
R_MIPS16_GOT16 and R_MIPS16_CALL16 entries.
(elf_mips16_howto_table_rela): Likewise.
(mips16_reloc_map): Add mappings.
* elfxx-mips.c (mips_elf_create_shadow_symbol): New function.
(section_allows_mips16_refs_p): Likewise.
(mips16_stub_symndx): Likewise.
(mips_elf_check_mips16_stubs): Treat the data argument as a
bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs
and create a "shadow" symbol for the original MIPS16 definition.
(mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p)
(lo16_reloc_p, mips16_call_reloc_p): New functions.
(_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize
relocation checks.
(_bfd_mips16_elf_reloc_shuffle): Likewise.
(_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16.
(mips_elf_got16_entry): Add comment.
(mips_elf_calculate_relocation): Use hi16_reloc_p,
lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p
to generalize relocation checks. Use section_allows_mips16_refs_p
instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and
R_MIPS16_GOT16, allowing the former to refer directly to a
MIPS16 function if its stub is not needed.
(mips16_stub_section_p): Delete.
(_bfd_mips_elf_symbol_processing): Convert odd-valued function
symbols into even MIPS16 symbols.
(mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize
a relocation check.
(_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end"
earlier in the function. Use mips16_stub_symndx to identify
the target function. Avoid out-of-bounds accesses when the
stub has no relocations; report an error instead. Use
section_allows_mips16_refs_p instead of mips16_stub_section_p.
Use mips16_call_reloc_p and got16_reloc_p to generalize relocation
checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create
dynamic relocations for absolute references to __gnu_local_gp.
(_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as
the argument to mips_elf_check_mips16_stubs. Generalize comment.
(_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p
to generalize relocation checks.
(_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function
symbol has a non-MIPS16 stub, redirect the symbol to the stub.
Fix an overly long line. Don't give dynamic symbols type STO_MIPS16.
(_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and
R_MIPS16_GOT16.
gas/
* config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p)
(lo16_reloc_p): New functions.
(reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to
generalize relocation checks.
(matching_lo_reloc): New function.
(fixup_has_matching_lo_p): Use it.
(mips16_mark_labels): Don't clobber a symbol's visibility.
(append_insn): Use hi16_reloc_p and lo16_reloc_p.
(mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16.
(md_apply_fix): Likewise.
(mips16_percent_op): Add %got and %call16.
(mips_frob_file): Use got16_reloc_p to generalize relocation checks.
Use matching_lo_reloc.
(mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to
generalize relocation checks.
(mips_fix_adjustable): Use lo16_reloc_p to generalize relocation
checks.
gas/testsuite/
* gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s,
* gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s,
* gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests.
* gas/mips/mips.exp: Run them.
ld/testsuite/
* ld-mips-elf/mips16-local-stubs-1.d: Remove stub_for_h3,
which was only referenced by the .pdr section, and was not
actually needed by code.
* ld-mips-elf/mips16-intermix.d: Remove unused static function stubs.
* ld-mips-elf/mips16-pic-1a.s,
ld-mips-elf/mips16-pic-1b.s,
ld-mips-elf/mips16-pic-1-dummy.s,
ld-mips-elf/mips16-pic-1.dd,
ld-mips-elf/mips16-pic-1.gd,
ld-mips-elf/mips16-pic-1.inc,
ld-mips-elf/mips16-pic-1.ld,
ld-mips-elf/mips16-pic-2a.s,
ld-mips-elf/mips16-pic-2b.s,
ld-mips-elf/mips16-pic-2.ad,
ld-mips-elf/mips16-pic-2.dd,
ld-mips-elf/mips16-pic-2.gd,
ld-mips-elf/mips16-pic-2.nd,
ld-mips-elf/mips16-pic-2.rd: New tests.
* ld-mips-elf/mips-elf.exp: Run them.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel13-mips16.d | 17 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel13-mips16.s | 24 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel8-mips16.d | 38 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel8-mips16.s | 39 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel9-mips16.d | 70 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-rel9-mips16.s | 59 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 3 |
8 files changed, 257 insertions, 0 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 7516f50..e75b7cf 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2008-08-06 Richard Sandiford <rdsandiford@googlemail.com> + + * gas/mips/elf-rel8-mips16.d, gas/mips/elf-rel8-mips16.s, + * gas/mips/elf-rel9-mips16.d, gas/mips/elf-rel9-mips16.s, + * gas/mips/elf-rel13-mips16.d, gas/mips/elf-rel13-mips16.s: New tests. + * gas/mips/mips.exp: Run them. + 2008-08-01 Peter Bergner <bergner@vnet.ibm.com> * gas/ppc/power7.d: New. diff --git a/gas/testsuite/gas/mips/elf-rel13-mips16.d b/gas/testsuite/gas/mips/elf-rel13-mips16.d new file mode 100644 index 0000000..aa404ab --- /dev/null +++ b/gas/testsuite/gas/mips/elf-rel13-mips16.d @@ -0,0 +1,17 @@ +#as: -march=mips2 -mabi=32 -KPIC +#readelf: --relocs +#name: MIPS ELF reloc 13 (MIPS16 version) + +Relocation section '\.rel\.text' at offset .* contains 9 entries: + *Offset * Info * Type * Sym\.Value * Sym\. Name +0+0002 * 0+..66 * R_MIPS16_GOT16 * 0+0000 * \.data +0+0016 * 0+..69 * R_MIPS16_LO16 * 0+0000 * \.data +0+0012 * 0+..66 * R_MIPS16_GOT16 * 0+0000 * \.data +0+001a * 0+..69 * R_MIPS16_LO16 * 0+0000 * \.data +# The next two lines could be in either order. +0+000e * 0+..66 * R_MIPS16_GOT16 * 0+0000 * \.rodata +0+000a * 0+..66 * R_MIPS16_GOT16 * 0+0000 * \.rodata +0+001e * 0+..69 * R_MIPS16_LO16 * 0+0000 * \.rodata +0+0006 * 0+..66 * R_MIPS16_GOT16 * 0+0000 * \.bss +0+0022 * 0+..69 * R_MIPS16_LO16 * 0+0000 * \.bss +#pass diff --git a/gas/testsuite/gas/mips/elf-rel13-mips16.s b/gas/testsuite/gas/mips/elf-rel13-mips16.s new file mode 100644 index 0000000..2983f0e --- /dev/null +++ b/gas/testsuite/gas/mips/elf-rel13-mips16.s @@ -0,0 +1,24 @@ + .set mips16 + .ent foo +foo: + move $2,$28 + lw $4,%got(l1)($2) + lw $4,%got(l2)($2) + lw $4,%got(l3)($2) + lw $4,%got(l3)($2) + lw $4,%got(l1+0x400)($2) + addiu $4,%lo(l1) + addiu $4,%lo(l1+0x400) + addiu $4,%lo(l3) + addiu $4,%lo(l2) + .align 5 + .end foo + + .data +l1: .word 1 + + .lcomm l2, 4 + + .rdata + .word 1 +l3: .word 2 diff --git a/gas/testsuite/gas/mips/elf-rel8-mips16.d b/gas/testsuite/gas/mips/elf-rel8-mips16.d new file mode 100644 index 0000000..7c834fa --- /dev/null +++ b/gas/testsuite/gas/mips/elf-rel8-mips16.d @@ -0,0 +1,38 @@ +#as: -march=mips2 -mabi=32 +#objdump: -M gpr-names=numeric -dr +#name: MIPS ELF reloc 8 (MIPS16 version) + +.*: file format .* + +Disassembly of section \.text: + +0+00 <foo>: + 0: 675c move \$2,\$28 + 2: f000 6c00 li \$4,0 + 2: R_MIPS16_HI16 gvar + 6: f400 3480 sll \$4,16 + a: f000 4c00 addiu \$4,0 + a: R_MIPS16_LO16 gvar + e: f000 9d80 lw \$4,0\(\$5\) + e: R_MIPS16_LO16 gvar + 12: f000 9982 lw \$4,2\(\$17\) + 16: f000 9a80 lw \$4,0\(\$2\) + 16: R_MIPS16_GOT16 \.data + 1a: f000 c4a0 sb \$5,0\(\$4\) + 1a: R_MIPS16_LO16 \.data + 1e: f000 9a80 lw \$4,0\(\$2\) + 1e: R_MIPS16_GOT16 \.data + 22: f000 4c00 addiu \$4,0 + 22: R_MIPS16_LO16 \.data + 26: f000 9a60 lw \$3,0\(\$2\) + 26: R_MIPS16_CALL16 gfunc + 2a: f000 4c00 addiu \$4,0 + 2a: R_MIPS16_CALL16 gfunc + 2e: f000 9a80 lw \$4,0\(\$2\) + 2e: R_MIPS16_GPREL gvar + 32: f000 da80 sw \$4,0\(\$2\) + 32: R_MIPS16_GPREL gvar + 36: f000 4c00 addiu \$4,0 + 36: R_MIPS16_GPREL gvar + 3a: 6500 nop +#pass diff --git a/gas/testsuite/gas/mips/elf-rel8-mips16.s b/gas/testsuite/gas/mips/elf-rel8-mips16.s new file mode 100644 index 0000000..0c9eefe --- /dev/null +++ b/gas/testsuite/gas/mips/elf-rel8-mips16.s @@ -0,0 +1,39 @@ + .equ $fprel, 2 + .set mips16 + + .ent foo +foo: + move $2,$gp + + # Test various forms of relocation syntax. + + li $4,(%hi gvar) + sll $4,16 + addiu $4,(%lo (gvar)) + lw $4,%lo gvar($5) + + # Check that registers aren't confused with $ identifiers. + + lw $4,($fprel)($17) + + # Check various forms of paired relocations. + + lw $4,%got(lvar)($2) + sb $5,%lo(lvar)($4) + + lw $4,%got(lvar)($2) + addiu $4,%lo(lvar) + + # Check individual relocations. + + lw $3,%call16(gfunc)($2) + addiu $4,%call16(gfunc) + + lw $4,%gprel(gvar)($2) + sw $4,%gprel(gvar)($2) + addiu $4,%gprel(gvar) + .align 6 + .end foo + + .data +lvar: .word 1,2 diff --git a/gas/testsuite/gas/mips/elf-rel9-mips16.d b/gas/testsuite/gas/mips/elf-rel9-mips16.d new file mode 100644 index 0000000..738c6fd --- /dev/null +++ b/gas/testsuite/gas/mips/elf-rel9-mips16.d @@ -0,0 +1,70 @@ +#as: -march=mips2 -mabi=32 +#objdump: -M gpr-names=numeric -dr +#name: MIPS ELF reloc 9 (MIPS16 version) + +.*: file format .* + +Disassembly of section \.text: + +0+00 <foo>: + 0: 675c move \$2,\$28 + 2: f000 9a80 lw \$4,0\(\$2\) + 2: R_MIPS16_GOT16 \.data + 6: f000 4c10 addiu \$4,16 + 6: R_MIPS16_LO16 \.data + a: f000 9a80 lw \$4,0\(\$2\) + a: R_MIPS16_GOT16 \.data + e: f020 4c00 addiu \$4,32 + e: R_MIPS16_LO16 \.data + 12: f000 9a80 lw \$4,0\(\$2\) + 12: R_MIPS16_GOT16 \.data + 16: f7ef 4c1c addiu \$4,32764 + 16: R_MIPS16_LO16 \.data + 1a: f000 9a81 lw \$4,1\(\$2\) + 1a: R_MIPS16_GOT16 \.data + 1e: f010 4c00 addiu \$4,-32768 + 1e: R_MIPS16_LO16 \.data + 22: f000 9a81 lw \$4,1\(\$2\) + 22: R_MIPS16_GOT16 \.data + 26: f7ff 4c1c addiu \$4,-4 + 26: R_MIPS16_LO16 \.data + 2a: f000 9a81 lw \$4,1\(\$2\) + 2a: R_MIPS16_GOT16 \.data + 2e: f000 4c00 addiu \$4,0 + 2e: R_MIPS16_LO16 \.data + 32: f000 9a82 lw \$4,2\(\$2\) + 32: R_MIPS16_GOT16 \.data + 36: f010 4c10 addiu \$4,-32752 + 36: R_MIPS16_LO16 \.data + 3a: f000 9a82 lw \$4,2\(\$2\) + 3a: R_MIPS16_GOT16 \.data + 3e: f01e 4c00 addiu \$4,-4096 + 3e: R_MIPS16_LO16 \.data + 42: f000 9a82 lw \$4,2\(\$2\) + 42: R_MIPS16_GOT16 \.data + 46: f7ff 4c1f addiu \$4,-1 + 46: R_MIPS16_LO16 \.data + 4a: f000 9a82 lw \$4,2\(\$2\) + 4a: R_MIPS16_GOT16 \.data + 4e: f000 4c00 addiu \$4,0 + 4e: R_MIPS16_LO16 \.data + 52: f000 9a83 lw \$4,3\(\$2\) + 52: R_MIPS16_GOT16 \.data + 56: f342 4c05 addiu \$4,4933 + 56: R_MIPS16_LO16 \.data + 5a: f018 9a80 lw \$4,-16384\(\$2\) + 5a: R_MIPS16_GPREL \.sdata + 5e: f018 9a84 lw \$4,-16380\(\$2\) + 5e: R_MIPS16_GPREL \.sdata + 62: f018 9a84 lw \$4,-16380\(\$2\) + 62: R_MIPS16_GPREL \.sdata + 66: f018 9a88 lw \$4,-16376\(\$2\) + 66: R_MIPS16_GPREL \.sdata + 6a: f018 9a8c lw \$4,-16372\(\$2\) + 6a: R_MIPS16_GPREL \.sdata + 6e: f018 9a94 lw \$4,-16364\(\$2\) + 6e: R_MIPS16_GPREL \.sdata + 72: f018 9a98 lw \$4,-16360\(\$2\) + 72: R_MIPS16_GPREL \.sdata + 76: 6500 nop +#pass diff --git a/gas/testsuite/gas/mips/elf-rel9-mips16.s b/gas/testsuite/gas/mips/elf-rel9-mips16.s new file mode 100644 index 0000000..a4f54ed --- /dev/null +++ b/gas/testsuite/gas/mips/elf-rel9-mips16.s @@ -0,0 +1,59 @@ + .set mips16 + .ent foo +foo: + move $2,$28 + lw $4,%got(l1)($2) + addiu $4,%lo(l1) + + lw $4,%got(l1 + 16)($2) + addiu $4,%lo(l1 + 16) + + lw $4,%got(l1 + 0x7fec)($2) + addiu $4,%lo(l1 + 0x7fec) + + lw $4,%got(l1 + 0x7ff0)($2) + addiu $4,%lo(l1 + 0x7ff0) + + lw $4,%got(l1 + 0xffec)($2) + addiu $4,%lo(l1 + 0xffec) + + lw $4,%got(l1 + 0xfff0)($2) + addiu $4,%lo(l1 + 0xfff0) + + lw $4,%got(l1 + 0x18000)($2) + addiu $4,%lo(l1 + 0x18000) + + lw $4,%got(l2)($2) + addiu $4,%lo(l2) + + lw $4,%got(l2 + 0xfff)($2) + addiu $4,%lo(l2 + 0xfff) + + lw $4,%got(l2 + 0x1000)($2) + addiu $4,%lo(l2 + 0x1000) + + lw $4,%got(l2 + 0x12345)($2) + addiu $4,%lo(l2 + 0x12345) + + lw $4,%gprel(l3)($2) + lw $4,%gprel(l3 + 4)($2) + lw $4,%gprel(l4)($2) + lw $4,%gprel(l4 + 4)($2) + lw $4,%gprel(l5)($2) + lw $4,%gprel(l5 + 8)($2) + lw $4,%gprel(l5 + 12)($2) + + .align 6 + .end foo + + .data + .word 1,2,3,4 +l1: .word 4,5 + .space 0x1f000 - 24 +l2: .word 7,8 + + .sdata +l3: .word 1 +l4: .word 2 + .word 3 +l5: .word 4 diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 16edfb7..3c4a919 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -653,13 +653,16 @@ if { [istarget mips*-*-vxworks*] } { } run_dump_test "elf-rel7" run_dump_test "elf-rel8" + run_dump_test "elf-rel8-mips16" run_dump_test "elf-rel9" + run_dump_test "elf-rel9-mips16" if $has_newabi { run_dump_test "elf-rel10" run_dump_test "elf-rel11" } run_dump_test "elf-rel12" run_dump_test "elf-rel13" + run_dump_test "elf-rel13-mips16" run_dump_test "elf-rel14" if $has_newabi { |