From 24b368f8532b4775f9fd5bcc7958a84d4218aa46 Mon Sep 17 00:00:00 2001 From: Claudiu Zissulescu Date: Fri, 4 Dec 2015 10:49:57 +0000 Subject: Fix failures in the GAS testsuite for the ARC architecture. gas * config/tc-arc.c (arc_option): Sets all internal gas options when parsing .cpu directive. (declare_register_set): Declare all 64 registers. (md_section_align): Refactor. (md_pcrel_from_section): Remove assert. (pseudo_operand_match): Fix pseudo operand match. (find_reloc): Use flags filed, extend matching. * config/tc-arc.h (TC_VALIDATE_FIX): Don't fixup any PLT relocation. testsuite * gas/arc/bic.d: Update test. * gas/arc/add_s-err.s: New file. * gas/arc/cpu-warn1.s: Likewise. * gas/arc/pcl-relocs.d: Likewise. * gas/arc/pcl-relocs.s: Likewise. * gas/arc/pcrel-relocs.d: Likewise. * gas/arc/pcrel-relocs.s: Likewise. * gas/arc/pic-relocs.d: Likewise. * gas/arc/pic-relocs.s: Likewise. * gas/arc/plt-relocs.d: Likewise. * gas/arc/plt-relocs.s: Likewise. * gas/arc/pseudos.d: Likewise. * gas/arc/pseudos.s: Likewise. * gas/arc/sda-relocs.d: Likewise. * gas/arc/sda-relocs.s: Likewise. * gas/arc/sda-relocs2.d: Likewise. * gas/arc/sda-relocs2.s: Likewise. * gas/arc/tls-relocs.d: Likewise. * gas/arc/tls-relocs.s: Likewise. opcode * arc.h (arc_reloc_equiv_tab): Replace flagcode with flags[32]. opcodes * arc-dis.c (special_flag_p): Match full mnemonic. * arc-opc.c (print_insn_arc): Check section size to read appropriate number of bytes. Fix printing. * arc-tbl.h: Fix instruction table. Allow clri/seti instruction without arguments. --- gas/config/tc-arc.h | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'gas/config/tc-arc.h') diff --git a/gas/config/tc-arc.h b/gas/config/tc-arc.h index 8fff767..fa0bbd9 100644 --- a/gas/config/tc-arc.h +++ b/gas/config/tc-arc.h @@ -125,14 +125,20 @@ extern long md_pcrel_from_section (struct fix *, segT); arc_cons_fix_new ((FRAG), (OFF), (LEN), (EXP), (RELOC)) /* We don't want gas to fixup the following program memory related - relocations. */ -#define TC_VALIDATE_FIX(FIXP,SEG,SKIP) \ - if ((FIXP->fx_r_type == BFD_RELOC_ARC_GOTPC32) \ - && FIXP->fx_addsy != NULL \ - && FIXP->fx_subsy == NULL) \ - { \ - symbol_mark_used_in_reloc (FIXP->fx_addsy); \ - goto SKIP; \ + relocations. Check also that fx_addsy is not NULL, in order to + make sure that the fixup refers to some sort of label. */ +#define TC_VALIDATE_FIX(FIXP,SEG,SKIP) \ + if ((FIXP->fx_r_type == BFD_RELOC_ARC_GOTPC32 \ + || FIXP->fx_r_type == BFD_RELOC_ARC_PLT32 \ + || FIXP->fx_r_type == BFD_RELOC_ARC_S25W_PCREL_PLT \ + || FIXP->fx_r_type == BFD_RELOC_ARC_S25H_PCREL_PLT \ + || FIXP->fx_r_type == BFD_RELOC_ARC_S21W_PCREL_PLT \ + || FIXP->fx_r_type == BFD_RELOC_ARC_S21H_PCREL_PLT) \ + && FIXP->fx_addsy != NULL \ + && FIXP->fx_subsy == NULL) \ + { \ + symbol_mark_used_in_reloc (FIXP->fx_addsy); \ + goto SKIP; \ } /* BFD_RELOC_ARC_TLS_GD_LD may use fx_subsy to store a label that is -- cgit v1.1