Back to index

cell-binutils  2.17cvs20070401
Classes | Defines | Functions | Variables
elf32-mips.c File Reference
#include "bfd.h"
#include "sysdep.h"
#include "libbfd.h"
#include "bfdlink.h"
#include "genlink.h"
#include "elf-bfd.h"
#include "elfxx-mips.h"
#include "elf/mips.h"
#include "elf-vxworks.h"
#include "coff/sym.h"
#include "coff/symconst.h"
#include "coff/internal.h"
#include "coff/ecoff.h"
#include "coff/mips.h"
#include "ecoffswap.h"
#include "elf32-target.h"

Go to the source code of this file.

Classes

struct  elf_reloc_map

Defines

#define ECOFF_SIGNED_32
#define ABI_N32_P(abfd)   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
#define SGI_COMPAT(abfd)   (elf32_mips_irix_compat (abfd) != ict_none)
#define MIPS_RESERVED_GOTNO   (2)
#define MINUS_ONE   (((bfd_vma)0) - 1)
#define ELF_ARCH   bfd_arch_mips
#define ELF_MACHINE_CODE   EM_MIPS
#define elf_backend_collect   TRUE
#define elf_backend_type_change_ok   TRUE
#define elf_backend_can_gc_sections   TRUE
#define elf_info_to_howto   mips_info_to_howto_rela
#define elf_info_to_howto_rel   mips_info_to_howto_rel
#define elf_backend_sym_is_global   mips_elf_sym_is_global
#define elf_backend_object_p   mips_elf32_object_p
#define elf_backend_symbol_processing   _bfd_mips_elf_symbol_processing
#define elf_backend_section_processing   _bfd_mips_elf_section_processing
#define elf_backend_section_from_shdr   _bfd_mips_elf_section_from_shdr
#define elf_backend_fake_sections   _bfd_mips_elf_fake_sections
#define elf_backend_section_from_bfd_section   _bfd_mips_elf_section_from_bfd_section
#define elf_backend_add_symbol_hook   _bfd_mips_elf_add_symbol_hook
#define elf_backend_link_output_symbol_hook   _bfd_mips_elf_link_output_symbol_hook
#define elf_backend_create_dynamic_sections   _bfd_mips_elf_create_dynamic_sections
#define elf_backend_check_relocs   _bfd_mips_elf_check_relocs
#define elf_backend_merge_symbol_attribute   _bfd_mips_elf_merge_symbol_attribute
#define elf_backend_adjust_dynamic_symbol   _bfd_mips_elf_adjust_dynamic_symbol
#define elf_backend_always_size_sections   _bfd_mips_elf_always_size_sections
#define elf_backend_size_dynamic_sections   _bfd_mips_elf_size_dynamic_sections
#define elf_backend_init_index_section   _bfd_elf_init_1_index_section
#define elf_backend_relocate_section   _bfd_mips_elf_relocate_section
#define elf_backend_finish_dynamic_symbol   _bfd_mips_elf_finish_dynamic_symbol
#define elf_backend_finish_dynamic_sections   _bfd_mips_elf_finish_dynamic_sections
#define elf_backend_final_write_processing   _bfd_mips_elf_final_write_processing
#define elf_backend_additional_program_headers   _bfd_mips_elf_additional_program_headers
#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_sweep_hook   _bfd_mips_elf_gc_sweep_hook
#define elf_backend_copy_indirect_symbol   _bfd_mips_elf_copy_indirect_symbol
#define elf_backend_hide_symbol   _bfd_mips_elf_hide_symbol
#define elf_backend_grok_prstatus   elf32_mips_grok_prstatus
#define elf_backend_grok_psinfo   elf32_mips_grok_psinfo
#define elf_backend_ecoff_debug_swap   &mips_elf32_ecoff_debug_swap
#define elf_backend_got_header_size   (4 * MIPS_RESERVED_GOTNO)
#define elf_backend_may_use_rel_p   1
#define elf_backend_may_use_rela_p   0
#define elf_backend_default_use_rela_p   0
#define elf_backend_sign_extend_vma   TRUE
#define elf_backend_discard_info   _bfd_mips_elf_discard_info
#define elf_backend_ignore_discarded_relocs   _bfd_mips_elf_ignore_discarded_relocs
#define elf_backend_mips_irix_compat   elf32_mips_irix_compat
#define elf_backend_mips_rtype_to_howto   mips_elf32_rtype_to_howto
#define bfd_elf32_bfd_is_local_label_name   mips_elf_is_local_label_name
#define bfd_elf32_find_nearest_line   _bfd_mips_elf_find_nearest_line
#define bfd_elf32_find_inliner_info   _bfd_mips_elf_find_inliner_info
#define bfd_elf32_new_section_hook   _bfd_mips_elf_new_section_hook
#define bfd_elf32_set_section_contents   _bfd_mips_elf_set_section_contents
#define bfd_elf32_bfd_get_relocated_section_contents   _bfd_elf_mips_get_relocated_section_contents
#define bfd_elf32_bfd_link_hash_table_create   _bfd_mips_elf_link_hash_table_create
#define bfd_elf32_bfd_final_link   _bfd_mips_elf_final_link
#define bfd_elf32_bfd_merge_private_bfd_data   _bfd_mips_elf_merge_private_bfd_data
#define bfd_elf32_bfd_set_private_flags   _bfd_mips_elf_set_private_flags
#define bfd_elf32_bfd_print_private_bfd_data   _bfd_mips_elf_print_private_bfd_data
#define TARGET_LITTLE_SYM   bfd_elf32_littlemips_vec
#define TARGET_LITTLE_NAME   "elf32-littlemips"
#define TARGET_BIG_SYM   bfd_elf32_bigmips_vec
#define TARGET_BIG_NAME   "elf32-bigmips"
#define ELF_MAXPAGESIZE   0x1000
#define ELF_COMMONPAGESIZE   0x1000
#define TARGET_LITTLE_SYM   bfd_elf32_tradlittlemips_vec
#define TARGET_LITTLE_NAME   "elf32-tradlittlemips"
#define TARGET_BIG_SYM   bfd_elf32_tradbigmips_vec
#define TARGET_BIG_NAME   "elf32-tradbigmips"
#define ELF_MAXPAGESIZE   0x10000
#define ELF_COMMONPAGESIZE   0x1000
#define elf32_bed   elf32_tradbed
#define TARGET_LITTLE_SYM   bfd_elf32_littlemips_vxworks_vec
#define TARGET_LITTLE_NAME   "elf32-littlemips-vxworks"
#define TARGET_BIG_SYM   bfd_elf32_bigmips_vxworks_vec
#define TARGET_BIG_NAME   "elf32-bigmips-vxworks"
#define elf32_bed   elf32_mips_vxworks_bed
#define ELF_MAXPAGESIZE   0x1000
#define ELF_COMMONPAGESIZE   0x1000
#define elf_backend_want_got_plt   1
#define elf_backend_want_plt_sym   1
#define elf_backend_got_symbol_offset   0
#define elf_backend_want_dynbss   1
#define elf_backend_may_use_rel_p   0
#define elf_backend_may_use_rela_p   1
#define elf_backend_default_use_rela_p   1
#define elf_backend_got_header_size   (4 * 3)
#define elf_backend_plt_readonly   1
#define bfd_elf32_bfd_reloc_type_lookup   mips_vxworks_bfd_reloc_type_lookup
#define bfd_elf32_bfd_reloc_name_lookup   mips_vxworks_bfd_reloc_name_lookup
#define elf_backend_mips_rtype_to_howto   mips_vxworks_rtype_to_howto
#define elf_backend_adjust_dynamic_symbol   _bfd_mips_vxworks_adjust_dynamic_symbol
#define elf_backend_finish_dynamic_symbol   _bfd_mips_vxworks_finish_dynamic_symbol
#define bfd_elf32_bfd_link_hash_table_create   _bfd_mips_vxworks_link_hash_table_create
#define elf_backend_add_symbol_hook   elf_vxworks_add_symbol_hook
#define elf_backend_link_output_symbol_hook   elf_vxworks_link_output_symbol_hook
#define elf_backend_emit_relocs   elf_vxworks_emit_relocs
#define elf_backend_final_write_processing   mips_vxworks_final_write_processing

