* config/obj-som.[ch]: New files for SOM support in GAS.
authorJeff Law <law@redhat.com>
Sat, 30 Oct 1993 21:55:00 +0000 (21:55 +0000)
committerJeff Law <law@redhat.com>
Sat, 30 Oct 1993 21:55:00 +0000 (21:55 +0000)
gas/config/.Sanitize
gas/config/obj-som.c [new file with mode: 0644]
gas/config/obj-som.h [new file with mode: 0644]

index 41e67b3..f378c52 100644 (file)
@@ -82,6 +82,8 @@ obj-hp300.c
 obj-hp300.h
 obj-ieee.c
 obj-ieee.h
+obj-som.c
+obj-som.h
 obj-vms.c
 obj-vms.h
 sh.mt
diff --git a/gas/config/obj-som.c b/gas/config/obj-som.c
new file mode 100644 (file)
index 0000000..9f6e4f3
--- /dev/null
@@ -0,0 +1,97 @@
+/* SOM object file format.
+   Copyright (C) 1993 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, 675 Mass Ave, Cambridge, MA 02139, 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}
+};
+
+/* SOM does not use this.  */
+
+void
+obj_read_begin_hook ()
+{
+}
+
+/* Handle a .version directive.  FIXME.  We just parse the .version
+   directive and throw away the results!.  */
+
+void
+obj_som_version (unused)
+     int unused;
+{
+  SKIP_WHITESPACE ()
+  if (*input_line_pointer == '\"')
+    {
+      ++input_line_pointer;
+      while (is_a_char (next_char_of_string ()))
+       ;
+    }
+  else
+    {
+      as_bad ("Expected quoted string");
+    }
+  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, space;
+  subsegT saved_subseg = now_subseg;
+
+  /* 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.  */
+  obj_set_section_attributes (space, 1, 1, 255, 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, 255, 0);
+
+  /* Likewise for the $GDB_STRINGS$ subspace.  Note the section
+     hasn't been created at the time of this call, so we create
+     it now.  */
+  seg = subseg_new ("$GDB_STRINGS$", 0);
+  obj_set_subsection_attributes (seg, space, 0x1f, 254, 0);
+
+  subseg_set (saved_seg, saved_subseg);
+}
diff --git a/gas/config/obj-som.h b/gas/config/obj-som.h
new file mode 100644 (file)
index 0000000..0078873
--- /dev/null
@@ -0,0 +1,75 @@
+/* SOM object file format.
+   Copyright (C) 1993 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 1, 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, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+   Written by the Center for Software Science at the University of Utah
+   and by Cygnus Support.  */
+
+#ifndef _OBJ_SOM_H
+#define _OBJ_SOM_H
+
+#define OBJ_SOM 1
+
+#include <bfd.h>
+#include "../bfd/som.h"
+#include "targ-cpu.h"
+
+#ifndef FALSE
+#define FALSE 0
+#define TRUE !FALSE
+#endif
+
+#define TARGET_SYMBOL_FIELDS   int local:1; unsigned long sy_name_offset;
+
+
+/* should be conditional on address size!  */
+#define som_symbol(asymbol) ((som_symbol_type *)(&(asymbol)->the_bfd))
+
+#define S_SET_OTHER(S,V)                (som_symbol((S)->bsym)->other = (V))
+#define S_SET_TYPE(S,T)                 (som_symbol((S)->bsym)->type = (T))
+#define S_SET_DESC(S,D)                 (som_symbol((S)->bsym)->desc = (D))
+#define S_GET_OTHER(S)                  (som_symbol((S)->bsym)->other)
+#define S_GET_TYPE(S)                   (som_symbol((S)->bsym)->type)
+#define S_GET_DESC(S)                   (som_symbol((S)->bsym)->desc)
+
+#define S_SET_SIZE(S,V)             (som_symbol((S)->bsym)->internal_som_sym.st_size)
+
+extern void som_file_symbol PARAMS ((char *));
+extern void obj_som_version PARAMS ((int));
+extern void obj_som_init_stab_section PARAMS ((segT));
+
+#define obj_symbol_new_hook(s) {;}
+
+/* SOM has several attributes for spaces/subspaces which can not
+   be easily expressed in BFD.  We use these macros to trigger calls
+   into the SOM BFD backend to set these attributes.  */
+#define obj_set_section_attributes  bfd_som_set_section_attributes
+#define obj_set_subsection_attributes bfd_som_set_subsection_attributes
+
+/* Stabs go in a separate sections.  GDB expects to find them in sections
+   with the names $GDB_SYMBOLS$ and $GDB_STRINGS$ rather than .stab and
+   .stabstr.  */
+#define SEPARATE_STAB_SECTIONS
+#define STAB_SECTION_NAME "$GDB_SYMBOLS$"
+#define STAB_STRING_SECTION_NAME "$GDB_STRINGS$"
+
+/* We use INIT_STAB_SECTION to record the space/subspace relationships
+   for the various debugging sections.  */
+#define INIT_STAB_SECTION(seg) obj_som_init_stab_section (seg)
+
+#endif /* _OBJ_SOM_H */