Back to index

cell-binutils  2.17cvs20070401
Classes | Defines | Enumerations | Functions | Variables
coff-sparc.c File Reference
#include "bfd.h"
#include "sysdep.h"
#include "libbfd.h"
#include "coff/sparc.h"
#include "coff/internal.h"
#include "libcoff.h"
#include "coffcode.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  coff_reloc_map

Defines

#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER   (3)
#define BADMAG(x)   ((x).f_magic != SPARCMAGIC && (x).f_magic != LYNXCOFFMAGIC)
#define COFF_PAGE_SIZE   0x10000
#define coff_bfd_reloc_type_lookup   coff_sparc_reloc_type_lookup
#define coff_bfd_reloc_name_lookup   coff_sparc_reloc_name_lookup
#define RTYPE2HOWTO(internal, relocentry)   rtype2howto(internal,relocentry)
#define SWAP_IN_RELOC_OFFSET   H_GET_32
#define SWAP_OUT_RELOC_OFFSET   H_PUT_32
#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)   cache_ptr->addend = reloc.r_offset;
#define SWAP_OUT_RELOC_EXTRA(abfd, src, dst)
#define __A_MAGIC_SET__
#define COFF_SPARC
#define TARGET_SYM   sparccoff_vec
#define TARGET_NAME   "coff-sparc"

Enumerations

enum  reloc_type {
  R_SPARC_NONE = 0, R_SPARC_8, R_SPARC_16, R_SPARC_32,
  R_SPARC_DISP8, R_SPARC_DISP16, R_SPARC_DISP32, R_SPARC_WDISP30,
  R_SPARC_WDISP22, R_SPARC_HI22, R_SPARC_22, R_SPARC_13,
  R_SPARC_LO10, R_SPARC_GOT10, R_SPARC_GOT13, R_SPARC_GOT22,
  R_SPARC_PC10, R_SPARC_PC22, R_SPARC_WPLT30, R_SPARC_COPY,
  R_SPARC_GLOB_DAT, R_SPARC_JMP_SLOT, R_SPARC_RELATIVE, R_SPARC_UA32,
  R_SPARC_max, R_MN10200_NONE = 0, R_MN10200_32, R_MN10200_16,
  R_MN10200_8, R_MN10200_24, R_MN10200_PCREL8, R_MN10200_PCREL16,
  R_MN10200_PCREL24, R_MN10200_MAX, R_SPARC_NONE = 0, R_SPARC_8,
  R_SPARC_16, R_SPARC_32, R_SPARC_DISP8, R_SPARC_DISP16,
  R_SPARC_DISP32, R_SPARC_WDISP30, R_SPARC_WDISP22, R_SPARC_HI22,
  R_SPARC_22, R_SPARC_13, R_SPARC_LO10, R_SPARC_GOT10,
  R_SPARC_GOT13, R_SPARC_GOT22, R_SPARC_PC10, R_SPARC_PC22,
  R_SPARC_WPLT30, R_SPARC_COPY, R_SPARC_GLOB_DAT, R_SPARC_JMP_SLOT,
  R_SPARC_RELATIVE, R_SPARC_UA32, R_SPARC_max, RELOC_8,
  RELOC_16, RELOC_32, RELOC_DISP8, RELOC_DISP16,
  RELOC_DISP32, RELOC_WDISP30, RELOC_WDISP22, RELOC_HI22,
  RELOC_22, RELOC_13, RELOC_LO10, RELOC_SFA_BASE,
  RELOC_SFA_OFF13, RELOC_BASE10, RELOC_BASE13, RELOC_BASE22,
  RELOC_PC10, RELOC_PC22, RELOC_JMP_TBL, RELOC_SEGOFF16,
  RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE, RELOC_11,
  RELOC_WDISP2_14, RELOC_WDISP19, RELOC_HHI22, RELOC_HLO10,
  RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH, NO_RELOC,
  RELOC_8, RELOC_16, RELOC_32, RELOC_DISP8,
  RELOC_DISP16, RELOC_DISP32, RELOC_WDISP30, RELOC_WDISP22,
  RELOC_HI22, RELOC_22, RELOC_13, RELOC_LO10,
  RELOC_SFA_BASE, RELOC_SFA_OFF13, RELOC_BASE10, RELOC_BASE13,
  RELOC_BASE22, RELOC_PC10, RELOC_PC22, RELOC_JMP_TBL,
  RELOC_SEGOFF16, RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE,
  RELOC_11, RELOC_WDISP2_14, RELOC_WDISP19, RELOC_HHI22,
  RELOC_HLO10, RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH,
  RELOC_64, RELOC_DISP64, RELOC_WDISP21, RELOC_DISP21,
  RELOC_DISP14, NO_RELOC, RELOC_8, RELOC_16,
  RELOC_32, RELOC_DISP8, RELOC_DISP16, RELOC_DISP32,
  RELOC_WDISP30, RELOC_WDISP22, RELOC_HI22, RELOC_22,
  RELOC_13, RELOC_LO10, RELOC_SFA_BASE, RELOC_SFA_OFF13,
  RELOC_BASE10, RELOC_BASE13, RELOC_BASE22, RELOC_PC10,
  RELOC_PC22, RELOC_JMP_TBL, RELOC_SEGOFF16, RELOC_GLOB_DAT,
  RELOC_JMP_SLOT, RELOC_RELATIVE, RELOC_11, RELOC_WDISP2_14,
  RELOC_WDISP19, RELOC_HHI22, RELOC_HLO10, RELOC_JUMPTARG,
  RELOC_CONST, RELOC_CONSTH, RELOC_WDISP14, RELOC_WDISP21,
  NO_RELOC
}