Functions

static bfd_reloc_status_type gprel32_with_gp (bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma)
static bfd_reloc_status_type mips_elf_gprel32_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
static bfd_reloc_status_type mips32_64bit_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
static reloc_howto_type * bfd_elf32_bfd_reloc_type_lookup (bfd *, bfd_reloc_code_real_type)
static reloc_howto_type * mips_elf32_rtype_to_howto (unsigned int, bfd_boolean)
static void mips_info_to_howto_rel (bfd *, arelent *, Elf_Internal_Rela *)
static void mips_info_to_howto_rela (bfd *, arelent *, Elf_Internal_Rela *)
static bfd_boolean mips_elf_sym_is_global (bfd *, asymbol *)
static bfd_boolean mips_elf32_object_p (bfd *)
static bfd_boolean mips_elf_is_local_label_name (bfd *, const char *)
static bfd_reloc_status_type mips16_gprel_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **)
static bfd_reloc_status_type mips_elf_final_gp (bfd *, asymbol *, bfd_boolean, char **, bfd_vma *)
static bfd_boolean mips_elf_assign_gp (bfd *, bfd_vma *)
static bfd_boolean elf32_mips_grok_prstatus (bfd *, Elf_Internal_Note *)
static bfd_boolean elf32_mips_grok_psinfo (bfd *, Elf_Internal_Note *)
static irix_compat_t elf32_mips_irix_compat (bfd *)
bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, void *data, asection *input_section, bfd *output_bfd, char **error_message)
static bfd_reloc_status_type mips32_64bit_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol ATTRIBUTE_UNUSED, void *data, asection *input_section, bfd *output_bfd, char **error_message)
static reloc_howto_type * bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
static reloc_howto_type * mips_elf32_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p ATTRIBUTE_UNUSED)
static bfd_boolean mips_elf_sym_is_global (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
static reloc_howto_type * mips_vxworks_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
static reloc_howto_type * mips_vxworks_bfd_reloc_name_lookup (bfd *abfd, const char *r_name)
static reloc_howto_type * mips_vxworks_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p)
static void mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)

Variables

