Back to index

cell-binutils  2.17cvs20070401
Classes | Defines | Typedefs | Functions | Variables
versados.c File Reference
#include "bfd.h"
#include "sysdep.h"
#include "libbfd.h"
#include "libiberty.h"

Go to the source code of this file.

Classes

struct  esdid
struct  versados_data_struct
struct  ext_otr
struct  ext_vheader
struct  ext_esd
union  ext_any

Defines

#define VHEADER   '1'
#define VESTDEF   '2'
#define VOTR   '3'
#define VEND   '4'
#define ES_BASE   17 /* First symbol has esdid 17. */
#define VDATA(abfd)   (abfd->tdata.versados_data)
#define EDATA(abfd, n)   (abfd->tdata.versados_data->e[n])
#define RDATA(abfd, n)   (abfd->tdata.versados_data->rest[n])
#define ESD_ABS   0
#define ESD_COMMON   1
#define ESD_STD_REL_SEC   2
#define ESD_SHRT_REL_SEC   3
#define ESD_XDEF_IN_SEC   4
#define ESD_XDEF_IN_ABS   5
#define ESD_XREF_SEC   6
#define ESD_XREF_SYM   7
#define R_RELWORD   1
#define R_RELLONG   2
#define R_RELWORD_NEG   3
#define R_RELLONG_NEG   4
#define versados_get_section_contents_in_window   _bfd_generic_get_section_contents_in_window
#define versados_close_and_cleanup   _bfd_generic_close_and_cleanup
#define versados_bfd_free_cached_info   _bfd_generic_bfd_free_cached_info
#define versados_new_section_hook   _bfd_generic_new_section_hook
#define versados_bfd_is_target_special_symbol   ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define versados_bfd_is_local_label_name   bfd_generic_is_local_label_name
#define versados_get_lineno   _bfd_nosymbols_get_lineno
#define versados_find_nearest_line   _bfd_nosymbols_find_nearest_line
#define versados_find_inliner_info   _bfd_nosymbols_find_inliner_info
#define versados_make_empty_symbol   _bfd_generic_make_empty_symbol
#define versados_bfd_make_debug_symbol   _bfd_nosymbols_bfd_make_debug_symbol
#define versados_read_minisymbols   _bfd_generic_read_minisymbols
#define versados_minisymbol_to_symbol   _bfd_generic_minisymbol_to_symbol
#define versados_bfd_reloc_type_lookup   _bfd_norelocs_bfd_reloc_type_lookup
#define versados_bfd_reloc_name_lookup   _bfd_norelocs_bfd_reloc_name_lookup
#define versados_set_arch_mach   bfd_default_set_arch_mach
#define versados_bfd_get_relocated_section_contents   bfd_generic_get_relocated_section_contents
#define versados_bfd_relax_section   bfd_generic_relax_section
#define versados_bfd_gc_sections   bfd_generic_gc_sections
#define versados_bfd_merge_sections   bfd_generic_merge_sections
#define versados_bfd_is_group_section   bfd_generic_is_group_section
#define versados_bfd_discard_group   bfd_generic_discard_group
#define versados_section_already_linked   _bfd_generic_section_already_linked
#define versados_bfd_link_hash_table_create   _bfd_generic_link_hash_table_create
#define versados_bfd_link_hash_table_free   _bfd_generic_link_hash_table_free
#define versados_bfd_link_add_symbols   _bfd_generic_link_add_symbols
#define versados_bfd_link_just_syms   _bfd_generic_link_just_syms
#define versados_bfd_final_link   _bfd_generic_final_link
#define versados_bfd_link_split_section   _bfd_generic_link_split_section

Typedefs

typedef struct versados_data_struct tdata_type

Functions

