OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [bfd/] [coffgen.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...
/* Support for the generic parts of COFF, for BFD.
/* Support for the generic parts of COFF, for BFD.
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
   2000, 2001, 2002, 2003, 2004, 2005, 2007
   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
   Written by Cygnus Support.
   Written by Cygnus Support.
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
 
 
Line 57... Line 57...
  bfd_boolean result = TRUE;
  bfd_boolean result = TRUE;
  flagword flags;
  flagword flags;
 
 
  name = NULL;
  name = NULL;
 
 
  /* Handle long section names as in PE.  */
  /* Handle long section names as in PE.  On reading, we want to
  if (bfd_coff_long_section_names (abfd)
    accept long names if the format permits them at all, regardless
 
    of the current state of the flag that dictates if we would generate
 
    them in outputs; this construct checks if that is the case by
 
    attempting to set the flag, without changing its state; the call
 
    will fail for formats that do not support long names at all.  */
 
  if (bfd_coff_set_long_section_names (abfd, bfd_coff_long_section_names (abfd))
      && hdr->s_name[0] == '/')
      && hdr->s_name[0] == '/')
    {
    {
      char buf[SCNNMLEN];
      char buf[SCNNMLEN];
      long strindex;
      long strindex;
      char *p;
      char *p;
      const char *strings;
      const char *strings;
 
 
 
      /* Flag that this BFD uses long names, even though the format might
 
         expect them to be off by default.  This won't directly affect the
 
         format of any output BFD created from this one, but the information
 
         can be used to decide what to do.  */
 
      bfd_coff_set_long_section_names (abfd, TRUE);
      memcpy (buf, hdr->s_name + 1, SCNNMLEN - 1);
      memcpy (buf, hdr->s_name + 1, SCNNMLEN - 1);
      buf[SCNNMLEN - 1] = '\0';
      buf[SCNNMLEN - 1] = '\0';
      strindex = strtol (buf, &p, 10);
      strindex = strtol (buf, &p, 10);
      if (*p == '\0' && strindex >= 0)
      if (*p == '\0' && strindex >= 0)
        {
        {
Line 78... Line 88...
            return FALSE;
            return FALSE;
          /* FIXME: For extra safety, we should make sure that
          /* FIXME: For extra safety, we should make sure that
             strindex does not run us past the end, but right now we
             strindex does not run us past the end, but right now we
             don't know the length of the string table.  */
             don't know the length of the string table.  */
          strings += strindex;
          strings += strindex;
          name = bfd_alloc (abfd, (bfd_size_type) strlen (strings) + 1);
          name = (char *) bfd_alloc (abfd,
 
                                     (bfd_size_type) strlen (strings) + 1);
          if (name == NULL)
          if (name == NULL)
            return FALSE;
            return FALSE;
          strcpy (name, strings);
          strcpy (name, strings);
        }
        }
    }
    }
 
 
  if (name == NULL)
  if (name == NULL)
    {
    {
      /* Assorted wastage to null-terminate the name, thanks AT&T! */
      /* Assorted wastage to null-terminate the name, thanks AT&T! */
      name = bfd_alloc (abfd, (bfd_size_type) sizeof (hdr->s_name) + 1);
      name = (char *) bfd_alloc (abfd,
 
                                 (bfd_size_type) sizeof (hdr->s_name) + 1);
      if (name == NULL)
      if (name == NULL)
        return FALSE;
        return FALSE;
      strncpy (name, (char *) &hdr->s_name[0], sizeof (hdr->s_name));
      strncpy (name, (char *) &hdr->s_name[0], sizeof (hdr->s_name));
      name[sizeof (hdr->s_name)] = 0;
      name[sizeof (hdr->s_name)] = 0;
    }
    }
Line 183... Line 195...
  if (tdata == NULL)
  if (tdata == NULL)
    goto fail2;
    goto fail2;
 
 
  scnhsz = bfd_coff_scnhsz (abfd);
  scnhsz = bfd_coff_scnhsz (abfd);
  readsize = (bfd_size_type) nscns * scnhsz;
  readsize = (bfd_size_type) nscns * scnhsz;
  external_sections = bfd_alloc (abfd, readsize);
  external_sections = (char *) bfd_alloc (abfd, readsize);
  if (!external_sections)
  if (!external_sections)
    goto fail;
    goto fail;
 
 
  if (bfd_bread ((void *) external_sections, readsize, abfd) != readsize)
  if (bfd_bread ((void *) external_sections, readsize, abfd) != readsize)
    goto fail;
    goto fail;
