forked from Imagelibrary/binutils-gdb
Nios II large-GOT relocations
2014-02-03 Sandra Loosemore <sandra@codesourcery.com> include/elf/ * nios2.h (R_NIOS2_GOT_LO, R_NIOS2_GOT_HA): New. (R_NIOS2_CALL_LO, R_NIOS2_CALL_HA): New. (R_NIOS2_ILLEGAL): Adjust. gas/ * config/tc-nios2.c (md_apply_fix): Test for new relocs. (nios2_special_reloc): Add %call_lo, %call_hiadj, %got_lo, %got_hiadj relocation operators. Sort table and add comment to explain ordering. (nios2_fix_adjustable): Test for new relocs. * doc/c-nios2.texi (Nios II Relocations): Document new relocation operators. bfd/ * reloc.c (BFD_RELOC_NIOS2_GOT_LO, BFD_RELOC_NIOS2_GOT_HA): New. (BFD_RELOC_NIOS2_CALL_LO, BFD_RELOC_NIOS2_CALL_HA): New. * libbfd.h: Regenerated. * bfd-in2.h: Regenerated. * elf32-nios2.c (elf_nios2_howto_table_rel): Add new relocations. (nios2_reloc_map): Likewise. (GOT_USED, CALL_USED): Renamed from GOT16_USED and CALL16_USED. Fixed all references. (nios2_elf32_relocate_section): Add new relocations. (nios2_elf32_check_relocs): Likewise. (nios2_elf32_gc_sweep_hook): Likewise.
This commit is contained in:
@@ -1139,7 +1139,6 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_U16
|
||||
|| fixP->fx_r_type == BFD_RELOC_16_PCREL
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26_NOAT
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_IMM5
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CACHE_OPX
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_IMM6
|
||||
@@ -1165,6 +1164,11 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_LE16
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_GOTOFF
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPREL
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26_NOAT
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_GOT_LO
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_GOT_HA
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CALL_LO
|
||||
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CALL_HA
|
||||
/* Add other relocs here as we generate them. */
|
||||
));
|
||||
|
||||
@@ -1301,21 +1305,28 @@ struct nios2_special_relocS
|
||||
bfd_reloc_code_real_type reloc_type;
|
||||
};
|
||||
|
||||
/* This table is sorted so that prefix strings are listed after the longer
|
||||
strings that include them -- e.g., %got after %got_hiadj, etc. */
|
||||
|
||||
struct nios2_special_relocS nios2_special_reloc[] = {
|
||||
{"%hiadj", BFD_RELOC_NIOS2_HIADJ16},
|
||||
{"%hi", BFD_RELOC_NIOS2_HI16},
|
||||
{"%lo", BFD_RELOC_NIOS2_LO16},
|
||||
{"%gprel", BFD_RELOC_NIOS2_GPREL},
|
||||
{"%call_lo", BFD_RELOC_NIOS2_CALL_LO},
|
||||
{"%call_hiadj", BFD_RELOC_NIOS2_CALL_HA},
|
||||
{"%call", BFD_RELOC_NIOS2_CALL16},
|
||||
{"%gotoff_lo", BFD_RELOC_NIOS2_GOTOFF_LO},
|
||||
{"%gotoff_hiadj", BFD_RELOC_NIOS2_GOTOFF_HA},
|
||||
{"%gotoff", BFD_RELOC_NIOS2_GOTOFF},
|
||||
{"%got_hiadj", BFD_RELOC_NIOS2_GOT_HA},
|
||||
{"%got_lo", BFD_RELOC_NIOS2_GOT_LO},
|
||||
{"%got", BFD_RELOC_NIOS2_GOT16},
|
||||
{"%tls_gd", BFD_RELOC_NIOS2_TLS_GD16},
|
||||
{"%tls_ldm", BFD_RELOC_NIOS2_TLS_LDM16},
|
||||
{"%tls_ldo", BFD_RELOC_NIOS2_TLS_LDO16},
|
||||
{"%tls_ie", BFD_RELOC_NIOS2_TLS_IE16},
|
||||
{"%tls_le", BFD_RELOC_NIOS2_TLS_LE16},
|
||||
{"%gotoff", BFD_RELOC_NIOS2_GOTOFF},
|
||||
{"%got", BFD_RELOC_NIOS2_GOT16}
|
||||
};
|
||||
|
||||
#define NIOS2_NUM_SPECIAL_RELOCS \
|
||||
@@ -2824,7 +2835,12 @@ nios2_fix_adjustable (fixS *fixp)
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPMOD
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_DTPREL
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_TLS_TPREL
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF)
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_GOTOFF
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_GOT_LO
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_GOT_HA
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_CALL_LO
|
||||
|| fixp->fx_r_type == BFD_RELOC_NIOS2_CALL_HA
|
||||
)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user