summaryrefslogtreecommitdiff
path: root/gas/config/obj-som.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/obj-som.c')
-rw-r--r--gas/config/obj-som.c307
1 files changed, 0 insertions, 307 deletions
diff --git a/gas/config/obj-som.c b/gas/config/obj-som.c
deleted file mode 100644
index 80af18fd37b..00000000000
--- a/gas/config/obj-som.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/* SOM object file format.
- Copyright (C) 1993, 1998 Free Software Foundation, Inc.
-
- This file is part of GAS, the GNU Assembler.
-
- GAS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2,
- or (at your option) any later version.
-
- GAS is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GAS; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
-
- Written by the Center for Software Science at the University of Utah
- and by Cygnus Support. */
-
-#include "as.h"
-#include "subsegs.h"
-#include "aout/stab_gnu.h"
-#include "obstack.h"
-
-/* SOM does not need any pseudo-ops. */
-
-const pseudo_typeS obj_pseudo_table[] =
-{
- {NULL}
-};
-
-static int version_seen = 0;
-static int copyright_seen = 0;
-static int compiler_seen = 0;
-
-/* Unused by SOM. */
-void obj_read_begin_hook () {}
-
-/* Handle a .compiler directive. This is intended to create the
- compilation unit auxiliary header for MPE such that the linkeditor
- can handle SOM extraction from archives. The format of the quoted
- string is "sourcefile language version" and is delimited by blanks.*/
-
-void
-obj_som_compiler (unused)
- int unused;
-{
- 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 ();
-}
-
-/* Handle a .version directive. */
-
-void
-obj_som_version (unused)
- int unused;
-{
- 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) == false)
- {
- bfd_perror (stdoutput->filename);
- as_perror (_("FATAL: Attaching version header %s"), stdoutput->filename);
- exit (EXIT_FAILURE);
- }
- *input_line_pointer = c;
- demand_empty_rest_of_line ();
-}
-
-/* Handle a .copyright directive. This probably isn't complete, but
- it's of dubious value anyway and (IMHO) not worth the time to finish.
- If you care about copyright strings that much, you fix it. */
-
-void
-obj_som_copyright (unused)
- int unused;
-{
- 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) == false)
- {
- bfd_perror (stdoutput->filename);
- as_perror (_("FATAL: Attaching copyright header %s"), stdoutput->filename);
- exit (EXIT_FAILURE);
- }
- *input_line_pointer = c;
- demand_empty_rest_of_line ();
-}
-
-/* Perform any initialization necessary for stabs support.
-
- For SOM we need to create the space which will contain the
- two stabs subspaces. Additionally we need to set up the
- space/subspace relationships and set space/subspace attributes
- which BFD does not understand. */
-
-void
-obj_som_init_stab_section (seg)
- segT seg;
-{
- 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);
- 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);
- bfd_set_section_alignment (stdoutput, seg, 2);
-
- subseg_set (saved_seg, saved_subseg);
-}
-
-/* Fill in the counts in the first entry in a .stabs section. */
-
-static void
-adjust_stab_sections (abfd, sec, xxx)
- bfd *abfd;
- asection *sec;
- PTR xxx;
-{
- 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);
-}
-
-/* Called late in the asssembly phase to adjust the special
- stab entry and to set the starting address for each code subspace. */
-
-void
-som_frob_file ()
-{
- bfd_map_over_sections (stdoutput, adjust_stab_sections, (PTR) 0);
-}