Line 425... Line 437...
  relsz = bfd_coff_relsz (abfd);
  relsz = bfd_coff_relsz (abfd);
 
 
  amt = sec->reloc_count * relsz;
  amt = sec->reloc_count * relsz;
  if (external_relocs == NULL)
  if (external_relocs == NULL)
    {
    {
      free_external = bfd_malloc (amt);
      free_external = (bfd_byte *) bfd_malloc (amt);
      if (free_external == NULL)
      if (free_external == NULL)
        goto error_return;
        goto error_return;
      external_relocs = free_external;
      external_relocs = free_external;
    }
    }
 
 
Line 439... Line 451...
 
 
  if (internal_relocs == NULL)
  if (internal_relocs == NULL)
    {
    {
      amt = sec->reloc_count;
      amt = sec->reloc_count;
      amt *= sizeof (struct internal_reloc);
      amt *= sizeof (struct internal_reloc);
      free_internal = bfd_malloc (amt);
      free_internal = (struct internal_reloc *) bfd_malloc (amt);
      if (free_internal == NULL)
      if (free_internal == NULL)
        goto error_return;
        goto error_return;
      internal_relocs = free_internal;
      internal_relocs = free_internal;
    }
    }
 
 
Line 639... Line 651...
    asymbol **newsyms;
    asymbol **newsyms;
    unsigned int i;
    unsigned int i;
    bfd_size_type amt;
    bfd_size_type amt;
 
 
    amt = sizeof (asymbol *) * ((bfd_size_type) symbol_count + 1);
    amt = sizeof (asymbol *) * ((bfd_size_type) symbol_count + 1);
    newsyms = bfd_alloc (bfd_ptr, amt);
    newsyms = (asymbol **) bfd_alloc (bfd_ptr, amt);
    if (!newsyms)
    if (!newsyms)
      return FALSE;
      return FALSE;
    bfd_ptr->outsymbols = newsyms;
    bfd_ptr->outsymbols = newsyms;
    for (i = 0; i < symbol_count; i++)
    for (i = 0; i < symbol_count; i++)
      if ((symbol_ptr_ptr[i]->flags & BSF_NOT_AT_END) != 0
      if ((symbol_ptr_ptr[i]->flags & BSF_NOT_AT_END) != 0
Line 900... Line 912...
                   asection **debug_string_section_p,
                   asection **debug_string_section_p,
                   bfd_size_type *debug_string_size_p)
                   bfd_size_type *debug_string_size_p)
{
{
  unsigned int numaux = native->u.syment.n_numaux;
  unsigned int numaux = native->u.syment.n_numaux;
  int type = native->u.syment.n_type;
  int type = native->u.syment.n_type;
  int class = native->u.syment.n_sclass;
  int n_sclass = (int) native->u.syment.n_sclass;
  void * buf;
  void * buf;
  bfd_size_type symesz;
  bfd_size_type symesz;
 
 
  if (native->u.syment.n_sclass == C_FILE)
  if (native->u.syment.n_sclass == C_FILE)
    symbol->flags |= BSF_DEBUGGING;
    symbol->flags |= BSF_DEBUGGING;
Line 946... Line 958...
        return FALSE;
        return FALSE;
      for (j = 0; j < native->u.syment.n_numaux; j++)
      for (j = 0; j < native->u.syment.n_numaux; j++)
        {
        {
          bfd_coff_swap_aux_out (abfd,
          bfd_coff_swap_aux_out (abfd,
                                 &((native + j + 1)->u.auxent),
                                 &((native + j + 1)->u.auxent),
                                 type, class, (int) j,
                                 type, n_sclass, (int) j,
                                 native->u.syment.n_numaux,
                                 native->u.syment.n_numaux,
                                 buf);
                                 buf);
          if (bfd_bwrite (buf, auxesz, abfd) != auxesz)
          if (bfd_bwrite (buf, auxesz, abfd) != auxesz)
            return FALSE;
            return FALSE;
        }
        }
Line 1080... Line 1092...
  return coff_write_symbol (abfd, &(symbol->symbol), native, written,
  return coff_write_symbol (abfd, &(symbol->symbol), native, written,
                            string_size_p, debug_string_section_p,
                            string_size_p, debug_string_section_p,
                            debug_string_size_p);
                            debug_string_size_p);
}
}
 
 
 