const bfd_target bfd_elf32_bigmips_vec
const bfd_target bfd_elf32_littlemips_vec
static reloc_howto_type elf_mips_howto_table_rel []
static reloc_howto_type elf_mips_ctor64_howto
static reloc_howto_type elf_mips16_howto_table_rel []
static reloc_howto_type elf_mips_gnu_rel16_s2
static reloc_howto_type elf_mips_gnu_pcrel32
static reloc_howto_type elf_mips_gnu_vtinherit_howto
static reloc_howto_type elf_mips_gnu_vtentry_howto
static struct elf_reloc_map []
static struct ecoff_debug_swap
static reloc_howto_type mips_vxworks_copy_howto_rela
static reloc_howto_type mips_vxworks_jump_slot_howto_rela

Class Documentation

struct elf_reloc_map

Definition at line 403 of file elf32-dlx.c.

Class Members
bfd_reloc_code_real_type bfd_reloc_val
bfd_reloc_code_real_type bfd_val
unsigned char elf_reloc_val
int elf_reloc_val
unsigned char howto_index

Define Documentation

#define ABI_N32_P (   abfd)    ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)

Definition at line 88 of file elf32-mips.c.

Definition at line 1606 of file elf32-mips.c.

Definition at line 1602 of file elf32-mips.c.

Definition at line 1596 of file elf32-mips.c.

Definition at line 1791 of file elf32-mips.c.

Definition at line 1791 of file elf32-mips.c.

Definition at line 1607 of file elf32-mips.c.

Definition at line 1610 of file elf32-mips.c.

Definition at line 1779 of file elf32-mips.c.

Definition at line 1776 of file elf32-mips.c.

Definition at line 1609 of file elf32-mips.c.

Definition at line 1599 of file elf32-mips.c.

Definition at line 1598 of file elf32-mips.c.

Definition at line 1600 of file elf32-mips.c.

Definition at line 1601 of file elf32-mips.c.

#define ECOFF_SIGNED_32

Definition at line 48 of file elf32-mips.c.

#define elf32_bed   elf32_tradbed

Definition at line 1751 of file elf32-mips.c.

#define elf32_bed   elf32_mips_vxworks_bed

Definition at line 1751 of file elf32-mips.c.

#define ELF_ARCH   bfd_arch_mips

Definition at line 1535 of file elf32-mips.c.

Definition at line 1794 of file elf32-mips.c.

Definition at line 1794 of file elf32-mips.c.

Definition at line 1573 of file elf32-mips.c.

Definition at line 1785 of file elf32-mips.c.

Definition at line 1785 of file elf32-mips.c.

Definition at line 1561 of file elf32-mips.c.

Definition at line 1540 of file elf32-mips.c.

Definition at line 1556 of file elf32-mips.c.

#define elf_backend_collect   TRUE

Definition at line 1538 of file elf32-mips.c.

Definition at line 1578 of file elf32-mips.c.

Definition at line 1554 of file elf32-mips.c.

Definition at line 1769 of file elf32-mips.c.

Definition at line 1769 of file elf32-mips.c.

Definition at line 1591 of file elf32-mips.c.

#define elf_backend_ecoff_debug_swap   &mips_elf32_ecoff_debug_swap

Definition at line 1583 of file elf32-mips.c.

Definition at line 1800 of file elf32-mips.c.

Definition at line 1548 of file elf32-mips.c.

Definition at line 1803 of file elf32-mips.c.

Definition at line 1803 of file elf32-mips.c.

Definition at line 1569 of file elf32-mips.c.

Definition at line 1788 of file elf32-mips.c.

Definition at line 1788 of file elf32-mips.c.

Definition at line 1576 of file elf32-mips.c.

Definition at line 1577 of file elf32-mips.c.

Definition at line 1771 of file elf32-mips.c.

#define elf_backend_got_header_size   (4 * 3)

Definition at line 1771 of file elf32-mips.c.

Definition at line 1761 of file elf32-mips.c.

Definition at line 1581 of file elf32-mips.c.

Definition at line 1582 of file elf32-mips.c.

Definition at line 1580 of file elf32-mips.c.

Definition at line 1592 of file elf32-mips.c.

Definition at line 1565 of file elf32-mips.c.

Definition at line 1797 of file elf32-mips.c.

Definition at line 1797 of file elf32-mips.c.

#define elf_backend_may_use_rel_p   1

Definition at line 1765 of file elf32-mips.c.

#define elf_backend_may_use_rel_p   0

Definition at line 1765 of file elf32-mips.c.

Definition at line 1767 of file elf32-mips.c.

Definition at line 1767 of file elf32-mips.c.

Definition at line 1557 of file elf32-mips.c.

Definition at line 1594 of file elf32-mips.c.

Definition at line 1782 of file elf32-mips.c.

Definition at line 1782 of file elf32-mips.c.

Definition at line 1575 of file elf32-mips.c.

Definition at line 1544 of file elf32-mips.c.

#define elf_backend_plt_readonly   1

Definition at line 1773 of file elf32-mips.c.

Definition at line 1566 of file elf32-mips.c.

Definition at line 1549 of file elf32-mips.c.

Definition at line 1547 of file elf32-mips.c.

Definition at line 1546 of file elf32-mips.c.

Definition at line 1589 of file elf32-mips.c.

Definition at line 1563 of file elf32-mips.c.

