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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [bfd/] [elfxx-sparc.c] - Diff between revs 157 and 225

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 157 Rev 225
Line 1... Line 1...
/* SPARC-specific support for ELF
/* SPARC-specific support for ELF
   Copyright 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
   Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
Line 256... Line 256...
  HOWTO(R_SPARC_TLS_DTPMOD32,0,0, 0,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD32",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_TLS_DTPMOD32,0,0, 0,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD32",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_TLS_DTPMOD64,0,0, 0,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD64",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_TLS_DTPMOD64,0,0, 0,FALSE,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD64",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_TLS_DTPOFF32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",FALSE,0,0xffffffff,TRUE),
  HOWTO(R_SPARC_TLS_DTPOFF32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",FALSE,0,0xffffffff,TRUE),
  HOWTO(R_SPARC_TLS_DTPOFF64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",FALSE,0,MINUS_ONE,TRUE),
  HOWTO(R_SPARC_TLS_DTPOFF64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",FALSE,0,MINUS_ONE,TRUE),
  HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF32",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF32",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF64",FALSE,0,0x00000000,TRUE)
  HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF64",FALSE,0,0x00000000,TRUE),
 
  HOWTO(R_SPARC_GOTDATA_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_HIX22",FALSE,0,0x003fffff, FALSE),
 
  HOWTO(R_SPARC_GOTDATA_LOX10,0,2,0,FALSE,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_GOTDATA_LOX10",FALSE,0,0x000003ff, FALSE),
 
  HOWTO(R_SPARC_GOTDATA_OP_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_OP_HIX22",FALSE,0,0x003fffff, FALSE),
 
  HOWTO(R_SPARC_GOTDATA_OP_LOX10,0,2,0,FALSE,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_GOTDATA_OP_LOX10",FALSE,0,0x000003ff, FALSE),
 
  HOWTO(R_SPARC_GOTDATA_OP,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_GOTDATA_OP",FALSE,0,0x00000000,TRUE),
};
};
static reloc_howto_type sparc_vtinherit_howto =
static reloc_howto_type sparc_vtinherit_howto =
  HOWTO (R_SPARC_GNU_VTINHERIT, 0,2,0,FALSE,0,complain_overflow_dont, NULL, "R_SPARC_GNU_VTINHERIT", FALSE,0, 0, FALSE);
  HOWTO (R_SPARC_GNU_VTINHERIT, 0,2,0,FALSE,0,complain_overflow_dont, NULL, "R_SPARC_GNU_VTINHERIT", FALSE,0, 0, FALSE);
static reloc_howto_type sparc_vtentry_howto =
static reloc_howto_type sparc_vtentry_howto =
  HOWTO (R_SPARC_GNU_VTENTRY, 0,2,0,FALSE,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_SPARC_GNU_VTENTRY", FALSE,0,0, FALSE);
  HOWTO (R_SPARC_GNU_VTENTRY, 0,2,0,FALSE,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_SPARC_GNU_VTENTRY", FALSE,0,0, FALSE);
Line 347... Line 352...
  { BFD_RELOC_SPARC_HIX22, R_SPARC_HIX22 },
  { BFD_RELOC_SPARC_HIX22, R_SPARC_HIX22 },
  { BFD_RELOC_SPARC_LOX10, R_SPARC_LOX10 },
  { BFD_RELOC_SPARC_LOX10, R_SPARC_LOX10 },
  { BFD_RELOC_SPARC_H44, R_SPARC_H44 },
  { BFD_RELOC_SPARC_H44, R_SPARC_H44 },
  { BFD_RELOC_SPARC_M44, R_SPARC_M44 },
  { BFD_RELOC_SPARC_M44, R_SPARC_M44 },
  { BFD_RELOC_SPARC_L44, R_SPARC_L44 },
  { BFD_RELOC_SPARC_L44, R_SPARC_L44 },
 
  { BFD_RELOC_SPARC_GOTDATA_HIX22, R_SPARC_GOTDATA_HIX22 },
 
  { BFD_RELOC_SPARC_GOTDATA_LOX10, R_SPARC_GOTDATA_LOX10 },
 
  { BFD_RELOC_SPARC_GOTDATA_OP_HIX22, R_SPARC_GOTDATA_OP_HIX22 },
 
  { BFD_RELOC_SPARC_GOTDATA_OP_LOX10, R_SPARC_GOTDATA_OP_LOX10 },
 
  { BFD_RELOC_SPARC_GOTDATA_OP, R_SPARC_GOTDATA_OP },
  { BFD_RELOC_SPARC_REGISTER, R_SPARC_REGISTER },
  { BFD_RELOC_SPARC_REGISTER, R_SPARC_REGISTER },
  { BFD_RELOC_VTABLE_INHERIT, R_SPARC_GNU_VTINHERIT },
  { BFD_RELOC_VTABLE_INHERIT, R_SPARC_GNU_VTINHERIT },
  { BFD_RELOC_VTABLE_ENTRY, R_SPARC_GNU_VTENTRY },
  { BFD_RELOC_VTABLE_ENTRY, R_SPARC_GNU_VTENTRY },
  { BFD_RELOC_SPARC_REV32, R_SPARC_REV32 },
  { BFD_RELOC_SPARC_REV32, R_SPARC_REV32 },
};
};
Line 887... Line 897...
 
 
  htab = _bfd_sparc_elf_hash_table (info);
  htab = _bfd_sparc_elf_hash_table (info);
  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
  BFD_ASSERT (htab->sgot != NULL);
  BFD_ASSERT (htab->sgot != NULL);
 
 
  htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got",
  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
                                               SEC_ALLOC
 
                                               | SEC_LOAD
 
                                               | SEC_HAS_CONTENTS
 
                                               | SEC_IN_MEMORY
 
                                               | SEC_LINKER_CREATED
 
                                               | SEC_READONLY);
 
  if (htab->srelgot == NULL
  if (htab->srelgot == NULL
      || ! bfd_set_section_alignment (dynobj, htab->srelgot,
      || ! bfd_set_section_alignment (dynobj, htab->srelgot,
                                      htab->word_align_power))
                                      htab->word_align_power))
    return FALSE;
    return FALSE;
 
 
Line 1176... Line 1180...
          /* Fall through */
          /* Fall through */
 
 
        case R_SPARC_GOT10:
        case R_SPARC_GOT10:
        case R_SPARC_GOT13:
        case R_SPARC_GOT13:
        case R_SPARC_GOT22:
        case R_SPARC_GOT22:
 
        case R_SPARC_GOTDATA_HIX22:
 
        case R_SPARC_GOTDATA_LOX10:
 
        case R_SPARC_GOTDATA_OP_HIX22:
 
        case R_SPARC_GOTDATA_OP_LOX10:
        case R_SPARC_TLS_GD_HI22:
        case R_SPARC_TLS_GD_HI22:
        case R_SPARC_TLS_GD_LO10:
        case R_SPARC_TLS_GD_LO10:
          /* This symbol requires a global offset table entry.  */
          /* This symbol requires a global offset table entry.  */
          {
          {
            int tls_type, old_tls_type;
            int tls_type, old_tls_type;
Line 1188... Line 1196...
              {
              {
              default:
              default:
              case R_SPARC_GOT10:
              case R_SPARC_GOT10:
              case R_SPARC_GOT13:
              case R_SPARC_GOT13:
              case R_SPARC_GOT22:
              case R_SPARC_GOT22:
 
              case R_SPARC_GOTDATA_HIX22:
 
              case R_SPARC_GOTDATA_LOX10:
 
              case R_SPARC_GOTDATA_OP_HIX22:
 
              case R_SPARC_GOTDATA_OP_LOX10:
                tls_type = GOT_NORMAL;
                tls_type = GOT_NORMAL;
                break;
                break;
              case R_SPARC_TLS_GD_HI22:
              case R_SPARC_TLS_GD_HI22:
              case R_SPARC_TLS_GD_LO10:
              case R_SPARC_TLS_GD_LO10:
                tls_type = GOT_TLS_GD;
                tls_type = GOT_TLS_GD;
Line 1309... Line 1321...
                     it as WDISP30.  */
                     it as WDISP30.  */
                  if (ELF32_R_TYPE (rel->r_info) == R_SPARC_PLT32)
                  if (ELF32_R_TYPE (rel->r_info) == R_SPARC_PLT32)
                    goto r_sparc_plt32;
                    goto r_sparc_plt32;
                  break;
                  break;
                }
                }
 
              /* PR 7027: We need similar behaviour for 64-bit binaries.  */
 
              else if (r_type == R_SPARC_WPLT30)
 
                break;
 
 
              /* It does not make sense to have a procedure linkage
              /* It does not make sense to have a procedure linkage
                 table entry for a local symbol.  */
                 table entry for a local symbol.  */
              bfd_set_error (bfd_error_bad_value);
              bfd_set_error (bfd_error_bad_value);
              return FALSE;
              return FALSE;
Line 1428... Line 1443...
              /* When creating a shared object, we must copy these
              /* When creating a shared object, we must copy these
                 relocs into the output file.  We create a reloc
                 relocs into the output file.  We create a reloc
                 section in dynobj and make room for the reloc.  */
                 section in dynobj and make room for the reloc.  */
              if (sreloc == NULL)
              if (sreloc == NULL)
                {
                {
                  const char *name;
 
                  bfd *dynobj;
 
 
 
                  name = (bfd_elf_string_from_elf_section
 
                          (abfd,
 
                           elf_elfheader (abfd)->e_shstrndx,
 
                           elf_section_data (sec)->rel_hdr.sh_name));
 
                  if (name == NULL)
 
                    return FALSE;
 
 
 
                  BFD_ASSERT (CONST_STRNEQ (name, ".rela")
 
                              && strcmp (bfd_get_section_name (abfd, sec),
 
                                         name + 5) == 0);
 
 
 
                  if (htab->elf.dynobj == NULL)
                  if (htab->elf.dynobj == NULL)
                    htab->elf.dynobj = abfd;
                    htab->elf.dynobj = abfd;
                  dynobj = htab->elf.dynobj;
 
 
 
                  sreloc = bfd_get_section_by_name (dynobj, name);
                  sreloc = _bfd_elf_make_dynamic_reloc_section
                  if (sreloc == NULL)
                    (sec, htab->elf.dynobj, htab->word_align_power,
                    {
                     abfd, /*rela?*/ TRUE);
                      flagword flags;
 
 
 
                      flags = (SEC_HAS_CONTENTS | SEC_READONLY
                  if (sreloc == NULL)
                               | SEC_IN_MEMORY | SEC_LINKER_CREATED);
 
                      if ((sec->flags & SEC_ALLOC) != 0)
 
                        flags |= SEC_ALLOC | SEC_LOAD;
 
                      sreloc = bfd_make_section_with_flags (dynobj,
 
                                                            name,
 
                                                            flags);
 
                      if (sreloc == NULL
 
                          || ! bfd_set_section_alignment (dynobj, sreloc,
 
                                                          htab->word_align_power))
 
                        return FALSE;
                        return FALSE;
                    }
                    }
                  elf_section_data (sec)->sreloc = sreloc;
 
                }
 
 
 
              /* If this is a global symbol, we count the number of
              /* If this is a global symbol, we count the number of
                 relocations we need for this symbol.  */
                 relocations we need for this symbol.  */
              if (h != NULL)
              if (h != NULL)
                head = &((struct _bfd_sparc_elf_link_hash_entry *) h)->dyn_relocs;
                head = &((struct _bfd_sparc_elf_link_hash_entry *) h)->dyn_relocs;
              else
              else
                {
                {
                  /* Track dynamic relocs needed for local syms too.
                  /* Track dynamic relocs needed for local syms too.
                     We really need local syms available to do this
                     We really need local syms available to do this
                     easily.  Oh well.  */
                     easily.  Oh well.  */
 
 
                  asection *s;
                  asection *s;
                  void *vpp;
                  void *vpp;
 
                  Elf_Internal_Sym *isym;
 
 
                  s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
                  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
                                                 sec, r_symndx);
                                                abfd, r_symndx);
                  if (s == NULL)
                  if (isym == NULL)
                    return FALSE;
                    return FALSE;
 
 
 
                  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
 
                  if (s == NULL)
 
                    s = sec;
 
 
                  vpp = &elf_section_data (s)->local_dynrel;
                  vpp = &elf_section_data (s)->local_dynrel;
                  head = (struct _bfd_sparc_elf_dyn_relocs **) vpp;
                  head = (struct _bfd_sparc_elf_dyn_relocs **) vpp;
                }
                }
 
 
              p = *head;
              p = *head;