static void
 
null_error_handler (const char * fmt ATTRIBUTE_UNUSED, ...)
 
{
 
}
 
 
/* Write out the COFF symbols.  */
/* Write out the COFF symbols.  */
 
 
bfd_boolean
bfd_boolean
coff_write_symbols (bfd *abfd)
coff_write_symbols (bfd *abfd)
{
{
Line 1136... Line 1153...
                                        &debug_string_size))
                                        &debug_string_size))
            return FALSE;
            return FALSE;
        }
        }
      else
      else
        {
        {
 
          if (coff_backend_info (abfd)->_bfd_coff_classify_symbol != NULL)
 
            {
 
              bfd_error_handler_type current_error_handler;
 
              enum coff_symbol_classification sym_class;
 
              unsigned char *n_sclass;
 
 
 
              /* Suppress error reporting by bfd_coff_classify_symbol.
 
                 Error messages can be generated when we are processing a local
 
                 symbol which has no associated section and we do not have to
 
                 worry about this, all we need to know is that it is local.  */
 
              current_error_handler = bfd_set_error_handler (null_error_handler);
 
              sym_class = bfd_coff_classify_symbol (abfd,
 
                                                   &c_symbol->native->u.syment);
 
              (void) bfd_set_error_handler (current_error_handler);
 
 
 
              n_sclass = &c_symbol->native->u.syment.n_sclass;
 
 
 
              /* If the symbol class has been changed (eg objcopy/ld script/etc)
 
                 we cannot retain the existing sclass from the original symbol.
 
                 Weak symbols only have one valid sclass, so just set it always.
 
                 If it is not local class and should be, set it C_STAT.
 
                 If it is global and not classified as global, or if it is
 
                 weak (which is also classified as global), set it C_EXT.  */
 
 
 
              if (symbol->flags & BSF_WEAK)
 
                *n_sclass = obj_pe (abfd) ? C_NT_WEAK : C_WEAKEXT;
 
              else if (symbol->flags & BSF_LOCAL && sym_class != COFF_SYMBOL_LOCAL)
 
                *n_sclass = C_STAT;
 
              else if (symbol->flags & BSF_GLOBAL
 
                       && (sym_class != COFF_SYMBOL_GLOBAL
 
#ifdef COFF_WITH_PE
 
                           || *n_sclass == C_NT_WEAK
 
#endif
 
                           || *n_sclass == C_WEAKEXT))
 
                c_symbol->native->u.syment.n_sclass = C_EXT;
 
            }
 
 
          if (!coff_write_native_symbol (abfd, c_symbol, &written,
          if (!coff_write_native_symbol (abfd, c_symbol, &written,
                                         &string_size, &debug_string_section,
                                         &string_size, &debug_string_section,
                                         &debug_string_size))
                                         &debug_string_size))
            return FALSE;
            return FALSE;
        }
        }