Functions

static reloc_howto_type
*coff_sparc_reloc_type_lookup 
PARAMS ((bfd *, bfd_reloc_code_real_type))
static void rtype2howto PARAMS ((arelent *, struct internal_reloc *))
static bfd_reloc_status_type
bfd_coff_generic_reloc 
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **))
static bfd_reloc_status_type bfd_coff_generic_reloc (abfd, arelent *reloc_entry, asymbol *symbol, data, asection *input_section, bfd *output_bfd, error_message)
static reloc_howto_type * coff_sparc_reloc_type_lookup (abfd, bfd_reloc_code_real_type code)
static reloc_howto_type * coff_sparc_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
static void rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)

Variables

static reloc_howto_type coff_sparc_howto_table []
static struct coff_reloc_map []

Class Documentation

struct coff_reloc_map

Definition at line 113 of file coff-sparc.c.

Class Members
bfd_reloc_code_real_type bfd_reloc_val
unsigned char coff_reloc_val

Define Documentation

#define __A_MAGIC_SET__

Definition at line 202 of file coff-sparc.c.

#define BADMAG (   x)    ((x).f_magic != SPARCMAGIC && (x).f_magic != LYNXCOFFMAGIC)

Definition at line 31 of file coff-sparc.c.

#define CALC_ADDEND (   abfd,
  ptr,
  reloc,
  cache_ptr 
)    cache_ptr->addend = reloc.r_offset;

Definition at line 192 of file coff-sparc.c.

Definition at line 177 of file coff-sparc.c.

Definition at line 159 of file coff-sparc.c.

Definition at line 29 of file coff-sparc.c.

#define COFF_PAGE_SIZE   0x10000

Definition at line 34 of file coff-sparc.c.

#define COFF_SPARC

Definition at line 206 of file coff-sparc.c.

#define RTYPE2HOWTO (   internal,
  relocentry 
)    rtype2howto(internal,relocentry)

Definition at line 188 of file coff-sparc.c.

Definition at line 190 of file coff-sparc.c.

#define SWAP_OUT_RELOC_EXTRA (   abfd,
  src,
  dst 
)
Value:
do { \
       dst->r_spare[0] = 0; \
       dst->r_spare[1] = 0; \
     } while (0)

Definition at line 196 of file coff-sparc.c.

Definition at line 191 of file coff-sparc.c.

#define TARGET_NAME   "coff-sparc"

Definition at line 215 of file coff-sparc.c.

#define TARGET_SYM   sparccoff_vec

Definition at line 211 of file coff-sparc.c.


Enumeration Type Documentation

