OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [elf32-tilepro.c] - Diff between revs 163 and 166

Show entire file | Details | Blame | View Log

Rev 163 Rev 166
Line 378... Line 378...
  /* These relocs are currently not defined.  */
  /* These relocs are currently not defined.  */
  EMPTY_HOWTO (56),
  EMPTY_HOWTO (56),
  EMPTY_HOWTO (57),
  EMPTY_HOWTO (57),
  EMPTY_HOWTO (58),
  EMPTY_HOWTO (58),
  EMPTY_HOWTO (59),
  EMPTY_HOWTO (59),
  EMPTY_HOWTO (60),
 
  EMPTY_HOWTO (61),
  HOWTO (R_TILEPRO_TLS_GD_CALL, /* type */
  EMPTY_HOWTO (62),
         TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
  EMPTY_HOWTO (63),
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
  EMPTY_HOWTO (64),
         29,                    /* bitsize */
  EMPTY_HOWTO (65),
         TRUE,                  /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_signed,/* complain_on_overflow */
 
         bfd_elf_generic_reloc, /* special_function */
 
         "R_TILEPRO_TLS_GD_CALL", /* name */
 
         FALSE,                 /* partial_inplace */
 
         0,                      /* src_mask */
 
         -1,                    /* dst_mask */
 
         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),
 
  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD,  0,  8),
 
  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD,  0,  8),
 
  TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD,  0,  8),
 
 
  /* Offsets into the GOT of TLS Descriptors. */
  /* Offsets into the GOT of TLS Descriptors. */
 
 
  HOWTO (R_TILEPRO_IMM16_X0_TLS_GD,/* type */
  HOWTO (R_TILEPRO_IMM16_X0_TLS_GD,/* type */
         0,                      /* rightshift */
         0,                      /* rightshift */
Line 452... Line 466...
         FALSE,                 /* partial_inplace */
         FALSE,                 /* partial_inplace */
         0,                      /* src_mask */
         0,                      /* src_mask */
         -1,                    /* dst_mask */
         -1,                    /* dst_mask */
         TRUE),                 /* pcrel_offset */
         TRUE),                 /* pcrel_offset */
 
 
#define TILEPRO_IMM16_HOWTO_TLS_IE(name, rshift) \
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
  HOWTO (name, rshift, 1, 16, FALSE, 0, \
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
         complain_overflow_dont, bfd_elf_generic_reloc, \
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
         #name, FALSE, 0, 0xffff, TRUE)
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
 
  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
 
  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
 
  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
 
  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
 
 
 
  /* These are common with the Solaris TLS implementation. */
  /* These are common with the Solaris TLS implementation. */
  HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
  HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
        bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32",
        bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32",
        FALSE, 0, 0, TRUE),
        FALSE, 0, 0, TRUE),
  HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
  HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
        bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32",
        bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32",
        FALSE, 0, 0xFFFFFFFF, TRUE),
        FALSE, 0, 0xFFFFFFFF, TRUE),
  HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
  HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
        bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32",
        bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32",
        FALSE, 0, 0, TRUE)
        FALSE, 0, 0, TRUE),
 
 
 
  HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */
 
         0,                      /* rightshift */
 
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         16,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_signed, /* complain_on_overflow */
 
         bfd_elf_generic_reloc, /* special_function */
 
         "R_TILEPRO_IMM16_X0_TLS_LE",/* name */
 
         FALSE,                 /* partial_inplace */
 
         0,                      /* src_mask */
 
         -1,                    /* dst_mask */
 
         TRUE),                 /* pcrel_offset */
 
 
 
  HOWTO (R_TILEPRO_IMM16_X1_TLS_LE,/* type */
 
         0,                      /* rightshift */
 
         1,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         16,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_signed, /* complain_on_overflow */
 
         bfd_elf_generic_reloc, /* special_function */
 
         "R_TILEPRO_IMM16_X1_TLS_LE",/* name */
 
         FALSE,                 /* partial_inplace */
 
         0,                      /* src_mask */
 
         -1,                    /* dst_mask */
 
         TRUE),                 /* pcrel_offset */
 
 
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_LO,  0),
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_LO,  0),
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HI, 16),
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HI, 16),
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HA, 16),
 
  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HA, 16),
};
};
 
 
static reloc_howto_type tilepro_elf_howto_table2 [] =
static reloc_howto_type tilepro_elf_howto_table2 [] =
{
{
  /* GNU extension to record C++ vtable hierarchy */
  /* GNU extension to record C++ vtable hierarchy */
Line 588... Line 631...
  TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X0,    R_TILEPRO_SHAMT_X0)
  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_X1,    R_TILEPRO_SHAMT_X1)
  TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y0,    R_TILEPRO_SHAMT_Y0)
  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_SHAMT_Y1,    R_TILEPRO_SHAMT_Y1)
 
 
 
  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_IMM16_X0_TLS_GD,    R_TILEPRO_IMM16_X0_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_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_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_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)
  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI, R_TILEPRO_IMM16_X0_TLS_GD_HI)
