/* tc-frv.h -- Header file for tc-frv.c.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright 2002 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
/* The target BFD architecture. */
#define TARGET_ARCH bfd_arch_frv
-#define TARGET_FORMAT "elf32-frv"
+#define TARGET_FORMAT (frv_md_fdpic_enabled () \
+ ? "elf32-frvfdpic" : "elf32-frv")
+extern bfd_boolean frv_md_fdpic_enabled (void);
#define TARGET_BYTES_BIG_ENDIAN 1
-/* call md_pcrel_from_section, not md_pcrel_from */
-long md_pcrel_from_section PARAMS ((struct fix *, segT));
-#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC)
-
/* Permit temporary numeric labels. */
#define LOCAL_LABELS_FB 1
/* We don't need to handle .word strangely. */
#define WORKING_DOT_WORD
-#define md_apply_fix3 gas_cgen_md_apply_fix3
+/* Values passed to md_apply_fix3 don't include the symbol value. */
+#define MD_APPLY_SYM_VALUE(FIX) 0
extern void frv_tomcat_workaround PARAMS ((void));
#define md_cleanup frv_tomcat_workaround
extern long frv_relax_frag PARAMS ((fragS *, long));
#define md_relax_frag(segment, fragP, stretch) frv_relax_frag(fragP, stretch)
-#define obj_fix_adjustable(fixP) frv_fix_adjustable (fixP)
-extern boolean frv_fix_adjustable PARAMS ((struct fix *));
-
-#ifdef OBJ_ELF
-/* This arranges for gas/write.c to not apply a relocation if
- obj_fix_adjustable() says it is not adjustable. */
-#define TC_FIX_ADJUSTABLE(fixP) obj_fix_adjustable (fixP)
-#endif
+#define tc_fix_adjustable(FIX) frv_fix_adjustable (FIX)
+struct fix;
+extern bfd_boolean frv_fix_adjustable PARAMS ((struct fix *));
/* When relaxing, we need to emit various relocs we otherwise wouldn't. */
#define TC_FORCE_RELOCATION(fix) frv_force_relocation (fix)
extern int frv_force_relocation PARAMS ((struct fix *));
+/* If we simplify subtractions that aren't SUB_SAME or SUB_ABS, we end
+ up with PCrel fixups, but since we don't have any PCrel relocs, we
+ crash. Preventing simplification gets us a good, early error. */
+#define TC_FORCE_RELOCATION_SUB_LOCAL(fixP) 1
+
#undef GAS_CGEN_MAX_FIXUPS
#define GAS_CGEN_MAX_FIXUPS 1
#define md_cgen_record_fixup_exp frv_cgen_record_fixup_exp
/* Call md_pcrel_from_section(), not md_pcrel_from(). */
-#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC)
+#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
/* After all of the symbols have been adjusted, go over the file looking