| /* coffgrok.h | 
 |    Copyright (C) 2001-2024 Free Software Foundation, Inc. | 
 |  | 
 |    This file is part of GNU Binutils. | 
 |  | 
 |    This program 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 3 of the License, or | 
 |    (at your option) any later version. | 
 |  | 
 |    This program 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 this program; if not, write to the Free Software | 
 |    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | 
 |    MA 02110-1301, USA.  */ | 
 |  | 
 | #define T_NULL		0 | 
 | #define T_VOID		1	/* Function argument (only used by compiler).  */ | 
 | #define T_CHAR		2	/* Character		*/ | 
 | #define T_SHORT		3	/* Short integer	*/ | 
 | #define T_INT		4	/* Integer		*/ | 
 | #define T_LONG		5	/* Long integer		*/ | 
 | #define T_FLOAT		6	/* Floating point	*/ | 
 | #define T_DOUBLE	7	/* Double word		*/ | 
 | #define T_STRUCT	8	/* Structure 		*/ | 
 | #define T_UNION		9	/* Union 		*/ | 
 | #define T_ENUM		10	/* Enumeration 		*/ | 
 | #define T_MOE		11	/* Member of enumeration*/ | 
 | #define T_UCHAR		12	/* Unsigned character	*/ | 
 | #define T_USHORT	13	/* Unsigned short	*/ | 
 | #define T_UINT		14	/* Unsigned integer	*/ | 
 | #define T_ULONG		15	/* Unsigned long	*/ | 
 | #define T_LNGDBL	16	/* Long double		*/ | 
 |  | 
 |  | 
 | struct coff_reloc | 
 | { | 
 |   int offset; | 
 |   struct coff_symbol *symbol; | 
 |   int addend; | 
 | }; | 
 |  | 
 | struct coff_section | 
 | { | 
 |   char *name; | 
 |   int code; | 
 |   int data; | 
 |   int address; | 
 |   int number;  /* 0..n, .text = 0 */ | 
 |   unsigned int nrelocs; | 
 |   int size; | 
 |   struct coff_reloc *relocs; | 
 |   struct bfd_section *bfd_section; | 
 | }; | 
 |  | 
 | struct coff_ofile | 
 | { | 
 |   int nsources; | 
 |   struct coff_sfile *source_head; | 
 |   struct coff_sfile *source_tail; | 
 |   int nsections; | 
 |   struct coff_section *sections; | 
 |   struct coff_symbol *symbol_list_head; | 
 |   struct coff_symbol *symbol_list_tail; | 
 | }; | 
 |  | 
 | struct coff_isection | 
 | { | 
 |   int low; | 
 |   int high; | 
 |   int init; | 
 |   struct coff_section *parent; | 
 | }; | 
 |  | 
 | struct coff_sfile | 
 | { | 
 |   char *name; | 
 |   struct coff_scope *scope; | 
 |   struct coff_sfile *next; | 
 |  | 
 |   /* Vector which maps where in each output section | 
 |      the input file has it's data.  */ | 
 |   struct coff_isection *section; | 
 | }; | 
 |  | 
 | struct coff_type | 
 | { | 
 |   int size; | 
 |   enum | 
 |     { | 
 |       coff_pointer_type, coff_function_type, coff_array_type, coff_structdef_type, coff_basic_type, | 
 |       coff_structref_type, coff_enumref_type, coff_enumdef_type, coff_secdef_type | 
 |     } type; | 
 |  | 
 |   union | 
 |     { | 
 |       struct | 
 |       { | 
 | 	int address; | 
 | 	int size; | 
 |       } asecdef; | 
 |  | 
 |       struct | 
 |       { | 
 | 	int isstruct; | 
 | 	struct coff_scope *elements; | 
 | 	int idx; | 
 |       } astructdef; | 
 |  | 
 |       struct | 
 |       { | 
 | 	struct coff_symbol *ref; | 
 |       } astructref; | 
 |  | 
 |       struct | 
 |       { | 
 | 	struct coff_scope *elements; | 
 | 	int idx; | 
 |       } aenumdef; | 
 |  | 
 |       struct | 
 |       { | 
 | 	struct coff_symbol *ref; | 
 |       } aenumref; | 
 |  | 
 |       struct | 
 |       { | 
 | 	struct coff_type *points_to; | 
 |       } pointer; | 
 |  | 
 |       struct | 
 |       { | 
 | 	int dim; | 
 | 	struct coff_type *array_of; | 
 |       } array; | 
 |  | 
 |       struct | 
 |       { | 
 | 	struct coff_type *   function_returns; | 
 | 	struct coff_scope *  parameters; | 
 | 	struct coff_scope *  code; | 
 | 	struct coff_line *   lines; | 
 |       } function; | 
 |  | 
 |       int basic;		/* One of T_VOID.. T_UINT */ | 
 |   } u; | 
 | }; | 
 |  | 
 | struct coff_line | 
 | { | 
 |   int   nlines; | 
 |   int * lines; | 
 |   int * addresses; | 
 | }; | 
 |  | 
 | struct coff_scope | 
 | { | 
 |   struct coff_section * sec;     /* Which section.  */ | 
 |   int                   offset;  /* Where.  */ | 
 |   int                   size;    /* How big.  */ | 
 |   struct coff_scope *   parent;	 /* One up.  */ | 
 |   struct coff_scope *   next;	 /* Next along.  */ | 
 |   int                   nvars; | 
 |   struct coff_symbol *  vars_head;	/* Symbols.  */ | 
 |   struct coff_symbol *  vars_tail; | 
 |   struct coff_scope *   list_head;	/* Children.  */ | 
 |   struct coff_scope *   list_tail; | 
 | }; | 
 |  | 
 | struct coff_visible | 
 | { | 
 |   enum coff_vis_type | 
 |   { | 
 |     coff_vis_ext_def, | 
 |     coff_vis_ext_ref, | 
 |     coff_vis_int_def, | 
 |     coff_vis_common, | 
 |     coff_vis_auto, | 
 |     coff_vis_register, | 
 |     coff_vis_tag, | 
 |     coff_vis_member_of_struct, | 
 |     coff_vis_member_of_enum, | 
 |     coff_vis_autoparam, | 
 |     coff_vis_regparam, | 
 |   } type; | 
 | }; | 
 |  | 
 | struct coff_where | 
 | { | 
 |   enum | 
 |   { | 
 |     coff_where_stack, coff_where_memory, coff_where_register, coff_where_unknown, | 
 |     coff_where_strtag, coff_where_member_of_struct, | 
 |     coff_where_member_of_enum, coff_where_entag, coff_where_typedef | 
 |   } where; | 
 |  | 
 |   int offset; | 
 |   int bitoffset; | 
 |   int bitsize; | 
 |   struct coff_section *section; | 
 | }; | 
 |  | 
 | struct coff_symbol | 
 | { | 
 |   char *                name; | 
 |   int                   tag; | 
 |   struct coff_type *    type; | 
 |   struct coff_where *   where; | 
 |   struct coff_visible * visible; | 
 |   struct coff_symbol *  next; | 
 |   struct coff_symbol *  next_in_ofile_list; /* For the ofile list.  */ | 
 |   int                   number; | 
 |   int                   er_number; | 
 |   struct coff_sfile *   sfile; | 
 | }; | 
 |  | 
 | struct coff_ofile * coff_grok (bfd *); |