Back to index

cell-binutils  2.17cvs20070401
Functions | Variables
obj-som.c File Reference
#include "as.h"
#include "subsegs.h"
#include "aout/stab_gnu.h"
#include "obstack.h"

Go to the source code of this file.

Functions

void obj_read_begin_hook (void)
void obj_som_compiler (int unused ATTRIBUTE_UNUSED)
void obj_som_version (int unused ATTRIBUTE_UNUSED)
void obj_som_copyright (int unused ATTRIBUTE_UNUSED)
void obj_som_init_stab_section (segT seg)
static void adjust_stab_sections (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED)
void som_frob_file (void)
static void obj_som_weak (int ignore ATTRIBUTE_UNUSED)

Variables

static int version_seen = 0
static int copyright_seen = 0
static int compiler_seen = 0
const pseudo_typeS obj_pseudo_table []

Function Documentation

static void adjust_stab_sections ( bfd abfd,
asection sec,
PTR xxx  ATTRIBUTE_UNUSED 
) [static]

Definition at line 266 of file obj-som.c.

{
  asection *strsec;
  char *p;
  int strsz, nsyms;

  if (strcmp ("$GDB_SYMBOLS$", sec->name))
    return;

  strsec = bfd_get_section_by_name (abfd, "$GDB_STRINGS$");
  if (strsec)
    strsz = bfd_section_size (abfd, strsec);
  else
    strsz = 0;
  nsyms = bfd_section_size (abfd, sec) / 12 - 1;

  p = seg_info (sec)->stabu.p;
  assert (p != 0);

  bfd_h_put_16 (abfd, (bfd_vma) nsyms, (bfd_byte *) p + 6);
  bfd_h_put_32 (abfd, (bfd_vma) strsz, (bfd_byte *) p + 8);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void obj_read_begin_hook ( void  )

Definition at line 37 of file obj-som.c.

{
}
void obj_som_compiler ( int unused  ATTRIBUTE_UNUSED)

Definition at line 47 of file obj-som.c.

{
  char *buf;
  char c;
  char *filename;
  char *language_name;
  char *p;
  char *version_id;

  if (compiler_seen)
    {
      as_bad ("Only one .compiler pseudo-op per file!");
      ignore_rest_of_line ();
      return;
    }

  SKIP_WHITESPACE ();
  if (*input_line_pointer == '\"')
    {
      buf = input_line_pointer;
      ++input_line_pointer;
      while (is_a_char (next_char_of_string ()))
       ;
      c = *input_line_pointer;
      *input_line_pointer = '\000';
    }
  else
    {
      as_bad ("Expected quoted string");
      ignore_rest_of_line ();
      return;
    }

  /* Parse the quoted string into its component parts.  Skip the
     quote.  */
  filename = buf + 1;
  p = filename;
  while (*p != ' ' && *p != '\000')
    p++;
  if (*p == '\000')
    {
      as_bad (".compiler directive missing language and version");
      return;
    }
  *p = '\000';

  language_name = ++p;
  while (*p != ' ' && *p != '\000')
    p++;
  if (*p == '\000')
    {
      as_bad (".compiler directive missing version");
      return;
    }
  *p = '\000';

  version_id = ++p;
  while (*p != '\000')
    p++;
  /* Remove the trailing quote.  */
  *(--p) = '\000';

  compiler_seen = 1;
  if (! bfd_som_attach_compilation_unit (stdoutput, filename, language_name,
                                    "GNU Tools", version_id))
    {
      bfd_perror (stdoutput->filename);
      as_fatal ("FATAL: Attaching compiler header %s", stdoutput->filename);
    }
  *input_line_pointer = c;
  demand_empty_rest_of_line ();
}

Here is the call graph for this function:

void obj_som_copyright ( int unused  ATTRIBUTE_UNUSED)

Definition at line 165 of file obj-som.c.

{
  char *copyright, c;

  if (copyright_seen)
    {
      as_bad (_("Only one .copyright pseudo-op per file!"));
      ignore_rest_of_line ();
      return;
    }

  SKIP_WHITESPACE ();
  if (*input_line_pointer == '\"')
    {
      copyright = input_line_pointer;
      ++input_line_pointer;
      while (is_a_char (next_char_of_string ()))
       ;
      c = *input_line_pointer;
      *input_line_pointer = '\000';
    }
  else
    {
      as_bad (_("Expected quoted string"));
      ignore_rest_of_line ();
      return;
    }

  copyright_seen = 1;
  if (!bfd_som_attach_aux_hdr (stdoutput, COPYRIGHT_AUX_ID, copyright))
    as_fatal (_("attaching copyright header %s: %s"),
             stdoutput->filename, bfd_errmsg (bfd_get_error ()));

  *input_line_pointer = c;
  demand_empty_rest_of_line ();
}

Here is the call graph for this function:

Definition at line 210 of file obj-som.c.

{
  segT saved_seg = now_seg;
  segT space;
  subsegT saved_subseg = now_subseg;
  char *p, *file;
  unsigned int stroff;

  /* Make the space which will contain the debug subspaces.  */
  space = bfd_make_section_old_way (stdoutput, "$GDB_DEBUG$");

  /* Set SOM specific attributes for the space.  In particular we set
     the space "defined", "private", "sort_key", and "spnum" values.

     Due to a bug in pxdb (called by hpux linker), the sort keys
     of the various stabs spaces/subspaces need to be "small".  We
     reserve range 72/73 which appear to work well.  */
  obj_set_section_attributes (space, 1, 1, 72, 2);
  bfd_set_section_alignment (stdoutput, space, 2);

  /* Set the containing space for both stab sections to be $GDB_DEBUG$
     (just created above).  Also set some attributes which BFD does
     not understand.  In particular, access bits, sort keys, and load
     quadrant.  */
  obj_set_subsection_attributes (seg, space, 0x1f, 73, 0, 0, 0, 0);
  bfd_set_section_alignment (stdoutput, seg, 2);

  /* Make some space for the first special stab entry and zero the memory.
     It contains information about the length of this file's
     stab string and the like.  Using it avoids the need to
     relocate the stab strings.

     The $GDB_STRINGS$ space will be created as a side effect of
     the call to get_stab_string_offset.  */
  p = frag_more (12);
  memset (p, 0, 12);
  as_where (&file, (unsigned int *) NULL);
  stroff = get_stab_string_offset (file, "$GDB_STRINGS$");
  know (stroff == 1);
  md_number_to_chars (p, stroff, 4);
  seg_info (seg)->stabu.p = p;

  /* Set the containing space for both stab sections to be $GDB_DEBUG$
     (just created above).  Also set some attributes which BFD does
     not understand.  In particular, access bits, sort keys, and load
     quadrant.  */
  seg = bfd_get_section_by_name (stdoutput, "$GDB_STRINGS$");
  obj_set_subsection_attributes (seg, space, 0x1f, 72, 0, 0, 0, 0);
  bfd_set_section_alignment (stdoutput, seg, 2);

  subseg_set (saved_seg, saved_subseg);
}

Here is the call graph for this function:

void obj_som_version ( int unused  ATTRIBUTE_UNUSED)

Definition at line 123 of file obj-som.c.

{
  char *version, c;

  if (version_seen)
    {
      as_bad (_("Only one .version pseudo-op per file!"));
      ignore_rest_of_line ();
      return;
    }

  SKIP_WHITESPACE ();
  if (*input_line_pointer == '\"')
    {
      version = input_line_pointer;
      ++input_line_pointer;
      while (is_a_char (next_char_of_string ()))
       ;
      c = *input_line_pointer;
      *input_line_pointer = '\000';
    }
  else
    {
      as_bad (_("Expected quoted string"));
      ignore_rest_of_line ();
      return;
    }

  version_seen = 1;
  if (!bfd_som_attach_aux_hdr (stdoutput, VERSION_AUX_ID, version))
    as_fatal (_("attaching version header %s: %s"),
             stdoutput->filename, bfd_errmsg (bfd_get_error ()));

  *input_line_pointer = c;
  demand_empty_rest_of_line ();
}

Here is the call graph for this function:

static void obj_som_weak ( int ignore  ATTRIBUTE_UNUSED) [static]

Definition at line 299 of file obj-som.c.

{
  char *name;
  int c;
  symbolS *symbolP;

  do
    {
      name = input_line_pointer;
      c = get_symbol_end ();
      symbolP = symbol_find_or_make (name);
      *input_line_pointer = c;
      SKIP_WHITESPACE ();
      S_SET_WEAK (symbolP);
      if (c == ',')
       {
         input_line_pointer++;
         SKIP_WHITESPACE ();
         if (*input_line_pointer == '\n')
           c = '\n';
       }
    }
  while (c == ',');
  demand_empty_rest_of_line ();
}

Here is the call graph for this function:

void som_frob_file ( void  )

Definition at line 293 of file obj-som.c.

Here is the call graph for this function:


Variable Documentation

int compiler_seen = 0 [static]

Definition at line 32 of file obj-som.c.

int copyright_seen = 0 [static]

Definition at line 31 of file obj-som.c.

const pseudo_typeS obj_pseudo_table[]
Initial value:
{
  {"weak", obj_som_weak, 0},
  {NULL, NULL, 0}
}

Definition at line 325 of file obj-som.c.

int version_seen = 0 [static]

Definition at line 30 of file obj-som.c.