Back to index

cell-binutils  2.17cvs20070401
Defines | Functions | Variables
binary.c File Reference
#include "bfd.h"
#include "sysdep.h"
#include "safe-ctype.h"
#include "libbfd.h"

Go to the source code of this file.

Defines

#define BIN_SYMS   3
#define binary_close_and_cleanup   _bfd_generic_close_and_cleanup
#define binary_bfd_free_cached_info   _bfd_generic_bfd_free_cached_info
#define binary_new_section_hook   _bfd_generic_new_section_hook
#define binary_make_empty_symbol   _bfd_generic_make_empty_symbol
#define binary_print_symbol   _bfd_nosymbols_print_symbol
#define binary_bfd_is_local_label_name   bfd_generic_is_local_label_name
#define binary_get_lineno   _bfd_nosymbols_get_lineno
#define binary_find_nearest_line   _bfd_nosymbols_find_nearest_line
#define binary_find_inliner_info   _bfd_nosymbols_find_inliner_info
#define binary_bfd_make_debug_symbol   _bfd_nosymbols_bfd_make_debug_symbol
#define binary_read_minisymbols   _bfd_generic_read_minisymbols
#define binary_minisymbol_to_symbol   _bfd_generic_minisymbol_to_symbol
#define binary_bfd_is_target_special_symbol   ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define binary_set_arch_mach   _bfd_generic_set_arch_mach
#define binary_bfd_get_relocated_section_contents   bfd_generic_get_relocated_section_contents
#define binary_bfd_relax_section   bfd_generic_relax_section
#define binary_bfd_gc_sections   bfd_generic_gc_sections
#define binary_bfd_merge_sections   bfd_generic_merge_sections
#define binary_bfd_is_group_section   bfd_generic_is_group_section
#define binary_bfd_discard_group   bfd_generic_discard_group
#define binary_section_already_linked   _bfd_generic_section_already_linked
#define binary_bfd_link_hash_table_create   _bfd_generic_link_hash_table_create
#define binary_bfd_link_hash_table_free   _bfd_generic_link_hash_table_free
#define binary_bfd_link_just_syms   _bfd_generic_link_just_syms
#define binary_bfd_link_add_symbols   _bfd_generic_link_add_symbols
#define binary_bfd_final_link   _bfd_generic_final_link
#define binary_bfd_link_split_section   _bfd_generic_link_split_section
#define binary_get_section_contents_in_window   _bfd_generic_get_section_contents_in_window

Functions

enum bfd_architecture unsigned
long static
bfd_external_machine
bfd_boolean 
binary_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
static const bfd_targetbinary_object_p (bfd *abfd)
static bfd_boolean binary_get_section_contents (bfd *abfd, asection *section ATTRIBUTE_UNUSED, void *location, file_ptr offset, bfd_size_type count)
static long binary_get_symtab_upper_bound (bfd *abfd ATTRIBUTE_UNUSED)
static char * mangle_name (bfd *abfd, char *suffix)
static long binary_canonicalize_symtab (bfd *abfd, asymbol **alocation)
static void binary_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED, asymbol *symbol, symbol_info *ret)
static bfd_boolean binary_set_section_contents (bfd *abfd, asection *sec, const void *data, file_ptr offset, bfd_size_type size)
static int binary_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info ATTRIBUTE_UNUSED)

Variables

const bfd_target binary_vec

Define Documentation

#define BIN_SYMS   3

Definition at line 42 of file binary.c.

Definition at line 316 of file binary.c.

Definition at line 322 of file binary.c.

Definition at line 106 of file binary.c.

Definition at line 313 of file binary.c.

Definition at line 311 of file binary.c.

Definition at line 315 of file binary.c.

Definition at line 217 of file binary.c.

Definition at line 224 of file binary.c.

Definition at line 321 of file binary.c.

Definition at line 318 of file binary.c.

Definition at line 319 of file binary.c.

Definition at line 320 of file binary.c.

Definition at line 323 of file binary.c.

Definition at line 221 of file binary.c.

Definition at line 314 of file binary.c.

Definition at line 312 of file binary.c.

Definition at line 105 of file binary.c.

Definition at line 220 of file binary.c.

Definition at line 219 of file binary.c.

Definition at line 218 of file binary.c.

Definition at line 324 of file binary.c.

Definition at line 204 of file binary.c.

Definition at line 223 of file binary.c.

Definition at line 107 of file binary.c.

Definition at line 205 of file binary.c.

Definition at line 222 of file binary.c.

Definition at line 317 of file binary.c.

Definition at line 227 of file binary.c.


Function Documentation

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

Definition at line 162 of file binary.c.

{
  asection *sec = (asection *) abfd->tdata.any;
  asymbol *syms;
  unsigned int i;
  bfd_size_type amt = BIN_SYMS * sizeof (asymbol);

  syms = bfd_alloc (abfd, amt);
  if (syms == NULL)
    return 0;

  /* Start symbol.  */
  syms[0].the_bfd = abfd;
  syms[0].name = mangle_name (abfd, "start");
  syms[0].value = 0;
  syms[0].flags = BSF_GLOBAL;
  syms[0].section = sec;
  syms[0].udata.p = NULL;

  /* End symbol.  */
  syms[1].the_bfd = abfd;
  syms[1].name = mangle_name (abfd, "end");
  syms[1].value = sec->size;
  syms[1].flags = BSF_GLOBAL;
  syms[1].section = sec;
  syms[1].udata.p = NULL;

  /* Size symbol.  */
  syms[2].the_bfd = abfd;
  syms[2].name = mangle_name (abfd, "size");
  syms[2].value = sec->size;
  syms[2].flags = BSF_GLOBAL;
  syms[2].section = bfd_abs_section_ptr;
  syms[2].udata.p = NULL;

  for (i = 0; i < BIN_SYMS; i++)
    *alocation++ = syms++;
  *alocation = NULL;

  return BIN_SYMS;
}

