| Index: bfd/reloc.c
|
| diff --git a/bfd/reloc.c b/bfd/reloc.c
|
| index e0b5f620ea9c1a1957c9cdff2cf5f72f08f4935c..19c1f96a275132f35210653937b3f6aa682d04a4 100644
|
| --- a/bfd/reloc.c
|
| +++ b/bfd/reloc.c
|
| @@ -1,6 +1,7 @@
|
| /* 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, 2011
|
| + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
|
| + 2012
|
| Free Software Foundation, Inc.
|
| Written by Cygnus Support.
|
|
|
| @@ -1942,6 +1943,14 @@ ENUMX
|
| BFD_RELOC_SPARC_L44
|
| ENUMX
|
| BFD_RELOC_SPARC_REGISTER
|
| +ENUMX
|
| + BFD_RELOC_SPARC_H34
|
| +ENUMX
|
| + BFD_RELOC_SPARC_SIZE32
|
| +ENUMX
|
| + BFD_RELOC_SPARC_SIZE64
|
| +ENUMX
|
| + BFD_RELOC_SPARC_WDISP10
|
| ENUMDOC
|
| SPARC64 relocations
|
|
|
| @@ -2247,6 +2256,23 @@ ENUMDOC
|
| MIPS16 low 16 bits.
|
|
|
| ENUM
|
| + BFD_RELOC_MIPS16_TLS_GD
|
| +ENUMX
|
| + BFD_RELOC_MIPS16_TLS_LDM
|
| +ENUMX
|
| + BFD_RELOC_MIPS16_TLS_DTPREL_HI16
|
| +ENUMX
|
| + BFD_RELOC_MIPS16_TLS_DTPREL_LO16
|
| +ENUMX
|
| + BFD_RELOC_MIPS16_TLS_GOTTPREL
|
| +ENUMX
|
| + BFD_RELOC_MIPS16_TLS_TPREL_HI16
|
| +ENUMX
|
| + BFD_RELOC_MIPS16_TLS_TPREL_LO16
|
| +ENUMDOC
|
| + MIPS16 TLS relocations
|
| +
|
| +ENUM
|
| BFD_RELOC_MIPS_LITERAL
|
| ENUMX
|
| BFD_RELOC_MICROMIPS_LITERAL
|
| @@ -2530,6 +2556,36 @@ ENUMDOC
|
| The addend of this reloc is an alignment power that must
|
| be honoured at the offset's location, regardless of linker
|
| relaxation.
|
| +ENUM
|
| + BFD_RELOC_MN10300_TLS_GD
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_LD
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_LDO
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_GOTIE
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_IE
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_LE
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_DTPMOD
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_DTPOFF
|
| +ENUMX
|
| + BFD_RELOC_MN10300_TLS_TPOFF
|
| +ENUMDOC
|
| + Various TLS-related relocations.
|
| +ENUM
|
| + BFD_RELOC_MN10300_32_PCREL
|
| +ENUMDOC
|
| + This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
|
| + instruction.
|
| +ENUM
|
| + BFD_RELOC_MN10300_16_PCREL
|
| +ENUMDOC
|
| + This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
|
| + instruction.
|
| COMMENT
|
|
|
| ENUM
|
| @@ -2750,6 +2806,40 @@ ENUMX
|
| ENUMX
|
| BFD_RELOC_PPC_EMB_RELSDA
|
| ENUMX
|
| + BFD_RELOC_PPC_VLE_REL8
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_REL15
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_REL24
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_LO16A
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_LO16D
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_HI16A
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_HI16D
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_HA16A
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_HA16D
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDA21
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDA21_LO
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDAREL_LO16A
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDAREL_LO16D
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDAREL_HI16A
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDAREL_HI16D
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDAREL_HA16A
|
| +ENUMX
|
| + BFD_RELOC_PPC_VLE_SDAREL_HA16D
|
| +ENUMX
|
| BFD_RELOC_PPC64_HIGHER
|
| ENUMX
|
| BFD_RELOC_PPC64_HIGHER_S
|
| @@ -3904,16 +3994,6 @@ ENUM
|
| BFD_RELOC_V850_DATA
|
| ENUMDOC
|
| start data in text.
|
| -ENUM
|
| - BFD_RELOC_MN10300_32_PCREL
|
| -ENUMDOC
|
| - This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
|
| - instruction.
|
| -ENUM
|
| - BFD_RELOC_MN10300_16_PCREL
|
| -ENUMDOC
|
| - This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
|
| - instruction.
|
|
|
| ENUM
|
| BFD_RELOC_TIC30_LDP
|
| @@ -4314,6 +4394,21 @@ ENUM
|
| ENUMDOC
|
| This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
|
| instructions
|
| +ENUM
|
| + BFD_RELOC_AVR_8_LO
|
| +ENUMDOC
|
| + This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
|
| + in .byte lo8(symbol)
|
| +ENUM
|
| + BFD_RELOC_AVR_8_HI
|
| +ENUMDOC
|
| + This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
|
| + in .byte hi8(symbol)
|
| +ENUM
|
| + BFD_RELOC_AVR_8_HLO
|
| +ENUMDOC
|
| + This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
|
| + in .byte hlo8(symbol)
|
|
|
| ENUM
|
| BFD_RELOC_RL78_NEG8
|
| @@ -4599,6 +4694,11 @@ ENUMDOC
|
| Long displacement extension.
|
|
|
| ENUM
|
| + BFD_RELOC_390_IRELATIVE
|
| +ENUMDOC
|
| + STT_GNU_IFUNC relocation.
|
| +
|
| +ENUM
|
| BFD_RELOC_SCORE_GPREL15
|
| ENUMDOC
|
| Score relocations
|
| @@ -4933,7 +5033,101 @@ ENUM
|
| ENUMDOC
|
| Motorola 68HC12 reloc.
|
| This is the 5 bits of a value.
|
| -
|
| +ENUM
|
| + BFD_RELOC_XGATE_RL_JUMP
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This reloc marks the beginning of a bra/jal instruction.
|
| +ENUM
|
| + BFD_RELOC_XGATE_RL_GROUP
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This reloc marks a group of several instructions that gcc generates
|
| + and for which the linker relaxation pass can modify and/or remove
|
| + some of them.
|
| +ENUM
|
| + BFD_RELOC_XGATE_LO16
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is the 16-bit lower part of an address. It is used for the '16-bit'
|
| + instructions.
|
| +ENUM
|
| + BFD_RELOC_XGATE_GPAGE
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| +ENUM
|
| + BFD_RELOC_XGATE_24
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| +ENUM
|
| + BFD_RELOC_XGATE_PCREL_9
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is a 9-bit pc-relative reloc.
|
| +ENUM
|
| + BFD_RELOC_XGATE_PCREL_10
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is a 10-bit pc-relative reloc.
|
| +ENUM
|
| + BFD_RELOC_XGATE_IMM8_LO
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is the 16-bit lower part of an address. It is used for the '16-bit'
|
| + instructions.
|
| +ENUM
|
| + BFD_RELOC_XGATE_IMM8_HI
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is the 16-bit higher part of an address. It is used for the '16-bit'
|
| + instructions.
|
| +ENUM
|
| + BFD_RELOC_XGATE_IMM3
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is a 3-bit pc-relative reloc.
|
| +ENUM
|
| + BFD_RELOC_XGATE_IMM4
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is a 4-bit pc-relative reloc.
|
| +ENUM
|
| + BFD_RELOC_XGATE_IMM5
|
| +ENUMDOC
|
| + Freescale XGATE reloc.
|
| + This is a 5-bit pc-relative reloc.
|
| +ENUM
|
| + BFD_RELOC_M68HC12_9B
|
| +ENUMDOC
|
| + Motorola 68HC12 reloc.
|
| + This is the 9 bits of a value.
|
| +ENUM
|
| + BFD_RELOC_M68HC12_16B
|
| +ENUMDOC
|
| + Motorola 68HC12 reloc.
|
| + This is the 16 bits of a value.
|
| +ENUM
|
| + BFD_RELOC_M68HC12_9_PCREL
|
| +ENUMDOC
|
| + Motorola 68HC12/XGATE reloc.
|
| + This is a PCREL9 branch.
|
| +ENUM
|
| + BFD_RELOC_M68HC12_10_PCREL
|
| +ENUMDOC
|
| + Motorola 68HC12/XGATE reloc.
|
| + This is a PCREL10 branch.
|
| +ENUM
|
| + BFD_RELOC_M68HC12_LO8XG
|
| +ENUMDOC
|
| + Motorola 68HC12/XGATE reloc.
|
| + This is the 8 bit low part of an absolute address and immediately precedes
|
| + a matching HI8XG part.
|
| +ENUM
|
| + BFD_RELOC_M68HC12_HI8XG
|
| +ENUMDOC
|
| + Motorola 68HC12/XGATE reloc.
|
| + This is the 8 bit high part of an absolute address and immediately follows
|
| + a matching LO8XG part.
|
| ENUM
|
| BFD_RELOC_16C_NUM08
|
| ENUMX
|
| @@ -5577,6 +5771,10 @@ ENUMDOC
|
| Difference between two section addreses. Must be followed by a
|
| BFD_RELOC_MACH_O_PAIR.
|
| ENUM
|
| + BFD_RELOC_MACH_O_LOCAL_SECTDIFF
|
| +ENUMDOC
|
| + Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.
|
| +ENUM
|
| BFD_RELOC_MACH_O_PAIR
|
| ENUMDOC
|
| Pair of relocation. Contains the first symbol.
|
| @@ -5778,6 +5976,18 @@ ENUMX
|
| ENUMX
|
| BFD_RELOC_TILEPRO_SHAMT_Y1
|
| ENUMX
|
| + BFD_RELOC_TILEPRO_TLS_GD_CALL
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_TLS_IE_LOAD
|
| +ENUMX
|
| BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
|
| ENUMX
|
| BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
|
| @@ -5815,6 +6025,22 @@ ENUMX
|
| BFD_RELOC_TILEPRO_TLS_DTPOFF32
|
| ENUMX
|
| BFD_RELOC_TILEPRO_TLS_TPOFF32
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
|
| +ENUMX
|
| + BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
|
| ENUMDOC
|
| Tilera TILEPro Relocations.
|
|
|
| @@ -5933,18 +6159,6 @@ ENUMX
|
| 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
|
| @@ -5953,25 +6167,21 @@ ENUMX
|
| 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
|
| + BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
|
| ENUMX
|
| - BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD
|
| + BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
|
| ENUMX
|
| - BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD
|
| + BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
|
| ENUMX
|
| - BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD
|
| + BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
|
| ENUMX
|
| - BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD
|
| + BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
|
| ENUMX
|
| - BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD
|
| + BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
|
| ENUMX
|
| BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
|
| ENUMX
|
| @@ -5981,26 +6191,10 @@ ENUMX
|
| 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
|
| @@ -6009,10 +6203,6 @@ ENUMX
|
| 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
|
| @@ -6024,6 +6214,26 @@ ENUMX
|
| BFD_RELOC_TILEGX_TLS_DTPOFF32
|
| ENUMX
|
| BFD_RELOC_TILEGX_TLS_TPOFF32
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_TLS_GD_CALL
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_TLS_IE_LOAD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
|
| +ENUMX
|
| + BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
|
| ENUMDOC
|
| Tilera TILE-Gx Relocations.
|
|
|
| @@ -6210,23 +6420,26 @@ INTERNAL_FUNCTION
|
| bfd_generic_lookup_section_flags
|
|
|
| SYNOPSIS
|
| - void bfd_generic_lookup_section_flags
|
| - (struct bfd_link_info *, struct flag_info *);
|
| + bfd_boolean bfd_generic_lookup_section_flags
|
| + (struct bfd_link_info *, struct flag_info *, asection *);
|
|
|
| DESCRIPTION
|
| Provides default handling for section flags lookup
|
| -- i.e., does nothing.
|
| + Returns FALSE if the section should be omitted, otherwise TRUE.
|
| */
|
|
|
| -void
|
| +bfd_boolean
|
| bfd_generic_lookup_section_flags (struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
| - struct flag_info *finfo)
|
| + struct flag_info *flaginfo,
|
| + asection *section ATTRIBUTE_UNUSED)
|
| {
|
| - if (finfo != NULL)
|
| + if (flaginfo != NULL)
|
| {
|
| (*_bfd_error_handler) (_("INPUT_SECTION_FLAGS are not supported.\n"));
|
| - return;
|
| + return FALSE;
|
| }
|
| + return TRUE;
|
| }
|
|
|
| /*
|
| @@ -6314,7 +6527,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
|
| bfd_reloc_status_type r;
|
|
|
| symbol = *(*parent)->sym_ptr_ptr;
|
| - if (symbol->section && elf_discarded_section (symbol->section))
|
| + if (symbol->section && discarded_section (symbol->section))
|
| {
|
| bfd_byte *p;
|
| static reloc_howto_type none_howto
|
| @@ -6324,7 +6537,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
|
| p = data + (*parent)->address * bfd_octets_per_byte (input_bfd);
|
| _bfd_clear_contents ((*parent)->howto, input_bfd, input_section,
|
| p);
|
| - (*parent)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
|
| + (*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
|
| (*parent)->addend = 0;
|
| (*parent)->howto = &none_howto;
|
| r = bfd_reloc_ok;
|
| @@ -6373,6 +6586,15 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
|
| goto error_return;
|
| break;
|
| case bfd_reloc_outofrange:
|
| + /* PR ld/13730:
|
| + This error can result when processing some partially
|
| + complete binaries. Do not abort, but issue an error
|
| + message instead. */
|
| + link_info->callbacks->einfo
|
| + (_("%X%P: %B(%A): relocation \"%R\" goes out of range\n"),
|
| + abfd, input_section, * parent);
|
| + goto error_return;
|
| +
|
| default:
|
| abort ();
|
| break;
|
|
|