Definition at line 1543 of file elf32-mips.c.

Definition at line 1545 of file elf32-mips.c.

Definition at line 1539 of file elf32-mips.c.

#define elf_backend_want_dynbss   1

Definition at line 1763 of file elf32-mips.c.

#define elf_backend_want_got_plt   1

Definition at line 1757 of file elf32-mips.c.

#define elf_backend_want_plt_sym   1

Definition at line 1759 of file elf32-mips.c.

#define ELF_COMMONPAGESIZE   0x1000

Definition at line 1754 of file elf32-mips.c.

#define ELF_COMMONPAGESIZE   0x1000

Definition at line 1754 of file elf32-mips.c.

#define ELF_COMMONPAGESIZE   0x1000

Definition at line 1754 of file elf32-mips.c.

Definition at line 1541 of file elf32-mips.c.

Definition at line 1542 of file elf32-mips.c.

#define ELF_MACHINE_CODE   EM_MIPS

Definition at line 1536 of file elf32-mips.c.

#define ELF_MAXPAGESIZE   0x1000

Definition at line 1753 of file elf32-mips.c.

#define ELF_MAXPAGESIZE   0x10000

Definition at line 1753 of file elf32-mips.c.

#define ELF_MAXPAGESIZE   0x1000

Definition at line 1753 of file elf32-mips.c.

#define MINUS_ONE   (((bfd_vma)0) - 1)

Definition at line 100 of file elf32-mips.c.

#define MIPS_RESERVED_GOTNO   (2)

Definition at line 96 of file elf32-mips.c.

#define SGI_COMPAT (   abfd)    (elf32_mips_irix_compat (abfd) != ict_none)

Definition at line 92 of file elf32-mips.c.

#define TARGET_BIG_NAME   "elf32-bigmips"

Definition at line 1748 of file elf32-mips.c.

#define TARGET_BIG_NAME   "elf32-tradbigmips"

Definition at line 1748 of file elf32-mips.c.

#define TARGET_BIG_NAME   "elf32-bigmips-vxworks"

Definition at line 1748 of file elf32-mips.c.

Definition at line 1747 of file elf32-mips.c.

Definition at line 1747 of file elf32-mips.c.

Definition at line 1747 of file elf32-mips.c.

#define TARGET_LITTLE_NAME   "elf32-littlemips"

Definition at line 1746 of file elf32-mips.c.

#define TARGET_LITTLE_NAME   "elf32-tradlittlemips"

Definition at line 1746 of file elf32-mips.c.

#define TARGET_LITTLE_NAME   "elf32-littlemips-vxworks"

Definition at line 1746 of file elf32-mips.c.

Definition at line 1745 of file elf32-mips.c.

Definition at line 1745 of file elf32-mips.c.

Definition at line 1745 of file elf32-mips.c.


Function Documentation

bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc ( bfd abfd,
arelent reloc_entry,
asymbol symbol,
void *  data,
asection input_section,
bfd output_bfd,
char **  error_message 
)

Definition at line 971 of file elf32-mips.c.

{
  bfd_boolean relocatable;
  bfd_reloc_status_type ret;
  bfd_vma gp;

  /* R_MIPS_LITERAL relocations are defined for local symbols only.  */
  if (reloc_entry->howto->type == R_MIPS_LITERAL
      && output_bfd != NULL
      && (symbol->flags & BSF_SECTION_SYM) == 0
      && (symbol->flags & BSF_LOCAL) != 0)
    {
      *error_message = (char *)
       _("literal relocation occurs for an external symbol");
      return bfd_reloc_outofrange;
    }

  if (output_bfd != NULL)
    relocatable = TRUE;
  else
    {
      relocatable = FALSE;
      output_bfd = symbol->section->output_section->owner;
    }

  ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
                        &gp);
  if (ret != bfd_reloc_ok)
    return ret;

  return _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
                                   input_section, relocatable,
                                   data, gp);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static reloc_howto_type* bfd_elf32_bfd_reloc_name_lookup ( bfd *abfd  ATTRIBUTE_UNUSED,
const char *  r_name 
) [static]

Definition at line 1278 of file elf32-mips.c.

{
  unsigned int i;

  for (i = 0;
       i < (sizeof (elf_mips_howto_table_rel)
           / sizeof (elf_mips_howto_table_rel[0]));
       i++)
    if (elf_mips_howto_table_rel[i].name != NULL
       && strcasecmp (elf_mips_howto_table_rel[i].name, r_name) == 0)
      return &elf_mips_howto_table_rel[i];

  for (i = 0;
       i < (sizeof (elf_mips16_howto_table_rel)
           / sizeof (elf_mips16_howto_table_rel[0]));
       i++)
    if (elf_mips16_howto_table_rel[i].name != NULL
       && strcasecmp (elf_mips16_howto_table_rel[i].name, r_name) == 0)
      return &elf_mips16_howto_table_rel[i];

  if (strcasecmp (elf_mips_gnu_pcrel32.name, r_name) == 0)
    return &elf_mips_gnu_pcrel32;
  if (strcasecmp (elf_mips_gnu_rel16_s2.name, r_name) == 0)
    return &elf_mips_gnu_rel16_s2;
  if (strcasecmp (elf_mips_gnu_vtinherit_howto.name, r_name) == 0)
    return &elf_mips_gnu_vtinherit_howto;
  if (strcasecmp (elf_mips_gnu_vtentry_howto.name, r_name) == 0)
    return &elf_mips_gnu_vtentry_howto;

  return NULL;
}