static bfd_boolean versados_mkobject (bfd *abfd)
static asymbolversados_new_symbol (bfd *abfd, int snum, const char *name, bfd_vma val, asection *sec)
static int get_record (bfd *abfd, union ext_any *ptr)
static int get_4 (unsigned char **pp)
static void get_10 (unsigned char **pp, char *name)
static char * new_symbol_string (bfd *abfd, const char *name)
static void process_esd (bfd *abfd, struct ext_esd *esd, int pass)
static int get_offset (int len, unsigned char *ptr)
static void process_otr (bfd *abfd, struct ext_otr *otr, int pass)
static bfd_boolean versados_scan (bfd *abfd)
static const bfd_targetversados_object_p (bfd *abfd)
static bfd_boolean versados_pass_2 (bfd *abfd)
static bfd_boolean versados_get_section_contents (bfd *abfd, asection *section, void *location, file_ptr offset, bfd_size_type count)
static bfd_boolean versados_set_section_contents (bfd *abfd ATTRIBUTE_UNUSED, sec_ptr section ATTRIBUTE_UNUSED, const void *location ATTRIBUTE_UNUSED, file_ptr offset ATTRIBUTE_UNUSED, bfd_size_type bytes_to_do ATTRIBUTE_UNUSED)
static int versados_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info ATTRIBUTE_UNUSED)
static long versados_get_symtab_upper_bound (bfd *abfd)
static long versados_canonicalize_symtab (bfd *abfd, asymbol **alocation)
static void versados_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, asymbol *symbol, symbol_info *ret)
static void versados_print_symbol (bfd *abfd, void *afile, asymbol *symbol, bfd_print_symbol_type how)
static long versados_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, sec_ptr asect)
static long versados_canonicalize_reloc (bfd *abfd, sec_ptr section, arelent **relptr, asymbol **symbols)

Variables

reloc_howto_type versados_howto_table []
const bfd_target versados_vec

Class Documentation

struct esdid

Definition at line 56 of file versados.c.

Collaboration diagram for esdid:
Class Members
unsigned char * contents
int donerel
int pc
int relocs
asection * section
struct versados_data_struct

Definition at line 65 of file versados.c.

Collaboration diagram for versados_data_struct:
Class Members
int alert
int def_idx
int es_done
int ndefs
int nrefs
int nsecsyms
int pass_2_done
int ref_idx
asymbol * rest
int stringlen
char * strings
asymbol * symbols
struct ext_otr

Definition at line 91 of file versados.c.

Class Members
unsigned char data
unsigned char esdid
unsigned char map
unsigned char size
char type
struct ext_vheader

Definition at line 100 of file versados.c.

Class Members
char cat
char date
char ext
char fname
char lang
char name
char rest
char rev
unsigned char size
char time
char type
char user
char vol
struct ext_esd

Definition at line 117 of file versados.c.

Class Members
unsigned char esd_entries
unsigned char size
char type
union ext_any

Definition at line 133 of file versados.c.

Class Members
unsigned char size

Define Documentation

#define EDATA (   abfd,
  n 
)    (abfd->tdata.versados_data->e[n])

Definition at line 88 of file versados.c.

#define ES_BASE   17 /* First symbol has esdid 17. */

Definition at line 51 of file versados.c.

#define ESD_ABS   0

Definition at line 124 of file versados.c.

#define ESD_COMMON   1

Definition at line 125 of file versados.c.

#define ESD_SHRT_REL_SEC   3

Definition at line 127 of file versados.c.

#define ESD_STD_REL_SEC   2

Definition at line 126 of file versados.c.

#define ESD_XDEF_IN_ABS   5

Definition at line 129 of file versados.c.

#define ESD_XDEF_IN_SEC   4

Definition at line 128 of file versados.c.

#define ESD_XREF_SEC   6

Definition at line 130 of file versados.c.

#define ESD_XREF_SYM   7

Definition at line 131 of file versados.c.

#define R_RELLONG   2

Definition at line 314 of file versados.c.

#define R_RELLONG_NEG   4

Definition at line 316 of file versados.c.

#define R_RELWORD   1

Definition at line 313 of file versados.c.

#define R_RELWORD_NEG   3

Definition at line 315 of file versados.c.

#define RDATA (   abfd,
  n 
)    (abfd->tdata.versados_data->rest[n])

Definition at line 89 of file versados.c.