Line 610... Line 660...
 
 
  TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPMOD32, R_TILEPRO_TLS_DTPMOD32)
  TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPMOD32, R_TILEPRO_TLS_DTPMOD32)
  TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPOFF32, R_TILEPRO_TLS_DTPOFF32)
  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_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_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)
 
  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI, R_TILEPRO_IMM16_X1_TLS_LE_HI)
 
  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA, R_TILEPRO_IMM16_X0_TLS_LE_HA)
 
  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA, R_TILEPRO_IMM16_X1_TLS_LE_HA)
 
 
#undef TH_REMAP
#undef TH_REMAP
 
 
  { BFD_RELOC_VTABLE_INHERIT, R_TILEPRO_GNU_VTINHERIT, tilepro_elf_howto_table2 },
  { BFD_RELOC_VTABLE_INHERIT, R_TILEPRO_GNU_VTINHERIT, tilepro_elf_howto_table2 },
  { BFD_RELOC_VTABLE_ENTRY,   R_TILEPRO_GNU_VTENTRY,   tilepro_elf_howto_table2 },
  { BFD_RELOC_VTABLE_ENTRY,   R_TILEPRO_GNU_VTENTRY,   tilepro_elf_howto_table2 },
};
};
Line 743... Line 802...
                            arelent * cache_ptr,
                            arelent * cache_ptr,
                            Elf_Internal_Rela * dst)
                            Elf_Internal_Rela * dst)
{
{
  unsigned int r_type = ELF32_R_TYPE (dst->r_info);
  unsigned int r_type = ELF32_R_TYPE (dst->r_info);
 
 
  if (r_type <= (unsigned int) R_TILEPRO_TLS_TPOFF32)
  if (r_type <= (unsigned int) R_TILEPRO_IMM16_X1_TLS_LE_HA)
    cache_ptr->howto = &tilepro_elf_howto_table [r_type];
    cache_ptr->howto = &tilepro_elf_howto_table [r_type];
  else if (r_type - R_TILEPRO_GNU_VTINHERIT
  else if (r_type - R_TILEPRO_GNU_VTINHERIT
           <= (unsigned int) R_TILEPRO_GNU_VTENTRY)
           <= (unsigned int) R_TILEPRO_GNU_VTENTRY)
    cache_ptr->howto
    cache_ptr->howto
      = &tilepro_elf_howto_table2 [r_type - R_TILEPRO_GNU_VTINHERIT];
      = &tilepro_elf_howto_table2 [r_type - R_TILEPRO_GNU_VTINHERIT];
Line 843... Line 902...
  create_Imm16_X0,
  create_Imm16_X0,
  create_Imm16_X1,
  create_Imm16_X1,
  create_Imm16_X0,
  create_Imm16_X0,
  create_Imm16_X1,
  create_Imm16_X1,
  create_Imm16_X0,
  create_Imm16_X0,
  create_Imm16_X1
  create_Imm16_X1,
 
 
 
  NULL,
 
  NULL,
 
  NULL,
 
 
 
  create_Imm16_X0,
 
  create_Imm16_X1,
 
  create_Imm16_X0,
 
  create_Imm16_X1,
 
  create_Imm16_X0,
 
  create_Imm16_X1,
 
  create_Imm16_X0,
 
  create_Imm16_X1,
};
};
 
 
#define NELEMS(a)       ((int) (sizeof (a) / sizeof ((a)[0])))
#define NELEMS(a)       ((int) (sizeof (a) / sizeof ((a)[0])))
 
 
/* Support for core dump NOTE sections.  */
/* Support for core dump NOTE sections.  */
Line 1286... Line 1358...
      eind->tls_type = GOT_UNKNOWN;
      eind->tls_type = GOT_UNKNOWN;
    }
    }
  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
}
}
 
 
 
static int
 
tilepro_tls_translate_to_le (int r_type)
 
