]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - bfd/reloc.c
bfd/
[thirdparty/binutils-gdb.git] / bfd / reloc.c
index 719eb00dfbac1be2f7a03f3246267a8205344b12..6ac71489023221e356758c42aa22d824c56f8c9d 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD support for handling relocation entries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -2177,9 +2177,10 @@ ENUMDOC
 
 ENUM
   BFD_RELOC_MIPS_JMP
+ENUMX
+  BFD_RELOC_MICROMIPS_JMP
 ENUMDOC
-  Bits 27..2 of the relocation address shifted right 2 bits;
-     simple reloc otherwise.
+  The MIPS jump instruction.
 
 ENUM
   BFD_RELOC_MIPS16_JMP
@@ -2195,6 +2196,7 @@ ENUM
   BFD_RELOC_HI16
 ENUMDOC
   High 16 bits of 32-bit value; simple reloc.
+
 ENUM
   BFD_RELOC_HI16_S
 ENUMDOC
@@ -2202,6 +2204,7 @@ ENUMDOC
      extended and added to form the final result.  If the low 16
      bits form a negative number, we need to add one to the high value
      to compensate for the borrow when the low bits are added.
+
 ENUM
   BFD_RELOC_LO16
 ENUMDOC
@@ -2245,29 +2248,71 @@ ENUMDOC
 
 ENUM
   BFD_RELOC_MIPS_LITERAL
+ENUMX
+  BFD_RELOC_MICROMIPS_LITERAL
 ENUMDOC
   Relocation against a MIPS literal section.
 
+ENUM
+  BFD_RELOC_MICROMIPS_7_PCREL_S1
+ENUMX
+  BFD_RELOC_MICROMIPS_10_PCREL_S1
+ENUMX
+  BFD_RELOC_MICROMIPS_16_PCREL_S1
+ENUMDOC
+  microMIPS PC-relative relocations.
+
+ENUM
+  BFD_RELOC_MICROMIPS_GPREL16
+ENUMX
+  BFD_RELOC_MICROMIPS_HI16
+ENUMX
+  BFD_RELOC_MICROMIPS_HI16_S
+ENUMX
+  BFD_RELOC_MICROMIPS_LO16
+ENUMDOC
+  microMIPS versions of generic BFD relocs.
+
 ENUM
   BFD_RELOC_MIPS_GOT16
+ENUMX
+  BFD_RELOC_MICROMIPS_GOT16
 ENUMX
   BFD_RELOC_MIPS_CALL16
+ENUMX
+  BFD_RELOC_MICROMIPS_CALL16
 ENUMX
   BFD_RELOC_MIPS_GOT_HI16
+ENUMX
+  BFD_RELOC_MICROMIPS_GOT_HI16
 ENUMX
   BFD_RELOC_MIPS_GOT_LO16
+ENUMX
+  BFD_RELOC_MICROMIPS_GOT_LO16
 ENUMX
   BFD_RELOC_MIPS_CALL_HI16
+ENUMX
+  BFD_RELOC_MICROMIPS_CALL_HI16
 ENUMX
   BFD_RELOC_MIPS_CALL_LO16
+ENUMX
+  BFD_RELOC_MICROMIPS_CALL_LO16
 ENUMX
   BFD_RELOC_MIPS_SUB
+ENUMX
+  BFD_RELOC_MICROMIPS_SUB
 ENUMX
   BFD_RELOC_MIPS_GOT_PAGE
+ENUMX
+  BFD_RELOC_MICROMIPS_GOT_PAGE
 ENUMX
   BFD_RELOC_MIPS_GOT_OFST
+ENUMX
+  BFD_RELOC_MICROMIPS_GOT_OFST
 ENUMX
   BFD_RELOC_MIPS_GOT_DISP
+ENUMX
+  BFD_RELOC_MICROMIPS_GOT_DISP
 ENUMX
   BFD_RELOC_MIPS_SHIFT5
 ENUMX
@@ -2280,16 +2325,24 @@ ENUMX
   BFD_RELOC_MIPS_DELETE
 ENUMX
   BFD_RELOC_MIPS_HIGHEST
+ENUMX
+  BFD_RELOC_MICROMIPS_HIGHEST
 ENUMX
   BFD_RELOC_MIPS_HIGHER