Line 1620... Line 1612...
        case R_SPARC_TLS_IE_HI22:
        case R_SPARC_TLS_IE_HI22:
        case R_SPARC_TLS_IE_LO10:
        case R_SPARC_TLS_IE_LO10:
        case R_SPARC_GOT10:
        case R_SPARC_GOT10:
        case R_SPARC_GOT13:
        case R_SPARC_GOT13:
        case R_SPARC_GOT22:
        case R_SPARC_GOT22:
 
        case R_SPARC_GOTDATA_HIX22:
 
        case R_SPARC_GOTDATA_LOX10:
 
        case R_SPARC_GOTDATA_OP_HIX22:
 
        case R_SPARC_GOTDATA_OP_LOX10:
          if (h != NULL)
          if (h != NULL)
            {
            {
              if (h->got.refcount > 0)
              if (h->got.refcount > 0)
                h->got.refcount--;
                h->got.refcount--;
            }
            }
Line 2014... Line 2010...
              else
              else
                pp = &p->next;
                pp = &p->next;
            }
            }
        }
        }
 
 
 
      if (htab->is_vxworks)
 
        {
 
          struct _bfd_sparc_elf_dyn_relocs **pp;
 
 
 
          for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
 
            {
 
              if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
 
                *pp = p->next;
 
              else
 
                pp = &p->next;
 
            }
 
        }
 
 
      /* Also discard relocs on undefined weak syms with non-default
      /* Also discard relocs on undefined weak syms with non-default
         visibility.  */
         visibility.  */
      if (eh->dyn_relocs != NULL
      if (eh->dyn_relocs != NULL
          && h->root.type == bfd_link_hash_undefweak)
          && h->root.type == bfd_link_hash_undefweak)
        {
        {
Line 2176... Line 2185...
                  /* Input section has been discarded, either because
                  /* Input section has been discarded, either because
                     it is a copy of a linkonce section or due to
                     it is a copy of a linkonce section or due to
                     linker script /DISCARD/, so we'll be discarding
                     linker script /DISCARD/, so we'll be discarding
                     the relocs too.  */
                     the relocs too.  */
                }
                }
 
              else if (htab->is_vxworks
 
                       && strcmp (p->sec->output_section->name,
 
                                  ".tls_vars") == 0)
 
                {
 
                  /* Relocations in vxworks .tls_vars sections are
 
                     handled specially by the loader.  */
 
                }
              else if (p->count != 0)
              else if (p->count != 0)
                {
                {
                  srel = elf_section_data (p->sec)->sreloc;
                  srel = elf_section_data (p->sec)->sreloc;
                  srel->size += p->count * SPARC_ELF_RELA_BYTES (htab);
                  srel->size += p->count * SPARC_ELF_RELA_BYTES (htab);
                  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
                  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
Line 2433... Line 2449...
_bfd_sparc_elf_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
_bfd_sparc_elf_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
                              struct bfd_section *section,
                              struct bfd_section *section,
                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
                              bfd_boolean *again)
                              bfd_boolean *again)
{
{
 
  if (link_info->relocatable)
 
    (*link_info->callbacks->einfo)
 
      (_("%P%F: --relax and -r may not be used together\n"));
 
 
  *again = FALSE;
  *again = FALSE;
  sec_do_relax (section) = 1;
  sec_do_relax (section) = 1;
  return TRUE;
  return TRUE;
}
}


