diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2016-04-05 16:22:19 +0200 |
---|---|---|
committer | Claudiu Zissulescu <claziss@synopsys.com> | 2016-04-05 16:23:02 +0200 |
commit | 6ec1f28285f0a24587f7b5935e6d3fd4011fbb01 (patch) | |
tree | 09f79d150e5e1992804eb4f10eae871273a9ad26 /gas | |
parent | 1f599d0e7b5039c814731293043e247304ec006b (diff) | |
download | gdb-6ec1f28285f0a24587f7b5935e6d3fd4011fbb01.zip gdb-6ec1f28285f0a24587f7b5935e6d3fd4011fbb01.tar.gz gdb-6ec1f28285f0a24587f7b5935e6d3fd4011fbb01.tar.bz2 |
[ARC] Don't allow pc-rel relocations for J* instructions.
gas/
2016-04-05 Claudiu Zissulescu <claziss@synopsys.com>
* 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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-arc.c | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/arc/relocs-errors.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/arc/relocs-errors.err | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/arc/relocs-errors.s | 7 |
5 files changed, 28 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 7c1c6a0..0f4d58f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2016-04-05 Claudiu Zissulescu <claziss@synopsys.com> + + * 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 <hongjiu.lu@intel.com> PR gas/19498 diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 4f9c336..40643ad 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 0000000..29373a7 --- /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 0000000..3bafa15 --- /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 0000000..8e963a0 --- /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 |