enum reloc_type
Enumerator:
R_SPARC_NONE 
R_SPARC_8 
R_SPARC_16 
R_SPARC_32 
R_SPARC_DISP8 
R_SPARC_DISP16 
R_SPARC_DISP32 
R_SPARC_WDISP30 
R_SPARC_WDISP22 
R_SPARC_HI22 
R_SPARC_22 
R_SPARC_13 
R_SPARC_LO10 
R_SPARC_GOT10 
R_SPARC_GOT13 
R_SPARC_GOT22 
R_SPARC_PC10 
R_SPARC_PC22 
R_SPARC_WPLT30 
R_SPARC_COPY 
R_SPARC_GLOB_DAT 
R_SPARC_JMP_SLOT 
R_SPARC_RELATIVE 
R_SPARC_UA32 
R_SPARC_max 
R_MN10200_NONE 
R_MN10200_32 
R_MN10200_16 
R_MN10200_8 
R_MN10200_24 
R_MN10200_PCREL8 
R_MN10200_PCREL16 
R_MN10200_PCREL24 
R_MN10200_MAX 
R_SPARC_NONE 
R_SPARC_8 
R_SPARC_16 
R_SPARC_32 
R_SPARC_DISP8 
R_SPARC_DISP16 
R_SPARC_DISP32 
R_SPARC_WDISP30 
R_SPARC_WDISP22 
R_SPARC_HI22 
R_SPARC_22 
R_SPARC_13 
R_SPARC_LO10 
R_SPARC_GOT10 
R_SPARC_GOT13 
R_SPARC_GOT22 
R_SPARC_PC10 
R_SPARC_PC22 
R_SPARC_WPLT30 
R_SPARC_COPY 
R_SPARC_GLOB_DAT 
R_SPARC_JMP_SLOT 
R_SPARC_RELATIVE 
R_SPARC_UA32 
R_SPARC_max 
RELOC_8 
RELOC_16 
RELOC_32 
RELOC_DISP8 
RELOC_DISP16 
RELOC_DISP32 
RELOC_WDISP30 
RELOC_WDISP22 
RELOC_HI22 
RELOC_22 
RELOC_13 
RELOC_LO10 
RELOC_SFA_BASE 
RELOC_SFA_OFF13 
RELOC_BASE10 
RELOC_BASE13 
RELOC_BASE22 
RELOC_PC10 
RELOC_PC22 
RELOC_JMP_TBL 
RELOC_SEGOFF16 
RELOC_GLOB_DAT 
RELOC_JMP_SLOT 
RELOC_RELATIVE 
RELOC_11 
RELOC_WDISP2_14 
RELOC_WDISP19 
RELOC_HHI22 
RELOC_HLO10 
RELOC_JUMPTARG 
RELOC_CONST 
RELOC_CONSTH 
NO_RELOC 
RELOC_8 
RELOC_16 
RELOC_32 
RELOC_DISP8 
RELOC_DISP16 
RELOC_DISP32 
RELOC_WDISP30 
RELOC_WDISP22 
RELOC_HI22 
RELOC_22 
RELOC_13 
RELOC_LO10 
RELOC_SFA_BASE 
RELOC_SFA_OFF13 
RELOC_BASE10 
RELOC_BASE13 
RELOC_BASE22 
RELOC_PC10 
RELOC_PC22 
RELOC_JMP_TBL 
RELOC_SEGOFF16 
RELOC_GLOB_DAT 
RELOC_JMP_SLOT 
RELOC_RELATIVE 
RELOC_11 
RELOC_WDISP2_14 
RELOC_WDISP19 
RELOC_HHI22 
RELOC_HLO10 
RELOC_JUMPTARG 
RELOC_CONST 
RELOC_CONSTH 
RELOC_64 
RELOC_DISP64 
RELOC_WDISP21 
RELOC_DISP21 
RELOC_DISP14 
NO_RELOC 
RELOC_8 
RELOC_16 
RELOC_32 
RELOC_DISP8 
RELOC_DISP16 
RELOC_DISP32 
RELOC_WDISP30 
RELOC_WDISP22 
RELOC_HI22 
RELOC_22 
RELOC_13 
RELOC_LO10 
RELOC_SFA_BASE 
RELOC_SFA_OFF13 
RELOC_BASE10 
RELOC_BASE13 
RELOC_BASE22 
RELOC_PC10 
RELOC_PC22 
RELOC_JMP_TBL 
RELOC_SEGOFF16 
RELOC_GLOB_DAT 
RELOC_JMP_SLOT 
RELOC_RELATIVE 
RELOC_11 
RELOC_WDISP2_14 
RELOC_WDISP19 
RELOC_HHI22 
RELOC_HLO10 
RELOC_JUMPTARG 
RELOC_CONST 
RELOC_CONSTH 
RELOC_WDISP14 
RELOC_WDISP21 
NO_RELOC 

Definition at line 41 of file coff-sparc.c.


Function Documentation

static bfd_reloc_status_type bfd_coff_generic_reloc ( abfd  ,
arelent reloc_entry,
asymbol symbol,
data  ,
asection input_section,
bfd output_bfd,
error_message   
) [static]

Definition at line 65 of file coff-sparc.c.

{
  if (output_bfd != (bfd *) NULL
      && (symbol->flags & BSF_SECTION_SYM) == 0)
    {
      reloc_entry->address += input_section->output_offset;
      return bfd_reloc_ok;
    }

  return bfd_reloc_continue;
}
static reloc_howto_type* coff_sparc_reloc_name_lookup ( bfd *abfd  ATTRIBUTE_UNUSED,
const char *  r_name 
) [static]

