OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [cofflink.c] - Diff between revs 148 and 163

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 148 Rev 163
Line 864... Line 864...
  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
    {
    {
      size_t sz;
      size_t sz;
 
 
      sub->output_has_begun = FALSE;
      sub->output_has_begun = FALSE;
      sz = obj_raw_syment_count (sub);
      sz = bfd_family_coff (sub) ? obj_raw_syment_count (sub) : 2;
      if (sz > max_sym_count)
      if (sz > max_sym_count)
        max_sym_count = sz;
        max_sym_count = sz;
    }
    }
 
 
  /* Allocate some buffers used while linking.  */
  /* Allocate some buffers used while linking.  */
Line 941... Line 941...
                goto error_return;
                goto error_return;
            }
            }
        }
        }
    }
    }
 
 
 
  if (finfo.info->strip != strip_all && finfo.info->discard != discard_all)
 
    {
 
      /* Add local symbols from foreign inputs.  */
 
      for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
 
        {
 
          unsigned int i;
 
 
 
          if (bfd_family_coff (sub) || ! bfd_get_outsymbols (sub))
 
            continue;
 
          for (i = 0; i < bfd_get_symcount (sub); ++i)
 
            {
 
              asymbol *sym = bfd_get_outsymbols (sub) [i];
 
              file_ptr pos;
 
              struct internal_syment isym;
 
              bfd_size_type string_size = 0;
 
              bfd_vma written = 0;
 
              bfd_boolean rewrite = FALSE;
 
 
 
              if (! (sym->flags & BSF_LOCAL)
 
                  || (sym->flags & (BSF_SECTION_SYM | BSF_DEBUGGING_RELOC
 
                                    | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC
 
                                    | BSF_SYNTHETIC))
 
                  || ((sym->flags & BSF_DEBUGGING)
 
                      && ! (sym->flags & BSF_FILE)))
 
                continue;
 
 
 
              /* See if we are discarding symbols with this name.  */
 
              if ((finfo.info->strip == strip_some
 
                   && (bfd_hash_lookup (finfo.info->keep_hash,
 
                                        bfd_asymbol_name(sym), FALSE, FALSE)
 
                       == NULL))
 
                  || (((finfo.info->discard == discard_sec_merge
 
                        && (bfd_get_section (sym)->flags & SEC_MERGE)
 
                        && ! finfo.info->relocatable)
 
                       || finfo.info->discard == discard_l)
 
                      && bfd_is_local_label_name (sub, bfd_asymbol_name(sym))))
 
                continue;
 
 
 
              pos = obj_sym_filepos (abfd) + obj_raw_syment_count (abfd)
 
                                             * symesz;
 
              if (bfd_seek (abfd, pos, SEEK_SET) != 0)
 
                goto error_return;
 
              if (! coff_write_alien_symbol(abfd, sym, &isym, &written,
 
                                            &string_size, NULL, NULL))
 
                goto error_return;
 
 
 
              if (string_size)
 
                {
 
                  bfd_boolean hash = ! (abfd->flags & BFD_TRADITIONAL_FORMAT);
 
                  bfd_size_type indx;
 
 
 
                  indx = _bfd_stringtab_add (finfo.strtab,
 
                                             bfd_asymbol_name (sym), hash,
 
                                             FALSE);
 
                  if (indx == (bfd_size_type) -1)
 
                    goto error_return;
 
                  isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
 
                  bfd_coff_swap_sym_out (abfd, &isym, finfo.outsyms);
 
                  rewrite = TRUE;
 
                }
 
 
 
              if (isym.n_sclass == C_FILE)
 
                {
 
                  if (finfo.last_file_index != -1)
 
                    {
 
                      finfo.last_file.n_value = obj_raw_syment_count (abfd);
 
                      bfd_coff_swap_sym_out (abfd, &finfo.last_file,
 
                                             finfo.outsyms);
 
                      pos = obj_sym_filepos (abfd) + finfo.last_file_index
 
                                                     * symesz;
 
                      rewrite = TRUE;
 
                    }
 
                  finfo.last_file_index = obj_raw_syment_count (abfd);
 
                  finfo.last_file = isym;
 
                }
 
 
 
              if (rewrite
 
                  && (bfd_seek (abfd, pos, SEEK_SET) != 0
 
                      || bfd_bwrite (finfo.outsyms, symesz, abfd) != symesz))
 
                goto error_return;
 
 
 
              obj_raw_syment_count (abfd) += written;
 
            }
 
        }
 
    }
 
 
  if (! bfd_coff_final_link_postscript (abfd, & finfo))
  if (! bfd_coff_final_link_postscript (abfd, & finfo))
    goto error_return;
    goto error_return;
 
 
  /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
  /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
 
 

powered by: WebSVN 2.1.0

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