From 0fa747c4f36686e30923b227e14db67091456d84 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sat, 30 Oct 1993 21:55:00 +0000 Subject: [PATCH] * config/obj-som.[ch]: New files for SOM support in GAS. --- gas/config/.Sanitize | 2 + gas/config/obj-som.c | 97 ++++++++++++++++++++++++++++++++++++++++++++ gas/config/obj-som.h | 75 ++++++++++++++++++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 gas/config/obj-som.c create mode 100644 gas/config/obj-som.h diff --git a/gas/config/.Sanitize b/gas/config/.Sanitize index 41e67b3ba45..f378c52401b 100644 --- a/gas/config/.Sanitize +++ b/gas/config/.Sanitize @@ -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 index 00000000000..9f6e4f37fd9 --- /dev/null +++ b/gas/config/obj-som.c @@ -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 index 00000000000..00788736f4e --- /dev/null +++ b/gas/config/obj-som.h @@ -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 +#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 */ -- 2.30.2