summaryrefslogtreecommitdiff
path: root/support/sdbinutils/binutils/coffgrok.h
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/sdbinutils/binutils/coffgrok.h
downloadsdcc-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.h221
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 *);