+ENUMX
+  BFD_RELOC_MICROMIPS_HIGHER
 ENUMX
   BFD_RELOC_MIPS_SCN_DISP
+ENUMX
+  BFD_RELOC_MICROMIPS_SCN_DISP
 ENUMX
   BFD_RELOC_MIPS_REL16
 ENUMX
   BFD_RELOC_MIPS_RELGOT
 ENUMX
   BFD_RELOC_MIPS_JALR
+ENUMX
+  BFD_RELOC_MICROMIPS_JALR
 ENUMX
   BFD_RELOC_MIPS_TLS_DTPMOD32
 ENUMX
@@ -2300,22 +2353,36 @@ ENUMX
   BFD_RELOC_MIPS_TLS_DTPREL64
 ENUMX
   BFD_RELOC_MIPS_TLS_GD
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_GD
 ENUMX
   BFD_RELOC_MIPS_TLS_LDM
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_LDM
 ENUMX
   BFD_RELOC_MIPS_TLS_DTPREL_HI16
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16
 ENUMX
   BFD_RELOC_MIPS_TLS_DTPREL_LO16
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16
 ENUMX
   BFD_RELOC_MIPS_TLS_GOTTPREL
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_GOTTPREL
 ENUMX
   BFD_RELOC_MIPS_TLS_TPREL32
 ENUMX
   BFD_RELOC_MIPS_TLS_TPREL64
 ENUMX
   BFD_RELOC_MIPS_TLS_TPREL_HI16
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_TPREL_HI16
 ENUMX
   BFD_RELOC_MIPS_TLS_TPREL_LO16
+ENUMX
+  BFD_RELOC_MICROMIPS_TLS_TPREL_LO16
 ENUMDOC
   MIPS ELF relocations.
 COMMENT
@@ -3041,6 +3108,11 @@ ENUM
 ENUMDOC
   Annotation of BX instructions.
 
+ENUM
+  BFD_RELOC_ARM_IRELATIVE
+ENUMDOC
+  ARM support for STT_GNU_IFUNC.
+
 ENUM
   BFD_RELOC_ARM_IMMEDIATE
 ENUMX
@@ -3929,6 +4001,14 @@ ENUMX
   BFD_RELOC_C6000_PREL31
 ENUMX
   BFD_RELOC_C6000_COPY
+ENUMX
+  BFD_RELOC_C6000_JUMP_SLOT
+ENUMX
+  BFD_RELOC_C6000_EHTYPE
+ENUMX
+  BFD_RELOC_C6000_PCR_H16
+ENUMX
+  BFD_RELOC_C6000_PCR_L16
 ENUMX
   BFD_RELOC_C6000_ALIGN
 ENUMX
@@ -5538,6 +5618,348 @@ ENUMDOC
   This is used to tell the dynamic linker to copy the value out of
   the dynamic object into the runtime process image.
 