Line 1337... Line 1391...
                     combined_entry_type *symbol,
                     combined_entry_type *symbol,
                     unsigned int indaux,
                     unsigned int indaux,
                     combined_entry_type *auxent)
                     combined_entry_type *auxent)
{
{
  unsigned int type = symbol->u.syment.n_type;
  unsigned int type = symbol->u.syment.n_type;
  unsigned int class = symbol->u.syment.n_sclass;
  unsigned int n_sclass = symbol->u.syment.n_sclass;
 
 
  if (coff_backend_info (abfd)->_bfd_coff_pointerize_aux_hook)
  if (coff_backend_info (abfd)->_bfd_coff_pointerize_aux_hook)
    {
    {
      if ((*coff_backend_info (abfd)->_bfd_coff_pointerize_aux_hook)
      if ((*coff_backend_info (abfd)->_bfd_coff_pointerize_aux_hook)
          (abfd, table_base, symbol, indaux, auxent))
          (abfd, table_base, symbol, indaux, auxent))
        return;
        return;
    }
    }
 
 
  /* Don't bother if this is a file or a section.  */
  /* Don't bother if this is a file or a section.  */
  if (class == C_STAT && type == T_NULL)
  if (n_sclass == C_STAT && type == T_NULL)
    return;
    return;
  if (class == C_FILE)
  if (n_sclass == C_FILE)
    return;
    return;
 
 
  /* Otherwise patch up.  */
  /* Otherwise patch up.  */
#define N_TMASK coff_data  (abfd)->local_n_tmask
#define N_TMASK coff_data  (abfd)->local_n_tmask
#define N_BTSHFT coff_data (abfd)->local_n_btshft
#define N_BTSHFT coff_data (abfd)->local_n_btshft
 
 
  if ((ISFCN (type) || ISTAG (class) || class == C_BLOCK || class == C_FCN)
  if ((ISFCN (type) || ISTAG (n_sclass) || n_sclass == C_BLOCK
 
       || n_sclass == C_FCN)
      && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l > 0)
      && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l > 0)
    {
    {
      auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p =
      auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p =
        table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
        table_base + auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
      auxent->fix_end = 1;
      auxent->fix_end = 1;
Line 1393... Line 1448...
      bfd_set_error (bfd_error_no_debug_section);
      bfd_set_error (bfd_error_no_debug_section);
      return NULL;
      return NULL;
    }
    }
 
 
  sec_size = sect->size;
  sec_size = sect->size;
  debug_section = bfd_alloc (abfd, sec_size);
  debug_section = (char *) bfd_alloc (abfd, sec_size);
  if (debug_section == NULL)
  if (debug_section == NULL)
    return NULL;
    return NULL;
 
 
  /* Seek to the beginning of the `.debug' section and read it.
  /* Seek to the beginning of the `.debug' section and read it.
     Save the current position first; it is needed by our caller.
     Save the current position first; it is needed by our caller.
Line 1423... Line 1478...
 
 
  for (len = 0; len < maxlen; ++len)
  for (len = 0; len < maxlen; ++len)
    if (name[len] == '\0')
    if (name[len] == '\0')
      break;
      break;
 
 
  if ((newname = bfd_alloc (abfd, (bfd_size_type) len + 1)) == NULL)
  if ((newname = (char *) bfd_alloc (abfd, (bfd_size_type) len + 1)) == NULL)
    return NULL;
    return NULL;
 
 
  strncpy (newname, name, len);
  strncpy (newname, name, len);
  newname[len] = '\0';
  newname[len] = '\0';
  return newname;
  return newname;
Line 1518... Line 1573...
        (_("%B: bad string table size %lu"), abfd, (unsigned long) strsize);
        (_("%B: bad string table size %lu"), abfd, (unsigned long) strsize);
      bfd_set_error (bfd_error_bad_value);
      bfd_set_error (bfd_error_bad_value);
      return NULL;
      return NULL;
    }
    }
 
 
  strings = bfd_malloc (strsize);
  strings = (char *) bfd_malloc (strsize);
  if (strings == NULL)
  if (strings == NULL)
    return NULL;
    return NULL;
 
 
  if (bfd_bread (strings + STRING_SIZE_SIZE, strsize - STRING_SIZE_SIZE, abfd)
  if (bfd_bread (strings + STRING_SIZE_SIZE, strsize - STRING_SIZE_SIZE, abfd)
      != strsize - STRING_SIZE_SIZE)
      != strsize - STRING_SIZE_SIZE)
Line 1577... Line 1632...
 
 
  if (obj_raw_syments (abfd) != NULL)
  if (obj_raw_syments (abfd) != NULL)
    return obj_raw_syments (abfd);
    return obj_raw_syments (abfd);
 
 
  size = obj_raw_syment_count (abfd) * sizeof (combined_entry_type);
  size = obj_raw_syment_count (abfd) * sizeof (combined_entry_type);
  internal = bfd_zalloc (abfd, size);
  internal = (combined_entry_type *) bfd_zalloc (abfd, size);
  if (internal == NULL && size != 0)
  if (internal == NULL && size != 0)
    return NULL;
    return NULL;
  internal_end = internal + obj_raw_syment_count (abfd);
  internal_end = internal + obj_raw_syment_count (abfd);
 
 
  if (! _bfd_coff_get_external_symbols (abfd))
  if (! _bfd_coff_get_external_symbols (abfd))
Line 1683... Line 1738...
                 that isn't ours.  */
                 that isn't ours.  */
              for (i = 0; i < 8; ++i)
              for (i = 0; i < 8; ++i)
                if (internal_ptr->u.syment._n._n_name[i] == '\0')
                if (internal_ptr->u.syment._n._n_name[i] == '\0')
                  break;
                  break;
 
 
              newstring = bfd_zalloc (abfd, (bfd_size_type) (i + 1));
              newstring = (char *) bfd_zalloc (abfd, (bfd_size_type) (i + 1));
              if (newstring == NULL)
              if (newstring == NULL)
                return NULL;
                return NULL;
              strncpy (newstring, internal_ptr->u.syment._n._n_name, i);
              strncpy (newstring, internal_ptr->u.syment._n._n_name, i);
              internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) newstring;
              internal_ptr->u.syment._n._n_n._n_offset = (bfd_hostptr_t) newstring;
              internal_ptr->u.syment._n._n_n._n_zeroes = 0;
              internal_ptr->u.syment._n._n_n._n_zeroes = 0;
Line 1741... Line 1796...
 
 
asymbol *
asymbol *
coff_make_empty_symbol (bfd *abfd)
coff_make_empty_symbol (bfd *abfd)
{
{
  bfd_size_type amt = sizeof (coff_symbol_type);
  bfd_size_type amt = sizeof (coff_symbol_type);
  coff_symbol_type *new = bfd_zalloc (abfd, amt);
  coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_zalloc (abfd, amt);
 
 
  if (new == NULL)
  if (new_symbol == NULL)
    return NULL;
    return NULL;
  new->symbol.section = 0;
  new_symbol->symbol.section = 0;
  new->native = 0;
  new_symbol->native = 0;
  new->lineno = NULL;
  new_symbol->lineno = NULL;
  new->done_lineno = FALSE;
  new_symbol->done_lineno = FALSE;
  new->symbol.the_bfd = abfd;
  new_symbol->symbol.the_bfd = abfd;
 
 
  return & new->symbol;
  return & new_symbol->symbol;
}
}
 
 
/* Make a debugging symbol.  */
/* Make a debugging symbol.  */
 
 
asymbol *
asymbol *
coff_bfd_make_debug_symbol (bfd *abfd,
coff_bfd_make_debug_symbol (bfd *abfd,
                            void * ptr ATTRIBUTE_UNUSED,
                            void * ptr ATTRIBUTE_UNUSED,
                            unsigned long sz ATTRIBUTE_UNUSED)
                            unsigned long sz ATTRIBUTE_UNUSED)
{
{
  bfd_size_type amt = sizeof (coff_symbol_type);
  bfd_size_type amt = sizeof (coff_symbol_type);
  coff_symbol_type *new = bfd_alloc (abfd, amt);
  coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_alloc (abfd, amt);
 
 
  if (new == NULL)
  if (new_symbol == NULL)
    return NULL;
    return NULL;
  /* @@ The 10 is a guess at a plausible maximum number of aux entries
  /* @@ The 10 is a guess at a plausible maximum number of aux entries
     (but shouldn't be a constant).  */
     (but shouldn't be a constant).  */
  amt = sizeof (combined_entry_type) * 10;
  amt = sizeof (combined_entry_type) * 10;
  new->native = bfd_zalloc (abfd, amt);
  new_symbol->native = (combined_entry_type *) bfd_zalloc (abfd, amt);
  if (!new->native)
  if (!new_symbol->native)
    return NULL;
    return NULL;
  new->symbol.section = bfd_abs_section_ptr;
  new_symbol->symbol.section = bfd_abs_section_ptr;
  new->symbol.flags = BSF_DEBUGGING;
  new_symbol->symbol.flags = BSF_DEBUGGING;
  new->lineno = NULL;
  new_symbol->lineno = NULL;
  new->done_lineno = FALSE;
  new_symbol->done_lineno = FALSE;
  new->symbol.the_bfd = abfd;
  new_symbol->symbol.the_bfd = abfd;
 
 
  return & new->symbol;
  return & new_symbol->symbol;
}
}
 
 
void
void
coff_get_symbol_info (bfd *abfd, asymbol *symbol, symbol_info *ret)
coff_get_symbol_info (bfd *abfd, asymbol *symbol, symbol_info *ret)
{
{
Line 1906... Line 1961...
                   combined->u.syment.n_scnum,
                   combined->u.syment.n_scnum,
                   combined->u.syment.n_flags,
                   combined->u.syment.n_flags,
                   combined->u.syment.n_type,
                   combined->u.syment.n_type,
                   combined->u.syment.n_sclass,
                   combined->u.syment.n_sclass,
                   combined->u.syment.n_numaux);
                   combined->u.syment.n_numaux);
#ifdef BFD64
          bfd_fprintf_vma (abfd, file, val);
          /* fprintf_vma() on a 64-bit enabled host will always print a 64-bit
 
             value, but really we want to display the address in the target's
 
             address size.  Since we do not have a field in the bfd structure
 
             to tell us this, we take a guess, based on the target's name.  */
 
          if (strstr (bfd_get_target (abfd), "64") == NULL)
 
            fprintf (file, "%08lx", (unsigned long) (val & 0xffffffff));
 
          else
 
#endif
 
            fprintf_vma (file, val);
 
          fprintf (file, " %s", symbol->name);
          fprintf (file, " %s", symbol->name);
 
 
          for (aux = 0; aux < combined->u.syment.n_numaux; aux++)
          for (aux = 0; aux < combined->u.syment.n_numaux; aux++)
            {
            {
              combined_entry_type *auxp = combined + aux + 1;
              combined_entry_type *auxp = combined + aux + 1;
Line 1944... Line 1990...
                case C_STAT:
                case C_STAT:
                  if (combined->u.syment.n_type == T_NULL)
                  if (combined->u.syment.n_type == T_NULL)
                    /* Probably a section symbol ?  */
                    /* Probably a section symbol ?  */
                    {
                    {
                      fprintf (file, "AUX scnlen 0x%lx nreloc %d nlnno %d",
                      fprintf (file, "AUX scnlen 0x%lx nreloc %d nlnno %d",
                               (long) auxp->u.auxent.x_scn.x_scnlen,
                               (unsigned long) auxp->u.auxent.x_scn.x_scnlen,
                               auxp->u.auxent.x_scn.x_nreloc,
                               auxp->u.auxent.x_scn.x_nreloc,
                               auxp->u.auxent.x_scn.x_nlinno);
                               auxp->u.auxent.x_scn.x_nlinno);
                      if (auxp->u.auxent.x_scn.x_checksum != 0
                      if (auxp->u.auxent.x_scn.x_checksum != 0
                          || auxp->u.auxent.x_scn.x_associated != 0
                          || auxp->u.auxent.x_scn.x_associated != 0
                          || auxp->u.auxent.x_scn.x_comdat != 0)
                          || auxp->u.auxent.x_scn.x_comdat != 0)
Line 1958... Line 2004...
                                 auxp->u.auxent.x_scn.x_comdat);
                                 auxp->u.auxent.x_scn.x_comdat);
                      break;
                      break;
                    }
                    }
                    /* Otherwise fall through.  */
                    /* Otherwise fall through.  */
                case C_EXT:
                case C_EXT:
 
                case C_AIX_WEAKEXT:
                  if (ISFCN (combined->u.syment.n_type))
                  if (ISFCN (combined->u.syment.n_type))
                    {
                    {
                      long next, llnos;
                      long next, llnos;
 
 
                      if (auxp->fix_end)
                      if (auxp->fix_end)
Line 1970... Line 2017...
                      else
                      else
                        next = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
                        next = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
                      llnos = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_lnnoptr;
                      llnos = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_lnnoptr;
                      fprintf (file,
                      fprintf (file,
                               "AUX tagndx %ld ttlsiz 0x%lx lnnos %ld next %ld",
                               "AUX tagndx %ld ttlsiz 0x%lx lnnos %ld next %ld",
                               tagndx, auxp->u.auxent.x_sym.x_misc.x_fsize,
                               tagndx,
 
                               (unsigned long) auxp->u.auxent.x_sym.x_misc.x_fsize,
                               llnos, next);
                               llnos, next);
                      break;
                      break;
                    }
                    }
                  /* Otherwise fall through.  */
                  /* Otherwise fall through.  */
                default:
                default:
Line 1996... Line 2044...
              fprintf (file, "\n%s :", l->u.sym->name);
              fprintf (file, "\n%s :", l->u.sym->name);
              l++;
              l++;
              while (l->line_number)
              while (l->line_number)
                {
                {
                  fprintf (file, "\n%4d : ", l->line_number);
                  fprintf (file, "\n%4d : ", l->line_number);
                  fprintf_vma (file, l->u.offset + symbol->section->vma);
                  bfd_fprintf_vma (abfd, file, l->u.offset + symbol->section->vma);
                  l++;
                  l++;
                }
                }
            }
            }
        }
        }
      else
      else