Here is the call graph for this function:

static reloc_howto_type * bfd_elf32_bfd_reloc_type_lookup ( bfd abfd,
bfd_reloc_code_real_type  code 
) [static]

Definition at line 1232 of file elf32-mips.c.

{
  unsigned int i;
  reloc_howto_type *howto_table = elf_mips_howto_table_rel;
  reloc_howto_type *howto16_table = elf_mips16_howto_table_rel;

  for (i = 0; i < sizeof (mips_reloc_map) / sizeof (struct elf_reloc_map);
       i++)
    {
      if (mips_reloc_map[i].bfd_val == code)
       return &howto_table[(int) mips_reloc_map[i].elf_val];
    }

  for (i = 0; i < sizeof (mips16_reloc_map) / sizeof (struct elf_reloc_map);
       i++)
    {
      if (mips16_reloc_map[i].bfd_val == code)
       return &howto16_table[(int) mips16_reloc_map[i].elf_val];
    }

  switch (code)
    {
    default:
      bfd_set_error (bfd_error_bad_value);
      return NULL;

    case BFD_RELOC_CTOR:
      /* We need to handle BFD_RELOC_CTOR specially.
        Select the right relocation (R_MIPS_32 or R_MIPS_64) based on the
        size of addresses of the ABI.  */
      if ((elf_elfheader (abfd)->e_flags & (E_MIPS_ABI_O64
                                       | E_MIPS_ABI_EABI64)) != 0)
       return &elf_mips_ctor64_howto;
      else
       return &howto_table[(int) R_MIPS_32];

    case BFD_RELOC_VTABLE_INHERIT:
      return &elf_mips_gnu_vtinherit_howto;
    case BFD_RELOC_VTABLE_ENTRY:
      return &elf_mips_gnu_vtentry_howto;
    case BFD_RELOC_32_PCREL:
      return &elf_mips_gnu_pcrel32;
    }
}

Here is the call graph for this function:

static bfd_boolean elf32_mips_grok_prstatus ( bfd abfd,
Elf_Internal_Note note 
) [static]

Definition at line 1422 of file elf32-mips.c.

{
  int offset;
  unsigned int size;

  switch (note->descsz)
    {
      default:
       return FALSE;

      case 256:             /* Linux/MIPS */
       /* pr_cursig */
       elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);

       /* pr_pid */
       elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);

       /* pr_reg */
       offset = 72;
       size = 180;

       break;
    }

  /* Make a ".reg/999" section.  */
  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
                                     size, note->descpos + offset);
}

Here is the call graph for this function:

static bfd_boolean elf32_mips_grok_psinfo ( bfd abfd,
Elf_Internal_Note note 
) [static]

Definition at line 1452 of file elf32-mips.c.

{
  switch (note->descsz)
    {
      default:
       return FALSE;

      case 128:             /* Linux/MIPS elf_prpsinfo */
       elf_tdata (abfd)->core_program
        = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16);
       elf_tdata (abfd)->core_command
        = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80);
    }

  /* Note that for some reason, a spurious space is tacked
     onto the end of the args in some (at least one anyway)
     implementations, so strip it off if it exists.  */

  {
    char *command = elf_tdata (abfd)->core_command;
    int n = strlen (command);

    if (0 < n && command[n - 1] == ' ')
      command[n - 1] = '\0';
  }

  return TRUE;
}

Here is the call graph for this function:

static irix_compat_t elf32_mips_irix_compat ( bfd abfd) [static]

Definition at line 1484 of file elf32-mips.c.

{
  if ((abfd->xvec == &bfd_elf32_bigmips_vec)
      || (abfd->xvec == &bfd_elf32_littlemips_vec))
    return ict_irix5;
  else
    return ict_none;
}
static bfd_reloc_status_type gprel32_with_gp ( bfd abfd,
asymbol symbol,
arelent reloc_entry,
asection input_section,
bfd_boolean  relocatable,
void *  data,
bfd_vma  gp 
) [static]

Definition at line 1049 of file elf32-mips.c.

{
  bfd_vma relocation;
  bfd_vma val;

  if (bfd_is_com_section (symbol->section))
    relocation = 0;
  else
    relocation = symbol->value;

  relocation += symbol->section->output_section->vma;
  relocation += symbol->section->output_offset;

  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
    return bfd_reloc_outofrange;

  /* Set val to the offset into the section or symbol.  */
  val = reloc_entry->addend;

  if (reloc_entry->howto->partial_inplace)
    val += bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);

  /* Adjust val for the final section location and GP value.  If we
     are producing relocatable output, we don't want to do this for
     an external symbol.  */
  if (! relocatable
      || (symbol->flags & BSF_SECTION_SYM) != 0)
    val += relocation - gp;

  if (reloc_entry->howto->partial_inplace)
    bfd_put_32 (abfd, val, (bfd_byte *) data + reloc_entry->address);
  else
    reloc_entry->addend = val;

  if (relocatable)
    reloc_entry->address += input_section->output_offset;

  return bfd_reloc_ok;
}

