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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [bfd/] [elf64-mips.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...
/* MIPS-specific support for 64-bit ELF
/* MIPS-specific support for 64-bit ELF
   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
   2007 Free Software Foundation, Inc.
   2006, 2007, 2008 Free Software Foundation, Inc.
   Ian Lance Taylor, Cygnus Support
   Ian Lance Taylor, Cygnus Support
   Linker support added by Mark Mitchell, CodeSourcery, LLC.
   Linker support added by Mark Mitchell, CodeSourcery, LLC.
   <mark@codesourcery.com>
   <mark@codesourcery.com>
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
Line 1326... Line 1326...
         FALSE),                /* pcrel_offset */
         FALSE),                /* pcrel_offset */
 
 
  /* TLS relocations.  */
  /* TLS relocations.  */
  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
  EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
  EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
 
 
  HOWTO (R_MIPS_TLS_DTPMOD64,   /* type */
 
         0,                      /* rightshift */
 
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         64,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_dont, /* complain_on_overflow */
 
         _bfd_mips_elf_generic_reloc, /* special_function */
 
         "R_MIPS_TLS_DTPMOD64", /* name */
 
         TRUE,                  /* partial_inplace */
 
         MINUS_ONE,             /* src_mask */
 
         MINUS_ONE,             /* dst_mask */
 
         FALSE),                /* pcrel_offset */
 
 
  HOWTO (R_MIPS_TLS_DTPREL64,   /* type */
  HOWTO (R_MIPS_TLS_DTPREL64,   /* type */
         0,                      /* rightshift */
         0,                      /* rightshift */
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
         64,                    /* bitsize */
         64,                    /* bitsize */
Line 1417... Line 1430...
         TRUE,                  /* partial_inplace */
         TRUE,                  /* partial_inplace */
         0x0000ffff,            /* src_mask */
         0x0000ffff,            /* src_mask */
         0x0000ffff,            /* dst_mask */
         0x0000ffff,            /* dst_mask */
         FALSE),                /* pcrel_offset */
         FALSE),                /* pcrel_offset */
 
 
 
  /* TLS IE dynamic relocations.  */
  EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
  EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
  EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
 
 
  HOWTO (R_MIPS_TLS_TPREL64,    /* type */
 
         0,                      /* rightshift */
 
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         64,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_dont, /* complain_on_overflow */
 
         _bfd_mips_elf_generic_reloc, /* special_function */
 
         "R_MIPS_TLS_TPREL64",  /* name */
 
         TRUE,                  /* partial_inplace */
 
         MINUS_ONE,             /* src_mask */
 
         MINUS_ONE,             /* dst_mask */
 
         FALSE),                /* pcrel_offset */
 
 
  /* TLS thread pointer offset.  */
  /* TLS thread pointer offset.  */
  HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
  HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */
         0,                      /* rightshift */
         0,                      /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
