From: Claudiu Zissulescu Date: Tue, 5 Apr 2016 14:22:19 +0000 (+0200) Subject: [ARC] Don't allow pc-rel relocations for J* instructions. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6ec1f28285f0a24587f7b5935e6d3fd4011fbb01;p=binutils-gdb.git [ARC] Don't allow pc-rel relocations for J* instructions. gas/ 2016-04-05 Claudiu Zissulescu * config/tc-arc.c (assemble_insn): Prohibit pc-rel relocations for JUMP instructions type. * testsuite/gas/arc/relocs-errors.d: New file. * testsuite/gas/arc/relocs-errors.err: Likewise. * testsuite/gas/arc/relocs-errors.s: Likewise. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 7c1c6a009ea..0f4d58fcfa4 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2016-04-05 Claudiu Zissulescu + + * config/tc-arc.c (assemble_insn): Prohibit pc-rel relocations for + JUMP instructions type. + * testsuite/gas/arc/relocs-errors.d: New file. + * testsuite/gas/arc/relocs-errors.err: Likewise. + * testsuite/gas/arc/relocs-errors.s: Likewise. + 2016-04-04 H.J. Lu PR gas/19498 diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 4f9c3363405..40643ad5e08 100644 --- a/gas/config/tc-arc.c +++ b/gas/config/tc-arc.c @@ -3363,6 +3363,10 @@ assemble_insn (const struct arc_opcode *opcode, switch (t->X_md) { case O_plt: + if (opcode->class == JUMP) + as_bad_where (frag_now->fr_file, frag_now->fr_line, + _("Unable to use @plt relocatio for insn %s"), + opcode->name); needGOTSymbol = TRUE; reloc = find_reloc ("plt", opcode->name, pflags, nflg, @@ -3376,7 +3380,7 @@ assemble_insn (const struct arc_opcode *opcode, break; case O_pcl: reloc = ARC_RELOC_TABLE (t->X_md)->reloc; - if (ARC_SHORT (opcode->mask)) + if (ARC_SHORT (opcode->mask) || opcode->class == JUMP) as_bad_where (frag_now->fr_file, frag_now->fr_line, _("Unable to use @pcl relocation for insn %s"), opcode->name); diff --git a/gas/testsuite/gas/arc/relocs-errors.d b/gas/testsuite/gas/arc/relocs-errors.d new file mode 100644 index 00000000000..29373a72e2b --- /dev/null +++ b/gas/testsuite/gas/arc/relocs-errors.d @@ -0,0 +1 @@ +#error-output: relocs-errors.err diff --git a/gas/testsuite/gas/arc/relocs-errors.err b/gas/testsuite/gas/arc/relocs-errors.err new file mode 100644 index 00000000000..3bafa151f9e --- /dev/null +++ b/gas/testsuite/gas/arc/relocs-errors.err @@ -0,0 +1,7 @@ +[^:]*: Assembler messages: +[^:]*:1: Error: Unable to use @plt relocatio for insn j +[^:]*:2: Error: Unable to use @plt relocatio for insn jl +[^:]*:3: Error: Unable to use @plt relocatio for insn j +[^:]*:5: Error: Unable to use @pcl relocation for insn j +[^:]*:6: Error: Unable to use @pcl relocation for insn jl +[^:]*:7: Error: Unable to use @pcl relocation for insn j diff --git a/gas/testsuite/gas/arc/relocs-errors.s b/gas/testsuite/gas/arc/relocs-errors.s new file mode 100644 index 00000000000..8e963a0b37b --- /dev/null +++ b/gas/testsuite/gas/arc/relocs-errors.s @@ -0,0 +1,7 @@ + j sym@plt + jl sym@plt + jeq sym@plt + + j sym@pcl + jl sym@pcl + jeq sym@pcl