Here is the caller graph for this function:

static bfd_reloc_status_type mips16_gprel_reloc ( bfd abfd,
arelent reloc_entry,
asymbol symbol,
void *  data,
asection input_section,
bfd output_bfd,
char **  error_message 
) [static]

Definition at line 1131 of file elf32-mips.c.

{
  bfd_boolean relocatable;
  bfd_reloc_status_type ret;
  bfd_byte *location;
  bfd_vma gp;

  /* If we're relocating, and this is an external symbol, we don't want
     to change anything.  */
  if (output_bfd != NULL
      && (symbol->flags & BSF_SECTION_SYM) == 0
      && (symbol->flags & BSF_LOCAL) != 0)
    {
      reloc_entry->address += input_section->output_offset;
      return bfd_reloc_ok;
    }

  if (output_bfd != NULL)
    relocatable = TRUE;
  else
    {
      relocatable = FALSE;
      output_bfd = symbol->section->output_section->owner;
    }

  ret = mips_elf_final_gp (output_bfd, symbol, relocatable, error_message,
                        &gp);
  if (ret != bfd_reloc_ok)
    return ret;

  location = (bfd_byte *) data + reloc_entry->address;
  _bfd_mips16_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
                               location);
  ret = _bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry,
                                   input_section, relocatable,
                                   data, gp);
  _bfd_mips16_elf_reloc_shuffle (abfd, reloc_entry->howto->type, !relocatable,
                             location);

  return ret;
}

Here is the call graph for this function:

static bfd_reloc_status_type mips32_64bit_reloc ( bfd ,
arelent ,
asymbol ,
void *  ,
asection ,
bfd ,
char **   
) [static]
static bfd_reloc_status_type mips32_64bit_reloc ( bfd abfd,
arelent reloc_entry,
asymbol *symbol  ATTRIBUTE_UNUSED,
void *  data,
asection input_section,
bfd output_bfd,
char **  error_message 
) [static]

Definition at line 1096 of file elf32-mips.c.

{
  bfd_reloc_status_type r;
  arelent reloc32;
  unsigned long val;
  bfd_size_type addr;

  /* Do a normal 32 bit relocation on the lower 32 bits.  */
  reloc32 = *reloc_entry;
  if (bfd_big_endian (abfd))
    reloc32.address += 4;
  reloc32.howto = &elf_mips_howto_table_rel[R_MIPS_32];
  r = bfd_perform_relocation (abfd, &reloc32, data, input_section,
                           output_bfd, error_message);

  /* Sign extend into the upper 32 bits.  */
  val = bfd_get_32 (abfd, (bfd_byte *) data + reloc32.address);
  if ((val & 0x80000000) != 0)
    val = 0xffffffff;
  else
    val = 0;
  addr = reloc_entry->address;
  if (bfd_little_endian (abfd))
    addr += 4;
  bfd_put_32 (abfd, val, (bfd_byte *) data + addr);

  return r;
}

Here is the call graph for this function:

static bfd_boolean mips_elf32_object_p ( bfd abfd) [static]

Definition at line 1388 of file elf32-mips.c.

{
  unsigned long mach;

  /* Irix 5 and 6 are broken.  Object file symbol tables are not always
     sorted correctly such that local symbols precede global symbols,
     and the sh_info field in the symbol table is not always right.  */
  if (SGI_COMPAT (abfd))
    elf_bad_symtab (abfd) = TRUE;

  if (ABI_N32_P (abfd))
    return FALSE;

  mach = _bfd_elf_mips_mach (elf_elfheader (abfd)->e_flags);
  bfd_default_set_arch_mach (abfd, bfd_arch_mips, mach);

  return TRUE;
}

Here is the call graph for this function:

static reloc_howto_type* mips_elf32_rtype_to_howto ( unsigned  int,
bfd_boolean   
) [static]

Here is the caller graph for this function:

static reloc_howto_type* mips_elf32_rtype_to_howto ( unsigned int  r_type,
bfd_boolean rela_p  ATTRIBUTE_UNUSED 
) [static]

Definition at line 1314 of file elf32-mips.c.

{
  switch (r_type)
    {
    case R_MIPS_GNU_VTINHERIT:
      return &elf_mips_gnu_vtinherit_howto;
    case R_MIPS_GNU_VTENTRY:
      return &elf_mips_gnu_vtentry_howto;
    case R_MIPS_GNU_REL16_S2:
      return &elf_mips_gnu_rel16_s2;
    case R_MIPS_PC32:
      return &elf_mips_gnu_pcrel32;
    default:
      if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)
        return &elf_mips16_howto_table_rel[r_type - R_MIPS16_min];
      BFD_ASSERT (r_type < (unsigned int) R_MIPS_max);
      return &elf_mips_howto_table_rel[r_type];
    }
}
static bfd_boolean mips_elf_assign_gp ( bfd output_bfd,
bfd_vma pgp 
) [static]

Definition at line 880 of file elf32-mips.c.

