Blame include/hp-symtab.h

Packit Service 72eb06
/* Definitions and structures for reading debug symbols from the
Packit Service 72eb06
   native HP C compiler.
Packit Service 72eb06
Packit Service 72eb06
   Written by the Center for Software Science at the University of Utah
Packit Service 72eb06
   and by Cygnus Support.
Packit Service 72eb06
Packit Service 72eb06
   Copyright (C) 1994-2018 Free Software Foundation, Inc.
Packit Service 72eb06
Packit Service 72eb06
   This program is free software; you can redistribute it and/or modify
Packit Service 72eb06
   it under the terms of the GNU General Public License as published by
Packit Service 72eb06
   the Free Software Foundation; either version 3 of the License, or
Packit Service 72eb06
   (at your option) any later version.
Packit Service 72eb06
Packit Service 72eb06
   This program is distributed in the hope that it will be useful,
Packit Service 72eb06
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 72eb06
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 72eb06
   GNU General Public License for more details.
Packit Service 72eb06
Packit Service 72eb06
   You should have received a copy of the GNU General Public License
Packit Service 72eb06
   along with this program; if not, write to the Free Software
Packit Service 72eb06
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
Packit Service 72eb06
   MA 02110-1301, USA.  */
Packit Service 72eb06
Packit Service 72eb06
#ifndef HP_SYMTAB_INCLUDED
Packit Service 72eb06
#define HP_SYMTAB_INCLUDED
Packit Service 72eb06
Packit Service 72eb06
/* General information:
Packit Service 72eb06
Packit Service 72eb06
   This header file defines and describes only the data structures
Packit Service 72eb06
   necessary to read debug symbols produced by the HP C compiler,
Packit Service 72eb06
   HP ANSI C++ compiler, and HP FORTRAN 90 compiler using the
Packit Service 72eb06
   SOM object file format.  
Packit Service 72eb06
   (For a full description of the debug format, ftp hpux-symtab.h from
Packit Service 72eb06
   jaguar.cs.utah.edu:/dist).
Packit Service 72eb06
   
Packit Service 72eb06
   Additional notes (Rich Title)
Packit Service 72eb06
   This file is a reverse-engineered version of a file called
Packit Service 72eb06
   "symtab.h" which exists internal to HP's Computer Languages Organization
Packit Service 72eb06
   in /CLO/Components/DDE/obj/som/symtab.h. Because HP's version of
Packit Service 72eb06
   the file is copyrighted and not distributed, it is necessary for
Packit Service 72eb06
   GDB to use the reverse-engineered version that follows.
Packit Service 72eb06
   Work was done by Cygnus to reverse-engineer the C subset of symtab.h.
Packit Service 72eb06
   The WDB project has extended this to also contain the C++ 
Packit Service 72eb06
   symbol definitions, the F90 symbol definitions, 
Packit Service 72eb06
   and the DOC (debugging-optimized-code) symbol definitions.
Packit Service 72eb06
   In some cases (the C++ symbol definitions)
Packit Service 72eb06
   I have added internal documentation here that
Packit Service 72eb06
   goes beyond what is supplied in HP's symtab.h. If we someday
Packit Service 72eb06
   unify these files again, the extra comments should be merged back
Packit Service 72eb06
   into HP's symtab.h.
Packit Service 72eb06
  
Packit Service 72eb06
   -------------------------------------------------------------------
Packit Service 72eb06
Packit Service 72eb06
   Debug symbols are contained entirely within an unloadable space called
Packit Service 72eb06
   $DEBUG$.  $DEBUG$ contains several subspaces which group related
Packit Service 72eb06
   debug symbols.
Packit Service 72eb06
Packit Service 72eb06
   $GNTT$ contains information for global variables, types and contants.
Packit Service 72eb06
Packit Service 72eb06
   $LNTT$ contains information for procedures (including nesting), scoping
Packit Service 72eb06
   information, local variables, types, and constants.
Packit Service 72eb06
Packit Service 72eb06
   $SLT$ contains source line information so that code addresses may be
Packit Service 72eb06
   mapped to source lines.
Packit Service 72eb06
Packit Service 72eb06
   $VT$ contains various strings and constants for named objects (variables,
Packit Service 72eb06
   typedefs, functions, etc).  Strings are stored as null-terminated character
Packit Service 72eb06
   lists.  Constants always begin on word boundaries.  The first byte of
Packit Service 72eb06
   the VT must be zero (a null string).
Packit Service 72eb06
Packit Service 72eb06
   $XT$ is not currently used by GDB.
Packit Service 72eb06
Packit Service 72eb06
   Many structures within the subspaces point to other structures within
Packit Service 72eb06
   the same subspace, or to structures within a different subspace.  These
Packit Service 72eb06
   pointers are represented as a structure index from the beginning of
Packit Service 72eb06
   the appropriate subspace.  */