#define VDATA (   abfd)    (abfd->tdata.versados_data)

Definition at line 87 of file versados.c.

#define VEND   '4'

Definition at line 49 of file versados.c.

Definition at line 808 of file versados.c.

Definition at line 814 of file versados.c.

Definition at line 789 of file versados.c.

Definition at line 805 of file versados.c.

Definition at line 803 of file versados.c.

Definition at line 807 of file versados.c.

Definition at line 792 of file versados.c.

Definition at line 791 of file versados.c.

Definition at line 812 of file versados.c.

Definition at line 810 of file versados.c.

Definition at line 811 of file versados.c.

Definition at line 813 of file versados.c.

Definition at line 815 of file versados.c.

Definition at line 797 of file versados.c.

Definition at line 806 of file versados.c.

Definition at line 804 of file versados.c.

Definition at line 801 of file versados.c.

Definition at line 800 of file versados.c.

Definition at line 788 of file versados.c.

Definition at line 795 of file versados.c.

Definition at line 794 of file versados.c.

Definition at line 793 of file versados.c.

Definition at line 663 of file versados.c.

Definition at line 796 of file versados.c.

Definition at line 799 of file versados.c.

Definition at line 790 of file versados.c.

Definition at line 798 of file versados.c.

Definition at line 809 of file versados.c.

Definition at line 802 of file versados.c.

#define VESTDEF   '2'

Definition at line 47 of file versados.c.

#define VHEADER   '1'

Definition at line 46 of file versados.c.

#define VOTR   '3'

Definition at line 48 of file versados.c.


Typedef Documentation


Function Documentation

static void get_10 ( unsigned char **  pp,
char *  name 
) [static]

Definition at line 204 of file versados.c.