{
  unsigned int count;
  asymbol **sym;
  unsigned int i;

  /* If we've already figured out what GP will be, just return it.  */
  *pgp = _bfd_get_gp_value (output_bfd);
  if (*pgp)
    return TRUE;

  count = bfd_get_symcount (output_bfd);
  sym = bfd_get_outsymbols (output_bfd);

  /* The linker script will have created a symbol named `_gp' with the
     appropriate value.  */
  if (sym == NULL)
    i = count;
  else
    {
      for (i = 0; i < count; i++, sym++)
       {
         register const char *name;

         name = bfd_asymbol_name (*sym);
         if (*name == '_' && strcmp (name, "_gp") == 0)
           {
             *pgp = bfd_asymbol_value (*sym);
             _bfd_set_gp_value (output_bfd, *pgp);
             break;
           }
       }
    }

  if (i >= count)
    {
      /* Only get the error once.  */
      *pgp = 4;
      _bfd_set_gp_value (output_bfd, *pgp);
      return FALSE;
    }

  return TRUE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static bfd_reloc_status_type mips_elf_final_gp ( bfd output_bfd,
asymbol symbol,
bfd_boolean  relocatable,
char **  error_message,
bfd_vma pgp 
) [static]

Definition at line 932 of file elf32-mips.c.

{
  if (bfd_is_und_section (symbol->section)
      && ! relocatable)
    {
      *pgp = 0;
      return bfd_reloc_undefined;
    }

  *pgp = _bfd_get_gp_value (output_bfd);
  if (*pgp == 0
      && (! relocatable
         || (symbol->flags & BSF_SECTION_SYM) != 0))
    {
      if (relocatable)
       {
         /* Make up a value.  */
         *pgp = symbol->section->output_section->vma + 0x4000;
         _bfd_set_gp_value (output_bfd, *pgp);
       }
      else if (!mips_elf_assign_gp (output_bfd, pgp))
       {
         *error_message =
           (char *) _("GP relative relocation when _gp not defined");
         return bfd_reloc_dangerous;
       }
    }

  return bfd_reloc_ok;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static bfd_reloc_status_type mips_elf_gprel32_reloc ( bfd abfd,
arelent reloc_entry,
asymbol symbol,
void *  data,
asection input_section,
bfd output_bfd,
char **  error_message 
) [static]

Definition at line 1013 of file elf32-mips.c.

{
  bfd_boolean relocatable;
  bfd_reloc_status_type ret;
  bfd_vma gp;

  /* R_MIPS_GPREL32 relocations are defined for local symbols only.  */
  if (output_bfd != NULL
      && (symbol->flags & BSF_SECTION_SYM) == 0
      && (symbol->flags & BSF_LOCAL) != 0)
    {
      *error_message = (char *)
       _("32bits gp relative relocation occurs for an external symbol");
      return bfd_reloc_outofrange;
    }

  if (output_bfd != NULL)
    relocatable = TRUE;
  else
    {
      relocatable = FALSE;
      output_bfd = symbol->section->output_section->owner;
    }

  ret = mips_elf_final_gp (output_bfd, symbol, relocatable,
                        error_message, &gp);
  if (ret != bfd_reloc_ok)
    return ret;

  return gprel32_with_gp (abfd, symbol, reloc_entry, input_section,
                       relocatable, data, gp);
}

Here is the call graph for this function:

static bfd_boolean mips_elf_is_local_label_name ( bfd abfd,
const char *  name 
) [static]

Definition at line 1410 of file elf32-mips.c.

{
  if (name[0] == '$')
    return TRUE;

  /* On Irix 6, the labels go back to starting with '.', so we accept
     the generic ELF local label syntax as well.  */
  return _bfd_elf_is_local_label_name (abfd, name);
}

Here is the call graph for this function:

static bfd_boolean mips_elf_sym_is_global ( bfd ,
asymbol  
) [static]
static bfd_boolean mips_elf_sym_is_global ( bfd *abfd  ATTRIBUTE_UNUSED,
asymbol sym 
) [static]

Definition at line 1375 of file elf32-mips.c.

{
  if (SGI_COMPAT (abfd))
    return (sym->flags & BSF_SECTION_SYM) == 0;
  else
    return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
           || bfd_is_und_section (bfd_get_section (sym))
           || bfd_is_com_section (bfd_get_section (sym)));
}
static void mips_info_to_howto_rel ( bfd abfd,
arelent cache_ptr,
Elf_Internal_Rela dst 
) [static]

Definition at line 1338 of file elf32-mips.c.

{
  const struct elf_backend_data *bed;
  unsigned int r_type;

  r_type = ELF32_R_TYPE (dst->r_info);
  bed = get_elf_backend_data (abfd);
  cache_ptr->howto = bed->elf_backend_mips_rtype_to_howto (r_type, FALSE);

  /* The addend for a GPREL16 or LITERAL relocation comes from the GP
     value for the object file.  We get the addend now, rather than
     when we do the relocation, because the symbol manipulations done
     by the linker may cause us to lose track of the input BFD.  */
  if (((*cache_ptr->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0
      && (r_type == (unsigned int) R_MIPS_GPREL16
         || r_type == (unsigned int) R_MIPS_LITERAL))
    cache_ptr->addend = elf_gp (abfd);
}

Here is the caller graph for this function:

static void mips_info_to_howto_rela ( bfd abfd,
arelent cache_ptr,
Elf_Internal_Rela dst 
) [static]

Definition at line 1360 of file elf32-mips.c.

{
  mips_info_to_howto_rel (abfd, cache_ptr, dst);

  /* If we ever need to do any extra processing with dst->r_addend
     (the field omitted in an Elf_Internal_Rel) we can do it here.  */
}

Here is the call graph for this function:

static reloc_howto_type* mips_vxworks_bfd_reloc_name_lookup ( bfd abfd,
const char *  r_name 
) [static]

Definition at line 1702 of file elf32-mips.c.

Here is the call graph for this function:

static reloc_howto_type* mips_vxworks_bfd_reloc_type_lookup ( bfd abfd,
bfd_reloc_code_real_type  code 
) [static]

Definition at line 1688 of file elf32-mips.c.

static void mips_vxworks_final_write_processing ( bfd abfd,
bfd_boolean  linker 
) [static]

Definition at line 1731 of file elf32-mips.c.

Here is the call graph for this function:

static reloc_howto_type* mips_vxworks_rtype_to_howto ( unsigned int  r_type,
bfd_boolean  rela_p 
) [static]

Definition at line 1715 of file elf32-mips.c.

{
  switch (r_type)
    {
    case R_MIPS_COPY:
      return &mips_vxworks_copy_howto_rela;
    case R_MIPS_JUMP_SLOT:
      return &mips_vxworks_jump_slot_howto_rela;
    default:
      return mips_elf32_rtype_to_howto (r_type, rela_p);
    }
}

Here is the call graph for this function:


Variable Documentation

Definition at line 1495 of file elf32-mips.c.

reloc_howto_type elf_mips16_howto_table_rel[] [static]

Definition at line 737 of file elf32-mips.c.

reloc_howto_type elf_mips_ctor64_howto [static]
Initial value:
  HOWTO (R_MIPS_64,         
        0,                  
        4,                  
        32,                 
        FALSE,                     
        0,                  
        complain_overflow_signed, 
        mips32_64bit_reloc, 
        "R_MIPS_64",        
        TRUE,               
        0xffffffff,         
        0xffffffff,         
        FALSE)

Definition at line 722 of file elf32-mips.c.

reloc_howto_type elf_mips_gnu_pcrel32 [static]
Initial value:
  HOWTO (R_MIPS_PC32,              
        0,                  
        2,                  
        32,                 
        TRUE,               
        0,                  
        complain_overflow_signed, 
        _bfd_mips_elf_generic_reloc, 
        "R_MIPS_PC32",             
        TRUE,               
        0xffffffff,         
        0xffffffff,         
        TRUE)

Definition at line 829 of file elf32-mips.c.

reloc_howto_type elf_mips_gnu_rel16_s2 [static]
Initial value:
  HOWTO (R_MIPS_GNU_REL16_S2,      
        2,                  
        2,                  
        16,                 
        TRUE,               
        0,                  
        complain_overflow_signed, 
        _bfd_mips_elf_generic_reloc, 
        "R_MIPS_GNU_REL16_S2",     
        TRUE,               
        0xffff,             
        0xffff,             
        TRUE)

Definition at line 810 of file elf32-mips.c.

reloc_howto_type elf_mips_gnu_vtentry_howto [static]
Initial value:
  HOWTO (R_MIPS_GNU_VTENTRY,       
        0,                  
        2,                  
        0,                  
        FALSE,                     
        0,                  
        complain_overflow_dont, 
        _bfd_elf_rel_vtable_reloc_fn, 
        "R_MIPS_GNU_VTENTRY",      
        FALSE,                     
        0,                  
        0,                  
        FALSE)

Definition at line 861 of file elf32-mips.c.

reloc_howto_type elf_mips_gnu_vtinherit_howto [static]
Initial value:
  HOWTO (R_MIPS_GNU_VTINHERIT,     
        0,                  
        2,                  
        0,                  
        FALSE,                     
        0,                  
        complain_overflow_dont, 
        NULL,               
        "R_MIPS_GNU_VTINHERIT", 
        FALSE,                     
        0,                  
        0,                  
        FALSE)

Definition at line 845 of file elf32-mips.c.

reloc_howto_type elf_mips_howto_table_rel[] [static]

Definition at line 104 of file elf32-mips.c.

static struct elf_reloc_map [static]

Definition at line 1182 of file elf32-mips.c.

reloc_howto_type mips_vxworks_copy_howto_rela [static]
Initial value:
  HOWTO (R_MIPS_COPY,              
        0,                  
        2,                  
        32,                 
        FALSE,                     
        0,                  
        complain_overflow_bitfield, 
        bfd_elf_generic_reloc,     
        "R_MIPS_COPY",             
        FALSE,                     
        0x0,                       
        0x0,                 
        FALSE)

Definition at line 1654 of file elf32-mips.c.

reloc_howto_type mips_vxworks_jump_slot_howto_rela [static]
Initial value:
  HOWTO (R_MIPS_JUMP_SLOT,  
        0,                  
        2,                  
        32,                 
        FALSE,                     
        0,                  
        complain_overflow_bitfield, 
        bfd_elf_generic_reloc,     
        "R_MIPS_JUMP_SLOT", 
        FALSE,                     
        0x0,                       
        0x0,                 
        FALSE)

Definition at line 1670 of file elf32-mips.c.