Packit Service 72eb06
Packit Service 72eb06
/* Used to describe where a constant is stored.  */
Packit Service 72eb06
enum location_type
Packit Service 72eb06
{
Packit Service 72eb06
  LOCATION_IMMEDIATE,
Packit Service 72eb06
  LOCATION_PTR,
Packit Service 72eb06
  LOCATION_VT,
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* Languages supported by this debug format.  Within the data structures
Packit Service 72eb06
   this type is limited to 4 bits for a maximum of 16 languages.  */
Packit Service 72eb06
enum hp_language
Packit Service 72eb06
{
Packit Service 72eb06
  HP_LANGUAGE_UNKNOWN,
Packit Service 72eb06
  HP_LANGUAGE_C,
Packit Service 72eb06
  HP_LANGUAGE_FORTRAN,
Packit Service 72eb06
  HP_LANGUAGE_F77 = HP_LANGUAGE_FORTRAN,
Packit Service 72eb06
  HP_LANGUAGE_PASCAL,
Packit Service 72eb06
  HP_LANGUAGE_MODCAL,
Packit Service 72eb06
  HP_LANGUAGE_COBOL,
Packit Service 72eb06
  HP_LANGUAGE_BASIC,
Packit Service 72eb06
  HP_LANGUAGE_ADA,
Packit Service 72eb06
  HP_LANGUAGE_CPLUSPLUS,
Packit Service 72eb06
  HP_LANGUAGE_DMPASCAL
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/* Basic data types available in this debug format.  Within the data
Packit Service 72eb06
   structures this type is limited to 5 bits for a maximum of 32 basic
Packit Service 72eb06
   data types.  */
Packit Service 72eb06
enum hp_type
Packit Service 72eb06
{
Packit Service 72eb06
  HP_TYPE_UNDEFINED, /* 0 */
Packit Service 72eb06
  HP_TYPE_BOOLEAN, /* 1 */
Packit Service 72eb06
  HP_TYPE_CHAR, /* 2 */
Packit Service 72eb06
  HP_TYPE_INT, /* 3 */
Packit Service 72eb06
  HP_TYPE_UNSIGNED_INT, /* 4 */
Packit Service 72eb06
  HP_TYPE_REAL, /* 5 */
Packit Service 72eb06
  HP_TYPE_COMPLEX, /* 6 */
Packit Service 72eb06
  HP_TYPE_STRING200, /* 7 */
Packit Service 72eb06
  HP_TYPE_LONGSTRING200, /* 8 */
Packit Service 72eb06
  HP_TYPE_TEXT, /* 9 */
Packit Service 72eb06
  HP_TYPE_FLABEL, /* 10 */
Packit Service 72eb06
  HP_TYPE_FTN_STRING_SPEC, /* 11 */
Packit Service 72eb06
  HP_TYPE_MOD_STRING_SPEC, /* 12 */
Packit Service 72eb06
  HP_TYPE_PACKED_DECIMAL, /* 13 */
Packit Service 72eb06
  HP_TYPE_REAL_3000, /* 14 */
Packit Service 72eb06
  HP_TYPE_MOD_STRING_3000, /* 15 */
Packit Service 72eb06
  HP_TYPE_ANYPOINTER, /* 16 */
Packit Service 72eb06
  HP_TYPE_GLOBAL_ANYPOINTER, /* 17 */
Packit Service 72eb06
  HP_TYPE_LOCAL_ANYPOINTER, /* 18 */
Packit Service 72eb06
  HP_TYPE_COMPLEXS3000, /* 19 */
Packit Service 72eb06
  HP_TYPE_FTN_STRING_S300_COMPAT, /* 20 */ 
Packit Service 72eb06
  HP_TYPE_FTN_STRING_VAX_COMPAT, /* 21 */
Packit Service 72eb06
  HP_TYPE_BOOLEAN_S300_COMPAT, /* 22 */
Packit Service 72eb06
  HP_TYPE_BOOLEAN_VAX_COMPAT, /* 23 */
Packit Service 72eb06
  HP_TYPE_WIDE_CHAR, /* 24 */
Packit Service 72eb06
  HP_TYPE_LONG, /* 25 */
Packit Service 72eb06
  HP_TYPE_UNSIGNED_LONG, /* 26 */
Packit Service 72eb06
  HP_TYPE_DOUBLE, /* 27 */
Packit Service 72eb06
  HP_TYPE_TEMPLATE_ARG, /* 28 */
Packit Service 72eb06
  HP_TYPE_VOID /* 29 */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* An immediate name and type table entry.
Packit Service 72eb06
Packit Service 72eb06
   extension and immediate will always be one.
Packit Service 72eb06
   global will always be zero.
Packit Service 72eb06
   hp_type is the basic type this entry describes.
Packit Service 72eb06
   bitlength is the length in bits for the basic type.  */
Packit Service 72eb06
struct dnttp_immediate
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int immediate:	1;
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int type: 		5;
Packit Service 72eb06
  unsigned int bitlength:	24;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* A nonimmediate name and type table entry.
Packit Service 72eb06
Packit Service 72eb06
   extension will always be one.
Packit Service 72eb06
   immediate will always be zero.
Packit Service 72eb06
   if global is zero, this entry points into the LNTT
Packit Service 72eb06
   if global is one, this entry points into the GNTT
Packit Service 72eb06
   index is the index within the GNTT or LNTT for this entry.  */
Packit Service 72eb06
struct dnttp_nonimmediate
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int immediate:	1;
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int index:		29;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* A pointer to an entry in the GNTT and LNTT tables.  It has two
Packit Service 72eb06
   forms depending on the type being described.
Packit Service 72eb06
Packit Service 72eb06
   The immediate form is used for simple entries and is one
Packit Service 72eb06
   word.
Packit Service 72eb06
Packit Service 72eb06
   The nonimmediate form is used for complex entries and contains
Packit Service 72eb06
   an index into the LNTT or GNTT which describes the entire type.
Packit Service 72eb06
Packit Service 72eb06
   If a dnttpointer is -1, then it is a NIL entry.  */
Packit Service 72eb06
Packit Service 72eb06
#define DNTTNIL (-1)
Packit Service 72eb06
typedef union dnttpointer
Packit Service 72eb06
{
Packit Service 72eb06
  struct dnttp_immediate    dntti;
Packit Service 72eb06
  struct dnttp_nonimmediate dnttp;
Packit Service 72eb06
  int word;
Packit Service 72eb06
} dnttpointer;
Packit Service 72eb06
Packit Service 72eb06
/* An index into the source line table.  As with dnttpointers, a sltpointer
Packit Service 72eb06
   of -1 indicates a NIL entry.  */
Packit Service 72eb06
#define SLTNIL (-1)
Packit Service 72eb06
typedef int sltpointer;
Packit Service 72eb06
Packit Service 72eb06
/* Index into DOC (= "Debugging Optimized Code") line table.  */
Packit Service 72eb06
#define LTNIL (-1)
Packit Service 72eb06
typedef int ltpointer;
Packit Service 72eb06
Packit Service 72eb06
/* Index into context table.  */
Packit Service 72eb06
#define CTXTNIL (-1)
Packit Service 72eb06
typedef int ctxtpointer;
Packit Service 72eb06
Packit Service 72eb06
/* Unsigned byte offset into the VT.  */
Packit Service 72eb06
typedef unsigned int vtpointer;
Packit Service 72eb06
Packit Service 72eb06
/* A DNTT entry (used within the GNTT and LNTT).
Packit Service 72eb06
Packit Service 72eb06
   DNTT entries are variable sized objects, but are always a multiple
Packit Service 72eb06
   of 3 words (we call each group of 3 words a "block").
Packit Service 72eb06
Packit Service 72eb06
   The first bit in each block is an extension bit.  This bit is zero
Packit Service 72eb06
   for the first block of a DNTT entry.  If the entry requires more
Packit Service 72eb06
   than one block, then this bit is set to one in all blocks after
Packit Service 72eb06
   the first one.  */
Packit Service 72eb06
Packit Service 72eb06
/* Each DNTT entry describes a particular debug symbol (beginning of
Packit Service 72eb06
   a source file, a function, variables, structures, etc.
Packit Service 72eb06
Packit Service 72eb06
   The type of the DNTT entry is stored in the "kind" field within the
Packit Service 72eb06
   DNTT entry itself.  */
Packit Service 72eb06
Packit Service 72eb06
enum dntt_entry_type
Packit Service 72eb06
{
Packit Service 72eb06
  DNTT_TYPE_NIL = -1,
Packit Service 72eb06
  DNTT_TYPE_SRCFILE,
Packit Service 72eb06
  DNTT_TYPE_MODULE,
Packit Service 72eb06
  DNTT_TYPE_FUNCTION,
Packit Service 72eb06
  DNTT_TYPE_ENTRY,
Packit Service 72eb06
  DNTT_TYPE_BEGIN,
Packit Service 72eb06
  DNTT_TYPE_END,
Packit Service 72eb06
  DNTT_TYPE_IMPORT,
Packit Service 72eb06
  DNTT_TYPE_LABEL,
Packit Service 72eb06
  DNTT_TYPE_FPARAM,
Packit Service 72eb06
  DNTT_TYPE_SVAR,
Packit Service 72eb06
  DNTT_TYPE_DVAR,
Packit Service 72eb06
  DNTT_TYPE_HOLE1,
Packit Service 72eb06
  DNTT_TYPE_CONST,
Packit Service 72eb06
  DNTT_TYPE_TYPEDEF,
Packit Service 72eb06
  DNTT_TYPE_TAGDEF,
Packit Service 72eb06
  DNTT_TYPE_POINTER,
Packit Service 72eb06
  DNTT_TYPE_ENUM,
Packit Service 72eb06
  DNTT_TYPE_MEMENUM,
Packit Service 72eb06
  DNTT_TYPE_SET,
Packit Service 72eb06
  DNTT_TYPE_SUBRANGE,
Packit Service 72eb06
  DNTT_TYPE_ARRAY,
Packit Service 72eb06
  DNTT_TYPE_STRUCT,
Packit Service 72eb06
  DNTT_TYPE_UNION,
Packit Service 72eb06
  DNTT_TYPE_FIELD,
Packit Service 72eb06
  DNTT_TYPE_VARIANT,
Packit Service 72eb06
  DNTT_TYPE_FILE,
Packit Service 72eb06
  DNTT_TYPE_FUNCTYPE,
Packit Service 72eb06
  DNTT_TYPE_WITH,
Packit Service 72eb06
  DNTT_TYPE_COMMON,
Packit Service 72eb06
  DNTT_TYPE_COBSTRUCT,
Packit Service 72eb06
  DNTT_TYPE_XREF,
Packit Service 72eb06
  DNTT_TYPE_SA,
Packit Service 72eb06
  DNTT_TYPE_MACRO,
Packit Service 72eb06
  DNTT_TYPE_BLOCKDATA,
Packit Service 72eb06
  DNTT_TYPE_CLASS_SCOPE,
Packit Service 72eb06
  DNTT_TYPE_REFERENCE,
Packit Service 72eb06
  DNTT_TYPE_PTRMEM,
Packit Service 72eb06
  DNTT_TYPE_PTRMEMFUNC,
Packit Service 72eb06
  DNTT_TYPE_CLASS,
Packit Service 72eb06
  DNTT_TYPE_GENFIELD,
Packit Service 72eb06
  DNTT_TYPE_VFUNC,
Packit Service 72eb06
  DNTT_TYPE_MEMACCESS,
Packit Service 72eb06
  DNTT_TYPE_INHERITANCE,
Packit Service 72eb06
  DNTT_TYPE_FRIEND_CLASS,
Packit Service 72eb06
  DNTT_TYPE_FRIEND_FUNC,
Packit Service 72eb06
  DNTT_TYPE_MODIFIER,
Packit Service 72eb06
  DNTT_TYPE_OBJECT_ID,
Packit Service 72eb06
  DNTT_TYPE_MEMFUNC,
Packit Service 72eb06
  DNTT_TYPE_TEMPLATE,
Packit Service 72eb06
  DNTT_TYPE_TEMPLATE_ARG,
Packit Service 72eb06
  DNTT_TYPE_FUNC_TEMPLATE,
Packit Service 72eb06
  DNTT_TYPE_LINK,
Packit Service 72eb06
  DNTT_TYPE_DYN_ARRAY_DESC,
Packit Service 72eb06
  DNTT_TYPE_DESC_SUBRANGE,
Packit Service 72eb06
  DNTT_TYPE_BEGIN_EXT,
Packit Service 72eb06
  DNTT_TYPE_INLN,
Packit Service 72eb06
  DNTT_TYPE_INLN_LIST,
Packit Service 72eb06
  DNTT_TYPE_ALIAS,
Packit Service 72eb06
  DNTT_TYPE_DOC_FUNCTION,
Packit Service 72eb06
  DNTT_TYPE_DOC_MEMFUNC,
Packit Service 72eb06
  DNTT_TYPE_MAX
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_SRCFILE:
Packit Service 72eb06
Packit Service 72eb06
   One DNTT_TYPE_SRCFILE symbol is output for the start of each source
Packit Service 72eb06
   file and at the begin and end of an included file.  A DNTT_TYPE_SRCFILE
Packit Service 72eb06
   entry is also output before each DNTT_TYPE_FUNC symbol so that debuggers
Packit Service 72eb06
   can determine what file a function was defined in.
Packit Service 72eb06
Packit Service 72eb06
   LANGUAGE describes the source file's language.
Packit Service 72eb06
Packit Service 72eb06
   NAME points to an VT entry providing the source file's name.
Packit Service 72eb06
Packit Service 72eb06
   Note the name used for DNTT_TYPE_SRCFILE entries are exactly as seen
Packit Service 72eb06
   by the compiler (ie they may be relative or absolute).  C include files
Packit Service 72eb06
   via <> inclusion must use absolute paths.
Packit Service 72eb06
Packit Service 72eb06
   ADDRESS points to an SLT entry from which line number and code locations
Packit Service 72eb06
   may be determined.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_srcfile
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;    /* DNTT_TYPE_SRCFILE */
Packit Service 72eb06
  unsigned int language:	4;
Packit Service 72eb06
  unsigned int unused:		17;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_MODULE:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_MODULE symbol is emitted for the start of a pascal
Packit Service 72eb06
   module or C source file. A module indicates a compilation unit
Packit Service 72eb06
   for name-scoping purposes; in that regard there should be 
Packit Service 72eb06
   a 1-1 correspondence between GDB "symtab"'s and MODULE symbol records.
Packit Service 72eb06
Packit Service 72eb06
   Each DNTT_TYPE_MODULE must have an associated DNTT_TYPE_END symbol.
Packit Service 72eb06
Packit Service 72eb06
   NAME points to a VT entry providing the module's name.  Note C
Packit Service 72eb06
   source files are considered nameless modules.
Packit Service 72eb06
Packit Service 72eb06
   ALIAS point to a VT entry providing a secondary name.
Packit Service 72eb06
Packit Service 72eb06
   ADDRESS points to an SLT entry from which line number and code locations
Packit Service 72eb06
   may be determined.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_module
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10; 	/* DNTT_TYPE_MODULE */
Packit Service 72eb06
  unsigned int unused:		21;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  vtpointer alias;
Packit Service 72eb06
  dnttpointer unused2;
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_FUNCTION,
Packit Service 72eb06
   DNTT_TYPE_ENTRY,
Packit Service 72eb06
   DNTT_TYPE_BLOCKDATA,
Packit Service 72eb06
   DNTT_TYPE_MEMFUNC:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_FUNCTION symbol is emitted for each function definition;
Packit Service 72eb06
   a DNTT_TYPE_ENTRY symbols is used for secondary entry points.  Both
Packit Service 72eb06
   symbols used the dntt_type_function structure.
Packit Service 72eb06
   A DNTT_TYPE_BLOCKDATA symbol is emitted ...?
Packit Service 72eb06
   A DNTT_TYPE_MEMFUNC symbol is emitted for inlined member functions (C++). 
Packit Service 72eb06
Packit Service 72eb06
   Each of DNTT_TYPE_FUNCTION must have a matching DNTT_TYPE_END.
Packit Service 72eb06
Packit Service 72eb06
   GLOBAL is nonzero if the function has global scope.
Packit Service 72eb06
Packit Service 72eb06
   LANGUAGE describes the function's source language.
Packit Service 72eb06
Packit Service 72eb06
   OPT_LEVEL describes the optimization level the function was compiled
Packit Service 72eb06
   with.
Packit Service 72eb06
Packit Service 72eb06
   VARARGS is nonzero if the function uses varargs.
Packit Service 72eb06
Packit Service 72eb06
   NAME points to a VT entry providing the function's name.
Packit Service 72eb06
Packit Service 72eb06
   ALIAS points to a VT entry providing a secondary name for the function.
Packit Service 72eb06
Packit Service 72eb06
   FIRSTPARAM points to a LNTT entry which describes the parameter list.
Packit Service 72eb06
Packit Service 72eb06
   ADDRESS points to an SLT entry from which line number and code locations
Packit Service 72eb06
   may be determined.
Packit Service 72eb06
Packit Service 72eb06
   ENTRYADDR is the memory address corresponding the function's entry point
Packit Service 72eb06
Packit Service 72eb06
   RETVAL points to a LNTT entry describing the function's return value.
Packit Service 72eb06
Packit Service 72eb06
   LOWADDR is the lowest memory address associated with this function.
Packit Service 72eb06
Packit Service 72eb06
   HIADDR is the highest memory address associated with this function.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_function
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;	/* DNTT_TYPE_FUNCTION,
Packit Service 72eb06
				           DNTT_TYPE_ENTRY,
Packit Service 72eb06
					   DNTT_TYPE_BLOCKDATA
Packit Service 72eb06
					   or DNTT_TYPE_MEMFUNC */
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int language:	4;
Packit Service 72eb06
  unsigned int nest_level:	5;
Packit Service 72eb06
  unsigned int opt_level:	2;
Packit Service 72eb06
  unsigned int varargs:		1;
Packit Service 72eb06
  unsigned int lang_info:	4;
Packit Service 72eb06
  unsigned int inlined:		1;
Packit Service 72eb06
  unsigned int localalloc:	1;
Packit Service 72eb06
  unsigned int expansion:	1;
Packit Service 72eb06
  unsigned int unused:		1;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  vtpointer alias;
Packit Service 72eb06
  dnttpointer firstparam;
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
  CORE_ADDR entryaddr;
Packit Service 72eb06
  dnttpointer retval;
Packit Service 72eb06
  CORE_ADDR lowaddr;
Packit Service 72eb06
  CORE_ADDR hiaddr;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_BEGIN:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_BEGIN symbol is emitted to begin a new nested scope.
Packit Service 72eb06
   Every DNTT_TYPE_BEGIN symbol must have a matching DNTT_TYPE_END symbol.
Packit Service 72eb06
Packit Service 72eb06
   CLASSFLAG is nonzero if this is the beginning of a c++ class definition.
Packit Service 72eb06
Packit Service 72eb06
   ADDRESS points to an SLT entry from which line number and code locations
Packit Service 72eb06
   may be determined.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_begin
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int classflag:	1;
Packit Service 72eb06
  unsigned int unused:		20;
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_END:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_END symbol is emitted when closing a scope started by
Packit Service 72eb06
   a DNTT_TYPE_MODULE, DNTT_TYPE_FUNCTION, DNTT_TYPE_WITH,
Packit Service 72eb06
   DNTT_TYPE_COMMON, DNTT_TYPE_BEGIN, and DNTT_TYPE_CLASS_SCOPE symbols.
Packit Service 72eb06
Packit Service 72eb06
   ENDKIND describes what type of scope the DNTT_TYPE_END is closing
Packit Service 72eb06
   (one of the above 6 kinds).
Packit Service 72eb06
Packit Service 72eb06
   CLASSFLAG is nonzero if this is the end of a c++ class definition.
Packit Service 72eb06
Packit Service 72eb06
   ADDRESS points to an SLT entry from which line number and code locations
Packit Service 72eb06
   may be determined.
Packit Service 72eb06
Packit Service 72eb06
   BEGINSCOPE points to the LNTT entry which opened the scope.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_end
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int endkind:		10;
Packit Service 72eb06
  unsigned int classflag:	1;
Packit Service 72eb06
  unsigned int unused:		10;
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
  dnttpointer beginscope;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_IMPORT is unused by GDB.  */
Packit Service 72eb06
/* DNTT_TYPE_LABEL is unused by GDB.  */
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_FPARAM:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_FPARAM symbol is emitted for a function argument.  When
Packit Service 72eb06
   chained together the symbols represent an argument list for a function.
Packit Service 72eb06
Packit Service 72eb06
   REGPARAM is nonzero if this parameter was passed in a register.
Packit Service 72eb06
Packit Service 72eb06
   INDIRECT is nonzero if this parameter is a pointer to the parameter
Packit Service 72eb06
   (pass by reference or pass by value for large items).
Packit Service 72eb06
Packit Service 72eb06
   LONGADDR is nonzero if the parameter is a 64bit pointer.
Packit Service 72eb06
Packit Service 72eb06
   NAME is a pointer into the VT for the parameter's name.
Packit Service 72eb06
Packit Service 72eb06
   LOCATION describes where the parameter is stored.  Depending on the
Packit Service 72eb06
   parameter type LOCATION could be a register number, or an offset
Packit Service 72eb06
   from the stack pointer.
Packit Service 72eb06
Packit Service 72eb06
   TYPE points to a NTT entry describing the type of this parameter.
Packit Service 72eb06
Packit Service 72eb06
   NEXTPARAM points to the LNTT entry describing the next parameter.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_fparam
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int regparam:	1;
Packit Service 72eb06
  unsigned int indirect:	1;
Packit Service 72eb06
  unsigned int longaddr:	1;
Packit Service 72eb06
  unsigned int copyparam:	1;
Packit Service 72eb06
  unsigned int dflt:		1;
Packit Service 72eb06
  unsigned int doc_ranges:	1;
Packit Service 72eb06
  unsigned int misc_kind:       1;
Packit Service 72eb06
  unsigned int unused:		14;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  CORE_ADDR location;
Packit Service 72eb06
  dnttpointer type;
Packit Service 72eb06
  dnttpointer nextparam;
Packit Service 72eb06
  int misc;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_SVAR:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_SVAR is emitted to describe a variable in static storage.
Packit Service 72eb06
Packit Service 72eb06
   GLOBAL is nonzero if the variable has global scope.
Packit Service 72eb06
Packit Service 72eb06
   INDIRECT is nonzero if the variable is a pointer to an object.
Packit Service 72eb06
Packit Service 72eb06
   LONGADDR is nonzero if the variable is in long pointer space.
Packit Service 72eb06
Packit Service 72eb06
   STATICMEM is nonzero if the variable is a member of a class.
Packit Service 72eb06
Packit Service 72eb06
   A_UNION is nonzero if the variable is an anonymous union member.
Packit Service 72eb06
Packit Service 72eb06
   NAME is a pointer into the VT for the variable's name.
Packit Service 72eb06
Packit Service 72eb06
   LOCATION provides the memory address for the variable.
Packit Service 72eb06
Packit Service 72eb06
   TYPE is a pointer into either the GNTT or LNTT which describes
Packit Service 72eb06
   the type of this variable.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_svar
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int indirect:	1;
Packit Service 72eb06
  unsigned int longaddr:	1;
Packit Service 72eb06
  unsigned int staticmem:	1;
Packit Service 72eb06
  unsigned int a_union:		1;
Packit Service 72eb06
  unsigned int unused1:         1;
Packit Service 72eb06
  unsigned int thread_specific: 1;
Packit Service 72eb06
  unsigned int unused2:         14;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  CORE_ADDR location;
Packit Service 72eb06
  dnttpointer type;
Packit Service 72eb06
  unsigned int offset;
Packit Service 72eb06
  unsigned int displacement;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_DVAR:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_DVAR is emitted to describe automatic variables and variables
Packit Service 72eb06
   held in registers.
Packit Service 72eb06
Packit Service 72eb06
   GLOBAL is nonzero if the variable has global scope.
Packit Service 72eb06
Packit Service 72eb06
   INDIRECT is nonzero if the variable is a pointer to an object.
Packit Service 72eb06
Packit Service 72eb06
   REGVAR is nonzero if the variable is in a register.
Packit Service 72eb06
Packit Service 72eb06
   A_UNION is nonzero if the variable is an anonymous union member.
Packit Service 72eb06
Packit Service 72eb06
   NAME is a pointer into the VT for the variable's name.
Packit Service 72eb06
Packit Service 72eb06
   LOCATION provides the memory address or register number for the variable.
Packit Service 72eb06
Packit Service 72eb06
   TYPE is a pointer into either the GNTT or LNTT which describes
Packit Service 72eb06
   the type of this variable.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_dvar
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int indirect:	1;
Packit Service 72eb06
  unsigned int regvar:		1;
Packit Service 72eb06
  unsigned int a_union:		1;
Packit Service 72eb06
  unsigned int unused:		17;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  int location;
Packit Service 72eb06
  dnttpointer type;
Packit Service 72eb06
  unsigned int offset;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_CONST:
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_CONST symbol is emitted for program constants.
Packit Service 72eb06
Packit Service 72eb06
   GLOBAL is nonzero if the constant has global scope.
Packit Service 72eb06
Packit Service 72eb06
   INDIRECT is nonzero if the constant is a pointer to an object.
Packit Service 72eb06
Packit Service 72eb06
   LOCATION_TYPE describes where to find the constant's value
Packit Service 72eb06
   (in the VT, memory, or embedded in an instruction).
Packit Service 72eb06
Packit Service 72eb06
   CLASSMEM is nonzero if the constant is a member of a class.
Packit Service 72eb06
Packit Service 72eb06
   NAME is a pointer into the VT for the constant's name.
Packit Service 72eb06
Packit Service 72eb06
   LOCATION provides the memory address, register number or pointer
Packit Service 72eb06
   into the VT for the constant's value.
Packit Service 72eb06
Packit Service 72eb06
   TYPE is a pointer into either the GNTT or LNTT which describes
Packit Service 72eb06
   the type of this variable.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_const
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int indirect:	1;
Packit Service 72eb06
  unsigned int location_type:	3;
Packit Service 72eb06
  unsigned int classmem:	1;
Packit Service 72eb06
  unsigned int unused:		15;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  CORE_ADDR location;
Packit Service 72eb06
  dnttpointer type;
Packit Service 72eb06
  unsigned int offset;
Packit Service 72eb06
  unsigned int displacement;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_TYPEDEF and DNTT_TYPE_TAGDEF:
Packit Service 72eb06
Packit Service 72eb06
   The same structure is used to describe typedefs and tagdefs.
Packit Service 72eb06
Packit Service 72eb06
   DNTT_TYPE_TYPEDEFS are associated with C "typedefs".
Packit Service 72eb06
Packit Service 72eb06
   DNTT_TYPE_TAGDEFs are associated with C "struct", "union", and "enum"
Packit Service 72eb06
   tags, which may have the same name as a typedef in the same scope.
Packit Service 72eb06
   Also they are associated with C++ "class" tags, which implicitly have 
Packit Service 72eb06
   the same name as the class type.
Packit Service 72eb06
Packit Service 72eb06
   GLOBAL is nonzero if the typedef/tagdef has global scope.
Packit Service 72eb06
Packit Service 72eb06
   TYPEINFO is used to determine if full type information is available
Packit Service 72eb06
   for a tag.  (usually 1, but can be zero for opaque types in C).
Packit Service 72eb06
Packit Service 72eb06
   NAME is a pointer into the VT for the constant's name.
Packit Service 72eb06
Packit Service 72eb06
   TYPE points to the underlying type for the typedef/tagdef in the
Packit Service 72eb06
   GNTT or LNTT.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_type
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;    /* DNTT_TYPE_TYPEDEF or 
Packit Service 72eb06
                                          DNTT_TYPE_TAGDEF.  */
Packit Service 72eb06
  unsigned int global:		1;
Packit Service 72eb06
  unsigned int typeinfo:	1;
Packit Service 72eb06
  unsigned int unused:		19;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  dnttpointer type;                    /* Underlying type, which for TAGDEF's may be
Packit Service 72eb06
                                          DNTT_TYPE_STRUCT, DNTT_TYPE_UNION,
Packit Service 72eb06
                                          DNTT_TYPE_ENUM, or DNTT_TYPE_CLASS. 
Packit Service 72eb06
                                          For TYPEDEF's other underlying types
Packit Service 72eb06
                                          are also possible.  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_POINTER:
Packit Service 72eb06
Packit Service 72eb06
   Used to describe a pointer to an underlying type.
Packit Service 72eb06
Packit Service 72eb06
   POINTSTO is a pointer into the GNTT or LNTT for the type which this
Packit Service 72eb06
   pointer points to.
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the length of the pointer (not the underlying type). */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_pointer
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int unused:		21;
Packit Service 72eb06
  dnttpointer pointsto;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_ENUM:
Packit Service 72eb06
Packit Service 72eb06
   Used to describe enumerated types.
Packit Service 72eb06
Packit Service 72eb06
   FIRSTMEM is a pointer to a DNTT_TYPE_MEMENUM in the GNTT/LNTT which
Packit Service 72eb06
   describes the first member (and contains a pointer to the chain of
Packit Service 72eb06
   members).
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the number of bits used to hold the values of the enum's
Packit Service 72eb06
   members.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_enum
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int unused:		21;
Packit Service 72eb06
  dnttpointer firstmem;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_MEMENUM
Packit Service 72eb06
Packit Service 72eb06
   Used to describe members of an enumerated type.
Packit Service 72eb06
Packit Service 72eb06
   CLASSMEM is nonzero if this member is part of a class.
Packit Service 72eb06
Packit Service 72eb06
   NAME points into the VT for the name of this member.
Packit Service 72eb06
Packit Service 72eb06
   VALUE is the value of this enumeration member.
Packit Service 72eb06
Packit Service 72eb06
   NEXTMEM points to the next DNTT_TYPE_MEMENUM in the chain.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_memenum
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int classmem:	1;
Packit Service 72eb06
  unsigned int unused:		20;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  unsigned int value;
Packit Service 72eb06
  dnttpointer nextmem;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_SET
Packit Service 72eb06
Packit Service 72eb06
   Used to describe PASCAL "set" type.
Packit Service 72eb06
Packit Service 72eb06
   DECLARATION describes the bitpacking of the set.
Packit Service 72eb06
Packit Service 72eb06
   SUBTYPE points to a DNTT entry describing the type of the members.
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the size of the set.  */ 
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_set
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int declaration:	2;
Packit Service 72eb06
  unsigned int unused:		19;
Packit Service 72eb06
  dnttpointer subtype;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_SUBRANGE
Packit Service 72eb06
Packit Service 72eb06
   Used to describe subrange type.
Packit Service 72eb06
Packit Service 72eb06
   DYN_LOW describes the lower bound of the subrange:
Packit Service 72eb06
Packit Service 72eb06
     00 for a constant lower bound (found in LOWBOUND).
Packit Service 72eb06
Packit Service 72eb06
     01 for a dynamic lower bound with the lower bound found in the
Packit Service 72eb06
     memory address pointed to by LOWBOUND.
Packit Service 72eb06
Packit Service 72eb06
     10 for a dynamic lower bound described by an variable found in the
Packit Service 72eb06
     DNTT/LNTT (LOWBOUND would be a pointer into the DNTT/LNTT).
Packit Service 72eb06
Packit Service 72eb06
   DYN_HIGH is similar to DYN_LOW, except it describes the upper bound.
Packit Service 72eb06
Packit Service 72eb06
   SUBTYPE points to the type of the subrange.
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the length in bits needed to describe the subrange's
Packit Service 72eb06
   values.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_subrange
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int dyn_low:		2;
Packit Service 72eb06
  unsigned int dyn_high:	2;
Packit Service 72eb06
  unsigned int unused:		17;
Packit Service 72eb06
  int lowbound;
Packit Service 72eb06
  int highbound;
Packit Service 72eb06
  dnttpointer subtype;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_ARRAY
Packit Service 72eb06
Packit Service 72eb06
   Used to describe an array type.
Packit Service 72eb06
Packit Service 72eb06
   DECLARATION describes the bit packing used in the array.
Packit Service 72eb06
Packit Service 72eb06
   ARRAYISBYTES is nonzero if the field in arraylength describes the
Packit Service 72eb06
   length in bytes rather than in bits.  A value of zero is used to
Packit Service 72eb06
   describe an array with size 2**32.
Packit Service 72eb06
Packit Service 72eb06
   ELEMISBYTES is nonzero if the length if each element in the array
Packit Service 72eb06
   is describes in bytes rather than bits.  A value of zero is used
Packit Service 72eb06
   to an element with size 2**32.
Packit Service 72eb06
Packit Service 72eb06
   ELEMORDER is nonzero if the elements are indexed in increasing order.
Packit Service 72eb06
Packit Service 72eb06
   JUSTIFIED if the elements are left justified to index zero.
Packit Service 72eb06
Packit Service 72eb06
   ARRAYLENGTH is the length of the array.
Packit Service 72eb06
Packit Service 72eb06
   INDEXTYPE is a DNTT pointer to the type used to index the array.
Packit Service 72eb06
Packit Service 72eb06
   ELEMTYPE is a DNTT pointer to the type for the array elements.
Packit Service 72eb06
Packit Service 72eb06
   ELEMLENGTH is the length of each element in the array (including
Packit Service 72eb06
   any padding).
Packit Service 72eb06
Packit Service 72eb06
   Multi-dimensional arrays are represented by ELEMTYPE pointing to
Packit Service 72eb06
   another DNTT_TYPE_ARRAY.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_array
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int declaration:	2;
Packit Service 72eb06
  unsigned int dyn_low:		2;
Packit Service 72eb06
  unsigned int dyn_high:	2;
Packit Service 72eb06
  unsigned int arrayisbytes:	1;
Packit Service 72eb06
  unsigned int elemisbytes:	1;
Packit Service 72eb06
  unsigned int elemorder:	1;
Packit Service 72eb06
  unsigned int justified:	1;
Packit Service 72eb06
  unsigned int unused:		11;
Packit Service 72eb06
  unsigned int arraylength;
Packit Service 72eb06
  dnttpointer indextype;
Packit Service 72eb06
  dnttpointer elemtype;
Packit Service 72eb06
  unsigned int elemlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_STRUCT
Packit Service 72eb06
Packit Service 72eb06
   DNTT_TYPE_STRUCT is used to describe a C structure.
Packit Service 72eb06
Packit Service 72eb06
   DECLARATION describes the bitpacking used.
Packit Service 72eb06
Packit Service 72eb06
   FIRSTFIELD is a DNTT pointer to the first field of the structure
Packit Service 72eb06
   (each field contains a pointer to the next field, walk the list
Packit Service 72eb06
   to access all fields of the structure).
Packit Service 72eb06
Packit Service 72eb06
   VARTAGFIELD and VARLIST are used for Pascal variant records.
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the size of the structure in bits.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_struct
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int declaration:	2;
Packit Service 72eb06
  unsigned int unused:		19;
Packit Service 72eb06
  dnttpointer firstfield;
Packit Service 72eb06
  dnttpointer vartagfield;
Packit Service 72eb06
  dnttpointer varlist;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_UNION
Packit Service 72eb06
Packit Service 72eb06
   DNTT_TYPE_UNION is used to describe a C union.
Packit Service 72eb06
Packit Service 72eb06
   FIRSTFIELD is a DNTT pointer to the beginning of the field chain.
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the size of the union in bits.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_union
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int unused:		21;
Packit Service 72eb06
  dnttpointer firstfield;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_FIELD
Packit Service 72eb06
Packit Service 72eb06
   DNTT_TYPE_FIELD describes one field in a structure or union
Packit Service 72eb06
   or C++ class.
Packit Service 72eb06
Packit Service 72eb06
   VISIBILITY is used to describe the visibility of the field
Packit Service 72eb06
   (for c++.  public = 0, protected = 1, private = 2).
Packit Service 72eb06
Packit Service 72eb06
   A_UNION is nonzero if this field is a member of an anonymous union.
Packit Service 72eb06
Packit Service 72eb06
   STATICMEM is nonzero if this field is a static member of a template.
Packit Service 72eb06
Packit Service 72eb06
   NAME is a pointer into the VT for the name of the field.
Packit Service 72eb06
Packit Service 72eb06
   BITOFFSET gives the offset of this field in bits from the beginning
Packit Service 72eb06
   of the structure or union this field is a member of.
Packit Service 72eb06
Packit Service 72eb06
   TYPE is a DNTT pointer to the type describing this field.
Packit Service 72eb06
Packit Service 72eb06
   BITLENGTH is the size of the entry in bits.
Packit Service 72eb06
Packit Service 72eb06
   NEXTFIELD is a DNTT pointer to the next field in the chain.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_field
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:	10;
Packit Service 72eb06
  unsigned int visibility:	2;
Packit Service 72eb06
  unsigned int a_union:		1;
Packit Service 72eb06
  unsigned int staticmem:	1;
Packit Service 72eb06
  unsigned int unused:		17;
Packit Service 72eb06
  vtpointer name;
Packit Service 72eb06
  unsigned int bitoffset;
Packit Service 72eb06
  dnttpointer type;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
  dnttpointer nextfield;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_VARIANT is unused by GDB.  */
Packit Service 72eb06
/* DNTT_TYPE_FILE is unused by GDB.  */
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_FUNCTYPE
Packit Service 72eb06
Packit Service 72eb06
   I think this is used to describe a function type (e.g., would
Packit Service 72eb06
   be emitted as part of a function-pointer description).
Packit Service 72eb06
Packit Service 72eb06
   VARARGS is nonzero if this function uses varargs.
Packit Service 72eb06
Packit Service 72eb06
   FIRSTPARAM is a DNTT pointer to the first entry in the parameter
Packit Service 72eb06
   chain.
Packit Service 72eb06
Packit Service 72eb06
   RETVAL is a DNTT pointer to the type of the return value.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_functype
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:		10;
Packit Service 72eb06
  unsigned int varargs:		1;
Packit Service 72eb06
  unsigned int info:		4;
Packit Service 72eb06
  unsigned int unused:		16;
Packit Service 72eb06
  unsigned int bitlength;
Packit Service 72eb06
  dnttpointer firstparam;
Packit Service 72eb06
  dnttpointer retval;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_WITH is emitted by C++ to indicate "with" scoping semantics.
Packit Service 72eb06
   (Probably also emitted by PASCAL to support "with"...).
Packit Service 72eb06
   
Packit Service 72eb06
   C++ example: Say "memfunc" is a method of class "c", and say
Packit Service 72eb06
   "m" is a data member of class "c". Then from within "memfunc",
Packit Service 72eb06
   it is legal to reference "m" directly (e.g. you don't have to
Packit Service 72eb06
   say "this->m". The symbol table indicates
Packit Service 72eb06
   this by emitting a DNTT_TYPE_WITH symbol within the function "memfunc",
Packit Service 72eb06
   pointing to the type symbol for class "c".
Packit Service 72eb06
 
Packit Service 72eb06
   In GDB, this symbol record is unnecessary, 
Packit Service 72eb06
   because GDB's symbol lookup algorithm
Packit Service 72eb06
   infers the "with" semantics when it sees a "this" argument to the member
Packit Service 72eb06
   function. So GDB can safely ignore the DNTT_TYPE_WITH record.
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_WITH has a matching DNTT_TYPE_END symbol.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_with
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;    /* always zero */
Packit Service 72eb06
  unsigned int kind:		10;   /* always DNTT_TYPE_WITH */
Packit Service 72eb06
  unsigned int addrtype:  	2;    /* 0 => STATTYPE                */
Packit Service 72eb06
                                      /* 1 => DYNTYPE                 */
Packit Service 72eb06
                                      /* 2 => REGTYPE                 */
Packit Service 72eb06
  unsigned int indirect: 	1;    /* 1 => pointer to object       */
Packit Service 72eb06
  unsigned int longaddr:  	1;    /* 1 => in long pointer space   */
Packit Service 72eb06
  unsigned int nestlevel: 	6;    /* # of nesting levels back     */
Packit Service 72eb06
  unsigned int doc_ranges: 	1;    /* 1 => location is range list  */
Packit Service 72eb06
  unsigned int unused:   	10;
Packit Service 72eb06
  long location;       		      /* where stored (allocated)     */
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
  dnttpointer type;                   /* type of with expression      */
Packit Service 72eb06
  vtpointer name;                     /* name of with expression      */
Packit Service 72eb06
  unsigned long  offset;              /* byte offset from location    */
Packit Service 72eb06
};                                   
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_COMMON is unsupported by GDB.  */
Packit Service 72eb06
/* A DNTT_TYPE_COMMON symbol must have a matching DNTT_TYPE_END symbol */
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_COBSTRUCT is unsupported by GDB.  */
Packit Service 72eb06
/* DNTT_TYPE_XREF is unsupported by GDB.  */
Packit Service 72eb06
/* DNTT_TYPE_SA is unsupported by GDB.  */
Packit Service 72eb06
/* DNTT_TYPE_MACRO is unsupported by GDB */
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_BLOCKDATA has the same structure as DNTT_TYPE_FUNCTION */
Packit Service 72eb06
Packit Service 72eb06
/* The following are the C++ specific SOM records */
Packit Service 72eb06
Packit Service 72eb06
/*  The purpose of the DNTT_TYPE_CLASS_SCOPE is to bracket C++ methods
Packit Service 72eb06
    and indicate the method name belongs in the "class scope" rather
Packit Service 72eb06
    than in the module they are being defined in. For example:
Packit Service 72eb06
Packit Service 72eb06
    class c {
Packit Service 72eb06
    ...
Packit Service 72eb06
    void memfunc(); // member function
Packit Service 72eb06
    };
Packit Service 72eb06
Packit Service 72eb06
    void c::memfunc()   // definition of class c's "memfunc"
Packit Service 72eb06
    {
Packit Service 72eb06
    ...
Packit Service 72eb06
    }
Packit Service 72eb06
Packit Service 72eb06
    main()
Packit Service 72eb06
    {
Packit Service 72eb06
    ...
Packit Service 72eb06
    }
Packit Service 72eb06
Packit Service 72eb06
    In the above, the name "memfunc" is not directly visible from "main".
Packit Service 72eb06
    I.e., you have to say "break c::memfunc".
Packit Service 72eb06
    If it were a normal function (not a method), it would be visible
Packit Service 72eb06
    via the simple "break memfunc". Since "memfunc" otherwise looks
Packit Service 72eb06
    like a normal FUNCTION in the symbol table, the bracketing
Packit Service 72eb06
    CLASS_SCOPE is what is used to indicate it is really a method.
Packit Service 72eb06
    
Packit Service 72eb06
Packit Service 72eb06
   A DNTT_TYPE_CLASS_SCOPE symbol must have a matching DNTT_TYPE_END symbol.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_class_scope
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* Always zero.  */
Packit Service 72eb06
  unsigned int kind:       10;     /* Always DNTT_TYPE_CLASS_SCOPE.  */
Packit Service 72eb06
  unsigned int unused:     21; 
Packit Service 72eb06
  sltpointer address         ;     /* Pointer to SLT entry.  */
Packit Service 72eb06
  dnttpointer type           ;     /* Pointer to class type DNTT.  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* C++ reference parameter.
Packit Service 72eb06
   The structure of this record is the same as DNTT_TYPE_POINTER - 
Packit Service 72eb06
   refer to struct dntt_type_pointer.  */
Packit Service 72eb06
Packit Service 72eb06
/* The next two describe C++ pointer-to-data-member type, and 
Packit Service 72eb06
   pointer-to-member-function type, respectively.
Packit Service 72eb06
   DNTT_TYPE_PTRMEM and DNTT_TYPE_PTRMEMFUNC have the same structure.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_ptrmem
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* Always zero.  */
Packit Service 72eb06
  unsigned int kind:       10;     /* Always DNTT_TYPE_PTRMEM.  */
Packit Service 72eb06
  unsigned int unused:	   21;
Packit Service 72eb06
  dnttpointer pointsto	     ;     /* Pointer to class DNTT.  */
Packit Service 72eb06
  dnttpointer memtype 	     ;     /* Type of member.  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_ptrmemfunc
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* Always zero.  */
Packit Service 72eb06
  unsigned int kind:       10;     /* Always DNTT_TYPE_PTRMEMFUNC.  */
Packit Service 72eb06
  unsigned int unused:	   21;
Packit Service 72eb06
  dnttpointer pointsto	     ;     /* Pointer to class DNTT.  */
Packit Service 72eb06
  dnttpointer memtype 	     ;     /* Type of member.  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* The DNTT_TYPE_CLASS symbol is emitted to describe a class type.
Packit Service 72eb06
   "memberlist" points to a chained list of FIELD or GENFIELD records
Packit Service 72eb06
   indicating the class members. "parentlist" points to a chained list
Packit Service 72eb06
   of INHERITANCE records indicating classes from which we inherit
Packit Service 72eb06
   fields.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_class 
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;     /* Always zero.  */
Packit Service 72eb06
  unsigned int kind:       10;     /* Always DNTT_TYPE_CLASS.  */
Packit Service 72eb06
  unsigned int abstract:    1;     /* Is this an abstract class?  */
Packit Service 72eb06
  unsigned int class_decl:  2;     /* 0=class,1=union,2=struct.  */
Packit Service 72eb06
  unsigned int expansion:   1;     /* 1=template expansion.  */
Packit Service 72eb06
  unsigned int unused:     17;     
Packit Service 72eb06
  dnttpointer memberlist     ;     /* Ptr to chain of [GEN]FIELDs.  */
Packit Service 72eb06
  unsigned long vtbl_loc     ;     /* Offset in obj of ptr to vtbl.  */
Packit Service 72eb06
  dnttpointer parentlist     ;     /* Ptr to K_INHERITANCE list.  */
Packit Service 72eb06
  unsigned long bitlength    ;     /* Total at this level.  */
Packit Service 72eb06
  dnttpointer identlist      ;     /* Ptr to chain of class ident's.  */
Packit Service 72eb06
  dnttpointer friendlist     ;     /* Ptr to K_FRIEND list.  */
Packit Service 72eb06
  dnttpointer templateptr    ;     /* Ptr to template.  */
Packit Service 72eb06
  dnttpointer nextexp        ;     /* Ptr to next expansion.  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* Class members are indicated via either the FIELD record (for
Packit Service 72eb06
   data members, same as for C struct fields), or by the GENFIELD record
Packit Service 72eb06
   (for member functions).  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_genfield
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* Always zero.  */
Packit Service 72eb06
  unsigned int kind:       10;     /* Always DNTT_TYPE_GENFIELD.  */
Packit Service 72eb06
  unsigned int visibility:  2;     /* Pub = 0, prot = 1, priv = 2.  */
Packit Service 72eb06
  unsigned int a_union:     1;     /* 1 => anonymous union member.  */
Packit Service 72eb06
  unsigned int unused:	   18;
Packit Service 72eb06
  dnttpointer field	     ;     /* Pointer to field or qualifier.  */
Packit Service 72eb06
  dnttpointer nextfield      ;     /* Pointer to next field.  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* C++ virtual functions.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_vfunc
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_VFUNC */
Packit Service 72eb06
  unsigned int pure:        1;     /* pure virtual function ?       */
Packit Service 72eb06
  unsigned int unused:	   20;
Packit Service 72eb06
  dnttpointer funcptr        ;     /* points to FUNCTION symbol     */
Packit Service 72eb06
  unsigned long vtbl_offset  ;     /* offset into vtbl for virtual  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* Not precisely sure what this is intended for - DDE ignores it.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_memaccess
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_MEMACCESS */
Packit Service 72eb06
  unsigned int unused:	   21;
Packit Service 72eb06
  dnttpointer classptr	     ;     /* pointer to base class         */
Packit Service 72eb06
  dnttpointer field          ;     /* pointer field                 */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* The DNTT_TYPE_INHERITANCE record describes derived classes.
Packit Service 72eb06
   In particular, the "parentlist" field of the CLASS record points
Packit Service 72eb06
   to a list of INHERITANCE records for classes from which we 
Packit Service 72eb06
   inherit members.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_inheritance
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_INHERITANCE */
Packit Service 72eb06
  unsigned int Virtual:     1;     /* virtual base class ?          */
Packit Service 72eb06
  unsigned int visibility:  2;     /* pub = 0, prot = 1, priv = 2   */
Packit Service 72eb06
  unsigned int unused:	   18;
Packit Service 72eb06
  dnttpointer classname      ;     /* first parent class, if any    */
Packit Service 72eb06
  unsigned long offset       ;     /* offset to start of base class */
Packit Service 72eb06
  dnttpointer next           ;     /* pointer to next K_INHERITANCE */
Packit Service 72eb06
  unsigned long future[2]    ;     /* padding to 3-word block end   */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* C++ "friend" classes ... */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_friend_class
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_FRIEND_CLASS */
Packit Service 72eb06
  unsigned int unused:	   21;
Packit Service 72eb06
  dnttpointer classptr       ;     /* pointer to class DNTT         */
Packit Service 72eb06
  dnttpointer next           ;     /* next DNTT_FRIEND              */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_friend_func
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_FRIEND_FUNC */
Packit Service 72eb06
  unsigned int unused:	   21;
Packit Service 72eb06
  dnttpointer funcptr        ;     /* pointer to function           */
Packit Service 72eb06
  dnttpointer classptr       ;     /* pointer to class DNTT         */
Packit Service 72eb06
  dnttpointer next           ;     /* next DNTT_FRIEND              */
Packit Service 72eb06
  unsigned long future[2]    ;     /* padding to 3-word block end   */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DDE appears to ignore the DNTT_TYPE_MODIFIER record.
Packit Service 72eb06
   It could perhaps be used to give better "ptype" output in GDB;
Packit Service 72eb06
   otherwise it is probably safe for GDB to ignore it also.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_modifier
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_MODIFIER */
Packit Service 72eb06
  unsigned int m_const:     1;     /* const                         */
Packit Service 72eb06
  unsigned int m_static:    1;     /* static                        */
Packit Service 72eb06
  unsigned int m_void:      1;     /* void                          */
Packit Service 72eb06
  unsigned int m_volatile:  1;     /* volatile                      */
Packit Service 72eb06
  unsigned int m_duplicate: 1;     /* duplicate                     */
Packit Service 72eb06
  unsigned int unused:	   16;
Packit Service 72eb06
  dnttpointer type           ;     /* subtype                       */
Packit Service 72eb06
  unsigned long future       ;     /* padding to 3-word block end   */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* I'm not sure what this was intended for - DDE ignores it.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_object_id
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_OBJECT_ID */
Packit Service 72eb06
  unsigned int indirect:    1;     /* Is object_ident addr of addr? */
Packit Service 72eb06
  unsigned int unused:	   20;
Packit Service 72eb06
  unsigned long object_ident ;     /* object identifier             */
Packit Service 72eb06
  unsigned long offset       ;     /* offset to start of base class */
Packit Service 72eb06
  dnttpointer next           ;     /* pointer to next K_OBJECT_ID   */
Packit Service 72eb06
  unsigned long segoffset    ;     /* for linker fixup              */
Packit Service 72eb06
  unsigned long future       ;     /* padding to 3-word block end   */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* No separate dntt_type_memfunc; same as dntt_type_func */
Packit Service 72eb06
Packit Service 72eb06
/* Symbol records to support templates. These only get used
Packit Service 72eb06
   in DDE's "describe" output (like GDB's "ptype").  */
Packit Service 72eb06
Packit Service 72eb06
/* The TEMPLATE record is the header for a template-class.
Packit Service 72eb06
   Like the CLASS record, a TEMPLATE record has a memberlist that
Packit Service 72eb06
   points to a list of template members. It also has an arglist
Packit Service 72eb06
   pointing to a list of TEMPLATE_ARG records.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_template
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_TEMPLATE */
Packit Service 72eb06
  unsigned int abstract:    1;     /* is this an abstract class?    */
Packit Service 72eb06
  unsigned int class_decl:  2;     /* 0=class,1=union,2=struct      */
Packit Service 72eb06
  unsigned int unused:	   18;
Packit Service 72eb06
  dnttpointer memberlist     ;     /* ptr to chain of K_[GEN]FIELDs */
Packit Service 72eb06
  long unused2               ;     /* offset in obj of ptr to vtbl  */
Packit Service 72eb06
  dnttpointer parentlist     ;     /* ptr to K_INHERITANCE list     */
Packit Service 72eb06
  unsigned long bitlength    ;     /* total at this level           */
Packit Service 72eb06
  dnttpointer identlist      ;     /* ptr to chain of class ident's */
Packit Service 72eb06
  dnttpointer friendlist     ;     /* ptr to K_FRIEND list          */
Packit Service 72eb06
  dnttpointer arglist        ;     /* ptr to argument list          */
Packit Service 72eb06
  dnttpointer expansions     ;     /* ptr to expansion list         */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* Template-class arguments are a list of TEMPL_ARG records
Packit Service 72eb06
   chained together. The "name" field is the name of the formal.
Packit Service 72eb06
   E.g.:
Packit Service 72eb06
   
Packit Service 72eb06
     template <class T> class q { ... };
Packit Service 72eb06
   
Packit Service 72eb06
   Then "T" is the name of the formal argument.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_templ_arg
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_TEMPL_ARG */
Packit Service 72eb06
  unsigned int usagetype:   1;     /* 0 type-name 1 expression     */
Packit Service 72eb06
  unsigned int unused:	   20;
Packit Service 72eb06
  vtpointer name             ;     /* name of argument             */
Packit Service 72eb06
  dnttpointer type           ;     /* for non type arguments       */
Packit Service 72eb06
  dnttpointer nextarg        ;     /* Next argument if any         */
Packit Service 72eb06
  long future[2]             ;     /* padding to 3-word block end  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* FUNC_TEMPLATE records are sort of like FUNCTION, but are emitted
Packit Service 72eb06
   for template member functions. E.g.,
Packit Service 72eb06
   
Packit Service 72eb06
     template <class T> class q
Packit Service 72eb06
     {
Packit Service 72eb06
        ...
Packit Service 72eb06
        void f();
Packit Service 72eb06
        ... 
Packit Service 72eb06
     };
Packit Service 72eb06
   
Packit Service 72eb06
   Within the list of FIELDs/GENFIELDs defining the member list
Packit Service 72eb06
   of the template "q", "f" would appear as a FUNC_TEMPLATE.
Packit Service 72eb06
   We'll also see instances of FUNCTION "f" records for each 
Packit Service 72eb06
   instantiation of the template.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_func_template
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_FUNC_TEMPLATE */
Packit Service 72eb06
  unsigned int public:      1;     /* 1 => globally visible        */
Packit Service 72eb06
  unsigned int language:    4;     /* type of language             */
Packit Service 72eb06
  unsigned int level:       5;     /* nesting level (top level = 0)*/
Packit Service 72eb06
  unsigned int optimize:    2;     /* level of optimization        */
Packit Service 72eb06
  unsigned int varargs:     1;     /* ellipses.  Pascal/800 later  */ 
Packit Service 72eb06
  unsigned int info:        4;     /* lang-specific stuff; F_xxxx  */
Packit Service 72eb06
  unsigned int inlined:     1;
Packit Service 72eb06
  unsigned int localloc:    1;     /* 0 at top, 1 at end of block  */
Packit Service 72eb06
  unsigned int unused:      2;
Packit Service 72eb06
  vtpointer name             ;     /* name of function             */
Packit Service 72eb06
  vtpointer alias            ;     /* alternate name, if any       */
Packit Service 72eb06
  dnttpointer firstparam     ;     /* first FPARAM, if any         */
Packit Service 72eb06
  dnttpointer retval         ;     /* return type, if any          */
Packit Service 72eb06
  dnttpointer arglist        ;     /* ptr to argument list         */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* LINK is apparently intended to link together function template
Packit Service 72eb06
   definitions with their instantiations. However, it is not clear
Packit Service 72eb06
   why this would be needed, except to provide the information on
Packit Service 72eb06
   a "ptype" command. And as far as I can tell, aCC does not 
Packit Service 72eb06
   generate this record.  */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_link
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:   1;	   /* always zero */
Packit Service 72eb06
  unsigned int kind:       10;     /* always DNTT_TYPE_LINK */
Packit Service 72eb06
  unsigned int linkKind:    4;     /* always LINK_UNKNOWN          */
Packit Service 72eb06
  unsigned int unused:	   17;
Packit Service 72eb06
  long future1               ;     /* expansion                    */
Packit Service 72eb06
  dnttpointer ptr1           ;     /* link from template           */
Packit Service 72eb06
  dnttpointer ptr2           ;     /* to expansion                 */
Packit Service 72eb06
  long future[2]             ;     /* padding to 3-word block end  */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* end of C++ specific SOM's.  */
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_DYN_ARRAY_DESC is unused by GDB */
Packit Service 72eb06
/* DNTT_TYPE_DESC_SUBRANGE is unused by GDB */
Packit Service 72eb06
/* DNTT_TYPE_BEGIN_EXT is unused by GDB */
Packit Service 72eb06
/* DNTT_TYPE_INLN is unused by GDB */
Packit Service 72eb06
/* DNTT_TYPE_INLN_LIST is unused by GDB */
Packit Service 72eb06
/* DNTT_TYPE_ALIAS is unused by GDB */
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_doc_function
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension: 1;   /* always zero                  */
Packit Service 72eb06
  unsigned int kind:     10;   /* K_DOC_FUNCTION or            */
Packit Service 72eb06
                               /* K_DOC_MEMFUNC                */
Packit Service 72eb06
  unsigned int global:    1;   /* 1 => globally visible        */
Packit Service 72eb06
  unsigned int language:  4;   /* type of language             */
Packit Service 72eb06
  unsigned int level:     5;   /* nesting level (top level = 0)*/
Packit Service 72eb06
  unsigned int optimize:  2;   /* level of optimization        */
Packit Service 72eb06
  unsigned int varargs:   1;   /* ellipses.  Pascal/800 later  */
Packit Service 72eb06
  unsigned int info:      4;   /* lang-specific stuff; F_xxxx  */
Packit Service 72eb06
  unsigned int inlined:   1;
Packit Service 72eb06
  unsigned int localloc:  1;   /* 0 at top, 1 at end of block  */
Packit Service 72eb06
  unsigned int expansion: 1;   /* 1 = function expansion       */
Packit Service 72eb06
  unsigned int doc_clone: 1;
Packit Service 72eb06
  vtpointer name;              /* name of function             */
Packit Service 72eb06
  vtpointer alias;             /* alternate name, if any       */
Packit Service 72eb06
  dnttpointer firstparam;      /* first FPARAM, if any         */
Packit Service 72eb06
  sltpointer address;          /* code and text locations      */
Packit Service 72eb06
  CORE_ADDR entryaddr;         /* address of entry point       */
Packit Service 72eb06
  dnttpointer retval;          /* return type, if any          */
Packit Service 72eb06
  CORE_ADDR lowaddr;           /* lowest address of function   */
Packit Service 72eb06
  CORE_ADDR hiaddr;            /* highest address of function  */
Packit Service 72eb06
  dnttpointer inline_list;     /* pointer to first inline    */
Packit Service 72eb06
  ltpointer lt_offset;         /* start of frag/cp line table  */
Packit Service 72eb06
  ctxtpointer ctxt_offset;     /* start of context table for this routine */
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_DOC_MEMFUNC is unused by GDB */
Packit Service 72eb06
Packit Service 72eb06
/* DNTT_TYPE_GENERIC and DNTT_TYPE_BLOCK are convience structures
Packit Service 72eb06
   so we can examine a DNTT entry in a generic fashion.  */
Packit Service 72eb06
struct dntt_type_generic
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int word[9];
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
struct dntt_type_block
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int extension:	1;
Packit Service 72eb06
  unsigned int kind:            10;
Packit Service 72eb06
  unsigned int unused:		21;
Packit Service 72eb06
  unsigned int word[2];
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* One entry in a DNTT (either the LNTT or GNTT).  
Packit Service 72eb06
   This is a union of the above 60 or so structure definitions.  */
Packit Service 72eb06
Packit Service 72eb06
union dnttentry
Packit Service 72eb06
{
Packit Service 72eb06
  struct dntt_type_srcfile dsfile;
Packit Service 72eb06
  struct dntt_type_module dmodule;
Packit Service 72eb06
  struct dntt_type_function dfunc;
Packit Service 72eb06
  struct dntt_type_function dentry;
Packit Service 72eb06
  struct dntt_type_begin dbegin;
Packit Service 72eb06
  struct dntt_type_end dend;
Packit Service 72eb06
  struct dntt_type_fparam dfparam;
Packit Service 72eb06
  struct dntt_type_svar dsvar;
Packit Service 72eb06
  struct dntt_type_dvar ddvar;
Packit Service 72eb06
  struct dntt_type_const dconst;
Packit Service 72eb06
  struct dntt_type_type dtype;
Packit Service 72eb06
  struct dntt_type_type dtag;
Packit Service 72eb06
  struct dntt_type_pointer dptr;
Packit Service 72eb06
  struct dntt_type_enum denum;
Packit Service 72eb06
  struct dntt_type_memenum dmember;
Packit Service 72eb06
  struct dntt_type_set dset;
Packit Service 72eb06
  struct dntt_type_subrange dsubr;
Packit Service 72eb06
  struct dntt_type_array darray;
Packit Service 72eb06
  struct dntt_type_struct dstruct;
Packit Service 72eb06
  struct dntt_type_union dunion;
Packit Service 72eb06
  struct dntt_type_field dfield;
Packit Service 72eb06
  struct dntt_type_functype dfunctype;
Packit Service 72eb06
  struct dntt_type_with dwith;
Packit Service 72eb06
  struct dntt_type_function dblockdata;
Packit Service 72eb06
  struct dntt_type_class_scope dclass_scope;
Packit Service 72eb06
  struct dntt_type_pointer dreference;
Packit Service 72eb06
  struct dntt_type_ptrmem dptrmem;
Packit Service 72eb06
  struct dntt_type_ptrmemfunc dptrmemfunc;
Packit Service 72eb06
  struct dntt_type_class dclass;
Packit Service 72eb06
  struct dntt_type_genfield dgenfield;
Packit Service 72eb06
  struct dntt_type_vfunc dvfunc;
Packit Service 72eb06
  struct dntt_type_memaccess dmemaccess;
Packit Service 72eb06
  struct dntt_type_inheritance dinheritance;
Packit Service 72eb06
  struct dntt_type_friend_class dfriend_class;
Packit Service 72eb06
  struct dntt_type_friend_func dfriend_func;
Packit Service 72eb06
  struct dntt_type_modifier dmodifier;
Packit Service 72eb06
  struct dntt_type_object_id dobject_id;
Packit Service 72eb06
  struct dntt_type_template dtemplate;
Packit Service 72eb06
  struct dntt_type_templ_arg dtempl_arg;
Packit Service 72eb06
  struct dntt_type_func_template dfunc_template;
Packit Service 72eb06
  struct dntt_type_link dlink;
Packit Service 72eb06
  struct dntt_type_doc_function ddocfunc;
Packit Service 72eb06
  struct dntt_type_generic dgeneric;
Packit Service 72eb06
  struct dntt_type_block dblock;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* Source line entry types.  */
Packit Service 72eb06
enum slttype
Packit Service 72eb06
{
Packit Service 72eb06
  SLT_NORMAL,
Packit Service 72eb06
  SLT_SRCFILE,
Packit Service 72eb06
  SLT_MODULE,
Packit Service 72eb06
  SLT_FUNCTION,
Packit Service 72eb06
  SLT_ENTRY,
Packit Service 72eb06
  SLT_BEGIN,
Packit Service 72eb06
  SLT_END,
Packit Service 72eb06
  SLT_WITH,
Packit Service 72eb06
  SLT_EXIT,
Packit Service 72eb06
  SLT_ASSIST,
Packit Service 72eb06
  SLT_MARKER,
Packit Service 72eb06
  SLT_CLASS_SCOPE,
Packit Service 72eb06
  SLT_INLN,
Packit Service 72eb06
  SLT_NORMAL_OFFSET,
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* A normal source line entry.  Simply provides a mapping of a source
Packit Service 72eb06
   line number to a code address.
Packit Service 72eb06
Packit Service 72eb06
   SLTDESC will always be SLT_NORMAL or SLT_EXIT.  */
Packit Service 72eb06
Packit Service 72eb06
struct slt_normal
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int sltdesc:	4;
Packit Service 72eb06
  unsigned int line:	28;
Packit Service 72eb06
  CORE_ADDR address;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
struct slt_normal_off
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int sltdesc:	4;
Packit Service 72eb06
  unsigned int offset:	6;
Packit Service 72eb06
  unsigned int line:	22;
Packit Service 72eb06
  CORE_ADDR address;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* A special source line entry.  Provides a mapping of a declaration
Packit Service 72eb06
   to a line number.  These entries point back into the DNTT which
Packit Service 72eb06
   references them.  */
Packit Service 72eb06
Packit Service 72eb06
struct slt_special
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int sltdesc:	4;
Packit Service 72eb06
  unsigned int line:	28;
Packit Service 72eb06
  dnttpointer backptr;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* Used to describe nesting.
Packit Service 72eb06
Packit Service 72eb06
   For nested languages, an slt_assist entry must follow each SLT_FUNC
Packit Service 72eb06
   entry in the SLT.  The address field will point forward to the
Packit Service 72eb06
   first slt_normal entry within the function's scope.  */
Packit Service 72eb06
Packit Service 72eb06
struct slt_assist
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int sltdesc:	4;
Packit Service 72eb06
  unsigned int unused:	28;
Packit Service 72eb06
  sltpointer address;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
struct slt_generic
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int word[2];
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
union sltentry
Packit Service 72eb06
{
Packit Service 72eb06
  struct slt_normal snorm;
Packit Service 72eb06
  struct slt_normal_off snormoff;
Packit Service 72eb06
  struct slt_special sspec;
Packit Service 72eb06
  struct slt_assist sasst;
Packit Service 72eb06
  struct slt_generic sgeneric;
Packit Service 72eb06
};
Packit Service 72eb06
Packit Service 72eb06
/* $LINES$ declarations
Packit Service 72eb06
   This is the line table used for optimized code, which is only present 
Packit Service 72eb06
   in the new $PROGRAM_INFO$ debug space.  */
Packit Service 72eb06
Packit Service 72eb06
#define DST_LN_ESCAPE_FLAG1   15
Packit Service 72eb06
#define DST_LN_ESCAPE_FLAG2   14
Packit Service 72eb06
#define DST_LN_CTX_SPEC1      13  
Packit Service 72eb06
#define DST_LN_CTX_SPEC2      12
Packit Service 72eb06
Packit Service 72eb06
/* Escape function codes:  */
Packit Service 72eb06
Packit Service 72eb06
typedef enum
Packit Service 72eb06
{
Packit Service 72eb06
  dst_ln_pad,          /* pad byte */
Packit Service 72eb06
  dst_ln_escape_1,     /* reserved */
Packit Service 72eb06
  dst_ln_dpc1_dln1,    /* 1 byte line delta, 1 byte pc delta */
Packit Service 72eb06
  dst_ln_dpc2_dln2,    /* 2 bytes line delta, 2 bytes pc delta */
Packit Service 72eb06
  dst_ln_pc4_ln4,      /* 4 bytes ABSOLUTE line number, 4 bytes ABSOLUTE pc */
Packit Service 72eb06
  dst_ln_dpc0_dln1,    /* 1 byte line delta, pc delta = 0 */
Packit Service 72eb06
  dst_ln_ln_off_1,     /* statement escape, stmt # = 1 (2nd stmt on line) */
Packit Service 72eb06
  dst_ln_ln_off,       /* statement escape, stmt # = next byte */
Packit Service 72eb06
  dst_ln_entry,        /* entry escape, next byte is entry number */
Packit Service 72eb06
  dst_ln_exit,         /* exit escape */
Packit Service 72eb06
  dst_ln_stmt_end,     /* gap escape, 4 bytes pc delta */
Packit Service 72eb06
  dst_ln_stmt_cp,      /* current stmt is a critical point */
Packit Service 72eb06
  dst_ln_escape_12,    /* reserved */
Packit Service 72eb06
  dst_ln_escape_13,    /* this is an exception site record */
Packit Service 72eb06
  dst_ln_nxt_byte,     /* next byte contains the real escape code */
Packit Service 72eb06
  dst_ln_end,          /* end escape, final entry follows */
Packit Service 72eb06
  dst_ln_escape1_END_OF_ENUM
Packit Service 72eb06
}
Packit Service 72eb06
dst_ln_escape1_t;
Packit Service 72eb06
Packit Service 72eb06
typedef enum
Packit Service 72eb06
{
Packit Service 72eb06
  dst_ln_ctx_1,        	/* next byte describes context switch with 5-bit */
Packit Service 72eb06
  			/* index into the image table and 3-bit run length. */
Packit Service 72eb06
			/* If run length is 0, end with another cxt specifier or ctx_end */
Packit Service 72eb06
  dst_ln_ctx_2,        	/* next 2 bytes switch context: 13 bit index, 3 bit run length */
Packit Service 72eb06
  dst_ln_ctx_4,        	/* next 4 bytes switch context: 29 bit index, 3 bit run length */
Packit Service 72eb06
  dst_ln_ctx_end,      	/* end current context */
Packit Service 72eb06
  dst_ln_col_run_1,    	/* next byte is column position of start of next statement, */
Packit Service 72eb06
                        /* following byte is length of statement */
Packit Service 72eb06
  dst_ln_col_run_2,    	/* next 2 bytes is column position of start of next statement, */
Packit Service 72eb06
                        /* following 2 bytes is length of statement */
Packit Service 72eb06
  dst_ln_init_base1,   	/* next 4 bytes are absolute PC, followed by 1 byte of line number */
Packit Service 72eb06
  dst_ln_init_base2,   	/* next 4 bytes are absolute PC, followed by 2 bytes of line number */
Packit Service 72eb06
  dst_ln_init_base3,   	/* next 4 bytes are absolute PC, followed by 3 bytes of line number */
Packit Service 72eb06
  dst_ln_escape2_END_OF_ENUM
Packit Service 72eb06
}
Packit Service 72eb06
dst_ln_escape2_t;           
Packit Service 72eb06
Packit Service 72eb06
typedef union
Packit Service 72eb06
{
Packit Service 72eb06
  struct
Packit Service 72eb06
  {
Packit Service 72eb06
    unsigned int     pc_delta : 4;      /* 4 bit pc delta */
Packit Service 72eb06
    int              ln_delta : 4;      /* 4 bit line number delta */
Packit Service 72eb06
  }
Packit Service 72eb06
  delta;
Packit Service 72eb06
Packit Service 72eb06
  struct
Packit Service 72eb06
  {
Packit Service 72eb06
    unsigned int     esc_flag : 4;      /* alias for pc_delta  */
Packit Service 72eb06
    unsigned int     esc_code : 4;      /* escape function code (dst_ln_escape1_t, or ...2_t */
Packit Service 72eb06
  }
Packit Service 72eb06
  esc;
Packit Service 72eb06
Packit Service 72eb06
  struct
Packit Service 72eb06
  {
Packit Service 72eb06
    unsigned int     esc_flag   : 4;      /* dst_ln_ctx_spec1, or dst_ln_ctx_spec2 */
Packit Service 72eb06
    unsigned int     run_length : 2;      
Packit Service 72eb06
    unsigned int     ctx_index  : 2;      /* ...spec2 contains index;  ...spec1, index - 4 */
Packit Service 72eb06
  }
Packit Service 72eb06
  ctx_spec;
Packit Service 72eb06
Packit Service 72eb06
  char               sdata;               /* signed data byte */
Packit Service 72eb06
  unsigned char      udata;               /* unsigned data byte */
Packit Service 72eb06
}
Packit Service 72eb06
dst_ln_entry_t,
Packit Service 72eb06
  * dst_ln_entry_ptr_t;
Packit Service 72eb06
Packit Service 72eb06
/* Warning: although the above union occupies only 1 byte the compiler treats
Packit Service 72eb06
   it as having size 2 (the minimum size of a struct).  Therefore a sequence of
Packit Service 72eb06
   dst_ln_entry_t's cannot be described as an array, and walking through such a
Packit Service 72eb06
   sequence requires convoluted code such as
Packit Service 72eb06
        ln_ptr = (dst_ln_entry_ptr_t) (char*) ln_ptr + 1
Packit Service 72eb06
   We regret the inconvenience.  */
Packit Service 72eb06
Packit Service 72eb06
/* Structure for interpreting the byte following a dst_ln_ctx1 entry.  */
Packit Service 72eb06
typedef struct
Packit Service 72eb06
{
Packit Service 72eb06
    unsigned int          ctx1_index : 5;      /* 5 bit index into context table */
Packit Service 72eb06
    unsigned int          ctx1_run_length : 3; /* 3 bit run length */
Packit Service 72eb06
} dst_ln_ctx1_t,
Packit Service 72eb06
  *dst_ln_ctx1_ptr_t;
Packit Service 72eb06
Packit Service 72eb06
/* Structure for interpreting the bytes following a dst_ln_ctx2 entry.  */
Packit Service 72eb06
typedef struct
Packit Service 72eb06
{
Packit Service 72eb06
    unsigned int          ctx2_index : 13;     /* 13 bit index into context table */
Packit Service 72eb06
    unsigned int          ctx2_run_length : 3; /* 3 bit run length */
Packit Service 72eb06
} dst_ln_ctx2_t,
Packit Service 72eb06
  *dst_ln_ctx2_ptr_t;
Packit Service 72eb06
Packit Service 72eb06
/* Structure for interpreting the bytes following a dst_ln_ctx4 entry.  */
Packit Service 72eb06
typedef struct
Packit Service 72eb06
{
Packit Service 72eb06
    unsigned int          ctx4_index : 29;     /* 29 bit index into context table */
Packit Service 72eb06
    unsigned int          ctx4_run_length : 3; /* 3 bit run length */
Packit Service 72eb06
} dst_ln_ctx4_t,
Packit Service 72eb06
  *dst_ln_ctx4_ptr_t;
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/*  PXDB definitions.
Packit Service 72eb06
  
Packit Service 72eb06
   PXDB is a post-processor which takes the executable file
Packit Service 72eb06
   and massages the debug information so that the debugger may
Packit Service 72eb06
   start up and run more efficiently.  Some of the tasks
Packit Service 72eb06
   performed by PXDB are:
Packit Service 72eb06
  
Packit Service 72eb06
   o   Remove duplicate global type and variable information
Packit Service 72eb06
       from the GNTT,
Packit Service 72eb06
  
Packit Service 72eb06
   o   Append the GNTT onto the end of the LNTT and place both
Packit Service 72eb06
       back in the LNTT section,
Packit Service 72eb06
  
Packit Service 72eb06
   o   Build quick look-up tables (description follows) for
Packit Service 72eb06
       files, procedures, modules, and paragraphs (for Cobol),
Packit Service 72eb06
       placing these in the GNTT section,
Packit Service 72eb06
  
Packit Service 72eb06
   o   Reconstruct the header appearing in the header section
Packit Service 72eb06
       to access this information.
Packit Service 72eb06
  
Packit Service 72eb06
   The "quick look-up" tables are in the $GNTT$ sub-space, in
Packit Service 72eb06
   the following order:
Packit Service 72eb06
  
Packit Service 72eb06
       Procedures    -sorted by address
Packit Service 72eb06
       Source files  -sorted by address (of the
Packit Service 72eb06
                      generated code from routines)
Packit Service 72eb06
       Modules       -sorted by address
Packit Service 72eb06
       Classes       -<unsorted?>
Packit Service 72eb06
       Address Alias -sorted by index 
Packit Service 72eb06
       Object IDs    -sorted by object identifier
Packit Service 72eb06
  
Packit Service 72eb06
   Most quick entries have (0-based) indices into the LNTT tables to
Packit Service 72eb06
   the full entries for the item it describes.
Packit Service 72eb06
  
Packit Service 72eb06
   The post-PXDB header is in the $HEADER$ sub-space.  Alas, it
Packit Service 72eb06
   occurs in different forms, depending on the optimization level
Packit Service 72eb06
   in the compilation step and whether PXDB was run or not. The
Packit Service 72eb06
   worst part is the forms aren't self-describing, so we'll have
Packit Service 72eb06
   to grovel in the bits to figure out what kind we're looking at
Packit Service 72eb06
   (see hp_get_header in hp-psymtab-read.c).  */
Packit Service 72eb06
Packit Service 72eb06
/* PXDB versions.  */
Packit Service 72eb06
Packit Service 72eb06
#define PXDB_VERSION_CPLUSPLUS	1
Packit Service 72eb06
#define PXDB_VERSION_7_4	2
Packit Service 72eb06
#define PXDB_VERSION_CPP_30	3
Packit Service 72eb06
#define PXDB_VERSION_DDE_3_2A	4
Packit Service 72eb06
#define PXDB_VERSION_DDE_3_2	5
Packit Service 72eb06
#define PXDB_VERSION_DDE_4_0	6
Packit Service 72eb06
Packit Service 72eb06
#define PXDB_VERSION_2_1	1
Packit Service 72eb06
Packit Service 72eb06
/* Header version for the case that there is no DOC info
Packit Service 72eb06
   but the executable has been processed by pxdb (the easy
Packit Service 72eb06
   case, from "cc -g").  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct PXDB_struct
Packit Service 72eb06
{
Packit Service 72eb06
  int              pd_entries;   /* # of entries in function look-up table */
Packit Service 72eb06
  int              fd_entries;   /* # of entries in file look-up table */
Packit Service 72eb06
  int              md_entries;   /* # of entries in module look-up table */
Packit Service 72eb06
  unsigned int     pxdbed : 1;   /* 1 => file has been preprocessed      */
Packit Service 72eb06
  unsigned int     bighdr : 1;   /* 1 => this header contains 'time' word */
Packit Service 72eb06
  unsigned int     sa_header : 1;/* 1 => created by SA version of pxdb */
Packit Service 72eb06
			           /*   used for version check in xdb */
Packit Service 72eb06
  unsigned int     inlined: 1;   /* one or more functions have been inlined */
Packit Service 72eb06
  unsigned int     spare:12;
Packit Service 72eb06
  short            version;      /* pxdb header version */
Packit Service 72eb06
  int              globals;      /* index into the DNTT where GNTT begins */
Packit Service 72eb06
  unsigned int     time;         /* modify time of file before being pxdbed */
Packit Service 72eb06
  int              pg_entries;   /* # of entries in label look-up table */
Packit Service 72eb06
  int              functions;    /* actual number of functions */
Packit Service 72eb06
  int              files;        /* actual number of files */
Packit Service 72eb06
  int              cd_entries;   /* # of entries in class look-up table */
Packit Service 72eb06
  int              aa_entries;   /* # of entries in addr alias look-up table */
Packit Service 72eb06
  int              oi_entries;   /* # of entries in object id look-up table */
Packit Service 72eb06
} PXDB_header, *PXDB_header_ptr;
Packit Service 72eb06
Packit Service 72eb06
/* Header version for the case that there is no DOC info and the
Packit Service 72eb06
   executable has NOT been processed by pxdb.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct XDB_header_struct
Packit Service 72eb06
{
Packit Service 72eb06
  long gntt_length; 
Packit Service 72eb06
  long lntt_length; 
Packit Service 72eb06
  long slt_length; 
Packit Service 72eb06
  long vt_length; 
Packit Service 72eb06
  long xt_length; 
Packit Service 72eb06
} XDB_header;
Packit Service 72eb06
Packit Service 72eb06
/* Header version for the case that there is DOC info and the
Packit Service 72eb06
   executable has been processed by pxdb. */
Packit Service 72eb06
Packit Service 72eb06
typedef struct DOC_info_PXDB_header_struct
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int xdb_header: 1; 	      /* bit set if this is post-3.1 xdb */ 
Packit Service 72eb06
  unsigned int doc_header: 1;         /* bit set if this is doc-style header */
Packit Service 72eb06
  unsigned int version: 8;            /* version of pxdb see defines
Packit Service 72eb06
				         PXDB_VERSION_* in this file.  */
Packit Service 72eb06
  unsigned int reserved_for_flags: 16;/* for future use; -- must be 
Packit Service 72eb06
                                         set to zero.  */
Packit Service 72eb06
  unsigned int has_aux_pd_table: 1;   /* $GNTT$ has aux PD table */
Packit Service 72eb06
  unsigned int has_expr_table: 1;     /* space has $EXPR$ */       
Packit Service 72eb06
  unsigned int has_range_table: 1;    /* space has $RANGE$ */       
Packit Service 72eb06
  unsigned int has_context_table: 1;  /* space has $SRC_CTXT$ */    
Packit Service 72eb06
  unsigned int has_lines_table: 1;    /* space contains a $LINES$
Packit Service 72eb06
                                         subspace for line tables.  */
Packit Service 72eb06
  unsigned int has_lt_offset_map: 1;  /* space contains an lt_offset
Packit Service 72eb06
                                         subspace for line table mapping.  */
Packit Service 72eb06
  /* The following fields are the same as those in the PXDB_header in $DEBUG$ */
Packit Service 72eb06
  int           pd_entries;   /* # of entries in function look-up table */
Packit Service 72eb06
  int           fd_entries;   /* # of entries in file look-up table */
Packit Service 72eb06
  int           md_entries;   /* # of entries in module look-up table */
Packit Service 72eb06
  unsigned int  pxdbed : 1;   /* 1 => file has been preprocessed      */
Packit Service 72eb06
  unsigned int  bighdr : 1;   /* 1 => this header contains 'time' word */
Packit Service 72eb06
  unsigned int  sa_header : 1;/* 1 => created by SA version of pxdb */
Packit Service 72eb06
                              /*   used for version check in xdb */
Packit Service 72eb06
  unsigned int  inlined: 1;   /* one or more functions have been inlined */
Packit Service 72eb06
  unsigned int  spare : 28;
Packit Service 72eb06
  int      	globals;      /* index into the DNTT where GNTT begins */
Packit Service 72eb06
  unsigned int  time;         /* modify time of file before being pxdbed */
Packit Service 72eb06
  int           pg_entries;   /* # of entries in label look-up table */
Packit Service 72eb06
  int           functions;    /* actual number of functions */
Packit Service 72eb06
  int           files;        /* actual number of files */
Packit Service 72eb06
  int           cd_entries;   /* # of entries in class look-up table */
Packit Service 72eb06
  int           aa_entries;   /* # of entries in addr alias look-up table */
Packit Service 72eb06
  int           oi_entries;   /* # of entries in object id look-up table */
Packit Service 72eb06
} DOC_info_PXDB_header;
Packit Service 72eb06
Packit Service 72eb06
/* Header version for the case that there is DOC info and the
Packit Service 72eb06
   executable has NOT been processed by pxdb.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct DOC_info_header_struct
Packit Service 72eb06
{
Packit Service 72eb06
  unsigned int xdb_header: 1; 	/* bit set if this is post-3.1 xdb */ 
Packit Service 72eb06
  unsigned int doc_header: 1;     /* bit set if this is doc-style header*/
Packit Service 72eb06
  unsigned int version: 8;      /* version of debug/header 
Packit Service 72eb06
                                   format. For 10.0 the value 
Packit Service 72eb06
                                   will be 1. For "Davis" the value is 2.  */
Packit Service 72eb06
  unsigned int reserved_for_flags: 18; /* for future use; -- must be set to zero.  */
Packit Service 72eb06
  unsigned int has_range_table: 1;     /* space contains a $RANGE$ subspace for variable ranges.  */
Packit Service 72eb06
  unsigned int has_context_table: 1;   /* space contains a $CTXT$ subspace for context/inline table.  */
Packit Service 72eb06
  unsigned int has_lines_table: 1;     /* space contains a $LINES$ subspace for line tables. */
Packit Service 72eb06
  unsigned int has_lt_offset_map: 1;   /* space contains an lt_offset subspace for line table mapping.  */
Packit Service 72eb06
Packit Service 72eb06
  long   gntt_length;  /* same as old header */
Packit Service 72eb06
  long   lntt_length;  /* same as old header */
Packit Service 72eb06
  long   slt_length;   /* same as old header */
Packit Service 72eb06
  long   vt_length;    /* same as old header */
Packit Service 72eb06
  long   xt_length;    /* same as old header */
Packit Service 72eb06
  long   ctxt_length;  /* present only if version >= 2 */
Packit Service 72eb06
  long   range_length; /* present only if version >= 2 */
Packit Service 72eb06
  long   expr_length;  /* present only if version >= 2 */
Packit Service 72eb06
Packit Service 72eb06
} DOC_info_header;
Packit Service 72eb06
Packit Service 72eb06
typedef union GenericDebugHeader_union
Packit Service 72eb06
{
Packit Service 72eb06
   PXDB_header          no_doc;
Packit Service 72eb06
   DOC_info_PXDB_header doc;
Packit Service 72eb06
   XDB_header           no_pxdb_no_doc;
Packit Service 72eb06
   DOC_info_header      no_pxdb_doc;
Packit Service 72eb06
} GenericDebugHeader;
Packit Service 72eb06
Packit Service 72eb06
Packit Service 72eb06
/*  Procedure Descriptor:
Packit Service 72eb06
    An element of the procedure quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_procedure
Packit Service 72eb06
{
Packit Service 72eb06
  long           isym;		/* 0-based index of first symbol
Packit Service 72eb06
                                   for procedure in $LNTT$, 
Packit Service 72eb06
                                   i.e. the procedure itself.  */
Packit Service 72eb06
  CORE_ADDR	 adrStart;	/* memory adr of start of proc	*/
Packit Service 72eb06
  CORE_ADDR	 adrEnd;	/* memory adr of end of proc	*/
Packit Service 72eb06
  char         	*sbAlias;	/* alias name of procedure	*/
Packit Service 72eb06
  char          *sbProc;	/* real name of procedure	*/
Packit Service 72eb06
  CORE_ADDR	 adrBp;		/* address of entry breakpoint  */
Packit Service 72eb06
  CORE_ADDR	 adrExitBp;	/* address of exit breakpoint   */
Packit Service 72eb06
  int            icd;           /* member of this class (index) */	
Packit Service 72eb06
  unsigned int	 ipd;		/* index of template for this   */
Packit Service 72eb06
                                /* function (index)           */
Packit Service 72eb06
  unsigned int	 unused:    5;
Packit Service 72eb06
  unsigned int	 no_lt_offset: 1;/* no entry in lt_offset table */
Packit Service 72eb06
  unsigned int	 fTemplate: 1;	/* function template		*/
Packit Service 72eb06
  unsigned int	 fExpansion: 1;	/* function expansion		*/
Packit Service 72eb06
  unsigned int	 linked	  : 1;	/* linked with other expansions	*/
Packit Service 72eb06
  unsigned int	 duplicate: 1;  /* clone of another procedure   */
Packit Service 72eb06
  unsigned int	 overloaded:1;  /* overloaded function          */
Packit Service 72eb06
  unsigned int	 member:    1;  /* class member function        */
Packit Service 72eb06
  unsigned int	 constructor:1; /* constructor function         */
Packit Service 72eb06
  unsigned int	 destructor:1;  /* destructor function          */
Packit Service 72eb06
  unsigned int   Static:    1;  /* static function              */
Packit Service 72eb06
  unsigned int   Virtual:   1;  /* virtual function             */
Packit Service 72eb06
  unsigned int   constant:  1;  /* constant function            */
Packit Service 72eb06
  unsigned int   pure:      1;  /* pure (virtual) function      */
Packit Service 72eb06
  unsigned int   language:  4;  /* procedure's language         */
Packit Service 72eb06
  unsigned int   inlined:   1;  /* function has been inlined    */
Packit Service 72eb06
  unsigned int   Operator:  1;  /* operator function            */
Packit Service 72eb06
  unsigned int	 stub:      1;  /* bodyless function            */
Packit Service 72eb06
  unsigned int	 optimize:  2;	/* optimization level   	*/
Packit Service 72eb06
  unsigned int	 level:     5;	/* nesting level (top=0)	*/
Packit Service 72eb06
} quick_procedure_entry, *quick_procedure_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/*  Source File Descriptor:
Packit Service 72eb06
    An element of the source file quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_source
Packit Service 72eb06
{
Packit Service 72eb06
  long	         isym;		/* 0-based index in $LNTT$ of
Packit Service 72eb06
                                   first symbol for this file.     */
Packit Service 72eb06
  CORE_ADDR      adrStart;	/* mem adr of start of file's code */
Packit Service 72eb06
  CORE_ADDR      adrEnd;	/* mem adr of end of file's code   */
Packit Service 72eb06
  char	        *sbFile;	/* name of source file		   */
Packit Service 72eb06
  unsigned int   fHasDecl: 1;	/* do we have a .d file?	   */
Packit Service 72eb06
  unsigned int   fWarned:  1;	/* have warned about age problems? */
Packit Service 72eb06
  unsigned int   fSrcfile: 1;   /* 0 => include 1=> source         */
Packit Service 72eb06
  unsigned short ilnMac;	/* lines in file (0 if don't know) */
Packit Service 72eb06
  int	         ipd;		/* 0-based index of first procedure
Packit Service 72eb06
                                   in this file, in the quick
Packit Service 72eb06
                                   look-up table of procedures.    */
Packit Service 72eb06
  unsigned int  *rgLn;		/* line pointer array, if any	   */
Packit Service 72eb06
} quick_file_entry, *quick_file_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/*  Module Descriptor:
Packit Service 72eb06
    An element of the module quick reference table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_module
Packit Service 72eb06
{
Packit Service 72eb06
  long           isym;		   /* 0-based index of first
Packit Service 72eb06
                                      symbol for module.        */
Packit Service 72eb06
  CORE_ADDR	 adrStart;	   /* adr of start of mod.	*/
Packit Service 72eb06
  CORE_ADDR	 adrEnd;	   /* adr of end of mod.	*/
Packit Service 72eb06
  char	        *sbAlias;	   /* alias name of module   	*/
Packit Service 72eb06
  char	        *sbMod;		   /* real name of module	*/
Packit Service 72eb06
  unsigned int   imports:       1; /* module have any imports?  */
Packit Service 72eb06
  unsigned int   vars_in_front: 1; /* module globals in front?  */
Packit Service 72eb06
  unsigned int   vars_in_gaps:  1; /* module globals in gaps?   */
Packit Service 72eb06
  unsigned int   language:      4; /* type of language          */
Packit Service 72eb06
  unsigned int   unused      : 25;
Packit Service 72eb06
  unsigned int   unused2;	   /* space for future stuff	*/
Packit Service 72eb06
} quick_module_entry, *quick_module_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/*  Auxiliary Procedure Descriptor:
Packit Service 72eb06
    An element of the auxiliary procedure quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_aux_procedure
Packit Service 72eb06
{
Packit Service 72eb06
  long	 isym_inln;	/* start on inline list for proc */
