]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - binutils/coffgrok.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / binutils / coffgrok.h
index e32121767295616cd7843c0f4a75caa3c83d4a79..d76d5b7508efcbba49121844792e8fa04966d78c 100644 (file)
@@ -1,41 +1,61 @@
+/* coffgrok.h
+   Copyright (C) 2001-2021 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 */
-   int nrelocs;
-   int size;
-   struct coff_reloc *relocs;
-   struct sec *bfd_section;
- };
+#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
 {
@@ -48,136 +68,154 @@ struct coff_ofile
   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
+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
-      } type;
+      coff_structref_type, coff_enumref_type, coff_enumdef_type, coff_secdef_type
+    } type;
+
   union
     {
       struct
-       {
-         int isstruct;
-         struct coff_scope *elements;
-         int idx;
-       }
-      astructdef;
+      {
+       int address;
+       int size;
+      } asecdef;
+
       struct
-       {
-         struct coff_symbol *ref;
-       } astructref;
+      {
+       int isstruct;
+       struct coff_scope *elements;
+       int idx;
+      } astructdef;
 
       struct
-       {
-         struct coff_scope *elements;
-         int idx;
-       } aenumdef;
+      {
+       struct coff_symbol *ref;
+      } astructref;
+
       struct
-       {
-         struct coff_symbol *ref;
-       } aenumref;
+      {
+       struct coff_scope *elements;
+       int idx;
+      } aenumdef;
 
       struct
-       {
-         struct coff_type *points_to;
-       } pointer;
+      {
+       struct coff_symbol *ref;
+      } aenumref;
+
       struct
-       {
-         int dim;
-         struct coff_type *array_of;
-       } array;
+      {
+       struct coff_type *points_to;
+      } pointer;
 
       struct
-       {
-         struct coff_type *function_returns;
-         struct coff_scope *parameters;
-         struct coff_scope *code;
-         struct coff_line *lines;
-       } function;
+      {
+       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;
+  } 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_line 
- {
-   int nlines;
-   int *lines;
-   int *addresses;
- };
-
-
- struct coff_scope
-   {
-     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,
-       } 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;
-  };
-
-struct coff_ofile *coff_grok();
+struct coff_ofile * coff_grok (bfd *);