Line 1501... Line 1528...
         TRUE,                  /* partial_inplace */
         TRUE,                  /* partial_inplace */
         0x0000ffff,            /* src_mask */
         0x0000ffff,            /* src_mask */
         0x0000ffff,            /* dst_mask */
         0x0000ffff,            /* dst_mask */
         FALSE),                /* pcrel_offset */
         FALSE),                /* pcrel_offset */
 
 
  /* A placeholder for MIPS16 reference to global offset table.  */
  /* A MIPS16 reference to the global offset table.  */
  EMPTY_HOWTO (R_MIPS16_GOT16),
  HOWTO (R_MIPS16_GOT16,        /* type */
 
         0,                      /* rightshift */
 
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         16,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_dont, /* complain_on_overflow */
 
         _bfd_mips_elf_got16_reloc, /* special_function */
 
         "R_MIPS16_GOT16",      /* name */
 
         TRUE,                  /* partial_inplace */
 
         0x0000ffff,            /* src_mask */
 
         0x0000ffff,            /* dst_mask */
 
         FALSE),                /* pcrel_offset */
 
 
  /* A placeholder for MIPS16 16 bit call through global offset table.  */
  /* A MIPS16 call through the global offset table.  */
  EMPTY_HOWTO (R_MIPS16_CALL16),
  HOWTO (R_MIPS16_CALL16,       /* type */
 
         0,                      /* rightshift */
 
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         16,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_dont, /* complain_on_overflow */
 
         _bfd_mips_elf_generic_reloc, /* special_function */
 
         "R_MIPS16_CALL16",     /* name */
 
         TRUE,                  /* partial_inplace */
 
         0x0000ffff,            /* src_mask */
 
         0x0000ffff,            /* dst_mask */
 
         FALSE),                /* pcrel_offset */
 
 
  /* MIPS16 high 16 bits of symbol value.  */
  /* MIPS16 high 16 bits of symbol value.  */
  HOWTO (R_MIPS16_HI16,         /* type */
  HOWTO (R_MIPS16_HI16,         /* type */
         16,                    /* rightshift */
         16,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
Line 1573... Line 1624...
         FALSE,                 /* partial_inplace */
         FALSE,                 /* partial_inplace */
         0x0000ffff,            /* src_mask */
         0x0000ffff,            /* src_mask */
         0x0000ffff,            /* dst_mask */
         0x0000ffff,            /* dst_mask */
         FALSE),                /* pcrel_offset */
         FALSE),                /* pcrel_offset */
 
 
  /* A placeholder for MIPS16 reference to global offset table.  */
  /* A MIPS16 reference to the global offset table.  */
  EMPTY_HOWTO (R_MIPS16_GOT16),
  HOWTO (R_MIPS16_GOT16,        /* type */
 
         0,                      /* rightshift */
 
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         16,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_dont, /* complain_on_overflow */
 
         _bfd_mips_elf_got16_reloc, /* special_function */
 
         "R_MIPS16_GOT16",      /* name */
 
         FALSE,                 /* partial_inplace */
 
         0x0000ffff,            /* src_mask */
 
         0x0000ffff,            /* dst_mask */
 
         FALSE),                /* pcrel_offset */
 
 
  /* A placeholder for MIPS16 16 bit call through global offset table.  */
  /* A MIPS16 call through the global offset table.  */
  EMPTY_HOWTO (R_MIPS16_CALL16),
  HOWTO (R_MIPS16_CALL16,       /* type */
 
         0,                      /* rightshift */
 
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         16,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_dont, /* complain_on_overflow */
 
         _bfd_mips_elf_generic_reloc, /* special_function */
 
         "R_MIPS16_CALL16",     /* name */
 
         FALSE,                 /* partial_inplace */
 
         0x0000ffff,            /* src_mask */
 
         0x0000ffff,            /* dst_mask */
 
         FALSE),                /* pcrel_offset */
 
 
  /* MIPS16 high 16 bits of symbol value.  */
  /* MIPS16 high 16 bits of symbol value.  */
  HOWTO (R_MIPS16_HI16,         /* type */
  HOWTO (R_MIPS16_HI16,         /* type */
         16,                    /* rightshift */
         16,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
Line 1674... Line 1749...
         FALSE,                 /* partial_inplace */
         FALSE,                 /* partial_inplace */
         0,                      /* src_mask */
         0,                      /* src_mask */
         0x0000ffff,            /* dst_mask */
         0x0000ffff,            /* dst_mask */
         TRUE);                 /* pcrel_offset */
         TRUE);                 /* pcrel_offset */


 
/* Originally a VxWorks extension, but now used for other systems too.  */
 
static reloc_howto_type elf_mips_copy_howto =
 
  HOWTO (R_MIPS_COPY,           /* type */
 
         0,                      /* rightshift */
 
         0,                      /* this one is variable size */
 
         0,                      /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_bitfield, /* complain_on_overflow */
 
         bfd_elf_generic_reloc, /* special_function */
 
         "R_MIPS_COPY",         /* name */
 
         FALSE,                 /* partial_inplace */
 
         0x0,                   /* src_mask */
 
         0x0,                   /* dst_mask */
 
         FALSE);                /* pcrel_offset */
 
 
 
/* Originally a VxWorks extension, but now used for other systems too.  */
 
static reloc_howto_type elf_mips_jump_slot_howto =
 
  HOWTO (R_MIPS_JUMP_SLOT,      /* type */
 
         0,                      /* rightshift */
 
         4,                     /* size (0 = byte, 1 = short, 2 = long) */
 
         64,                    /* bitsize */
 
         FALSE,                 /* pc_relative */
 
         0,                      /* bitpos */
 
         complain_overflow_bitfield, /* complain_on_overflow */
 
         bfd_elf_generic_reloc, /* special_function */
 
         "R_MIPS_JUMP_SLOT",    /* name */
 
         FALSE,                 /* partial_inplace */
 
         0x0,                   /* src_mask */
 
         0x0,                   /* dst_mask */
 
         FALSE);                /* pcrel_offset */
 