Packit Service 72eb06
  long   spare;
Packit Service 72eb06
} quick_aux_procedure_entry, *quick_aux_procedure_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/*  Paragraph Descriptor:
Packit Service 72eb06
    An element of the paragraph quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_paragraph
Packit Service 72eb06
{
Packit Service 72eb06
  long             isym;       /* first symbol for label (index)  */
Packit Service 72eb06
  CORE_ADDR        adrStart;   /* memory adr of start of label    */
Packit Service 72eb06
  CORE_ADDR        adrEnd;     /* memory adr of end of label      */
Packit Service 72eb06
  char            *sbLab;      /* name of label                   */
Packit Service 72eb06
  unsigned int     inst;       /* Used in xdb to store inst @ bp  */
Packit Service 72eb06
  unsigned int     sect:    1; /* true = section, false = parag.  */
Packit Service 72eb06
  unsigned int     unused: 31; /* future use                      */
Packit Service 72eb06
} quick_paragraph_entry, *quick_paragraph_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/* Class Descriptor:
Packit Service 72eb06
   An element of the class quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_class
Packit Service 72eb06
{
Packit Service 72eb06
  char	         *sbClass;	/* name of class	        */
Packit Service 72eb06
  long            isym;         /* class symbol (tag)           */
Packit Service 72eb06
  unsigned int	  type : 2;	/* 0=class, 1=union, 2=struct   */
