|  | /* 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 *); |