diff options
Diffstat (limited to 'gas/config/tc-cris.h')
-rw-r--r-- | gas/config/tc-cris.h | 63 |
1 files changed, 26 insertions, 37 deletions
diff --git a/gas/config/tc-cris.h b/gas/config/tc-cris.h index d1d4b29..d20e0a8 100644 --- a/gas/config/tc-cris.h +++ b/gas/config/tc-cris.h @@ -1,5 +1,5 @@ /* tc-cris.h -- Header file for tc-cris.c, the CRIS GAS port. - Copyright 2000, 2001 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. Originally written for GAS 1.38.1 by Mikael Asker. @@ -75,44 +75,33 @@ extern const int md_long_jump_size; extern const struct relax_type md_cris_relax_table[]; #define TC_GENERIC_RELAX_TABLE md_cris_relax_table -#define TC_FORCE_RELOCATION(fixp) md_cris_force_relocation (fixp) +#define TC_FORCE_RELOCATION(FIX) md_cris_force_relocation (FIX) extern int md_cris_force_relocation PARAMS ((struct fix *)); -#define IS_CRIS_PIC_RELOC(X) \ - ((X) == BFD_RELOC_CRIS_16_GOT \ - || (X) == BFD_RELOC_CRIS_32_GOT \ - || (X) == BFD_RELOC_CRIS_16_GOTPLT \ - || (X) == BFD_RELOC_CRIS_32_GOTPLT \ - || (X) == BFD_RELOC_CRIS_32_GOTREL \ - || (X) == BFD_RELOC_CRIS_32_PLT_GOTREL \ - || (X) == BFD_RELOC_CRIS_32_PLT_PCREL) - - -/* FIXME: Undocumented macro. Make sure we don't resolve fixups for which - we want to emit dynamic relocations. */ - -#define TC_RELOC_RTSYM_LOC_FIXUP(FIX) \ - ((FIX)->fx_addsy == NULL \ - || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \ - && ! S_IS_WEAK ((FIX)->fx_addsy) \ - && S_IS_DEFINED ((FIX)->fx_addsy) \ - && ! S_IS_COMMON ((FIX)->fx_addsy) \ - /* FIXME: Set fx_plt instead of this check. */ \ - && ! IS_CRIS_PIC_RELOC ((FIX)->fx_r_type))) - -/* This is really a workaround for a bug in write.c that resolves relocs - for weak symbols - it should be postponed to the link stage or later. - Also don't adjust fixups for global symbols for ELF, and no relocs - where the original symbol name must be kept. */ -#define tc_fix_adjustable(X) \ - (((X)->fx_addsy == NULL \ - || (! S_IS_WEAK ((X)->fx_addsy) \ - && ! (OUTPUT_FLAVOR == bfd_target_elf_flavour \ - && S_IS_EXTERNAL ((X)->fx_addsy)))) \ - && (X)->fx_r_type != BFD_RELOC_VTABLE_INHERIT \ - && (X)->fx_r_type != BFD_RELOC_VTABLE_ENTRY \ - && (! IS_CRIS_PIC_RELOC ((X)->fx_r_type) \ - || (X)->fx_r_type == BFD_RELOC_CRIS_32_GOTREL)) +#define IS_CRIS_PIC_RELOC(RTYPE) \ + ((RTYPE) == BFD_RELOC_CRIS_16_GOT \ + || (RTYPE) == BFD_RELOC_CRIS_32_GOT \ + || (RTYPE) == BFD_RELOC_CRIS_16_GOTPLT \ + || (RTYPE) == BFD_RELOC_CRIS_32_GOTPLT \ + || (RTYPE) == BFD_RELOC_CRIS_32_GOTREL \ + || (RTYPE) == BFD_RELOC_CRIS_32_PLT_GOTREL \ + || (RTYPE) == BFD_RELOC_CRIS_32_PLT_PCREL) + +/* Make sure we don't resolve fixups for which we want to emit dynamic + relocations. FIXME: Set fx_plt instead of using IS_CRIS_PIC_RELOC. */ +#define TC_FORCE_RELOCATION_LOCAL(FIX) \ + (!(FIX)->fx_pcrel \ + || (FIX)->fx_plt \ + || IS_CRIS_PIC_RELOC ((FIX)->fx_r_type) \ + || TC_FORCE_RELOCATION (FIX)) + +/* For some reloc types, don't adjust fixups by reducing to a section + symbol. */ +#define tc_fix_adjustable(FIX) \ + ((FIX)->fx_r_type != BFD_RELOC_VTABLE_INHERIT \ + && (FIX)->fx_r_type != BFD_RELOC_VTABLE_ENTRY \ + && (! IS_CRIS_PIC_RELOC ((FIX)->fx_r_type) \ + || (FIX)->fx_r_type == BFD_RELOC_CRIS_32_GOTREL)) /* When we have fixups against constant expressions, we get a GAS-specific section symbol at no extra charge for obscure reasons in |