Here is the call graph for this function:

static bfd_boolean binary_get_section_contents ( bfd abfd,
asection *section  ATTRIBUTE_UNUSED,
void *  location,
file_ptr  offset,
bfd_size_type  count 
) [static]

Definition at line 112 of file binary.c.

{
  if (bfd_seek (abfd, offset, SEEK_SET) != 0
      || bfd_bread (location, count, abfd) != count)
    return FALSE;
  return TRUE;
}

Here is the call graph for this function:

static void binary_get_symbol_info ( bfd *ignore_abfd  ATTRIBUTE_UNUSED,
asymbol symbol,
symbol_info ret 
) [static]

Definition at line 210 of file binary.c.

{
  bfd_symbol_info (symbol, ret);
}

Here is the call graph for this function:

static long binary_get_symtab_upper_bound ( bfd *abfd  ATTRIBUTE_UNUSED) [static]

Definition at line 127 of file binary.c.

{
  return (BIN_SYMS + 1) * sizeof (asymbol *);
}
enum bfd_architecture unsigned long static bfd_external_machine bfd_boolean binary_mkobject ( bfd *abfd  ATTRIBUTE_UNUSED) [static, abstract]

Definition at line 52 of file binary.c.

{
  return TRUE;
}
static const bfd_target* binary_object_p ( bfd abfd) [static]

Definition at line 62 of file binary.c.

{
  struct stat statbuf;
  asection *sec;
  flagword flags;

  if (abfd->target_defaulted)
    {
      bfd_set_error (bfd_error_wrong_format);
      return NULL;
    }

  abfd->symcount = BIN_SYMS;

  /* Find the file size.  */
  if (bfd_stat (abfd, &statbuf) < 0)
    {
      bfd_set_error (bfd_error_system_call);
      return NULL;
    }

  /* One data section.  */
  flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS;
  sec = bfd_make_section_with_flags (abfd, ".data", flags);
  if (sec == NULL)
    return NULL;
  sec->vma = 0;
  sec->size = statbuf.st_size;
  sec->filepos = 0;

  abfd->tdata.any = (void *) sec;

  if (bfd_get_arch_info (abfd) != NULL)
    {
      if ((bfd_get_arch_info (abfd)->arch == bfd_arch_unknown)
          && (bfd_external_binary_architecture != bfd_arch_unknown))
        bfd_set_arch_info (abfd, bfd_lookup_arch
                        (bfd_external_binary_architecture, bfd_external_machine));
    }

  return abfd->xvec;
}

Here is the call graph for this function:

static bfd_boolean binary_set_section_contents ( bfd abfd,
asection sec,
const void *  data,
file_ptr  offset,
bfd_size_type  size 
) [static]

Definition at line 232 of file binary.c.

{
  if (size == 0)
    return TRUE;

  if (! abfd->output_has_begun)
    {
      bfd_boolean found_low;
      bfd_vma low;
      asection *s;

      /* The lowest section LMA sets the virtual address of the start
         of the file.  We use this to set the file position of all the
         sections.  */
      found_low = FALSE;
      low = 0;
      for (s = abfd->sections; s != NULL; s = s->next)
       if (((s->flags
             & (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_NEVER_LOAD))
            == (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC))
           && (s->size > 0)
           && (! found_low || s->lma < low))
         {
           low = s->lma;
           found_low = TRUE;
         }

      for (s = abfd->sections; s != NULL; s = s->next)
       {
         s->filepos = s->lma - low;

         /* Skip following warning check for sections that will not
            occupy file space.  */
         if ((s->flags
              & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_NEVER_LOAD))
             != (SEC_HAS_CONTENTS | SEC_ALLOC)
             || (s->size == 0))
           continue;

         /* If attempting to generate a binary file from a bfd with
            LMA's all over the place, huge (sparse?) binary files may
            result.  This condition attempts to detect this situation
            and print a warning.  Better heuristics would be nice to
            have.  */

         if (s->filepos < 0)
           (*_bfd_error_handler)
             (_("Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."),
              bfd_get_section_name (abfd, s),
              (unsigned long) s->filepos);
       }

      abfd->output_has_begun = TRUE;
    }

  /* We don't want to output anything for a section that is neither
     loaded nor allocated.  The contents of such a section are not
     meaningful in the binary format.  */
  if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
    return TRUE;
  if ((sec->flags & SEC_NEVER_LOAD) != 0)
    return TRUE;

  return _bfd_generic_set_section_contents (abfd, sec, data, offset, size);
}

Here is the call graph for this function:

static int binary_sizeof_headers ( bfd *abfd  ATTRIBUTE_UNUSED,
struct bfd_link_info *info  ATTRIBUTE_UNUSED 
) [static]

Definition at line 305 of file binary.c.

{
  return 0;
}
static char* mangle_name ( bfd abfd,
char *  suffix 
) [static]

Definition at line 135 of file binary.c.

{
  bfd_size_type size;
  char *buf;
  char *p;

  size = (strlen (bfd_get_filename (abfd))
         + strlen (suffix)
         + sizeof "_binary__");

  buf = bfd_alloc (abfd, size);
  if (buf == NULL)
    return "";

  sprintf (buf, "_binary_%s_%s", bfd_get_filename (abfd), suffix);

  /* Change any non-alphanumeric characters to underscores.  */
  for (p = buf; *p; p++)
    if (! ISALNUM (*p))
      *p = '_';

  return buf;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Definition at line 326 of file binary.c.