+ENUM
+  BFD_RELOC_TILEPRO_COPY
+ENUMX
+  BFD_RELOC_TILEPRO_GLOB_DAT
+ENUMX
+  BFD_RELOC_TILEPRO_JMP_SLOT
+ENUMX
+  BFD_RELOC_TILEPRO_RELATIVE
+ENUMX
+  BFD_RELOC_TILEPRO_BROFF_X1
+ENUMX
+  BFD_RELOC_TILEPRO_JOFFLONG_X1
+ENUMX
+  BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_X0
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_Y0
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_X1
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_Y1
+ENUMX
+  BFD_RELOC_TILEPRO_DEST_IMM8_X1
+ENUMX
+  BFD_RELOC_TILEPRO_MT_IMM15_X1
+ENUMX
+  BFD_RELOC_TILEPRO_MF_IMM15_X1
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_GOT
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_GOT
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA
+ENUMX
+  BFD_RELOC_TILEPRO_MMSTART_X0
+ENUMX
+  BFD_RELOC_TILEPRO_MMEND_X0
+ENUMX
+  BFD_RELOC_TILEPRO_MMSTART_X1
+ENUMX
+  BFD_RELOC_TILEPRO_MMEND_X1
+ENUMX
+  BFD_RELOC_TILEPRO_SHAMT_X0
+ENUMX
+  BFD_RELOC_TILEPRO_SHAMT_X1
+ENUMX
+  BFD_RELOC_TILEPRO_SHAMT_Y0
+ENUMX
+  BFD_RELOC_TILEPRO_SHAMT_Y1
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA
+ENUMX
+  BFD_RELOC_TILEPRO_TLS_DTPMOD32
+ENUMX
+  BFD_RELOC_TILEPRO_TLS_DTPOFF32
+ENUMX
+  BFD_RELOC_TILEPRO_TLS_TPOFF32
+ENUMDOC
+  Tilera TILEPro Relocations.
+
+ENUM
+  BFD_RELOC_TILEGX_HW0
+ENUMX
+  BFD_RELOC_TILEGX_HW1
+ENUMX
+  BFD_RELOC_TILEGX_HW2
+ENUMX
+  BFD_RELOC_TILEGX_HW3
+ENUMX
+  BFD_RELOC_TILEGX_HW0_LAST
+ENUMX
+  BFD_RELOC_TILEGX_HW1_LAST
+ENUMX
+  BFD_RELOC_TILEGX_HW2_LAST
+ENUMX
+  BFD_RELOC_TILEGX_COPY
+ENUMX
+  BFD_RELOC_TILEGX_GLOB_DAT
+ENUMX
+  BFD_RELOC_TILEGX_JMP_SLOT
+ENUMX
+  BFD_RELOC_TILEGX_RELATIVE
+ENUMX
+  BFD_RELOC_TILEGX_BROFF_X1
+ENUMX
+  BFD_RELOC_TILEGX_JUMPOFF_X1
+ENUMX
+  BFD_RELOC_TILEGX_JUMPOFF_X1_PLT
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X0
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y0
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X1
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y1
+ENUMX
+  BFD_RELOC_TILEGX_DEST_IMM8_X1
+ENUMX
+  BFD_RELOC_TILEGX_MT_IMM14_X1
+ENUMX
+  BFD_RELOC_TILEGX_MF_IMM14_X1
+ENUMX
+  BFD_RELOC_TILEGX_MMSTART_X0
+ENUMX
+  BFD_RELOC_TILEGX_MMEND_X0
+ENUMX
+  BFD_RELOC_TILEGX_SHAMT_X0
+ENUMX
+  BFD_RELOC_TILEGX_SHAMT_X1
+ENUMX
+  BFD_RELOC_TILEGX_SHAMT_Y0
+ENUMX
+  BFD_RELOC_TILEGX_SHAMT_Y1
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW3
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW3
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE
+ENUMX
+  BFD_RELOC_TILEGX_TLS_DTPMOD64
+ENUMX
+  BFD_RELOC_TILEGX_TLS_DTPOFF64
+ENUMX
+  BFD_RELOC_TILEGX_TLS_TPOFF64
+ENUMX
+  BFD_RELOC_TILEGX_TLS_DTPMOD32
+ENUMX
+  BFD_RELOC_TILEGX_TLS_DTPOFF32
+ENUMX
+  BFD_RELOC_TILEGX_TLS_TPOFF32
+ENUMDOC
+  Tilera TILE-Gx Relocations.
+
 
 ENDSENUM
   BFD_RELOC_UNUSED
@@ -5687,6 +6109,30 @@ bfd_generic_gc_sections (bfd *abfd ATTRIBUTE_UNUSED,
   return TRUE;
 }
 
+/*
+INTERNAL_FUNCTION
+       bfd_generic_lookup_section_flags
+
+SYNOPSIS
+       void bfd_generic_lookup_section_flags
+         (struct bfd_link_info *, struct flag_info *);
+
+DESCRIPTION
+       Provides default handling for section flags lookup
+       -- i.e., does nothing.
+*/
+
+void
+bfd_generic_lookup_section_flags (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+                                 struct flag_info *finfo) 
+{
+  if (finfo != NULL)
+    {
+      (*_bfd_error_handler) (_("INPUT_SECTION_FLAGS are not supported.\n"));
+      return;
+    }
+}
+
 /*
 INTERNAL_FUNCTION
        bfd_generic_merge_sections