{
 
  switch (r_type)
 
    {
 
    case R_TILEPRO_IMM16_X0_TLS_GD:
 
    case R_TILEPRO_IMM16_X0_TLS_IE:
 
      return R_TILEPRO_IMM16_X0_TLS_LE;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD:
 
    case R_TILEPRO_IMM16_X1_TLS_IE:
 
      return R_TILEPRO_IMM16_X1_TLS_LE;
 
 
 
    case R_TILEPRO_IMM16_X0_TLS_GD_LO:
 
    case R_TILEPRO_IMM16_X0_TLS_IE_LO:
 
      return R_TILEPRO_IMM16_X0_TLS_LE_LO;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD_LO:
 
    case R_TILEPRO_IMM16_X1_TLS_IE_LO:
 
      return R_TILEPRO_IMM16_X1_TLS_LE_LO;
 
 
 
    case R_TILEPRO_IMM16_X0_TLS_GD_HI:
 
    case R_TILEPRO_IMM16_X0_TLS_IE_HI:
 
      return R_TILEPRO_IMM16_X0_TLS_LE_HI;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD_HI:
 
    case R_TILEPRO_IMM16_X1_TLS_IE_HI:
 
      return R_TILEPRO_IMM16_X1_TLS_LE_HI;
 
 
 
    case R_TILEPRO_IMM16_X0_TLS_GD_HA:
 
    case R_TILEPRO_IMM16_X0_TLS_IE_HA:
 
      return R_TILEPRO_IMM16_X0_TLS_LE_HA;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD_HA:
 
    case R_TILEPRO_IMM16_X1_TLS_IE_HA:
 
      return R_TILEPRO_IMM16_X1_TLS_LE_HA;
 
    }
 
  return r_type;
 
}
 
 
 
static int
 
tilepro_tls_translate_to_ie (int r_type)
 
{
 
  switch (r_type)
 
    {
 
    case R_TILEPRO_IMM16_X0_TLS_GD:
 
    case R_TILEPRO_IMM16_X0_TLS_IE:
 
      return R_TILEPRO_IMM16_X0_TLS_IE;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD:
 
    case R_TILEPRO_IMM16_X1_TLS_IE:
 
      return R_TILEPRO_IMM16_X1_TLS_IE;
 
 
 
    case R_TILEPRO_IMM16_X0_TLS_GD_LO:
 
    case R_TILEPRO_IMM16_X0_TLS_IE_LO:
 
      return R_TILEPRO_IMM16_X0_TLS_IE_LO;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD_LO:
 
    case R_TILEPRO_IMM16_X1_TLS_IE_LO:
 
      return R_TILEPRO_IMM16_X1_TLS_IE_LO;
 
 
 
    case R_TILEPRO_IMM16_X0_TLS_GD_HI:
 
    case R_TILEPRO_IMM16_X0_TLS_IE_HI:
 
      return R_TILEPRO_IMM16_X0_TLS_IE_HI;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD_HI:
 
    case R_TILEPRO_IMM16_X1_TLS_IE_HI:
 
      return R_TILEPRO_IMM16_X1_TLS_IE_HI;
 
 
 
    case R_TILEPRO_IMM16_X0_TLS_GD_HA:
 
    case R_TILEPRO_IMM16_X0_TLS_IE_HA:
 
      return R_TILEPRO_IMM16_X0_TLS_IE_HA;
 
 
 
    case R_TILEPRO_IMM16_X1_TLS_GD_HA:
 
    case R_TILEPRO_IMM16_X1_TLS_IE_HA:
 
      return R_TILEPRO_IMM16_X1_TLS_IE_HA;
 
    }
 
  return r_type;
 
}
 
 
 
static int
 
tilepro_elf_tls_transition (struct bfd_link_info *info, int r_type,
 
                            int is_local)
 
{
 
  if (info->shared)
 
    return r_type;
 
 
 
  if (is_local)
 
    return tilepro_tls_translate_to_le (r_type);
 
  else
 
    return tilepro_tls_translate_to_ie (r_type);
 
}
 
 
/* Look through the relocs for a section during the first phase, and
/* Look through the relocs for a section during the first phase, and
   allocate space in the global offset table or procedure linkage
   allocate space in the global offset table or procedure linkage
   table.  */
   table.  */
 
 