/* Swap in a MIPS 64-bit Rel reloc.  */
/* Swap in a MIPS 64-bit Rel reloc.  */
 
 
static void
static void
mips_elf64_swap_reloc_in (bfd *abfd, const Elf64_Mips_External_Rel *src,
mips_elf64_swap_reloc_in (bfd *abfd, const Elf64_Mips_External_Rel *src,
                          Elf64_Mips_Internal_Rela *dst)
                          Elf64_Mips_Internal_Rela *dst)
Line 2195... Line 2302...
 
 
static const struct elf_reloc_map mips16_reloc_map[] =
static const struct elf_reloc_map mips16_reloc_map[] =
{
{
  { BFD_RELOC_MIPS16_JMP, R_MIPS16_26 - R_MIPS16_min },
  { BFD_RELOC_MIPS16_JMP, R_MIPS16_26 - R_MIPS16_min },
  { BFD_RELOC_MIPS16_GPREL, R_MIPS16_GPREL - R_MIPS16_min },
  { BFD_RELOC_MIPS16_GPREL, R_MIPS16_GPREL - R_MIPS16_min },
 
  { BFD_RELOC_MIPS16_GOT16, R_MIPS16_GOT16 - R_MIPS16_min },
 
  { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
  { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
  { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
  { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
  { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
};
};
 
 
/* Given a BFD reloc type, return a howto structure.  */
/* Given a BFD reloc type, return a howto structure.  */
Line 2231... Line 2340...
    {
    {
    case BFD_RELOC_VTABLE_INHERIT:
    case BFD_RELOC_VTABLE_INHERIT:
      return &elf_mips_gnu_vtinherit_howto;
      return &elf_mips_gnu_vtinherit_howto;
    case BFD_RELOC_VTABLE_ENTRY:
    case BFD_RELOC_VTABLE_ENTRY:
      return &elf_mips_gnu_vtentry_howto;
      return &elf_mips_gnu_vtentry_howto;
 
    case BFD_RELOC_MIPS_COPY:
 
      return &elf_mips_copy_howto;
 
    case BFD_RELOC_MIPS_JUMP_SLOT:
 
      return &elf_mips_jump_slot_howto;
    default:
    default:
      bfd_set_error (bfd_error_bad_value);
      bfd_set_error (bfd_error_bad_value);
      return NULL;
      return NULL;
    }
    }
}
}
Line 2266... Line 2379...
    return &elf_mips_gnu_vtentry_howto;
    return &elf_mips_gnu_vtentry_howto;
  if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
  if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
    return &elf_mips_gnu_rel16_s2;
    return &elf_mips_gnu_rel16_s2;
  if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0)
  if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0)
    return &elf_mips_gnu_rela16_s2;
    return &elf_mips_gnu_rela16_s2;
 
  if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0)
 
    return &elf_mips_copy_howto;
 
  if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0)
 
    return &elf_mips_jump_slot_howto;
 
 
  return NULL;
  return NULL;
}
}
 
 
/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
Line 2286... Line 2403...
    case R_MIPS_GNU_REL16_S2:
    case R_MIPS_GNU_REL16_S2:
      if (rela_p)
      if (rela_p)
        return &elf_mips_gnu_rela16_s2;
        return &elf_mips_gnu_rela16_s2;
      else
      else
        return &elf_mips_gnu_rel16_s2;
        return &elf_mips_gnu_rel16_s2;
 
    case R_MIPS_COPY:
 
      return &elf_mips_copy_howto;
 
    case R_MIPS_JUMP_SLOT:
 
      return &elf_mips_jump_slot_howto;
    default:
    default:
      if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)
      if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)
        {
        {
          if (rela_p)
          if (rela_p)
            return &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];
            return &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];
Line 3105... Line 3226...
#define elf_backend_create_dynamic_sections \
#define elf_backend_create_dynamic_sections \
                                _bfd_mips_elf_create_dynamic_sections
                                _bfd_mips_elf_create_dynamic_sections
#define elf_backend_check_relocs        _bfd_mips_elf_check_relocs
#define elf_backend_check_relocs        _bfd_mips_elf_check_relocs
#define elf_backend_merge_symbol_attribute \
#define elf_backend_merge_symbol_attribute \
                                _bfd_mips_elf_merge_symbol_attribute
                                _bfd_mips_elf_merge_symbol_attribute
 
#define elf_backend_get_target_dtag     _bfd_mips_elf_get_target_dtag
#define elf_backend_adjust_dynamic_symbol \
#define elf_backend_adjust_dynamic_symbol \
                                _bfd_mips_elf_adjust_dynamic_symbol
                                _bfd_mips_elf_adjust_dynamic_symbol
