Back to index

cell-binutils  2.17cvs20070401
Classes | Defines | Functions | Variables
elf32-pj.c File Reference
#include "bfd.h"
#include "sysdep.h"
#include "bfdlink.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/pj.h"
#include "elf32-target.h"

Go to the source code of this file.


struct  elf_reloc_map


#define TARGET_BIG_SYM   bfd_elf32_pj_vec
#define TARGET_BIG_NAME   "elf32-pj"
#define TARGET_LITTLE_SYM   bfd_elf32_pjl_vec
#define TARGET_LITTLE_NAME   "elf32-pjl"
#define ELF_ARCH   bfd_arch_pj
#define ELF_MAXPAGESIZE   0x1000
#define bfd_elf32_bfd_get_relocated_section_contents   bfd_generic_get_relocated_section_contents
#define bfd_elf32_bfd_reloc_type_lookup   pj_elf_reloc_type_lookup
#define bfd_elf32_bfd_reloc_name_lookup   pj_elf_reloc_name_lookup
#define elf_backend_final_write_processing   pj_elf_final_write_processing
#define elf_info_to_howto   pj_elf_info_to_howto


static bfd_reloc_status_type pj_elf_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol_in, void *data, asection *input_section, bfd *output_bfd, char **error_message ATTRIBUTE_UNUSED)
static reloc_howto_type * pj_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code)
static reloc_howto_type * pj_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
static void pj_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr, Elf_Internal_Rela *dst)
static void pj_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED)


static reloc_howto_type pj_elf_howto_table []
static struct elf_reloc_map []

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

Definition at line 346 of file elf32-pj.c.

Definition at line 349 of file elf32-pj.c.

Definition at line 348 of file elf32-pj.c.

#define ELF_ARCH   bfd_arch_pj

Definition at line 342 of file elf32-pj.c.

Definition at line 350 of file elf32-pj.c.

Definition at line 351 of file elf32-pj.c.

Definition at line 344 of file elf32-pj.c.


Definition at line 343 of file elf32-pj.c.

#define ELF_MAXPAGESIZE   0x1000

Definition at line 345 of file elf32-pj.c.

#define TARGET_BIG_NAME   "elf32-pj"

Definition at line 339 of file elf32-pj.c.

Definition at line 338 of file elf32-pj.c.

#define TARGET_LITTLE_NAME   "elf32-pjl"

Definition at line 341 of file elf32-pj.c.

Definition at line 340 of file elf32-pj.c.

Function Documentation

static void pj_elf_final_write_processing ( bfd abfd,
bfd_boolean linker  ATTRIBUTE_UNUSED 
) [static]

Definition at line 331 of file elf32-pj.c.

  elf_elfheader (abfd)->e_flags |= EF_PICOJAVA_ARCH;
  elf_elfheader (abfd)->e_flags |= EF_PICOJAVA_GNUCALLS;
static void pj_elf_info_to_howto ( bfd *abfd  ATTRIBUTE_UNUSED,
arelent cache_ptr,
Elf_Internal_Rela dst 
) [static]

Definition at line 314 of file elf32-pj.c.

  unsigned int r;

  r = ELF32_R_TYPE (dst->r_info);

  BFD_ASSERT (r < (unsigned int) R_PJ_max);

  cache_ptr->howto = &pj_elf_howto_table[r];
static bfd_reloc_status_type pj_elf_reloc ( bfd abfd,
arelent reloc_entry,
asymbol symbol_in,
void *  data,
asection input_section,
bfd output_bfd,
char **error_message  ATTRIBUTE_UNUSED 
) [static]

Definition at line 33 of file elf32-pj.c.

  unsigned long insn;
  bfd_vma sym_value;
  enum elf_pj_reloc_type r_type;
  bfd_vma addr = reloc_entry->address;
  bfd_byte *hit_data = addr + (bfd_byte *) data;

  r_type = (enum elf_pj_reloc_type) reloc_entry->howto->type;

  if (output_bfd != NULL)
      /* Partial linking--do nothing.  */
      reloc_entry->address += input_section->output_offset;
      return bfd_reloc_ok;

  if (symbol_in != NULL
      && bfd_is_und_section (symbol_in->section))
    return bfd_reloc_undefined;

  if (bfd_is_com_section (symbol_in->section))
    sym_value = 0;
    sym_value = (symbol_in->value +
               symbol_in->section->output_section->vma +

  switch (r_type)
    case R_PJ_DATA_DIR32:
      insn = bfd_get_32 (abfd, hit_data);
      insn += sym_value + reloc_entry->addend;
      bfd_put_32 (abfd, (bfd_vma) insn, hit_data);

      /* Relocations in code are always bigendian, no matter what the
        data endianness is.  */

    case R_PJ_CODE_DIR32:
      insn = bfd_getb32 (hit_data);
      insn += sym_value + reloc_entry->addend;
      bfd_putb32 ((bfd_vma) insn, hit_data);

    case R_PJ_CODE_REL16:
      insn = bfd_getb16 (hit_data);
      insn += sym_value + reloc_entry->addend
        -  (input_section->output_section->vma
            + input_section->output_offset);
      bfd_putb16 ((bfd_vma) insn, hit_data);
    case R_PJ_CODE_LO16:
      insn = bfd_getb16 (hit_data);
      insn += sym_value + reloc_entry->addend;
      bfd_putb16 ((bfd_vma) insn, hit_data);

    case R_PJ_CODE_HI16:
      insn = bfd_getb16 (hit_data);
      insn += (sym_value + reloc_entry->addend) >> 16;
      bfd_putb16 ((bfd_vma) insn, hit_data);

      abort ();

  return bfd_reloc_ok;

Here is the call graph for this function:

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

Definition at line 296 of file elf32-pj.c.

  unsigned int i;

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

  return NULL;

Here is the call graph for this function:

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

Definition at line 283 of file elf32-pj.c.

  unsigned int i;

  for (i = 0; i < sizeof (pj_reloc_map) / sizeof (struct elf_reloc_map); i++)
    if (pj_reloc_map[i].bfd_reloc_val == code)
      return & pj_elf_howto_table[(int) pj_reloc_map[i].elf_reloc_val];

  return NULL;

Variable Documentation

struct elf_reloc_map[] [static]
Initial value:
    { BFD_RELOC_NONE,              R_PJ_NONE          },
    { BFD_RELOC_32,         R_PJ_DATA_DIR32    },
    { BFD_RELOC_PJ_CODE_DIR16,     R_PJ_CODE_DIR16    },
    { BFD_RELOC_PJ_CODE_DIR32,     R_PJ_CODE_DIR32    },
    { BFD_RELOC_PJ_CODE_LO16,      R_PJ_CODE_LO16     },
    { BFD_RELOC_PJ_CODE_HI16,      R_PJ_CODE_HI16     },

Definition at line 265 of file elf32-pj.c.

reloc_howto_type pj_elf_howto_table[] [static]

Definition at line 111 of file elf32-pj.c.