Packit Service 72eb06
  unsigned int	  fTemplate : 1;/* class template               */
Packit Service 72eb06
  unsigned int	  expansion : 1;/* template expansion           */
Packit Service 72eb06
  unsigned int	  unused    :28;
Packit Service 72eb06
  sltpointer      lowscope;	/* beginning of defined scope   */
Packit Service 72eb06
  sltpointer      hiscope;	/* end of defined scope         */
Packit Service 72eb06
} quick_class_entry, *quick_class_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/* Address Alias Entry
Packit Service 72eb06
   An element of the address alias quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_alias
Packit Service 72eb06
{
Packit Service 72eb06
  CORE_ADDR     low;
Packit Service 72eb06
  CORE_ADDR     high;
Packit Service 72eb06
  int           index;
Packit Service 72eb06
  unsigned int	unused : 31;
Packit Service 72eb06
  unsigned int	alternate : 1;	/* alternate unnamed aliases?   */
Packit Service 72eb06
} quick_alias_entry, *quick_alias_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
/* Object Identification Entry
Packit Service 72eb06
   An element of the object identification quick look-up table.  */
Packit Service 72eb06
Packit Service 72eb06
typedef struct quick_obj_ID
Packit Service 72eb06
{
Packit Service 72eb06
  CORE_ADDR    obj_ident;	/* class identifier         */
Packit Service 72eb06
  long         isym;		/* class symbol             */
Packit Service 72eb06
  long         offset;		/* offset to object start   */
Packit Service 72eb06
} quick_obj_ID_entry, *quick_obj_ID_entry_ptr;
Packit Service 72eb06
Packit Service 72eb06
#endif /* HP_SYMTAB_INCLUDED */