Line 2142... Line 2190...
            break;
            break;
        }
        }
    }
    }
 
 
  /* Now wander though the raw linenumbers of the section.  */
  /* Now wander though the raw linenumbers of the section.  */
  /* If we have been called on this section before, and th. e offset we
  /* If we have been called on this section before, and the offset we
     want is further down then we can prime the lookup loop.  */
     want is further down then we can prime the lookup loop.  */
  sec_data = coff_section_data (abfd, section);
  sec_data = coff_section_data (abfd, section);
  if (sec_data != NULL
  if (sec_data != NULL
      && sec_data->i > 0
      && sec_data->i > 0
      && offset >= sec_data->offset)
      && offset >= sec_data->offset)
Line 2229... Line 2277...
      sec_data = (struct coff_section_tdata *) section->used_by_bfd;
      sec_data = (struct coff_section_tdata *) section->used_by_bfd;
    }
    }
  if (sec_data != NULL)
  if (sec_data != NULL)
    {
    {
      sec_data->offset = offset;
      sec_data->offset = offset;
      sec_data->i = i;
      sec_data->i = i - 1;
      sec_data->function = *functionname_ptr;
      sec_data->function = *functionname_ptr;
      sec_data->line_base = line_base;
      sec_data->line_base = line_base;
    }
    }
 
 
  return TRUE;
  return TRUE;
