diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2017-01-30 17:11:22 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2017-01-30 17:16:01 +0000 |
commit | 8b10b0b3e100c25322a083248c7a18bf5a1f3527 (patch) | |
tree | 4993513d1cb11f9a039d4c01b7373a9afcb13616 /gas/testsuite | |
parent | 7795a8f8bdde2fa5c0e0639b92280314b32ec78d (diff) | |
download | gdb-8b10b0b3e100c25322a083248c7a18bf5a1f3527.zip gdb-8b10b0b3e100c25322a083248c7a18bf5a1f3527.tar.gz gdb-8b10b0b3e100c25322a083248c7a18bf5a1f3527.tar.bz2 |
MIPS: Add options to control branch ISA checks
Complement commit 9d862524f6ae ("MIPS: Verify the ISA mode and alignment
of branch and jump targets") and add GAS and LD options to control the
checks for invalid branches between ISA modes introduced there, to help
with some handwritten code lacking `.insn' annotation for labels used as
branch targets and code produced by older versions of GCC which suffers
from the issue with branches to code that has been optimized away,
addressed with GCC commit 242424 ("MIPS/GCC: Mark trailing labels with
`.insn'"), <https://gcc.gnu.org/ml/gcc-patches/2016-11/msg01061.html>.
bfd/
* elfxx-mips.h (_bfd_mips_elf_insn32): Rename prototype to...
(_bfd_mips_elf_linker_flags): ... this. Add another parameter.
* elfxx-mips.c (mips_elf_link_hash_table): Add
`ignore_branch_isa' member.
(mips_elf_perform_relocation): Do not treat an ISA mode mismatch
in branch relocation calculation as an error if
`ignore_branch_isa' has been set.
(_bfd_mips_elf_insn32): Rename to...
(_bfd_mips_elf_linker_flags): ... this. Rename the `on'
parameter to `insn32' and add an `ignore_branch_isa' parameter.
Handle the new parameter.
gas/
* config/tc-mips.c (mips_ignore_branch_isa): New variable.
(options): Add OPTION_IGNORE_BRANCH_ISA and
OPTION_NO_IGNORE_BRANCH_ISA enum values.
(md_longopts): Add "mignore-branch-isa" and
"mno-ignore-branch-isa" options.
(md_parse_option): Handle OPTION_IGNORE_BRANCH_ISA and
OPTION_NO_IGNORE_BRANCH_ISA.
(fix_bad_cross_mode_branch_p): Return FALSE if
`mips_ignore_branch_isa' has been set.
(md_show_usage): Add `-mignore-branch-isa' and
`-mno-ignore-branch-isa'.
* doc/as.texinfo (Target MIPS options): Add
`-mignore-branch-isa' and `-mno-ignore-branch-isa' options.
(-mignore-branch-isa, -mno-ignore-branch-isa): New options.
* doc/c-mips.texi (MIPS Options): Add `-mignore-branch-isa' and
`-mno-ignore-branch-isa' options.
* testsuite/gas/mips/branch-local-ignore-2.d: New test.
* testsuite/gas/mips/branch-local-ignore-3.d: New test.
* testsuite/gas/mips/branch-local-ignore-n32-2.d: New test.
* testsuite/gas/mips/branch-local-ignore-n32-3.d: New test.
* testsuite/gas/mips/branch-local-ignore-n64-2.d: New test.
* testsuite/gas/mips/branch-local-ignore-n64-3.d: New test.
* testsuite/gas/mips/mips.exp: Run the new tests.
ld/
* emultempl/mipself.em (ignore_branch_isa): New variable.
(mips_create_output_section_statements): Rename
`_bfd_mips_elf_insn32' called to `_bfd_mips_elf_linker_flags',
add `ignore_branch_isa' argument.
(PARSE_AND_LIST_PROLOGUE): Add OPTION_IGNORE_BRANCH_ISA and
OPTION_NO_IGNORE_BRANCH_ISA enum values.
(PARSE_AND_LIST_LONGOPTS): Add "ignore-branch-isa" and
"no-ignore-branch-isa" options.
(PARSE_AND_LIST_OPTIONS): Add `--ignore-branch-isa' and
`--no-ignore-branch-isa'.
(PARSE_AND_LIST_ARGS_CASES): Handle OPTION_IGNORE_BRANCH_ISA and
OPTION_NO_IGNORE_BRANCH_ISA.
* ld.texinfo (Options specific to MIPS targets): Add
`--ignore-branch-isa' and `--no-ignore-branch-isa' options.
(ld and the MIPS family): Likewise.
* testsuite/ld-mips-elf/bal-jalx-pic-ignore.d: New test.
* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n32.d: New test.
* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n64.d: New test.
* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d: New test.
* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1: New test.
* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16: New
test.
* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips: New
test.
* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/mips/branch-local-ignore-2.d | 29 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-local-ignore-3.d | 23 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-local-ignore-n32-2.d | 29 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-local-ignore-n32-3.d | 23 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-local-ignore-n64-2.d | 37 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-local-ignore-n64-3.d | 27 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 6 |
7 files changed, 174 insertions, 0 deletions
diff --git a/gas/testsuite/gas/mips/branch-local-ignore-2.d b/gas/testsuite/gas/mips/branch-local-ignore-2.d new file mode 100644 index 0000000..ddac741 --- /dev/null +++ b/gas/testsuite/gas/mips/branch-local-ignore-2.d @@ -0,0 +1,29 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS branch local symbol relocation 2 (ignore branch ISA) +#as: -32 -mignore-branch-isa +#source: branch-local-2.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 1000ffff b 00001014 <bar\+0x4> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 1443ffff bne v0,v1,0000101c <bar\+0xc> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 0451ffff bgezal v0,00001024 <bar\+0x14> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 0450ffff bltzal v0,0000102c <bar\+0x1c> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/branch-local-ignore-3.d b/gas/testsuite/gas/mips/branch-local-ignore-3.d new file mode 100644 index 0000000..918a2ce --- /dev/null +++ b/gas/testsuite/gas/mips/branch-local-ignore-3.d @@ -0,0 +1,23 @@ +#objdump: -dr --prefix-addresses --show-raw-insn -mmips:isa32r6 +#name: MIPS branch local symbol relocation 3 (ignore branch ISA) +#as: -32 -mignore-branch-isa +#source: branch-local-3.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> cbffffff bc 00001014 <bar\+0x4> +[ ]*[0-9a-f]+: R_MIPS_PC26_S2 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> d85fffff beqzc v0,0000101c <bar\+0xc> +[ ]*[0-9a-f]+: R_MIPS_PC21_S2 foo +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jr ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/branch-local-ignore-n32-2.d b/gas/testsuite/gas/mips/branch-local-ignore-n32-2.d new file mode 100644 index 0000000..080402c --- /dev/null +++ b/gas/testsuite/gas/mips/branch-local-ignore-n32-2.d @@ -0,0 +1,29 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS branch local symbol relocation 2 (ignore branch ISA, n32) +#as: -n32 -march=from-abi -mignore-branch-isa +#source: branch-local-2.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 10000000 b 00001018 <bar\+0x8> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 14430000 bne v0,v1,00001020 <bar\+0x10> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 04510000 bgezal v0,00001028 <bar\+0x18> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 04500000 bltzal v0,00001030 <bar\+0x20> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/branch-local-ignore-n32-3.d b/gas/testsuite/gas/mips/branch-local-ignore-n32-3.d new file mode 100644 index 0000000..a4dbc7f --- /dev/null +++ b/gas/testsuite/gas/mips/branch-local-ignore-n32-3.d @@ -0,0 +1,23 @@ +#objdump: -dr --prefix-addresses --show-raw-insn -mmips:isa32r6 +#name: MIPS branch local symbol relocation 3 (ignore branch ISA, n32) +#as: -n32 -march=from-abi -mignore-branch-isa +#source: branch-local-3.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> c8000000 bc 00001018 <bar\+0x8> +[ ]*[0-9a-f]+: R_MIPS_PC26_S2 foo-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> d8400000 beqzc v0,00001020 <bar\+0x10> +[ ]*[0-9a-f]+: R_MIPS_PC21_S2 foo-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jr ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/branch-local-ignore-n64-2.d b/gas/testsuite/gas/mips/branch-local-ignore-n64-2.d new file mode 100644 index 0000000..12cd510 --- /dev/null +++ b/gas/testsuite/gas/mips/branch-local-ignore-n64-2.d @@ -0,0 +1,37 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS branch local symbol relocation 2 (ignore branch ISA, n64) +#as: -64 -march=from-abi -mignore-branch-isa +#source: branch-local-2.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 10000000 b 0000000000001018 <bar\+0x8> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 14430000 bne v0,v1,0000000000001020 <bar\+0x10> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 04510000 bgezal v0,0000000000001028 <bar\+0x18> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 04500000 bltzal v0,0000000000001030 <bar\+0x20> +[ ]*[0-9a-f]+: R_MIPS_PC16 foo-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/branch-local-ignore-n64-3.d b/gas/testsuite/gas/mips/branch-local-ignore-n64-3.d new file mode 100644 index 0000000..9d6dca9 --- /dev/null +++ b/gas/testsuite/gas/mips/branch-local-ignore-n64-3.d @@ -0,0 +1,27 @@ +#objdump: -dr --prefix-addresses --show-raw-insn -mmips:isa32r6 +#name: MIPS branch local symbol relocation 3 (ignore branch ISA, n64) +#as: -64 -march=from-abi -mignore-branch-isa +#source: branch-local-3.s + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 001f 0f3c jr ra +[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero +[0-9a-f]+ <[^>]*> 0000 0000 nop +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> c8000000 bc 0000000000001018 <bar\+0x8> +[ ]*[0-9a-f]+: R_MIPS_PC26_S2 foo-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> d8400000 beqzc v0,0000000000001020 <bar\+0x10> +[ ]*[0-9a-f]+: R_MIPS_PC21_S2 foo-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4 +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero +[0-9a-f]+ <[^>]*> 03e00009 jr ra +[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero + \.\.\. diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 4580fbf..5a69542 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -626,16 +626,22 @@ if { [istarget mips*-*-vxworks*] } { run_dump_test "branch-weak-7" run_dump_test "branch-local-1" run_dump_test "branch-local-2" + run_dump_test "branch-local-ignore-2" run_dump_test "branch-local-3" + run_dump_test "branch-local-ignore-3" run_dump_test "branch-local-4" if $has_newabi { run_dump_test "branch-local-n32-1" run_dump_test "branch-local-n32-2" + run_dump_test "branch-local-ignore-n32-2" run_dump_test "branch-local-n32-3" + run_dump_test "branch-local-ignore-n32-3" run_dump_test "branch-local-n32-4" run_dump_test "branch-local-n64-1" run_dump_test "branch-local-n64-2" + run_dump_test "branch-local-ignore-n64-2" run_dump_test "branch-local-n64-3" + run_dump_test "branch-local-ignore-n64-3" run_dump_test "branch-local-n64-4" } run_dump_test "branch-addend" |