Line 2486... Line 2506...
  bfd_vma got_base;
  bfd_vma got_base;
  asection *sreloc;
  asection *sreloc;
  Elf_Internal_Rela *rel;
  Elf_Internal_Rela *rel;
  Elf_Internal_Rela *relend;
  Elf_Internal_Rela *relend;
  int num_relocs;
  int num_relocs;
 
  bfd_boolean is_vxworks_tls;
 
 
  htab = _bfd_sparc_elf_hash_table (info);
  htab = _bfd_sparc_elf_hash_table (info);
  symtab_hdr = &elf_symtab_hdr (input_bfd);
  symtab_hdr = &elf_symtab_hdr (input_bfd);
  sym_hashes = elf_sym_hashes (input_bfd);
  sym_hashes = elf_sym_hashes (input_bfd);
  local_got_offsets = elf_local_got_offsets (input_bfd);
  local_got_offsets = elf_local_got_offsets (input_bfd);
Line 2498... Line 2519...
    got_base = 0;
    got_base = 0;
  else
  else
    got_base = elf_hash_table (info)->hgot->root.u.def.value;
    got_base = elf_hash_table (info)->hgot->root.u.def.value;
 
 
  sreloc = elf_section_data (input_section)->sreloc;
  sreloc = elf_section_data (input_section)->sreloc;
 
  /* We have to handle relocations in vxworks .tls_vars sections
 
     specially, because the dynamic loader is 'weird'.  */
 
  is_vxworks_tls = (htab->is_vxworks && info->shared
 
                    && !strcmp (input_section->output_section->name,
 
                                ".tls_vars"));
 
 
  rel = relocs;
  rel = relocs;
  if (ABI_64_P (output_bfd))
  if (ABI_64_P (output_bfd))
    num_relocs = NUM_SHDR_ENTRIES (& elf_section_data (input_section)->rel_hdr);
    num_relocs = NUM_SHDR_ENTRIES (& elf_section_data (input_section)->rel_hdr);
  else
  else
