diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/sdbinutils/binutils/coffgrok.h | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/sdbinutils/binutils/coffgrok.h')
| -rw-r--r-- | support/sdbinutils/binutils/coffgrok.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/support/sdbinutils/binutils/coffgrok.h b/support/sdbinutils/binutils/coffgrok.h new file mode 100644 index 0000000..9576a75 --- /dev/null +++ b/support/sdbinutils/binutils/coffgrok.h @@ -0,0 +1,221 @@ +/* coffgrok.h + Copyright (C) 2001-2018 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 *); |
