X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf32-tilepro.c;h=832561d2606040e1cdafd21d4d4a4427da2c5f67;hb=a8eab7c6d529ddd248ff5243bb22e9346196e376;hp=294ef859e02529dc59b8899e188003380f7baca9;hpb=3bf083ed23b1337341129b810ed5da29ba8207f9;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c index 294ef859e0..832561d260 100644 --- a/bfd/elf32-tilepro.c +++ b/bfd/elf32-tilepro.c @@ -1,5 +1,5 @@ /* TILEPro-specific support for 32-bit ELF. - Copyright (C) 2011-2017 Free Software Foundation, Inc. + Copyright (C) 2011-2019 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -264,7 +264,7 @@ static reloc_howto_type tilepro_elf_howto_table [] = FALSE, /* partial_inplace */ 0, /* src_mask */ -1, /* dst_mask */ - TRUE), /* pcrel_offset */ + TRUE), /* pcrel_offset */ HOWTO (R_TILEPRO_JOFFLONG_X1_PLT, /* type */ TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */ @@ -278,17 +278,17 @@ static reloc_howto_type tilepro_elf_howto_table [] = FALSE, /* partial_inplace */ 0, /* src_mask */ -1, /* dst_mask */ - TRUE), /* pcrel_offset */ + TRUE), /* pcrel_offset */ #define TILEPRO_IMM_HOWTO(name, size, bitsize) \ HOWTO (name, 0, size, bitsize, FALSE, 0, \ - complain_overflow_signed, bfd_elf_generic_reloc, \ - #name, FALSE, 0, -1, FALSE) + complain_overflow_signed, bfd_elf_generic_reloc, \ + #name, FALSE, 0, -1, FALSE) #define TILEPRO_UIMM_HOWTO(name, size, bitsize) \ HOWTO (name, 0, size, bitsize, FALSE, 0, \ - complain_overflow_unsigned, bfd_elf_generic_reloc, \ - #name, FALSE, 0, -1, FALSE) + complain_overflow_unsigned, bfd_elf_generic_reloc, \ + #name, FALSE, 0, -1, FALSE) TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0, 0, 8), TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0, 0, 8), @@ -301,8 +301,8 @@ static reloc_howto_type tilepro_elf_howto_table [] = #define TILEPRO_IMM16_HOWTO(name, rshift) \ HOWTO (name, rshift, 1, 16, FALSE, 0, \ - complain_overflow_dont, bfd_elf_generic_reloc, \ - #name, FALSE, 0, 0xffff, FALSE) + complain_overflow_dont, bfd_elf_generic_reloc, \ + #name, FALSE, 0, 0xffff, FALSE) TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_LO, 0), TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_LO, 0), @@ -343,8 +343,8 @@ static reloc_howto_type tilepro_elf_howto_table [] = #define TILEPRO_IMM16_HOWTO_PCREL(name, rshift) \ HOWTO (name, rshift, 1, 16, TRUE, 0, \ - complain_overflow_dont, bfd_elf_generic_reloc, \ - #name, FALSE, 0, 0xffff, TRUE) + complain_overflow_dont, bfd_elf_generic_reloc, \ + #name, FALSE, 0, 0xffff, TRUE) TILEPRO_IMM16_HOWTO_PCREL (R_TILEPRO_IMM16_X0_LO_PCREL, 0), TILEPRO_IMM16_HOWTO_PCREL (R_TILEPRO_IMM16_X1_LO_PCREL, 0), @@ -393,7 +393,7 @@ static reloc_howto_type tilepro_elf_howto_table [] = FALSE, /* partial_inplace */ 0, /* src_mask */ -1, /* dst_mask */ - TRUE), /* pcrel_offset */ + TRUE), /* pcrel_offset */ TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD, 0, 8), TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD, 0, 8), @@ -477,14 +477,14 @@ static reloc_howto_type tilepro_elf_howto_table [] = /* These are common with the Solaris TLS implementation. */ HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32", - FALSE, 0, 0, TRUE), + bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32", + FALSE, 0, 0, TRUE), HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, - bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32", - FALSE, 0, 0xFFFFFFFF, TRUE), + bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32", + FALSE, 0, 0xFFFFFFFF, TRUE), HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32", - FALSE, 0, 0, TRUE), + bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32", + FALSE, 0, 0, TRUE), HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */ 0, /* rightshift */ @@ -526,33 +526,33 @@ static reloc_howto_type tilepro_elf_howto_table2 [] = { /* GNU extension to record C++ vtable hierarchy */ HOWTO (R_TILEPRO_GNU_VTINHERIT, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 0, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "R_TILEPRO_GNU_VTINHERIT", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ - 0, /* dst_mask */ - FALSE), /* pcrel_offset */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + NULL, /* special_function */ + "R_TILEPRO_GNU_VTINHERIT", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ /* GNU extension to record C++ vtable member usage */ - HOWTO (R_TILEPRO_GNU_VTENTRY, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 0, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - _bfd_elf_rel_vtable_reloc_fn, /* special_function */ - "R_TILEPRO_GNU_VTENTRY", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ - 0, /* dst_mask */ - FALSE), /* pcrel_offset */ + HOWTO (R_TILEPRO_GNU_VTENTRY, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + _bfd_elf_rel_vtable_reloc_fn, /* special_function */ + "R_TILEPRO_GNU_VTENTRY", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ }; @@ -561,8 +561,8 @@ static reloc_howto_type tilepro_elf_howto_table2 [] = typedef struct tilepro_reloc_map { bfd_reloc_code_real_type bfd_reloc_val; - unsigned int tilepro_reloc_val; - reloc_howto_type * table; + unsigned int tilepro_reloc_val; + reloc_howto_type * table; } reloc_map; static const reloc_map tilepro_reloc_map [] = @@ -571,34 +571,34 @@ static const reloc_map tilepro_reloc_map [] = { bfd, tilepro, tilepro_elf_howto_table }, /* Standard relocations. */ - TH_REMAP (BFD_RELOC_NONE, R_TILEPRO_NONE) - TH_REMAP (BFD_RELOC_32, R_TILEPRO_32) - TH_REMAP (BFD_RELOC_16, R_TILEPRO_16) - TH_REMAP (BFD_RELOC_8, R_TILEPRO_8) - TH_REMAP (BFD_RELOC_32_PCREL, R_TILEPRO_32_PCREL) - TH_REMAP (BFD_RELOC_16_PCREL, R_TILEPRO_16_PCREL) - TH_REMAP (BFD_RELOC_8_PCREL, R_TILEPRO_8_PCREL) - TH_REMAP (BFD_RELOC_LO16, R_TILEPRO_LO16) - TH_REMAP (BFD_RELOC_HI16, R_TILEPRO_HI16) - TH_REMAP (BFD_RELOC_HI16_S, R_TILEPRO_HA16) + TH_REMAP (BFD_RELOC_NONE, R_TILEPRO_NONE) + TH_REMAP (BFD_RELOC_32, R_TILEPRO_32) + TH_REMAP (BFD_RELOC_16, R_TILEPRO_16) + TH_REMAP (BFD_RELOC_8, R_TILEPRO_8) + TH_REMAP (BFD_RELOC_32_PCREL, R_TILEPRO_32_PCREL) + TH_REMAP (BFD_RELOC_16_PCREL, R_TILEPRO_16_PCREL) + TH_REMAP (BFD_RELOC_8_PCREL, R_TILEPRO_8_PCREL) + TH_REMAP (BFD_RELOC_LO16, R_TILEPRO_LO16) + TH_REMAP (BFD_RELOC_HI16, R_TILEPRO_HI16) + TH_REMAP (BFD_RELOC_HI16_S, R_TILEPRO_HA16) /* Custom relocations. */ - TH_REMAP (BFD_RELOC_TILEPRO_COPY, R_TILEPRO_COPY) - TH_REMAP (BFD_RELOC_TILEPRO_GLOB_DAT, R_TILEPRO_GLOB_DAT) - TH_REMAP (BFD_RELOC_TILEPRO_JMP_SLOT, R_TILEPRO_JMP_SLOT) - TH_REMAP (BFD_RELOC_TILEPRO_RELATIVE, R_TILEPRO_RELATIVE) - TH_REMAP (BFD_RELOC_TILEPRO_BROFF_X1, R_TILEPRO_BROFF_X1) + TH_REMAP (BFD_RELOC_TILEPRO_COPY, R_TILEPRO_COPY) + TH_REMAP (BFD_RELOC_TILEPRO_GLOB_DAT, R_TILEPRO_GLOB_DAT) + TH_REMAP (BFD_RELOC_TILEPRO_JMP_SLOT, R_TILEPRO_JMP_SLOT) + TH_REMAP (BFD_RELOC_TILEPRO_RELATIVE, R_TILEPRO_RELATIVE) + TH_REMAP (BFD_RELOC_TILEPRO_BROFF_X1, R_TILEPRO_BROFF_X1) TH_REMAP (BFD_RELOC_TILEPRO_JOFFLONG_X1, R_TILEPRO_JOFFLONG_X1) TH_REMAP (BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT, R_TILEPRO_JOFFLONG_X1_PLT) - TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X0, R_TILEPRO_IMM8_X0) - TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y0, R_TILEPRO_IMM8_Y0) - TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X1, R_TILEPRO_IMM8_X1) - TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y1, R_TILEPRO_IMM8_Y1) + TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X0, R_TILEPRO_IMM8_X0) + TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y0, R_TILEPRO_IMM8_Y0) + TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X1, R_TILEPRO_IMM8_X1) + TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y1, R_TILEPRO_IMM8_Y1) TH_REMAP (BFD_RELOC_TILEPRO_DEST_IMM8_X1, R_TILEPRO_DEST_IMM8_X1) TH_REMAP (BFD_RELOC_TILEPRO_MT_IMM15_X1, R_TILEPRO_MT_IMM15_X1) TH_REMAP (BFD_RELOC_TILEPRO_MF_IMM15_X1, R_TILEPRO_MF_IMM15_X1) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0, R_TILEPRO_IMM16_X0) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1, R_TILEPRO_IMM16_X1) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0, R_TILEPRO_IMM16_X0) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1, R_TILEPRO_IMM16_X1) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_LO, R_TILEPRO_IMM16_X0_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_LO, R_TILEPRO_IMM16_X1_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_HI, R_TILEPRO_IMM16_X0_HI) @@ -606,8 +606,8 @@ static const reloc_map tilepro_reloc_map [] = TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_HA, R_TILEPRO_IMM16_X0_HA) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_HA, R_TILEPRO_IMM16_X1_HA) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_PCREL, R_TILEPRO_IMM16_X0_PCREL) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_PCREL, R_TILEPRO_IMM16_X1_PCREL) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_PCREL, R_TILEPRO_IMM16_X0_PCREL) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_PCREL, R_TILEPRO_IMM16_X1_PCREL) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL, R_TILEPRO_IMM16_X0_LO_PCREL) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL, R_TILEPRO_IMM16_X1_LO_PCREL) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL, R_TILEPRO_IMM16_X0_HI_PCREL) @@ -625,23 +625,23 @@ static const reloc_map tilepro_reloc_map [] = TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA, R_TILEPRO_IMM16_X1_GOT_HA) TH_REMAP (BFD_RELOC_TILEPRO_MMSTART_X0, R_TILEPRO_MMSTART_X0) - TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X0, R_TILEPRO_MMEND_X0) + TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X0, R_TILEPRO_MMEND_X0) TH_REMAP (BFD_RELOC_TILEPRO_MMSTART_X1, R_TILEPRO_MMSTART_X1) - TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X1, R_TILEPRO_MMEND_X1) - TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X0, R_TILEPRO_SHAMT_X0) - TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X1, R_TILEPRO_SHAMT_X1) - TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y0, R_TILEPRO_SHAMT_Y0) - TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y1, R_TILEPRO_SHAMT_Y1) + TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X1, R_TILEPRO_MMEND_X1) + TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X0, R_TILEPRO_SHAMT_X0) + TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X1, R_TILEPRO_SHAMT_X1) + TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y0, R_TILEPRO_SHAMT_Y0) + TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y1, R_TILEPRO_SHAMT_Y1) - TH_REMAP (BFD_RELOC_TILEPRO_TLS_GD_CALL, R_TILEPRO_TLS_GD_CALL) + TH_REMAP (BFD_RELOC_TILEPRO_TLS_GD_CALL, R_TILEPRO_TLS_GD_CALL) TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD, R_TILEPRO_IMM8_X0_TLS_GD_ADD) TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD, R_TILEPRO_IMM8_X1_TLS_GD_ADD) TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD, R_TILEPRO_IMM8_Y0_TLS_GD_ADD) TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD, R_TILEPRO_IMM8_Y1_TLS_GD_ADD) - TH_REMAP (BFD_RELOC_TILEPRO_TLS_IE_LOAD, R_TILEPRO_TLS_IE_LOAD) + TH_REMAP (BFD_RELOC_TILEPRO_TLS_IE_LOAD, R_TILEPRO_TLS_IE_LOAD) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD, R_TILEPRO_IMM16_X0_TLS_GD) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD, R_TILEPRO_IMM16_X1_TLS_GD) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD, R_TILEPRO_IMM16_X0_TLS_GD) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD, R_TILEPRO_IMM16_X1_TLS_GD) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO, R_TILEPRO_IMM16_X0_TLS_GD_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO, R_TILEPRO_IMM16_X1_TLS_GD_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI, R_TILEPRO_IMM16_X0_TLS_GD_HI) @@ -649,8 +649,8 @@ static const reloc_map tilepro_reloc_map [] = TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA, R_TILEPRO_IMM16_X0_TLS_GD_HA) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA, R_TILEPRO_IMM16_X1_TLS_GD_HA) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE, R_TILEPRO_IMM16_X0_TLS_IE) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE, R_TILEPRO_IMM16_X1_TLS_IE) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE, R_TILEPRO_IMM16_X0_TLS_IE) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE, R_TILEPRO_IMM16_X1_TLS_IE) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO, R_TILEPRO_IMM16_X0_TLS_IE_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO, R_TILEPRO_IMM16_X1_TLS_IE_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI, R_TILEPRO_IMM16_X0_TLS_IE_HI) @@ -662,8 +662,8 @@ static const reloc_map tilepro_reloc_map [] = TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPOFF32, R_TILEPRO_TLS_DTPOFF32) TH_REMAP (BFD_RELOC_TILEPRO_TLS_TPOFF32, R_TILEPRO_TLS_TPOFF32) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE, R_TILEPRO_IMM16_X0_TLS_LE) - TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE, R_TILEPRO_IMM16_X1_TLS_LE) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE, R_TILEPRO_IMM16_X0_TLS_LE) + TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE, R_TILEPRO_IMM16_X1_TLS_LE) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO, R_TILEPRO_IMM16_X0_TLS_LE_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO, R_TILEPRO_IMM16_X1_TLS_LE_LO) TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI, R_TILEPRO_IMM16_X0_TLS_LE_HI) @@ -746,7 +746,7 @@ struct tilepro_elf_link_hash_table static reloc_howto_type * tilepro_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, - bfd_reloc_code_real_type code) + bfd_reloc_code_real_type code) { unsigned int i; @@ -772,10 +772,10 @@ tilepro_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, for (i = 0; i < (sizeof (tilepro_elf_howto_table) - / sizeof (tilepro_elf_howto_table[0])); + / sizeof (tilepro_elf_howto_table[0])); i++) if (tilepro_elf_howto_table[i].name != NULL - && strcasecmp (tilepro_elf_howto_table[i].name, r_name) == 0) + && strcasecmp (tilepro_elf_howto_table[i].name, r_name) == 0) return &tilepro_elf_howto_table[i]; return NULL; @@ -783,21 +783,29 @@ tilepro_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, /* Set the howto pointer for an TILEPro ELF reloc. */ -static void +static bfd_boolean tilepro_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED, - arelent * cache_ptr, - Elf_Internal_Rela * dst) + arelent * cache_ptr, + Elf_Internal_Rela * dst) { unsigned int r_type = ELF32_R_TYPE (dst->r_info); if (r_type <= (unsigned int) R_TILEPRO_IMM16_X1_TLS_LE_HA) cache_ptr->howto = &tilepro_elf_howto_table [r_type]; else if (r_type - R_TILEPRO_GNU_VTINHERIT - <= (unsigned int) R_TILEPRO_GNU_VTENTRY) + <= ((unsigned int) R_TILEPRO_GNU_VTENTRY + - (unsigned int) R_TILEPRO_GNU_VTINHERIT)) cache_ptr->howto = &tilepro_elf_howto_table2 [r_type - R_TILEPRO_GNU_VTINHERIT]; else - abort (); + { + /* xgettext:c-format */ + _bfd_error_handler (_("%pB: unsupported relocation type %#x"), + abfd, r_type); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + return TRUE; } typedef tilepro_bundle_bits (*tilepro_create_func)(int); @@ -982,18 +990,18 @@ tilepro_elf_append_rela_32 (bfd *abfd, asection *s, Elf_Internal_Rela *rel) /* The procedure linkage table starts with the following header: { - rli r29, r29, 16 + rli r29, r29, 16 lwadd r28, r27, 4 } - lw r27, r27 + lw r27, r27 { - info 10 ## SP not offset, return PC in LR - jr r27 + info 10 ## SP not offset, return PC in LR + jr r27 } Subsequent entries are the following, jumping to the header at the end: - lnk r28 + lnk r28 1: { auli r28, r28, <_GLOBAL_OFFSET_TABLE_ - 1b + MY_GOT_OFFSET> @@ -1005,11 +1013,11 @@ tilepro_elf_append_rela_32 (bfd *abfd, asection *s, Elf_Internal_Rela *rel) } { auli r29, zero, MY_PLT_INDEX - lw r28, r28 + lw r28, r28 } { - info 10 ## SP not offset, return PC in LR - jr r28 + info 10 ## SP not offset, return PC in LR + jr r28 } We initially store MY_PLT_INDEX in the high bits so that we can use the all @@ -1155,8 +1163,8 @@ link_hash_newfunc (struct bfd_hash_entry *entry, if (entry == NULL) { entry = - bfd_hash_allocate (table, - sizeof (struct tilepro_elf_link_hash_entry)); + bfd_hash_allocate (table, + sizeof (struct tilepro_elf_link_hash_entry)); if (entry == NULL) return entry; } @@ -1468,7 +1476,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr)) { /* xgettext:c-format */ - _bfd_error_handler (_("%B: bad symbol index: %d"), + _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd, r_symndx); return FALSE; } @@ -1486,58 +1494,58 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, r_type = tilepro_elf_tls_transition (info, r_type, h == NULL); switch (r_type) { - case R_TILEPRO_IMM16_X0_TLS_LE: - case R_TILEPRO_IMM16_X1_TLS_LE: - case R_TILEPRO_IMM16_X0_TLS_LE_LO: - case R_TILEPRO_IMM16_X1_TLS_LE_LO: - case R_TILEPRO_IMM16_X0_TLS_LE_HI: - case R_TILEPRO_IMM16_X1_TLS_LE_HI: - case R_TILEPRO_IMM16_X0_TLS_LE_HA: - case R_TILEPRO_IMM16_X1_TLS_LE_HA: + case R_TILEPRO_IMM16_X0_TLS_LE: + case R_TILEPRO_IMM16_X1_TLS_LE: + case R_TILEPRO_IMM16_X0_TLS_LE_LO: + case R_TILEPRO_IMM16_X1_TLS_LE_LO: + case R_TILEPRO_IMM16_X0_TLS_LE_HI: + case R_TILEPRO_IMM16_X1_TLS_LE_HI: + case R_TILEPRO_IMM16_X0_TLS_LE_HA: + case R_TILEPRO_IMM16_X1_TLS_LE_HA: if (!bfd_link_executable (info)) goto r_tilepro_plt32; break; - case R_TILEPRO_IMM16_X0_TLS_GD: - case R_TILEPRO_IMM16_X1_TLS_GD: - case R_TILEPRO_IMM16_X0_TLS_GD_LO: - case R_TILEPRO_IMM16_X1_TLS_GD_LO: - case R_TILEPRO_IMM16_X0_TLS_GD_HI: - case R_TILEPRO_IMM16_X1_TLS_GD_HI: - case R_TILEPRO_IMM16_X0_TLS_GD_HA: - case R_TILEPRO_IMM16_X1_TLS_GD_HA: + case R_TILEPRO_IMM16_X0_TLS_GD: + case R_TILEPRO_IMM16_X1_TLS_GD: + case R_TILEPRO_IMM16_X0_TLS_GD_LO: + case R_TILEPRO_IMM16_X1_TLS_GD_LO: + case R_TILEPRO_IMM16_X0_TLS_GD_HI: + case R_TILEPRO_IMM16_X1_TLS_GD_HI: + case R_TILEPRO_IMM16_X0_TLS_GD_HA: + case R_TILEPRO_IMM16_X1_TLS_GD_HA: BFD_ASSERT (bfd_link_pic (info)); tls_type = GOT_TLS_GD; - goto have_got_reference; - - case R_TILEPRO_IMM16_X0_TLS_IE: - case R_TILEPRO_IMM16_X1_TLS_IE: - case R_TILEPRO_IMM16_X0_TLS_IE_LO: - case R_TILEPRO_IMM16_X1_TLS_IE_LO: - case R_TILEPRO_IMM16_X0_TLS_IE_HI: - case R_TILEPRO_IMM16_X1_TLS_IE_HI: - case R_TILEPRO_IMM16_X0_TLS_IE_HA: - case R_TILEPRO_IMM16_X1_TLS_IE_HA: - tls_type = GOT_TLS_IE; - if (!bfd_link_executable (info)) - info->flags |= DF_STATIC_TLS; - goto have_got_reference; - - case R_TILEPRO_IMM16_X0_GOT: - case R_TILEPRO_IMM16_X1_GOT: - case R_TILEPRO_IMM16_X0_GOT_LO: - case R_TILEPRO_IMM16_X1_GOT_LO: - case R_TILEPRO_IMM16_X0_GOT_HI: - case R_TILEPRO_IMM16_X1_GOT_HI: - case R_TILEPRO_IMM16_X0_GOT_HA: - case R_TILEPRO_IMM16_X1_GOT_HA: - tls_type = GOT_NORMAL; - /* Fall Through */ - - have_got_reference: + goto have_got_reference; + + case R_TILEPRO_IMM16_X0_TLS_IE: + case R_TILEPRO_IMM16_X1_TLS_IE: + case R_TILEPRO_IMM16_X0_TLS_IE_LO: + case R_TILEPRO_IMM16_X1_TLS_IE_LO: + case R_TILEPRO_IMM16_X0_TLS_IE_HI: + case R_TILEPRO_IMM16_X1_TLS_IE_HI: + case R_TILEPRO_IMM16_X0_TLS_IE_HA: + case R_TILEPRO_IMM16_X1_TLS_IE_HA: + tls_type = GOT_TLS_IE; + if (!bfd_link_executable (info)) + info->flags |= DF_STATIC_TLS; + goto have_got_reference; + + case R_TILEPRO_IMM16_X0_GOT: + case R_TILEPRO_IMM16_X1_GOT: + case R_TILEPRO_IMM16_X0_GOT_LO: + case R_TILEPRO_IMM16_X1_GOT_LO: + case R_TILEPRO_IMM16_X0_GOT_HI: + case R_TILEPRO_IMM16_X1_GOT_HI: + case R_TILEPRO_IMM16_X0_GOT_HA: + case R_TILEPRO_IMM16_X1_GOT_HA: + tls_type = GOT_NORMAL; + /* Fall Through */ + + have_got_reference: /* This symbol requires a global offset table entry. */ { - int old_tls_type; + int old_tls_type; if (h != NULL) { @@ -1581,7 +1589,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, { _bfd_error_handler /* xgettext:c-format */ - (_("%B: `%s' accessed both as normal and thread local symbol"), + (_("%pB: `%s' accessed both as normal and thread local symbol"), abfd, h ? h->root.root.string : ""); return FALSE; } @@ -1622,7 +1630,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; /* Fall through */ - case R_TILEPRO_JOFFLONG_X1_PLT: + case R_TILEPRO_JOFFLONG_X1_PLT: /* This symbol requires a procedure linkage table entry. We actually build the entry in adjust_dynamic_symbol, because this might be a case of linking PIC code without @@ -1630,23 +1638,23 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, need to generate a procedure linkage table after all. */ if (h != NULL) - { - h->needs_plt = 1; - h->plt.refcount += 1; - } + { + h->needs_plt = 1; + h->plt.refcount += 1; + } break; - case R_TILEPRO_32_PCREL: - case R_TILEPRO_16_PCREL: - case R_TILEPRO_8_PCREL: - case R_TILEPRO_IMM16_X0_PCREL: - case R_TILEPRO_IMM16_X1_PCREL: - case R_TILEPRO_IMM16_X0_LO_PCREL: - case R_TILEPRO_IMM16_X1_LO_PCREL: - case R_TILEPRO_IMM16_X0_HI_PCREL: - case R_TILEPRO_IMM16_X1_HI_PCREL: - case R_TILEPRO_IMM16_X0_HA_PCREL: - case R_TILEPRO_IMM16_X1_HA_PCREL: + case R_TILEPRO_32_PCREL: + case R_TILEPRO_16_PCREL: + case R_TILEPRO_8_PCREL: + case R_TILEPRO_IMM16_X0_PCREL: + case R_TILEPRO_IMM16_X1_PCREL: + case R_TILEPRO_IMM16_X0_LO_PCREL: + case R_TILEPRO_IMM16_X1_LO_PCREL: + case R_TILEPRO_IMM16_X0_HI_PCREL: + case R_TILEPRO_IMM16_X1_HI_PCREL: + case R_TILEPRO_IMM16_X0_HA_PCREL: + case R_TILEPRO_IMM16_X1_HA_PCREL: if (h != NULL) h->non_got_ref = 1; @@ -1655,43 +1663,43 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; /* Fall through. */ - case R_TILEPRO_32: - case R_TILEPRO_16: - case R_TILEPRO_8: - case R_TILEPRO_LO16: - case R_TILEPRO_HI16: - case R_TILEPRO_HA16: - case R_TILEPRO_COPY: - case R_TILEPRO_GLOB_DAT: - case R_TILEPRO_JMP_SLOT: - case R_TILEPRO_RELATIVE: - case R_TILEPRO_BROFF_X1: - case R_TILEPRO_JOFFLONG_X1: - case R_TILEPRO_IMM8_X0: - case R_TILEPRO_IMM8_Y0: - case R_TILEPRO_IMM8_X1: - case R_TILEPRO_IMM8_Y1: - case R_TILEPRO_DEST_IMM8_X1: - case R_TILEPRO_MT_IMM15_X1: - case R_TILEPRO_MF_IMM15_X1: - case R_TILEPRO_IMM16_X0: - case R_TILEPRO_IMM16_X1: - case R_TILEPRO_IMM16_X0_LO: - case R_TILEPRO_IMM16_X1_LO: - case R_TILEPRO_IMM16_X0_HI: - case R_TILEPRO_IMM16_X1_HI: - case R_TILEPRO_IMM16_X0_HA: - case R_TILEPRO_IMM16_X1_HA: - case R_TILEPRO_MMSTART_X0: - case R_TILEPRO_MMEND_X0: - case R_TILEPRO_MMSTART_X1: - case R_TILEPRO_MMEND_X1: - case R_TILEPRO_SHAMT_X0: - case R_TILEPRO_SHAMT_X1: - case R_TILEPRO_SHAMT_Y0: - case R_TILEPRO_SHAMT_Y1: + case R_TILEPRO_32: + case R_TILEPRO_16: + case R_TILEPRO_8: + case R_TILEPRO_LO16: + case R_TILEPRO_HI16: + case R_TILEPRO_HA16: + case R_TILEPRO_COPY: + case R_TILEPRO_GLOB_DAT: + case R_TILEPRO_JMP_SLOT: + case R_TILEPRO_RELATIVE: + case R_TILEPRO_BROFF_X1: + case R_TILEPRO_JOFFLONG_X1: + case R_TILEPRO_IMM8_X0: + case R_TILEPRO_IMM8_Y0: + case R_TILEPRO_IMM8_X1: + case R_TILEPRO_IMM8_Y1: + case R_TILEPRO_DEST_IMM8_X1: + case R_TILEPRO_MT_IMM15_X1: + case R_TILEPRO_MF_IMM15_X1: + case R_TILEPRO_IMM16_X0: + case R_TILEPRO_IMM16_X1: + case R_TILEPRO_IMM16_X0_LO: + case R_TILEPRO_IMM16_X1_LO: + case R_TILEPRO_IMM16_X0_HI: + case R_TILEPRO_IMM16_X1_HI: + case R_TILEPRO_IMM16_X0_HA: + case R_TILEPRO_IMM16_X1_HA: + case R_TILEPRO_MMSTART_X0: + case R_TILEPRO_MMEND_X0: + case R_TILEPRO_MMSTART_X1: + case R_TILEPRO_MMEND_X1: + case R_TILEPRO_SHAMT_X0: + case R_TILEPRO_SHAMT_X1: + case R_TILEPRO_SHAMT_Y0: + case R_TILEPRO_SHAMT_Y1: if (h != NULL) - h->non_got_ref = 1; + h->non_got_ref = 1; r_tilepro_plt32: if (h != NULL && !bfd_link_pic (info)) @@ -1699,7 +1707,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ h->plt.refcount += 1; - } + } /* If we are creating a shared library, and this is a reloc against a global symbol, or a non PC relative reloc @@ -1754,7 +1762,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, relocations we need for this symbol. */ if (h != NULL) head = - &((struct tilepro_elf_link_hash_entry *) h)->dyn_relocs; + &((struct tilepro_elf_link_hash_entry *) h)->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -1821,10 +1829,10 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, static asection * tilepro_elf_gc_mark_hook (asection *sec, - struct bfd_link_info *info, - Elf_Internal_Rela *rel, - struct elf_link_hash_entry *h, - Elf_Internal_Sym *sym) + struct bfd_link_info *info, + Elf_Internal_Rela *rel, + struct elf_link_hash_entry *h, + Elf_Internal_Sym *sym) { if (h != NULL) { @@ -1921,11 +1929,11 @@ tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info, && h->root.type == bfd_link_hash_undefweak)) { /* This case can occur if we saw a R_TILEPRO_JOFFLONG_X1_PLT - reloc in an input file, but the symbol was never referred - to by a dynamic object, or if all references were garbage - collected. In such a case, we don't actually need to build - a procedure linkage table, and we can just do a - R_TILEPRO_JOFFLONG_X1 relocation instead. */ + reloc in an input file, but the symbol was never referred + to by a dynamic object, or if all references were garbage + collected. In such a case, we don't actually need to build + a procedure linkage table, and we can just do a + R_TILEPRO_JOFFLONG_X1 relocation instead. */ h->plt.offset = (bfd_vma) -1; h->needs_plt = 0; } @@ -2050,7 +2058,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) s->size = PLT_ENTRY_SIZE; } - h->plt.offset = s->size; + h->plt.offset = s->size; /* If this symbol is not defined in a regular file, and we are not generating a shared library, then set the symbol to this @@ -2234,7 +2242,7 @@ maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) info->flags |= DF_TEXTREL; info->callbacks->minfo - (_("%B: dynamic relocation against `%T' in read-only section `%A'\n"), + (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), sec->owner, h->root.root.string, sec); /* Not an error, just cut short the traversal. */ @@ -2257,7 +2265,7 @@ tilepro_elf_omit_section_dynsym (bfd *output_bfd, if (strcmp (p->name, ".got") == 0) return FALSE; - return _bfd_elf_link_omit_section_dynsym (output_bfd, info, p); + return _bfd_elf_omit_section_dynsym_default (output_bfd, info, p); } /* Set the sizes of the dynamic sections. */ @@ -2328,7 +2336,7 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd, { info->flags |= DF_TEXTREL; - info->callbacks->minfo (_("%B: dynamic relocation in read-only section `%A'\n"), + info->callbacks->minfo (_("%pB: dynamic relocation in read-only section `%pA'\n"), p->sec->owner, p->sec); } } @@ -2385,7 +2393,7 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd, FALSE, FALSE, FALSE); /* Don't allocate .got.plt section if there are no GOT nor PLT - entries and there is no refeence to _GLOBAL_OFFSET_TABLE_. */ + entries and there is no refeence to _GLOBAL_OFFSET_TABLE_. */ if ((got == NULL || !got->ref_regular_nonweak) && (htab->elf.sgotplt->size @@ -2640,10 +2648,10 @@ static const bfd_byte insn_tls_gd_add_Y0Y1[] = { static bfd_boolean tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, - bfd *input_bfd, asection *input_section, - bfd_byte *contents, Elf_Internal_Rela *relocs, - Elf_Internal_Sym *local_syms, - asection **local_sections) + bfd *input_bfd, asection *input_section, + bfd_byte *contents, Elf_Internal_Rela *relocs, + Elf_Internal_Sym *local_syms, + asection **local_sections) { struct tilepro_elf_link_hash_table *htab; Elf_Internal_Shdr *symtab_hdr; @@ -2866,14 +2874,14 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r_type) { - case R_TILEPRO_IMM16_X0_GOT: - case R_TILEPRO_IMM16_X1_GOT: - case R_TILEPRO_IMM16_X0_GOT_LO: - case R_TILEPRO_IMM16_X1_GOT_LO: - case R_TILEPRO_IMM16_X0_GOT_HI: - case R_TILEPRO_IMM16_X1_GOT_HI: - case R_TILEPRO_IMM16_X0_GOT_HA: - case R_TILEPRO_IMM16_X1_GOT_HA: + case R_TILEPRO_IMM16_X0_GOT: + case R_TILEPRO_IMM16_X1_GOT: + case R_TILEPRO_IMM16_X0_GOT_LO: + case R_TILEPRO_IMM16_X1_GOT_LO: + case R_TILEPRO_IMM16_X0_GOT_HI: + case R_TILEPRO_IMM16_X1_GOT_HI: + case R_TILEPRO_IMM16_X0_GOT_HA: + case R_TILEPRO_IMM16_X1_GOT_HA: /* Relocation is to the entry for this symbol in the global offset table. */ if (htab->elf.sgot == NULL) @@ -2925,7 +2933,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, off = local_got_offsets[r_symndx]; /* The offset must always be a multiple of 4 on 32-bit. - We use the least significant bit to record + We use the least significant bit to record whether we have already processed this entry. */ if ((off & 1) != 0) off &= ~1; @@ -2958,10 +2966,10 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, relocation = off - got_base; break; - case R_TILEPRO_JOFFLONG_X1_PLT: + case R_TILEPRO_JOFFLONG_X1_PLT: /* Relocation is to the entry for this symbol in the procedure linkage table. */ - BFD_ASSERT (h != NULL); + BFD_ASSERT (h != NULL); if (h->plt.offset == (bfd_vma) -1 || htab->elf.splt == NULL) { @@ -2977,56 +2985,56 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, unresolved_reloc = FALSE; break; - case R_TILEPRO_32_PCREL: - case R_TILEPRO_16_PCREL: - case R_TILEPRO_8_PCREL: - case R_TILEPRO_IMM16_X0_PCREL: - case R_TILEPRO_IMM16_X1_PCREL: - case R_TILEPRO_IMM16_X0_LO_PCREL: - case R_TILEPRO_IMM16_X1_LO_PCREL: - case R_TILEPRO_IMM16_X0_HI_PCREL: - case R_TILEPRO_IMM16_X1_HI_PCREL: - case R_TILEPRO_IMM16_X0_HA_PCREL: - case R_TILEPRO_IMM16_X1_HA_PCREL: + case R_TILEPRO_32_PCREL: + case R_TILEPRO_16_PCREL: + case R_TILEPRO_8_PCREL: + case R_TILEPRO_IMM16_X0_PCREL: + case R_TILEPRO_IMM16_X1_PCREL: + case R_TILEPRO_IMM16_X0_LO_PCREL: + case R_TILEPRO_IMM16_X1_LO_PCREL: + case R_TILEPRO_IMM16_X0_HI_PCREL: + case R_TILEPRO_IMM16_X1_HI_PCREL: + case R_TILEPRO_IMM16_X0_HA_PCREL: + case R_TILEPRO_IMM16_X1_HA_PCREL: if (h != NULL && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) break; /* Fall through. */ - case R_TILEPRO_32: - case R_TILEPRO_16: - case R_TILEPRO_8: - case R_TILEPRO_LO16: - case R_TILEPRO_HI16: - case R_TILEPRO_HA16: - case R_TILEPRO_COPY: - case R_TILEPRO_GLOB_DAT: - case R_TILEPRO_JMP_SLOT: - case R_TILEPRO_RELATIVE: - case R_TILEPRO_BROFF_X1: - case R_TILEPRO_JOFFLONG_X1: - case R_TILEPRO_IMM8_X0: - case R_TILEPRO_IMM8_Y0: - case R_TILEPRO_IMM8_X1: - case R_TILEPRO_IMM8_Y1: - case R_TILEPRO_DEST_IMM8_X1: - case R_TILEPRO_MT_IMM15_X1: - case R_TILEPRO_MF_IMM15_X1: - case R_TILEPRO_IMM16_X0: - case R_TILEPRO_IMM16_X1: - case R_TILEPRO_IMM16_X0_LO: - case R_TILEPRO_IMM16_X1_LO: - case R_TILEPRO_IMM16_X0_HI: - case R_TILEPRO_IMM16_X1_HI: - case R_TILEPRO_IMM16_X0_HA: - case R_TILEPRO_IMM16_X1_HA: - case R_TILEPRO_MMSTART_X0: - case R_TILEPRO_MMEND_X0: - case R_TILEPRO_MMSTART_X1: - case R_TILEPRO_MMEND_X1: - case R_TILEPRO_SHAMT_X0: - case R_TILEPRO_SHAMT_X1: - case R_TILEPRO_SHAMT_Y0: - case R_TILEPRO_SHAMT_Y1: + case R_TILEPRO_32: + case R_TILEPRO_16: + case R_TILEPRO_8: + case R_TILEPRO_LO16: + case R_TILEPRO_HI16: + case R_TILEPRO_HA16: + case R_TILEPRO_COPY: + case R_TILEPRO_GLOB_DAT: + case R_TILEPRO_JMP_SLOT: + case R_TILEPRO_RELATIVE: + case R_TILEPRO_BROFF_X1: + case R_TILEPRO_JOFFLONG_X1: + case R_TILEPRO_IMM8_X0: + case R_TILEPRO_IMM8_Y0: + case R_TILEPRO_IMM8_X1: + case R_TILEPRO_IMM8_Y1: + case R_TILEPRO_DEST_IMM8_X1: + case R_TILEPRO_MT_IMM15_X1: + case R_TILEPRO_MF_IMM15_X1: + case R_TILEPRO_IMM16_X0: + case R_TILEPRO_IMM16_X1: + case R_TILEPRO_IMM16_X0_LO: + case R_TILEPRO_IMM16_X1_LO: + case R_TILEPRO_IMM16_X0_HI: + case R_TILEPRO_IMM16_X1_HI: + case R_TILEPRO_IMM16_X0_HA: + case R_TILEPRO_IMM16_X1_HA: + case R_TILEPRO_MMSTART_X0: + case R_TILEPRO_MMEND_X0: + case R_TILEPRO_MMSTART_X1: + case R_TILEPRO_MMEND_X1: + case R_TILEPRO_SHAMT_X0: + case R_TILEPRO_SHAMT_X1: + case R_TILEPRO_SHAMT_Y0: + case R_TILEPRO_SHAMT_Y1: if ((input_section->flags & SEC_ALLOC) == 0) break; @@ -3069,9 +3077,9 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, switch (r_type) { - case R_TILEPRO_32_PCREL: - case R_TILEPRO_16_PCREL: - case R_TILEPRO_8_PCREL: + case R_TILEPRO_32_PCREL: + case R_TILEPRO_16_PCREL: + case R_TILEPRO_8_PCREL: /* If the symbol is not dynamic, we should not keep a dynamic relocation. But an .rela.* slot has been allocated for it, output R_TILEPRO_NONE. @@ -3144,7 +3152,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { BFD_FAIL (); _bfd_error_handler - (_("%B: probably compiled without -fPIC?"), + (_("%pB: probably compiled without -fPIC?"), input_bfd); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -3164,14 +3172,14 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, } break; - case R_TILEPRO_IMM16_X0_TLS_LE: - case R_TILEPRO_IMM16_X1_TLS_LE: - case R_TILEPRO_IMM16_X0_TLS_LE_LO: - case R_TILEPRO_IMM16_X1_TLS_LE_LO: - case R_TILEPRO_IMM16_X0_TLS_LE_HI: - case R_TILEPRO_IMM16_X1_TLS_LE_HI: - case R_TILEPRO_IMM16_X0_TLS_LE_HA: - case R_TILEPRO_IMM16_X1_TLS_LE_HA: + case R_TILEPRO_IMM16_X0_TLS_LE: + case R_TILEPRO_IMM16_X1_TLS_LE: + case R_TILEPRO_IMM16_X0_TLS_LE_LO: + case R_TILEPRO_IMM16_X1_TLS_LE_LO: + case R_TILEPRO_IMM16_X0_TLS_LE_HI: + case R_TILEPRO_IMM16_X1_TLS_LE_HI: + case R_TILEPRO_IMM16_X0_TLS_LE_HA: + case R_TILEPRO_IMM16_X1_TLS_LE_HA: if (!bfd_link_executable (info)) { Elf_Internal_Rela outrel; @@ -3203,24 +3211,24 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, relocation = tpoff (info, relocation); break; - case R_TILEPRO_IMM16_X0_TLS_GD: - case R_TILEPRO_IMM16_X1_TLS_GD: - case R_TILEPRO_IMM16_X0_TLS_GD_LO: - case R_TILEPRO_IMM16_X1_TLS_GD_LO: - case R_TILEPRO_IMM16_X0_TLS_GD_HI: - case R_TILEPRO_IMM16_X1_TLS_GD_HI: - case R_TILEPRO_IMM16_X0_TLS_GD_HA: - case R_TILEPRO_IMM16_X1_TLS_GD_HA: - case R_TILEPRO_IMM16_X0_TLS_IE: - case R_TILEPRO_IMM16_X1_TLS_IE: - case R_TILEPRO_IMM16_X0_TLS_IE_LO: - case R_TILEPRO_IMM16_X1_TLS_IE_LO: - case R_TILEPRO_IMM16_X0_TLS_IE_HI: - case R_TILEPRO_IMM16_X1_TLS_IE_HI: - case R_TILEPRO_IMM16_X0_TLS_IE_HA: - case R_TILEPRO_IMM16_X1_TLS_IE_HA: + case R_TILEPRO_IMM16_X0_TLS_GD: + case R_TILEPRO_IMM16_X1_TLS_GD: + case R_TILEPRO_IMM16_X0_TLS_GD_LO: + case R_TILEPRO_IMM16_X1_TLS_GD_LO: + case R_TILEPRO_IMM16_X0_TLS_GD_HI: + case R_TILEPRO_IMM16_X1_TLS_GD_HI: + case R_TILEPRO_IMM16_X0_TLS_GD_HA: + case R_TILEPRO_IMM16_X1_TLS_GD_HA: + case R_TILEPRO_IMM16_X0_TLS_IE: + case R_TILEPRO_IMM16_X1_TLS_IE: + case R_TILEPRO_IMM16_X0_TLS_IE_LO: + case R_TILEPRO_IMM16_X1_TLS_IE_LO: + case R_TILEPRO_IMM16_X0_TLS_IE_HI: + case R_TILEPRO_IMM16_X1_TLS_IE_HI: + case R_TILEPRO_IMM16_X0_TLS_IE_HA: + case R_TILEPRO_IMM16_X1_TLS_IE_HA: r_type = tilepro_elf_tls_transition (info, r_type, h == NULL); - tls_type = GOT_UNKNOWN; + tls_type = GOT_UNKNOWN; if (h == NULL && local_got_offsets) tls_type = _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx]; @@ -3276,8 +3284,8 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (h != NULL) { - bfd_boolean dyn; - dyn = htab->elf.dynamic_sections_created; + bfd_boolean dyn; + dyn = htab->elf.dynamic_sections_created; if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), @@ -3290,38 +3298,38 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, } /* The GOT entries have not been initialized yet. Do it - now, and emit any relocations. */ + now, and emit any relocations. */ if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) need_relocs = TRUE; - switch (r_type) - { - case R_TILEPRO_IMM16_X0_TLS_IE: - case R_TILEPRO_IMM16_X1_TLS_IE: - case R_TILEPRO_IMM16_X0_TLS_IE_LO: - case R_TILEPRO_IMM16_X1_TLS_IE_LO: - case R_TILEPRO_IMM16_X0_TLS_IE_HI: - case R_TILEPRO_IMM16_X1_TLS_IE_HI: - case R_TILEPRO_IMM16_X0_TLS_IE_HA: - case R_TILEPRO_IMM16_X1_TLS_IE_HA: + switch (r_type) + { + case R_TILEPRO_IMM16_X0_TLS_IE: + case R_TILEPRO_IMM16_X1_TLS_IE: + case R_TILEPRO_IMM16_X0_TLS_IE_LO: + case R_TILEPRO_IMM16_X1_TLS_IE_LO: + case R_TILEPRO_IMM16_X0_TLS_IE_HI: + case R_TILEPRO_IMM16_X1_TLS_IE_HI: + case R_TILEPRO_IMM16_X0_TLS_IE_HA: + case R_TILEPRO_IMM16_X1_TLS_IE_HA: if (need_relocs) { - bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off); - outrel.r_offset = (htab->elf.sgot->output_section->vma + bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off); + outrel.r_offset = (htab->elf.sgot->output_section->vma + htab->elf.sgot->output_offset + off); - outrel.r_addend = 0; + outrel.r_addend = 0; if (indx == 0) - outrel.r_addend = relocation - dtpoff_base (info); + outrel.r_addend = relocation - dtpoff_base (info); outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_TPOFF32); tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot, &outrel); - } else { + } else { bfd_put_32 (output_bfd, tpoff (info, relocation), htab->elf.sgot->contents + off); - } - break; + } + break; case R_TILEPRO_IMM16_X0_TLS_GD: case R_TILEPRO_IMM16_X1_TLS_GD: @@ -3332,48 +3340,48 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_TILEPRO_IMM16_X0_TLS_GD_HA: case R_TILEPRO_IMM16_X1_TLS_GD_HA: if (need_relocs) { - outrel.r_offset = (htab->elf.sgot->output_section->vma + outrel.r_offset = (htab->elf.sgot->output_section->vma + htab->elf.sgot->output_offset + off); - outrel.r_addend = 0; - outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPMOD32); - bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off); - tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot, + outrel.r_addend = 0; + outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPMOD32); + bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off); + tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot, &outrel); if (indx == 0) - { - BFD_ASSERT (! unresolved_reloc); - bfd_put_32 (output_bfd, + { + BFD_ASSERT (! unresolved_reloc); + bfd_put_32 (output_bfd, relocation - dtpoff_base (info), (htab->elf.sgot->contents + off + TILEPRO_BYTES_PER_WORD)); - } + } else - { - bfd_put_32 (output_bfd, 0, + { + bfd_put_32 (output_bfd, 0, (htab->elf.sgot->contents + off + TILEPRO_BYTES_PER_WORD)); - outrel.r_info = ELF32_R_INFO (indx, + outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPOFF32); outrel.r_offset += TILEPRO_BYTES_PER_WORD; - tilepro_elf_append_rela_32 (output_bfd, + tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot, &outrel); - } - } + } + } else { /* If we are not emitting relocations for a - general dynamic reference, then we must be in a - static link or an executable link with the - symbol binding locally. Mark it as belonging - to module 1, the executable. */ + general dynamic reference, then we must be in a + static link or an executable link with the + symbol binding locally. Mark it as belonging + to module 1, the executable. */ bfd_put_32 (output_bfd, 1, htab->elf.sgot->contents + off ); bfd_put_32 (output_bfd, relocation - dtpoff_base (info), htab->elf.sgot->contents + off + TILEPRO_BYTES_PER_WORD); } - break; - } + break; + } } if (off >= (bfd_vma) -2) @@ -3398,10 +3406,11 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, rel->r_offset) != (bfd_vma) -1) _bfd_error_handler /* xgettext:c-format */ - (_("%B(%A+%#Lx): unresolvable %s relocation against symbol `%s'"), + (_("%pB(%pA+%#" PRIx64 "): " + "unresolvable %s relocation against symbol `%s'"), input_bfd, input_section, - rel->r_offset, + (uint64_t) rel->r_offset, howto->name, h->root.root.string); @@ -3423,57 +3432,57 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_TILEPRO_IMM16_X1_TLS_GD_HA: case R_TILEPRO_IMM16_X0_TLS_IE_HA: case R_TILEPRO_IMM16_X1_TLS_IE_HA: - relocation += 0x8000; - break; + relocation += 0x8000; + break; } /* Get the operand creation function, if any. */ create_func = reloc_to_create_func[r_type]; if (create_func == NULL) { - r = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, rel->r_offset, - relocation, rel->r_addend); + r = _bfd_final_link_relocate (howto, input_bfd, input_section, + contents, rel->r_offset, + relocation, rel->r_addend); } else { - if (howto->pc_relative) - { - relocation -= - input_section->output_section->vma + input_section->output_offset; - if (howto->pcrel_offset) - relocation -= rel->r_offset; - } - - bfd_byte *data; - - /* Add the relocation addend if any to the final target value */ - relocation += rel->r_addend; - - /* Do basic range checking */ - r = bfd_check_overflow (howto->complain_on_overflow, - howto->bitsize, - howto->rightshift, - 32, - relocation); - - /* - * Write the relocated value out into the raw section data. - * Don't put a relocation out in the .rela section. - */ - tilepro_bundle_bits mask = create_func(-1); - tilepro_bundle_bits value = create_func(relocation >> howto->rightshift); - - /* Only touch bytes while the mask is not 0, so we - don't write to out of bounds memory if this is actually - a 16-bit switch instruction. */ - for (data = contents + rel->r_offset; mask != 0; data++) - { - bfd_byte byte_mask = (bfd_byte)mask; - *data = (*data & ~byte_mask) | ((bfd_byte)value & byte_mask); - mask >>= 8; - value >>= 8; - } + if (howto->pc_relative) + { + relocation -= + input_section->output_section->vma + input_section->output_offset; + if (howto->pcrel_offset) + relocation -= rel->r_offset; + } + + bfd_byte *data; + + /* Add the relocation addend if any to the final target value */ + relocation += rel->r_addend; + + /* Do basic range checking */ + r = bfd_check_overflow (howto->complain_on_overflow, + howto->bitsize, + howto->rightshift, + 32, + relocation); + + /* + * Write the relocated value out into the raw section data. + * Don't put a relocation out in the .rela section. + */ + tilepro_bundle_bits mask = create_func(-1); + tilepro_bundle_bits value = create_func(relocation >> howto->rightshift); + + /* Only touch bytes while the mask is not 0, so we + don't write to out of bounds memory if this is actually + a 16-bit switch instruction. */ + for (data = contents + rel->r_offset; mask != 0; data++) + { + bfd_byte byte_mask = (bfd_byte)mask; + *data = (*data & ~byte_mask) | ((bfd_byte)value & byte_mask); + mask >>= 8; + value >>= 8; + } } if (r != bfd_reloc_ok) @@ -3706,7 +3715,7 @@ tilepro_finish_dyn (bfd *output_bfd, struct bfd_link_info *info, static bfd_boolean tilepro_elf_finish_dynamic_sections (bfd *output_bfd, - struct bfd_link_info *info) + struct bfd_link_info *info) { bfd *dynobj; asection *sdyn; @@ -3749,7 +3758,7 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd, if (bfd_is_abs_section (htab->elf.sgotplt->output_section)) { _bfd_error_handler - (_("discarded output section: `%A'"), htab->elf.sgotplt); + (_("discarded output section: `%pA'"), htab->elf.sgotplt); return FALSE; } @@ -3793,7 +3802,7 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd, static bfd_vma tilepro_elf_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * PLT_ENTRY_SIZE; } @@ -3818,7 +3827,7 @@ tilepro_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, static int tilepro_additional_program_headers (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) + struct bfd_link_info *info ATTRIBUTE_UNUSED) { /* Each .intrpt section specified by the user adds another PT_LOAD header since the sections are discontiguous. */ @@ -3855,7 +3864,7 @@ tilepro_additional_program_headers (bfd *abfd, #define elf_backend_reloc_type_class tilepro_reloc_type_class -#define bfd_elf32_bfd_reloc_name_lookup tilepro_reloc_name_lookup +#define bfd_elf32_bfd_reloc_name_lookup tilepro_reloc_name_lookup #define bfd_elf32_bfd_link_hash_table_create tilepro_elf_link_hash_table_create #define bfd_elf32_bfd_reloc_type_lookup tilepro_reloc_type_lookup @@ -3870,10 +3879,10 @@ tilepro_additional_program_headers (bfd *abfd, #define elf_backend_finish_dynamic_sections tilepro_elf_finish_dynamic_sections #define elf_backend_gc_mark_hook tilepro_elf_gc_mark_hook #define elf_backend_plt_sym_val tilepro_elf_plt_sym_val -#define elf_info_to_howto_rel NULL -#define elf_info_to_howto tilepro_info_to_howto_rela -#define elf_backend_grok_prstatus tilepro_elf_grok_prstatus -#define elf_backend_grok_psinfo tilepro_elf_grok_psinfo +#define elf_info_to_howto_rel NULL +#define elf_info_to_howto tilepro_info_to_howto_rela +#define elf_backend_grok_prstatus tilepro_elf_grok_prstatus +#define elf_backend_grok_psinfo tilepro_elf_grok_psinfo #define elf_backend_additional_program_headers tilepro_additional_program_headers #define bfd_elf32_mkobject tilepro_elf_mkobject