Line 2578... Line 2604...
      if (info->relocatable)
      if (info->relocatable)
        continue;
        continue;
 
 
      switch (r_type)
      switch (r_type)
        {
        {
 
        case R_SPARC_GOTDATA_HIX22:
 
        case R_SPARC_GOTDATA_LOX10:
 
        case R_SPARC_GOTDATA_OP_HIX22:
 
        case R_SPARC_GOTDATA_OP_LOX10:
 
          /* We don't support these code transformation optimizations
 
             yet, so just leave the sequence alone and treat as
 
             GOT22/GOT10.  */
 
          if (r_type == R_SPARC_GOTDATA_HIX22
 
              || r_type == R_SPARC_GOTDATA_OP_HIX22)
 
            r_type = R_SPARC_GOT22;
 
          else
 
            r_type = R_SPARC_GOT10;
 
          /* Fall through. */
 
 
        case R_SPARC_GOT10:
        case R_SPARC_GOT10:
        case R_SPARC_GOT13:
        case R_SPARC_GOT13:
        case R_SPARC_GOT22:
        case R_SPARC_GOT22:
          /* Relocation is to the entry for this symbol in the global
          /* Relocation is to the entry for this symbol in the global
             offset table.  */
             offset table.  */
Line 2696... Line 2736...
                 section to another when using -K pic.  We treat it as
                 section to another when using -K pic.  We treat it as
                 WDISP30.  */
                 WDISP30.  */
              if (h == NULL)
              if (h == NULL)
                break;
                break;
            }
            }
 
          /* PR 7027: We need similar behaviour for 64-bit binaries.  */
 
          else if (r_type == R_SPARC_WPLT30 && h == NULL)
 
            break;
          else
          else
            {
            {
              BFD_ASSERT (h != NULL);
              BFD_ASSERT (h != NULL);
            }
            }
 
 