{
  char *p = (char *) *pp;
  int len = 10;

  *pp += len;
  while (*p != ' ' && len)
    {
      *name++ = *p++;
      len--;
    }
  *name = 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int get_4 ( unsigned char **  pp) [static]

Definition at line 195 of file versados.c.

{
  unsigned char *p = *pp;

  *pp += 4;
  return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int get_offset ( int  len,
unsigned char *  ptr 
) [static]

Definition at line 336 of file versados.c.

{
  int val = 0;

  if (len)
    {
      int i;

      val = *ptr++;
      if (val & 0x80)
       val |= ~0xff;
      for (i = 1; i < len; i++)
       val = (val << 8) | *ptr++;
    }

  return val;
}

Here is the caller graph for this function:

static int get_record ( bfd abfd,
union ext_any ptr 
) [static]

Definition at line 185 of file versados.c.

{
  if (bfd_bread (&ptr->size, (bfd_size_type) 1, abfd) != 1
      || (bfd_bread ((char *) ptr + 1, (bfd_size_type) ptr->size, abfd)
         != ptr->size))
    return 0;
  return 1;
}

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 219 of file versados.c.

{
  char *n = VDATA (abfd)->strings;

  strcpy (VDATA (abfd)->strings, name);
  VDATA (abfd)->strings += strlen (VDATA (abfd)->strings) + 1;
  return n;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void process_esd ( bfd abfd,
struct ext_esd esd,
int  pass 
) [static]

Definition at line 229 of file versados.c.

{
  /* Read through the ext def for the est entries.  */
  int togo = esd->size - 2;
  bfd_vma size;
  bfd_vma start;
  asection *sec;
  char name[11];
  unsigned char *ptr = esd->esd_entries;
  unsigned char *end = ptr + togo;

  while (ptr < end)
    {
      int scn = *ptr & 0xf;
      int typ = (*ptr >> 4) & 0xf;

      /* Declare this section.  */
      sprintf (name, "%d", scn);
      sec = bfd_make_section_old_way (abfd, strdup (name));
      sec->target_index = scn;
      EDATA (abfd, scn).section = sec;
      ptr++;

      switch (typ)
       {
       default:
         abort ();
       case ESD_XREF_SEC:
       case ESD_XREF_SYM:
         {
           int snum = VDATA (abfd)->ref_idx++;
           get_10 (&ptr, name);
           if (pass == 1)
             VDATA (abfd)->stringlen += strlen (name) + 1;
           else
             {
              int esidx;
              asymbol *s;
              char *n = new_symbol_string (abfd, name);

              s = versados_new_symbol (abfd, snum, n, (bfd_vma) 0,
                                    bfd_und_section_ptr);
              esidx = VDATA (abfd)->es_done++;
              RDATA (abfd, esidx - ES_BASE) = s;
             }
         }
         break;

       case ESD_ABS:
         size = get_4 (&ptr);
         start = get_4 (&ptr);
         break;
       case ESD_STD_REL_SEC:
       case ESD_SHRT_REL_SEC:
         sec->size = get_4 (&ptr);
         sec->flags |= SEC_ALLOC;
         break;
       case ESD_XDEF_IN_ABS:
         sec = (asection *) & bfd_abs_section;
       case ESD_XDEF_IN_SEC:
         {
           int snum = VDATA (abfd)->def_idx++;
           bfd_vma val;

           get_10 (&ptr, name);
           val = get_4 (&ptr);
           if (pass == 1)
             /* Just remember the symbol.  */
             VDATA (abfd)->stringlen += strlen (name) + 1;
           else
             {
              asymbol *s;
              char *n = new_symbol_string (abfd, name);

              s = versados_new_symbol (abfd, snum + VDATA (abfd)->nrefs, n,
                                    val, sec);
              s->flags |= BSF_GLOBAL;
             }
         }
         break;
       }
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void process_otr ( bfd abfd,
struct ext_otr otr,
int  pass 
) [static]

Definition at line 355 of file versados.c.

{
  unsigned long shift;
  unsigned char *srcp = otr->data;
  unsigned char *endp = (unsigned char *) otr + otr->size;
  unsigned int bits = (otr->map[0] << 24)
  | (otr->map[1] << 16)
  | (otr->map[2] << 8)
  | (otr->map[3] << 0);

  struct esdid *esdid = &EDATA (abfd, otr->esdid - 1);
  unsigned char *contents = esdid->contents;
  int need_contents = 0;
  unsigned int dst_idx = esdid->pc;

  for (shift = ((unsigned long) 1 << 31); shift && srcp < endp; shift >>= 1)
    {
      if (bits & shift)
       {
         int flag = *srcp++;
         int esdids = (flag >> 5) & 0x7;
         int sizeinwords = ((flag >> 3) & 1) ? 2 : 1;
         int offsetlen = flag & 0x7;
         int j;

         if (esdids == 0)
           {
             /* A zero esdid means the new pc is the offset given.  */
             dst_idx += get_offset (offsetlen, srcp);
             srcp += offsetlen;
           }
         else
           {
             int val = get_offset (offsetlen, srcp + esdids);

             if (pass == 1)
              need_contents = 1;
             else
              for (j = 0; j < sizeinwords * 2; j++)
                {
                  contents[dst_idx + (sizeinwords * 2) - j - 1] = val;
                  val >>= 8;
                }

             for (j = 0; j < esdids; j++)
              {
                int esdid = *srcp++;

                if (esdid)
                  {
                    int rn = EDATA (abfd, otr->esdid - 1).relocs++;

                    if (pass == 1)
                     {
                       /* This is the first pass over the data,
                          just remember that we need a reloc.  */
                     }
                    else
                     {
                       arelent *n =
                       EDATA (abfd, otr->esdid - 1).section->relocation + rn;
                       n->address = dst_idx;

                       n->sym_ptr_ptr = (asymbol **) (size_t) esdid;
                       n->addend = 0;
                       n->howto = versados_howto_table + ((j & 1) * 2) + (sizeinwords - 1);
                     }
                  }
              }
             srcp += offsetlen;
             dst_idx += sizeinwords * 2;
           }
       }
      else
       {
         need_contents = 1;
         if (dst_idx < esdid->section->size)
           if (pass == 2)
             {
              /* Absolute code, comes in 16 bit lumps.  */
              contents[dst_idx] = srcp[0];
              contents[dst_idx + 1] = srcp[1];
             }
         dst_idx += 2;
         srcp += 2;
       }
    }
  EDATA (abfd, otr->esdid - 1).pc = dst_idx;

  if (!contents && need_contents)
    {
      bfd_size_type size = esdid->section->size;
      esdid->contents = bfd_alloc (abfd, size);
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static long versados_canonicalize_reloc ( bfd abfd,
sec_ptr  section,
arelent **  relptr,
asymbol **  symbols 
) [static]

Definition at line 749 of file versados.c.

{
  unsigned int count;
  arelent *src;

  versados_pass_2 (abfd);
  src = section->relocation;
  if (!EDATA (abfd, section->target_index).donerel)
    {
      EDATA (abfd, section->target_index).donerel = 1;
      /* Translate from indexes to symptr ptrs.  */
      for (count = 0; count < section->reloc_count; count++)
       {
         int esdid = (int) (size_t) src[count].sym_ptr_ptr;

         if (esdid == 0)
           src[count].sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
         else if (esdid < ES_BASE)
           {
             /* Section relative thing.  */
             struct esdid *e = &EDATA (abfd, esdid - 1);

             src[count].sym_ptr_ptr = e->section->symbol_ptr_ptr;
           }
         else
           src[count].sym_ptr_ptr = symbols + esdid - ES_BASE;
       }
    }

  for (count = 0; count < section->reloc_count; count++)
    *relptr++ = src++;

  *relptr = 0;
  return section->reloc_count;
}

Here is the call graph for this function:

static long versados_canonicalize_symtab ( bfd abfd,
asymbol **  alocation 
) [static]

Definition at line 694 of file versados.c.

{
  unsigned int symcount = bfd_get_symcount (abfd);
  unsigned int i;
  asymbol *s;

  versados_pass_2 (abfd);

  for (i = 0, s = VDATA (abfd)->symbols;
       i < symcount;
       s++, i++)
    *alocation++ = s;

  *alocation = NULL;

  return symcount;
}

Here is the call graph for this function:

static long versados_get_reloc_upper_bound ( bfd *abfd  ATTRIBUTE_UNUSED,
sec_ptr  asect 
) [static]

Definition at line 742 of file versados.c.

{
  return (asect->reloc_count + 1) * sizeof (arelent *);
}
static bfd_boolean versados_get_section_contents ( bfd abfd,
asection section,
void *  location,
file_ptr  offset,
bfd_size_type  count 
) [static]

Definition at line 647 of file versados.c.

{
  if (!versados_pass_2 (abfd))
    return FALSE;

  memcpy (location,
         EDATA (abfd, section->target_index).contents + offset,
         (size_t) count);

  return TRUE;
}

Here is the call graph for this function:

static void versados_get_symbol_info ( bfd *abfd  ATTRIBUTE_UNUSED,
asymbol symbol,
symbol_info ret 
) [static]

Definition at line 713 of file versados.c.

{
  bfd_symbol_info (symbol, ret);
}

Here is the call graph for this function:

static long versados_get_symtab_upper_bound ( bfd abfd) [static]

Definition at line 686 of file versados.c.

{
  return (bfd_get_symcount (abfd) + 1) * sizeof (asymbol *);
}
static bfd_boolean versados_mkobject ( bfd abfd) [static]

Definition at line 146 of file versados.c.

{
  if (abfd->tdata.versados_data == NULL)
    {
      bfd_size_type amt = sizeof (tdata_type);
      tdata_type *tdata = bfd_alloc (abfd, amt);

      if (tdata == NULL)
       return FALSE;
      abfd->tdata.versados_data = tdata;
      tdata->symbols = NULL;
      VDATA (abfd)->alert = 0x12345678;
    }

  bfd_default_set_arch_mach (abfd, bfd_arch_m68k, 0);
  return TRUE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static asymbol* versados_new_symbol ( bfd abfd,
int  snum,
const char *  name,
bfd_vma  val,
asection sec 
) [static]

Definition at line 169 of file versados.c.

{
  asymbol *n = VDATA (abfd)->symbols + snum;
  n->name = name;
  n->value = val;
  n->section = sec;
  n->the_bfd = abfd;
  n->flags = 0;
  return n;
}

Here is the caller graph for this function:

static const bfd_target* versados_object_p ( bfd abfd) [static]

Definition at line 570 of file versados.c.

{
  struct ext_vheader ext;
  unsigned char len;
  tdata_type *tdata_save;

  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
    return NULL;

  if (bfd_bread (&len, (bfd_size_type) 1, abfd) != 1)
    {
      if (bfd_get_error () != bfd_error_system_call)
       bfd_set_error (bfd_error_wrong_format);
      return NULL;
    }

  if (bfd_bread (&ext.type, (bfd_size_type) len, abfd) != len)
    {
      if (bfd_get_error () != bfd_error_system_call)
       bfd_set_error (bfd_error_wrong_format);
      return NULL;
    }

  /* We guess that the language field will never be larger than 10.
     In sample files, it is always either 0 or 1.  Checking for this
     prevents confusion with Intel Hex files.  */
  if (ext.type != VHEADER
      || ext.lang > 10)
    {
      bfd_set_error (bfd_error_wrong_format);
      return NULL;
    }

  /* OK, looks like a record, build the tdata and read in.  */
  tdata_save = abfd->tdata.versados_data;
  if (!versados_mkobject (abfd) || !versados_scan (abfd))
    {
      abfd->tdata.versados_data = tdata_save;
      return NULL;
    }

  return abfd->xvec;
}

Here is the call graph for this function:

static bfd_boolean versados_pass_2 ( bfd abfd) [static]

Definition at line 615 of file versados.c.

{
  union ext_any any;

  if (VDATA (abfd)->pass_2_done)
    return 1;

  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
    return 0;

  VDATA (abfd)->es_done = ES_BASE;

  /* Read records till we get to where we want to be.  */
  while (1)
    {
      get_record (abfd, &any);
      switch (any.header.type)
       {
       case VEND:
         VDATA (abfd)->pass_2_done = 1;
         return 1;
       case VESTDEF:
         process_esd (abfd, &any.esd, 2);
         break;
       case VOTR:
         process_otr (abfd, &any.otr, 2);
         break;
       }
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void versados_print_symbol ( bfd abfd,
void *  afile,
asymbol symbol,
bfd_print_symbol_type  how 
) [static]

Definition at line 721 of file versados.c.

{
  FILE *file = (FILE *) afile;

  switch (how)
    {
    case bfd_print_symbol_name:
      fprintf (file, "%s", symbol->name);
      break;
    default:
      bfd_print_symbol_vandf (abfd, (void *) file, symbol);
      fprintf (file, " %-5s %s",
              symbol->section->name,
              symbol->name);
    }
}

Here is the call graph for this function:

static bfd_boolean versados_scan ( bfd abfd) [static]

Definition at line 452 of file versados.c.

{
  int loop = 1;
  int i;
  int j;
  int nsecs = 0;
  bfd_size_type amt;

  VDATA (abfd)->stringlen = 0;
  VDATA (abfd)->nrefs = 0;
  VDATA (abfd)->ndefs = 0;
  VDATA (abfd)->ref_idx = 0;
  VDATA (abfd)->def_idx = 0;
  VDATA (abfd)->pass_2_done = 0;

  while (loop)
    {
      union ext_any any;

      if (!get_record (abfd, &any))
       return TRUE;
      switch (any.header.type)
       {
       case VHEADER:
         break;
       case VEND:
         loop = 0;
         break;
       case VESTDEF:
         process_esd (abfd, &any.esd, 1);
         break;
       case VOTR:
         process_otr (abfd, &any.otr, 1);
         break;
       }
    }

  /* Now allocate space for the relocs and sections.  */
  VDATA (abfd)->nrefs = VDATA (abfd)->ref_idx;
  VDATA (abfd)->ndefs = VDATA (abfd)->def_idx;
  VDATA (abfd)->ref_idx = 0;
  VDATA (abfd)->def_idx = 0;

  abfd->symcount = VDATA (abfd)->nrefs + VDATA (abfd)->ndefs;

  for (i = 0; i < 16; i++)
    {
      struct esdid *esdid = &EDATA (abfd, i);

      if (esdid->section)
       {
         amt = (bfd_size_type) esdid->relocs * sizeof (arelent);
         esdid->section->relocation = bfd_alloc (abfd, amt);

         esdid->pc = 0;

         if (esdid->contents)
           esdid->section->flags |= SEC_HAS_CONTENTS | SEC_LOAD;

         esdid->section->reloc_count = esdid->relocs;
         if (esdid->relocs)
           esdid->section->flags |= SEC_RELOC;

         esdid->relocs = 0;

         /* Add an entry into the symbol table for it.  */
         nsecs++;
         VDATA (abfd)->stringlen += strlen (esdid->section->name) + 1;
       }
    }

  abfd->symcount += nsecs;

  amt = abfd->symcount;
  amt *= sizeof (asymbol);
  VDATA (abfd)->symbols = bfd_alloc (abfd, amt);

  amt = VDATA (abfd)->stringlen;
  VDATA (abfd)->strings = bfd_alloc (abfd, amt);

  if ((VDATA (abfd)->symbols == NULL && abfd->symcount > 0)
      || (VDATA (abfd)->strings == NULL && VDATA (abfd)->stringlen > 0))
    return FALSE;

  /* Actually fill in the section symbols,
     we stick them at the end of the table.  */
  for (j = VDATA (abfd)->nrefs + VDATA (abfd)->ndefs, i = 0; i < 16; i++)
    {
      struct esdid *esdid = &EDATA (abfd, i);
      asection *sec = esdid->section;

      if (sec)
       {
         asymbol *s = VDATA (abfd)->symbols + j;
         s->name = new_symbol_string (abfd, sec->name);
         s->section = sec;
         s->flags = BSF_LOCAL;
         s->value = 0;
         s->the_bfd = abfd;
         j++;
       }
    }

  if (abfd->symcount)
    abfd->flags |= HAS_SYMS;

  /* Set this to nsecs - since we've already planted the section
     symbols.  */
  VDATA (abfd)->nsecsyms = nsecs;

  VDATA (abfd)->ref_idx = 0;

  return 1;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static bfd_boolean versados_set_section_contents ( bfd *abfd  ATTRIBUTE_UNUSED,
sec_ptr section  ATTRIBUTE_UNUSED,
const void *location  ATTRIBUTE_UNUSED,
file_ptr offset  ATTRIBUTE_UNUSED,
bfd_size_type bytes_to_do  ATTRIBUTE_UNUSED 
) [static]

Definition at line 667 of file versados.c.

{
  return FALSE;
}
static int versados_sizeof_headers ( bfd *abfd  ATTRIBUTE_UNUSED,
struct bfd_link_info *info  ATTRIBUTE_UNUSED 
) [static]

Definition at line 677 of file versados.c.

{
  return 0;
}

Variable Documentation

reloc_howto_type versados_howto_table[]
Initial value:
{
  HOWTO (R_RELWORD, 0, 1, 16, FALSE,
        0, complain_overflow_dont, 0,
        "+v16", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
  HOWTO (R_RELLONG, 0, 2, 32, FALSE,
        0, complain_overflow_dont, 0,
        "+v32", TRUE, 0xffffffff, 0xffffffff, FALSE),

  HOWTO (R_RELWORD_NEG, 0, -1, 16, FALSE,
        0, complain_overflow_dont, 0,
        "-v16", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
  HOWTO (R_RELLONG_NEG, 0, -2, 32, FALSE,
        0, complain_overflow_dont, 0,
        "-v32", TRUE, 0xffffffff, 0xffffffff, FALSE),
}

Definition at line 318 of file versados.c.

Definition at line 817 of file versados.c.