#define elf_backend_always_size_sections \
#define elf_backend_always_size_sections \
                                _bfd_mips_elf_always_size_sections
                                _bfd_mips_elf_always_size_sections
#define elf_backend_size_dynamic_sections \
#define elf_backend_size_dynamic_sections \
Line 3126... Line 3248...
#define elf_backend_modify_segment_map  _bfd_mips_elf_modify_segment_map
#define elf_backend_modify_segment_map  _bfd_mips_elf_modify_segment_map
#define elf_backend_gc_mark_hook        _bfd_mips_elf_gc_mark_hook
#define elf_backend_gc_mark_hook        _bfd_mips_elf_gc_mark_hook
#define elf_backend_gc_sweep_hook       _bfd_mips_elf_gc_sweep_hook
#define elf_backend_gc_sweep_hook       _bfd_mips_elf_gc_sweep_hook
#define elf_backend_copy_indirect_symbol \
#define elf_backend_copy_indirect_symbol \
                                        _bfd_mips_elf_copy_indirect_symbol
                                        _bfd_mips_elf_copy_indirect_symbol
#define elf_backend_hide_symbol         _bfd_mips_elf_hide_symbol
 
#define elf_backend_ignore_discarded_relocs \
#define elf_backend_ignore_discarded_relocs \
                                        _bfd_mips_elf_ignore_discarded_relocs
                                        _bfd_mips_elf_ignore_discarded_relocs
#define elf_backend_mips_irix_compat    elf64_mips_irix_compat
#define elf_backend_mips_irix_compat    elf64_mips_irix_compat
#define elf_backend_mips_rtype_to_howto mips_elf64_rtype_to_howto
#define elf_backend_mips_rtype_to_howto mips_elf64_rtype_to_howto
#define elf_backend_ecoff_debug_swap    &mips_elf64_ecoff_debug_swap
#define elf_backend_ecoff_debug_swap    &mips_elf64_ecoff_debug_swap
Line 3144... Line 3265...
/* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations
/* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations
   work better/work only in RELA, so we default to this.  */
   work better/work only in RELA, so we default to this.  */
#define elf_backend_may_use_rel_p       1
#define elf_backend_may_use_rel_p       1
#define elf_backend_may_use_rela_p      1
#define elf_backend_may_use_rela_p      1
#define elf_backend_default_use_rela_p  1
#define elf_backend_default_use_rela_p  1
 
#define elf_backend_rela_plts_and_copies_p 0
 
#define elf_backend_plt_readonly        1
 
#define elf_backend_plt_sym_val         _bfd_mips_elf_plt_sym_val
 
 
#define elf_backend_sign_extend_vma     TRUE
#define elf_backend_sign_extend_vma     TRUE
 
 
#define elf_backend_write_section       _bfd_mips_elf_write_section
#define elf_backend_write_section       _bfd_mips_elf_write_section
 
 
Line 3158... Line 3282...
#define bfd_elf64_find_inliner_info     _bfd_mips_elf_find_inliner_info
#define bfd_elf64_find_inliner_info     _bfd_mips_elf_find_inliner_info
#define bfd_elf64_new_section_hook      _bfd_mips_elf_new_section_hook
#define bfd_elf64_new_section_hook      _bfd_mips_elf_new_section_hook
#define bfd_elf64_set_section_contents  _bfd_mips_elf_set_section_contents
#define bfd_elf64_set_section_contents  _bfd_mips_elf_set_section_contents
#define bfd_elf64_bfd_get_relocated_section_contents \
#define bfd_elf64_bfd_get_relocated_section_contents \
                                _bfd_elf_mips_get_relocated_section_contents
                                _bfd_elf_mips_get_relocated_section_contents
 
#define bfd_elf64_mkobject              _bfd_mips_elf_mkobject
#define bfd_elf64_bfd_link_hash_table_create \
#define bfd_elf64_bfd_link_hash_table_create \
                                _bfd_mips_elf_link_hash_table_create
                                _bfd_mips_elf_link_hash_table_create
#define bfd_elf64_bfd_final_link        _bfd_mips_elf_final_link
#define bfd_elf64_bfd_final_link        _bfd_mips_elf_final_link
#define bfd_elf64_bfd_merge_private_bfd_data \
#define bfd_elf64_bfd_merge_private_bfd_data \
                                _bfd_mips_elf_merge_private_bfd_data
                                _bfd_mips_elf_merge_private_bfd_data

powered by: WebSVN 2.1.0

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