Line 2270... Line 2318...
/* Change the class of a coff symbol held by BFD.  */
/* Change the class of a coff symbol held by BFD.  */
 
 
bfd_boolean
bfd_boolean
bfd_coff_set_symbol_class (bfd *         abfd,
bfd_coff_set_symbol_class (bfd *         abfd,
                           asymbol *     symbol,
                           asymbol *     symbol,
                           unsigned int  class)
                           unsigned int  symbol_class)
{
{
  coff_symbol_type * csym;
  coff_symbol_type * csym;
 
 
  csym = coff_symbol_from (abfd, symbol);
  csym = coff_symbol_from (abfd, symbol);
  if (csym == NULL)
  if (csym == NULL)
Line 2290... Line 2338...
         coff_write_alien_symbol().  */
         coff_write_alien_symbol().  */
 
 
      combined_entry_type * native;
      combined_entry_type * native;
      bfd_size_type amt = sizeof (* native);
      bfd_size_type amt = sizeof (* native);
 
 
      native = bfd_zalloc (abfd, amt);
      native = (combined_entry_type *) bfd_zalloc (abfd, amt);
      if (native == NULL)
      if (native == NULL)
        return FALSE;
        return FALSE;
 
 
      native->u.syment.n_type   = T_NULL;
      native->u.syment.n_type   = T_NULL;
      native->u.syment.n_sclass = class;
      native->u.syment.n_sclass = symbol_class;
 
 
      if (bfd_is_und_section (symbol->section))
      if (bfd_is_und_section (symbol->section))
        {
        {
          native->u.syment.n_scnum = N_UNDEF;
          native->u.syment.n_scnum = N_UNDEF;
          native->u.syment.n_value = symbol->value;
          native->u.syment.n_value = symbol->value;
Line 2324... Line 2372...
        }
        }
 
 
      csym->native = native;
      csym->native = native;
    }
    }
  else
  else
    csym->native->u.syment.n_sclass = class;
    csym->native->u.syment.n_sclass = symbol_class;
 
 
  return TRUE;
  return TRUE;
}
}
 
 
struct coff_comdat_info *
struct coff_comdat_info *

powered by: WebSVN 2.1.0

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