Definition at line 162 of file coff-sparc.c.

{
  unsigned int i;

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

  return NULL;
}

Here is the call graph for this function:

static reloc_howto_type* coff_sparc_reloc_type_lookup ( abfd  ,
bfd_reloc_code_real_type  code 
) [static]

Definition at line 147 of file coff-sparc.c.

{
  unsigned int i;
  for (i = 0; i < sizeof (sparc_reloc_map) / sizeof (struct coff_reloc_map); i++)
    {
      if (sparc_reloc_map[i].bfd_reloc_val == code)
       return &coff_sparc_howto_table[(int) sparc_reloc_map[i].coff_reloc_val];
    }
  return 0;
}
static reloc_howto_type* coff_sparc_reloc_type_lookup PARAMS ( (bfd *, bfd_reloc_code_real_type ) [static]
static void rtype2howto PARAMS ( (arelent *, struct internal_reloc *)  ) [static]
static bfd_reloc_status_type bfd_coff_generic_reloc PARAMS ( (bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **)  ) [static]
static void rtype2howto ( arelent cache_ptr,
struct internal_reloc dst 
) [static]

Definition at line 180 of file coff-sparc.c.

{
  BFD_ASSERT (dst->r_type < (unsigned int) R_SPARC_max);
  cache_ptr->howto = &coff_sparc_howto_table[dst->r_type];
}

Variable Documentation

struct coff_reloc_map[] [static]
reloc_howto_type coff_sparc_howto_table[] [static]
Initial value:
{
  HOWTO(R_SPARC_NONE,    0,0, 0,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_NONE",    FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_8,       0,0, 8,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_8",       FALSE,0,0x000000ff,TRUE),
  HOWTO(R_SPARC_16,      0,1,16,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_16",      FALSE,0,0x0000ffff,TRUE),
  HOWTO(R_SPARC_32,      0,2,32,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_32",      FALSE,0,0xffffffff,TRUE),
  HOWTO(R_SPARC_DISP8,   0,0, 8,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_DISP8",   FALSE,0,0x000000ff,TRUE),
  HOWTO(R_SPARC_DISP16,  0,1,16,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_DISP16",  FALSE,0,0x0000ffff,TRUE),
  HOWTO(R_SPARC_DISP32,  0,2,32,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_DISP32",  FALSE,0,0x00ffffff,TRUE),
  HOWTO(R_SPARC_WDISP30, 2,2,30,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_WDISP30", FALSE,0,0x3fffffff,TRUE),
  HOWTO(R_SPARC_WDISP22, 2,2,22,TRUE, 0,complain_overflow_signed,  bfd_coff_generic_reloc,"R_SPARC_WDISP22", FALSE,0,0x003fffff,TRUE),
  HOWTO(R_SPARC_HI22,   10,2,22,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_HI22",    FALSE,0,0x003fffff,TRUE),
  HOWTO(R_SPARC_22,      0,2,22,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_22",      FALSE,0,0x003fffff,TRUE),
  HOWTO(R_SPARC_13,      0,2,13,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_13",      FALSE,0,0x00001fff,TRUE),
  HOWTO(R_SPARC_LO10,    0,2,10,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_LO10",    FALSE,0,0x000003ff,TRUE),
  HOWTO(R_SPARC_GOT10,   0,2,10,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_GOT10",   FALSE,0,0x000003ff,TRUE),
  HOWTO(R_SPARC_GOT13,   0,2,13,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_GOT13",   FALSE,0,0x00001fff,TRUE),
  HOWTO(R_SPARC_GOT22,  10,2,22,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_GOT22",   FALSE,0,0x003fffff,TRUE),
  HOWTO(R_SPARC_PC10,    0,2,10,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_PC10",    FALSE,0,0x000003ff,TRUE),
  HOWTO(R_SPARC_PC22,    0,2,22,FALSE,0,complain_overflow_bitfield,bfd_coff_generic_reloc,"R_SPARC_PC22",    FALSE,0,0x003fffff,TRUE),
  HOWTO(R_SPARC_WPLT30,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_WPLT30",  FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_COPY,    0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_COPY",    FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_GLOB_DAT,0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_GLOB_DAT",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_JMP_SLOT,0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_JMP_SLOT",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_RELATIVE,0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_RELATIVE",FALSE,0,0x00000000,TRUE),
  HOWTO(R_SPARC_UA32,    0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_UA32",    FALSE,0,0x00000000,TRUE),
}

Definition at line 85 of file coff-sparc.c.