Line 2764... Line 2807...
        case R_SPARC_H44:
        case R_SPARC_H44:
        case R_SPARC_M44:
        case R_SPARC_M44:
        case R_SPARC_L44:
        case R_SPARC_L44:
        case R_SPARC_UA64:
        case R_SPARC_UA64:
        r_sparc_plt32:
        r_sparc_plt32:
          if ((input_section->flags & SEC_ALLOC) == 0)
          if ((input_section->flags & SEC_ALLOC) == 0
 
              || is_vxworks_tls)
            break;
            break;
 
 
          if ((info->shared
          if ((info->shared
               && (h == NULL
               && (h == NULL
                   || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
                   || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
Line 3227... Line 3271...
              insn = (insn & ~0x7c000) | 0x1c000;
              insn = (insn & ~0x7c000) | 0x1c000;
              bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
              bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
            }
            }
          continue;
          continue;
 
 
 
        case R_SPARC_GOTDATA_OP:
 
          /* We don't support gotdata code transformation optimizations
 
             yet, so simply leave the sequence as-is.  */
 
          continue;
 
 
        case R_SPARC_TLS_IE_LD:
        case R_SPARC_TLS_IE_LD:
        case R_SPARC_TLS_IE_LDX:
        case R_SPARC_TLS_IE_LDX:
          if (! info->shared && (h == NULL || h->dynindx == -1))
          if (! info->shared && (h == NULL || h->dynindx == -1))
            {
            {
              bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
              bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);

powered by: WebSVN 2.1.0

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