static bfd_boolean
static bfd_boolean
Line 1346... Line 1511...
          while (h->root.type == bfd_link_hash_indirect
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
        }
        }
 
 
 
      r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
      switch (r_type)
      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:
 
          if (info->shared)
 
            goto r_tilepro_plt32;
 
          break;
 
 
        case R_TILEPRO_IMM16_X0_TLS_GD:
        case R_TILEPRO_IMM16_X0_TLS_GD:
        case R_TILEPRO_IMM16_X1_TLS_GD:
        case R_TILEPRO_IMM16_X1_TLS_GD:
        case R_TILEPRO_IMM16_X0_TLS_GD_LO:
        case R_TILEPRO_IMM16_X0_TLS_GD_LO:
        case R_TILEPRO_IMM16_X1_TLS_GD_LO:
        case R_TILEPRO_IMM16_X1_TLS_GD_LO:
        case R_TILEPRO_IMM16_X0_TLS_GD_HI:
        case R_TILEPRO_IMM16_X0_TLS_GD_HI:
        case R_TILEPRO_IMM16_X1_TLS_GD_HI:
        case R_TILEPRO_IMM16_X1_TLS_GD_HI:
        case R_TILEPRO_IMM16_X0_TLS_GD_HA:
        case R_TILEPRO_IMM16_X0_TLS_GD_HA:
        case R_TILEPRO_IMM16_X1_TLS_GD_HA:
        case R_TILEPRO_IMM16_X1_TLS_GD_HA:
 
          BFD_ASSERT (info->shared);
          tls_type = GOT_TLS_GD;
          tls_type = GOT_TLS_GD;
          goto have_got_reference;
          goto have_got_reference;
 
 
        case R_TILEPRO_IMM16_X0_TLS_IE:
        case R_TILEPRO_IMM16_X0_TLS_IE:
        case R_TILEPRO_IMM16_X1_TLS_IE:
        case R_TILEPRO_IMM16_X1_TLS_IE:
Line 1452... Line 1631...
              if (!tilepro_elf_create_got_section (htab->elf.dynobj, info))
              if (!tilepro_elf_create_got_section (htab->elf.dynobj, info))
                return FALSE;
                return FALSE;
            }
            }
          break;
          break;
 
 
 
        case R_TILEPRO_TLS_GD_CALL:
 
          if (info->shared)
 
            {
 
              /* These are basically R_TILEPRO_JOFFLONG_X1_PLT relocs
 
                 against __tls_get_addr.  */
 
              struct bfd_link_hash_entry *bh = NULL;
 
              if (! _bfd_generic_link_add_one_symbol (info, abfd,
 
                                                      "__tls_get_addr", 0,
 
                                                      bfd_und_section_ptr, 0,
 
                                                      NULL, FALSE, FALSE,
 
                                                      &bh))
 
                return FALSE;
 
              h = (struct elf_link_hash_entry *) bh;
 
            }
 
          else
 
            break;
 
          /* Fall through */
 
 
        case R_TILEPRO_JOFFLONG_X1_PLT:
        case R_TILEPRO_JOFFLONG_X1_PLT:
          /* This symbol requires a procedure linkage table entry.  We
          /* This symbol requires a procedure linkage table entry.  We
             actually build the entry in adjust_dynamic_symbol,
             actually build the entry in adjust_dynamic_symbol,
             because this might be a case of linking PIC code without
             because this might be a case of linking PIC code without
             linking in any dynamic objects, in which case we don't
             linking in any dynamic objects, in which case we don't
Line 1521... Line 1718...
        case R_TILEPRO_SHAMT_X0:
        case R_TILEPRO_SHAMT_X0:
        case R_TILEPRO_SHAMT_X1:
        case R_TILEPRO_SHAMT_X1:
        case R_TILEPRO_SHAMT_Y0:
        case R_TILEPRO_SHAMT_Y0:
        case R_TILEPRO_SHAMT_Y1:
        case R_TILEPRO_SHAMT_Y1:
          if (h != NULL)
          if (h != NULL)
            {
 
              h->non_got_ref = 1;
              h->non_got_ref = 1;
 
 
              if (!info->shared)
        r_tilepro_plt32:
 
          if (h != NULL && !info->shared)
                {
                {
                  /* We may need a .plt entry if the function this reloc
                  /* We may need a .plt entry if the function this reloc
                     refers to is in a shared lib.  */
                     refers to is in a shared lib.  */
                  h->plt.refcount += 1;
                  h->plt.refcount += 1;
                }
                }
            }
 
 
 
          /* If we are creating a shared library, and this is a reloc
          /* If we are creating a shared library, and this is a reloc
             against a global symbol, or a non PC relative reloc
             against a global symbol, or a non PC relative reloc
             against a local symbol, then we need to copy the reloc
             against a local symbol, then we need to copy the reloc
             into the shared library.  However, if we are linking with
             into the shared library.  However, if we are linking with
Line 1723... Line 1919...
                break;
                break;
              }
              }
        }
        }
 
 
      r_type = ELF32_R_TYPE (rel->r_info);
      r_type = ELF32_R_TYPE (rel->r_info);
 
      r_type = tilepro_elf_tls_transition (info, r_type, h != NULL);
      switch (r_type)
      switch (r_type)
        {
        {
        case R_TILEPRO_IMM16_X0_GOT:
        case R_TILEPRO_IMM16_X0_GOT:
        case R_TILEPRO_IMM16_X1_GOT:
        case R_TILEPRO_IMM16_X1_GOT:
        case R_TILEPRO_IMM16_X0_GOT_LO:
        case R_TILEPRO_IMM16_X0_GOT_LO:
Line 1756... Line 1953...
              if (h->got.refcount > 0)
              if (h->got.refcount > 0)
                h->got.refcount--;
                h->got.refcount--;
            }
            }
          else
          else
            {
            {
              if (local_got_refcounts[r_symndx] > 0)
              if (local_got_refcounts &&
 
                  local_got_refcounts[r_symndx] > 0)
                local_got_refcounts[r_symndx]--;
                local_got_refcounts[r_symndx]--;
            }
            }
          break;
          break;
 
 
        case R_TILEPRO_32_PCREL:
        case R_TILEPRO_32_PCREL:
Line 2038... Line 2236...
    {
    {
      h->plt.offset = (bfd_vma) -1;
      h->plt.offset = (bfd_vma) -1;
      h->needs_plt = 0;
      h->needs_plt = 0;
    }
    }
 
 
  if (h->got.refcount > 0)
  /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
 
     requiring no TLS entry.  */
 
  if (h->got.refcount > 0
 
      && !info->shared
 
      && h->dynindx == -1
 
      && tilepro_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
 
    h->got.offset = (bfd_vma) -1;
 
  else if (h->got.refcount > 0)
    {
    {
      asection *s;
      asection *s;
      bfd_boolean dyn;
      bfd_boolean dyn;
      int tls_type = tilepro_elf_hash_entry(h)->tls_type;
      int tls_type = tilepro_elf_hash_entry(h)->tls_type;
 
 
Line 2465... Line 2670...
    return 0;
    return 0;
 
 
  return (address - htab->tls_sec->vma);
  return (address - htab->tls_sec->vma);
}
}
 
 
 
/* Replace the MASK bits in ADDR with those in INSN, for the next
 
   TILEPRO_BUNDLE_SIZE_IN_BYTES bytes.  */
 
 
 
static void
 
tilepro_replace_insn (bfd_byte *addr, const bfd_byte *mask,
 
                      const bfd_byte *insn)
 
{
 
  int i;
 
  for (i = 0; i < TILEPRO_BUNDLE_SIZE_IN_BYTES; i++)
 
    {
 
      addr[i] = (addr[i] & ~mask[i]) | (insn[i] & mask[i]);
 
    }
 
}
 
 
 
/* Mask to extract the bits corresponding to an instruction in a
 
   specific pipe of a bundle.  */
 
static const bfd_byte insn_mask_X1[] = {
 
  0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f
 
};
 
 
 
/* Mask to extract the bits corresponding to an instruction in a
 
   specific pipe of a bundle, minus the destination operand and the
 
   first source operand.  */
 
static const bfd_byte insn_mask_X0_no_dest_no_srca[] = {
 
  0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00
 
};
 
 
 
static const bfd_byte insn_mask_X1_no_dest_no_srca[] = {
 
  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f
 
};
 
 
 
static const bfd_byte insn_mask_Y0_no_dest_no_srca[] = {
 
  0x00, 0xf0, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00
 
};
 
 
 
static const bfd_byte insn_mask_Y1_no_dest_no_srca[] = {
 
  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x78
 
};
 
 
 
/* Mask to extract the first source operand of an instruction.  */
 
static const bfd_byte srca_mask_X0[] = {
 
  0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 
};
 
 
 
static const bfd_byte srca_mask_X1[] = {
 
  0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00
 
};
 
 
 
/* Various instructions synthesized to support tls references.  */
 
 
 
/* move r0, r0 in the X1 pipe, used for tls le.  */
 
static const bfd_byte insn_tls_le_move_X1[] = {
 
  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x33, 0x08
 
};
 
 
 
/* move r0, zero in the X0 and X1 pipe, used for tls le.  */
 
static const bfd_byte insn_tls_le_move_zero_X0X1[] = {
 
  0xc0, 0xff, 0xcf, 0x00, 0xe0, 0xff, 0x33, 0x08
 
};
 
 
 
/* lw r0, r0 in the X1 pipe, used for tls ie.  */
 
static const bfd_byte insn_tls_ie_lw_X1[] = {
 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0b, 0x40
 
};
 
 
 
/* add r0, r0, tp in various pipes, used for tls ie.  */
 
static const bfd_byte insn_tls_ie_add_X0X1[] = {
 
  0x00, 0x50, 0x0f, 0x00, 0x00, 0xa8, 0x07, 0x08
 
};
 
static const bfd_byte insn_tls_ie_add_Y0Y1[] = {
 
  0x00, 0x50, 0x03, 0x08, 0x00, 0xa8, 0x01, 0x8c
 
};
 
 
 
/* move r0, r0 in various pipes, used for tls gd.  */
 
static const bfd_byte insn_tls_gd_add_X0X1[] = {
 
  0x00, 0xf0, 0xcf, 0x00, 0x00, 0xf8, 0x33, 0x08
 
};
 
static const bfd_byte insn_tls_gd_add_Y0Y1[] = {
 
  0x00, 0xf0, 0x0b, 0x18, 0x00, 0xf8, 0x05, 0x9c
 
};
 
 
/* Relocate an TILEPRO ELF section.
/* Relocate an TILEPRO ELF section.
 
 
   The RELOCATE_SECTION function is called by the new ELF backend linker
   The RELOCATE_SECTION function is called by the new ELF backend linker
   to handle the relocations for a section.
   to handle the relocations for a section.
 
 
Line 2529... Line 2815...
  num_relocs = input_section->reloc_count;
  num_relocs = input_section->reloc_count;
  relend = relocs + num_relocs;
  relend = relocs + num_relocs;
  for (; rel < relend; rel++)
  for (; rel < relend; rel++)
    {
    {
      int r_type, tls_type;
      int r_type, tls_type;
 
      bfd_boolean is_tls_iele, is_tls_le;
      reloc_howto_type *howto;
      reloc_howto_type *howto;
      unsigned long r_symndx;
      unsigned long r_symndx;
      struct elf_link_hash_entry *h;
      struct elf_link_hash_entry *h;
      Elf_Internal_Sym *sym;
      Elf_Internal_Sym *sym;
      tilepro_create_func create_func;
      tilepro_create_func create_func;
Line 2611... Line 2898...
            name = bfd_section_name (input_bfd, sec);
            name = bfd_section_name (input_bfd, sec);
        }
        }
 
 
      switch (r_type)
      switch (r_type)
        {
        {
 
        case R_TILEPRO_TLS_GD_CALL:
 
        case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
 
        case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
 
        case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
 
        case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
 
        case R_TILEPRO_IMM16_X0_TLS_GD_HA:
 
        case R_TILEPRO_IMM16_X1_TLS_GD_HA:
 
        case R_TILEPRO_IMM16_X0_TLS_IE_HA:
 
        case R_TILEPRO_IMM16_X1_TLS_IE_HA:
 
          tls_type = GOT_UNKNOWN;
 
          if (h == NULL && local_got_offsets)
 
            tls_type =
 
              _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
 
          else if (h != NULL)
 
            tls_type = tilepro_elf_hash_entry(h)->tls_type;
 
 
 
          is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
 
          is_tls_le = is_tls_iele && (!info->shared
 
                                      && (h == NULL || h->dynindx == -1));
 
 
 
          if (r_type == R_TILEPRO_TLS_GD_CALL)
 
            {
 
              if (is_tls_le)
 
                {
 
                  /* GD -> LE */
 
                  tilepro_replace_insn (contents + rel->r_offset,
 
                                        insn_mask_X1, insn_tls_le_move_X1);
 
                  continue;
 
                }
 
              else if (is_tls_iele)
 
                {
 
                  /* GD -> IE */
 
                  tilepro_replace_insn (contents + rel->r_offset,
 
                                        insn_mask_X1, insn_tls_ie_lw_X1);
 
                  continue;
 
                }
 
 
 
              /* GD -> GD */
 
              h = (struct elf_link_hash_entry *)
 
                bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
 
                                      FALSE, TRUE);
 
              BFD_ASSERT (h != NULL);
 
              r_type = R_TILEPRO_JOFFLONG_X1_PLT;
 
              howto = tilepro_elf_howto_table + r_type;
 
            }
 
          else if (r_type == R_TILEPRO_IMM16_X0_TLS_GD_HA
 
                   || r_type == R_TILEPRO_IMM16_X0_TLS_IE_HA)
 
            {
 
              if (is_tls_le)
 
                tilepro_replace_insn (contents + rel->r_offset, srca_mask_X0,
 
                                      insn_tls_le_move_zero_X0X1);
 
            }
 
          else if (r_type == R_TILEPRO_IMM16_X1_TLS_GD_HA
 
                   || r_type == R_TILEPRO_IMM16_X1_TLS_IE_HA)
 
            {
 
              if (is_tls_le)
 
                tilepro_replace_insn (contents + rel->r_offset, srca_mask_X1,
 
                                      insn_tls_le_move_zero_X0X1);
 
            }
 
          else
 
            {
 
              const bfd_byte *mask = NULL;
 
              const bfd_byte *add_insn = NULL;
 
 
 
              switch (r_type)
 
                {
 
                case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
 
                  add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
 
                    : insn_tls_gd_add_X0X1;
 
                  mask = insn_mask_X0_no_dest_no_srca;
 
                  break;
 
                case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
 
                  add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
 
                    : insn_tls_gd_add_X0X1;
 
                  mask = insn_mask_X1_no_dest_no_srca;
 
                  break;
 
                case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
 
                  add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
 
                    : insn_tls_gd_add_Y0Y1;
 
                  mask = insn_mask_Y0_no_dest_no_srca;
 
                  break;
 
                case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
 
                  add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
 
                    : insn_tls_gd_add_Y0Y1;
 
                  mask = insn_mask_Y1_no_dest_no_srca;
 
                  break;
 
                }
 
 
 
              tilepro_replace_insn (contents + rel->r_offset, mask, add_insn);
 
 
 
              continue;
 
            }
 
          break;
 
        case R_TILEPRO_TLS_IE_LOAD:
 
          if (!info->shared && (h == NULL || h->dynindx == -1))
 
            /* IE -> LE */
 
            tilepro_replace_insn (contents + rel->r_offset,
 
                                  insn_mask_X1_no_dest_no_srca,
 
                                  insn_tls_le_move_X1);
 
          else
 
            /* IE -> IE */
 
            tilepro_replace_insn (contents + rel->r_offset,
 
                                  insn_mask_X1_no_dest_no_srca,
 
                                  insn_tls_ie_lw_X1);
 
          continue;
 
          break;
 
        default:
 
          break;
 
        }
 
 
 
      switch (r_type)
 
        {
        case R_TILEPRO_IMM16_X0_GOT:
        case R_TILEPRO_IMM16_X0_GOT:
        case R_TILEPRO_IMM16_X1_GOT:
        case R_TILEPRO_IMM16_X1_GOT:
        case R_TILEPRO_IMM16_X0_GOT_LO:
        case R_TILEPRO_IMM16_X0_GOT_LO:
        case R_TILEPRO_IMM16_X1_GOT_LO:
        case R_TILEPRO_IMM16_X1_GOT_LO:
        case R_TILEPRO_IMM16_X0_GOT_HI:
        case R_TILEPRO_IMM16_X0_GOT_HI:
Line 2906... Line 3305...
              if (! relocate)
              if (! relocate)
                continue;
                continue;
            }
            }
          break;
          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:
 
          if (info->shared)
 
            {
 
              Elf_Internal_Rela outrel;
 
              bfd_boolean skip;
 
 
 
              BFD_ASSERT (sreloc != NULL);
 
              skip = FALSE;
 
              outrel.r_offset =
 
                _bfd_elf_section_offset (output_bfd, info, input_section,
 
                                         rel->r_offset);
 
              if (outrel.r_offset == (bfd_vma) -1)
 
                skip = TRUE;
 
              else if (outrel.r_offset == (bfd_vma) -2)
 
                skip = TRUE;
 
              outrel.r_offset += (input_section->output_section->vma
 
                                  + input_section->output_offset);
 
              if (skip)
 
                memset (&outrel, 0, sizeof outrel);
 
              else
 
                {
 
                  outrel.r_info = ELF32_R_INFO (0, r_type);
 
                  outrel.r_addend = relocation - dtpoff_base (info)
 
                                    + rel->r_addend;
 
                }
 
 
 
              tilepro_elf_append_rela_32 (output_bfd, sreloc, &outrel);
 
              continue;
 
            }
 
          relocation = tpoff (info, relocation);
 
          break;
 
 
        case R_TILEPRO_IMM16_X0_TLS_GD:
        case R_TILEPRO_IMM16_X0_TLS_GD:
        case R_TILEPRO_IMM16_X1_TLS_GD:
        case R_TILEPRO_IMM16_X1_TLS_GD:
        case R_TILEPRO_IMM16_X0_TLS_GD_LO:
        case R_TILEPRO_IMM16_X0_TLS_GD_LO:
        case R_TILEPRO_IMM16_X1_TLS_GD_LO:
        case R_TILEPRO_IMM16_X1_TLS_GD_LO:
        case R_TILEPRO_IMM16_X0_TLS_GD_HI:
        case R_TILEPRO_IMM16_X0_TLS_GD_HI:
        case R_TILEPRO_IMM16_X1_TLS_GD_HI:
        case R_TILEPRO_IMM16_X1_TLS_GD_HI:
        case R_TILEPRO_IMM16_X0_TLS_GD_HA:
        case R_TILEPRO_IMM16_X0_TLS_GD_HA:
        case R_TILEPRO_IMM16_X1_TLS_GD_HA:
        case R_TILEPRO_IMM16_X1_TLS_GD_HA:
          tls_type = GOT_TLS_GD;
 
          goto have_tls_reference;
 
 
 
        case R_TILEPRO_IMM16_X0_TLS_IE:
        case R_TILEPRO_IMM16_X0_TLS_IE:
        case R_TILEPRO_IMM16_X1_TLS_IE:
        case R_TILEPRO_IMM16_X1_TLS_IE:
        case R_TILEPRO_IMM16_X0_TLS_IE_LO:
        case R_TILEPRO_IMM16_X0_TLS_IE_LO:
        case R_TILEPRO_IMM16_X1_TLS_IE_LO:
        case R_TILEPRO_IMM16_X1_TLS_IE_LO:
        case R_TILEPRO_IMM16_X0_TLS_IE_HI:
        case R_TILEPRO_IMM16_X0_TLS_IE_HI:
        case R_TILEPRO_IMM16_X1_TLS_IE_HI:
        case R_TILEPRO_IMM16_X1_TLS_IE_HI:
        case R_TILEPRO_IMM16_X0_TLS_IE_HA:
        case R_TILEPRO_IMM16_X0_TLS_IE_HA:
        case R_TILEPRO_IMM16_X1_TLS_IE_HA:
        case R_TILEPRO_IMM16_X1_TLS_IE_HA:
          tls_type = GOT_TLS_IE;
          r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
          /* Fall through. */
          tls_type = GOT_UNKNOWN;
 
 
        have_tls_reference:
 
          if (h == NULL && local_got_offsets)
          if (h == NULL && local_got_offsets)
            tls_type
            tls_type
              = _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
              = _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
          else if (h != NULL)
          else if (h != NULL)
            {
            {
              tls_type = tilepro_elf_hash_entry(h)->tls_type;
              tls_type = tilepro_elf_hash_entry(h)->tls_type;
 
              if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
 
                r_type = tilepro_tls_translate_to_le (r_type);
            }
            }
          if (tls_type == GOT_TLS_IE)
          if (tls_type == GOT_TLS_IE)
            switch (r_type)
            r_type = tilepro_tls_translate_to_ie (r_type);
 
 
 
          if (r_type == R_TILEPRO_IMM16_X0_TLS_LE
 
              || r_type == R_TILEPRO_IMM16_X1_TLS_LE
 
              || r_type == R_TILEPRO_IMM16_X0_TLS_LE_LO
 
              || r_type == R_TILEPRO_IMM16_X1_TLS_LE_LO
 
              || r_type == R_TILEPRO_IMM16_X0_TLS_LE_HI
 
              || r_type == R_TILEPRO_IMM16_X1_TLS_LE_HI
 
              || r_type == R_TILEPRO_IMM16_X0_TLS_LE_HA
 
              || r_type == R_TILEPRO_IMM16_X1_TLS_LE_HA)
              {
              {
              case R_TILEPRO_IMM16_X0_TLS_GD:
              relocation = tpoff (info, relocation);
                r_type = R_TILEPRO_IMM16_X0_TLS_IE;
 
                break;
 
              case R_TILEPRO_IMM16_X1_TLS_GD:
 
                r_type = R_TILEPRO_IMM16_X1_TLS_IE;
 
                break;
 
              case R_TILEPRO_IMM16_X0_TLS_GD_LO:
 
                r_type = R_TILEPRO_IMM16_X0_TLS_IE_LO;
 
                break;
 
              case R_TILEPRO_IMM16_X1_TLS_GD_LO:
 
                r_type = R_TILEPRO_IMM16_X1_TLS_IE_LO;
 
                break;
 
              case R_TILEPRO_IMM16_X0_TLS_GD_HI:
 
                r_type = R_TILEPRO_IMM16_X0_TLS_IE_HI;
 
                break;
 
              case R_TILEPRO_IMM16_X1_TLS_GD_HI:
 
                r_type = R_TILEPRO_IMM16_X1_TLS_IE_HI;
 
                break;
 
              case R_TILEPRO_IMM16_X0_TLS_GD_HA:
 
                r_type = R_TILEPRO_IMM16_X0_TLS_IE_HA;
 
                break;
 
              case R_TILEPRO_IMM16_X1_TLS_GD_HA:
 
                r_type = R_TILEPRO_IMM16_X1_TLS_IE_HA;
 
                break;
                break;
              }
              }
 
 
          if (h != NULL)
          if (h != NULL)
            {
            {

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.