1 <!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML 3.0//EN"><HTML><HEAD><TITLE>High Level Languages Debug Table Documentation
</TITLE> <META HTTP-EQUIV=
"updated" CONTENT=
"1996-07-08"><META HTTP-EQUIV=
"review" CONTENT=
"1997-07-08"><META HTTP-EQUIV=
"expires" CONTENT=
"1998-07-08"></HEAD><BODY><A NAME=Top_Of_Page
> </A><H1>High Level Languages Debug Table Documentation
</H1><P>Alan Boxall
<BR><P>Alan Boxall
<BR>Date of Issue
: December
15,
1995<P><ADDRESS>3T/
438/
1150/TOR
<BR>SWS Division Toronto Laboratory
<BR>IBM Canada Ltd.
<BR></ADDRESS><HR><P><H2><A NAME=ToC
>Table of Contents
</A></H2><P><P><B><A NAME=ToC_1
HREF=
"#Header_1">Document Control Information
</A></B><BR><P><B><A NAME=ToC_5
HREF=
"#HDRFIGLIST_START">Figures
</A></B><BR><P><B><A NAME=ToC_6
HREF=
"#HDRDBINTRO">Introduction
</A></B><BR><P><B><A NAME=ToC_7
HREF=
"#HDRDBGEN">32-bit Object Module Format General Requirements
</A></B><BR><MENU><MENU><LI><A NAME=ToC_8
HREF=
"#Header_8">PUBDEF, COMDEF, EXTDEF Records
</A> <LI><A NAME=ToC_9
HREF=
"#Header_9">COMENT Record
</A> <LI><A NAME=ToC_10
HREF=
"#Header_10">LNAMES Record
</A> <LI><A NAME=ToC_11
HREF=
"#Header_11">SEGDEF Record
</A> <LI><A NAME=ToC_12
HREF=
"#Header_12">Order of Debug Info Records
</A></MENU></MENU><P><B><A NAME=ToC_13
HREF=
"#HDRDBSYMBL">Symbol Scope Table
</A></B><BR><MENU><MENU><LI><A NAME=ToC_14
HREF=
"#Header_14">Symbol Scope Table Sub-Record Definitions
</A></MENU></MENU><P><B><A NAME=ToC_45
HREF=
"#HDRDBTYPE">Type Table
</A></B><BR><MENU><MENU><LI><A NAME=ToC_46
HREF=
"#HDRTTEINDX">Type Index Formats
</A> <LI><A NAME=ToC_47
HREF=
"#HDRTTENAME">Name Length Formats
</A> <LI><A NAME=ToC_48
HREF=
"#HDRTTEPRIM">Primitive Types Values
</A> <LI><A NAME=ToC_49
HREF=
"#HDRTTECPLX">Complex Types Values
</A> <LI><A NAME=ToC_50
HREF=
"#HDRTTEFLDI">Field ID Values
</A> <LI><A NAME=ToC_51
HREF=
"#HDRTTEDEFN">Type Table Entry Definitions
</A></MENU></MENU><P><B><A NAME=ToC_82
HREF=
"#HDRDBLINUM">Line Number Table
</A></B><BR><MENU><MENU><LI><A NAME=ToC_83
HREF=
"#HDRDBLPATH">Path Table
</A> <LI><A NAME=ToC_84
HREF=
"#HDRDBLFILE">File Names Table
</A></MENU></MENU><P><B><A NAME=ToC_85
HREF=
"#HDRDBLXSEC">Appendix A. LX Format Debug Section Description
</A></B><BR><MENU><LI><A NAME=ToC_86
HREF=
"#Header_86">Overview
</A> <LI><A NAME=ToC_87
HREF=
"#Header_87">Subsection Descriptions
</A></MENU><HR><P><P><STRONG>Synopsis
:</STRONG><P><P><B>Abstract
</B><P>This document describes the format of the debug information generated by the compiler and used by the debugger to allow source level debugging.
<P><P><H1><A NAME=
"Header_1" HREF=
"#ToC_1">Document Control Information
</A></H1><TABLE BORDER
><TR><TH ALIGN=LEFT
>Notice
</TH><TR><TD><P>The official version of this document is kept in the file HLLDBG LIST3820 on the DOC LEXTRAN disk. To obtain a copy of this official version, contact the owner.
<P>Other formats available are
:<UL><P><LI>HLLDBG PS - postscript
<P><LI>HLLDBG HTML - HTML version
3 format
</UL><P>Users of this document are personally responsible for using the official version and for verifying that any copies of the document, in whole or in part, are of the official version. If this document is not a copy of the official version, it is obsolete.
</TD></TR></TABLE><P><H4><A NAME=
"Header_2">Current Authors/Updaters List
</A></H4><UL><P><LI>Alan Boxall
</UL><P><H4><A NAME=
"Header_3">Approver List
</A></H4><DL><P><DT>Date Approved
<DD>Name, Position/Area
<P><DT>06/
01/
96<DD>Alan Boxall, Debug Architect/D438
</DL><P><H4><A NAME=
"Header_4">Revision History/Summary of Changes
</A></H4><DL><P><DT>Date
<DD>Description
<P><DT>12/
15/
95<DD>Initial draft version written by John Mehl (Lexington)
<P><DT>06/
20/
96<DD>Remove old revision flags/conditionals used by Lexington
<P><DT>07/
08/
96<DD>Increased size of
"Number of Segments" in the LX Debug format.
</DL><P><H1><A NAME=
"HDRFIGLIST_START" HREF=
"#ToC_5">Figures
</A></H1><OL><LI><A HREF=
"#TBLDEBRECS">Debugger Required OMF-
32 Record Types
</A></LI> <LI><A HREF=
"#FIGDBFSYMR">Symbol Scope Table Record Format
</A></LI> <LI><A HREF=
"#FIGDBFSYME">Symbol Scope Table Sub-Record -- General Format
</A></LI> <LI><A HREF=
"#FIGDBFSXMC">Symbol Scope Table Sub-Record -- Typical Organization for C
</A></LI> <LI><A HREF=
"#FIGDBFSBEG">Symbol Scope Table Sub-Record -- Begin
</A></LI> <LI><A HREF=
"#FIGDBFSPRC">Symbol Scope Table Sub-Record -- Procedure, Entry, Member Function
</A></LI> <LI><A HREF=
"#FIGDBFSEND">Symbol Scope Table Sub-Record -- End
</A></LI> <LI><A HREF=
"#FIGDBFSDEF">Symbol Scope Table Sub-Record -- Auto
</A></LI> <LI><A HREF=
"#FIGDBFSSTA">Symbol Scope Table Sub-Record -- Static
</A></LI> <LI><A HREF=
"#FIGDBFTLS">Symbol Scope Table Sub-Record -- TLS
</A></LI> <LI><A HREF=
"#FIGDBFSCOD">Symbol Scope Table Sub-Record -- CodeLabel
</A></LI> <LI><A HREF=
"#FIGDBFSREG">Symbol Scope Table Sub-Record -- Reg
</A></LI> <LI><A HREF=
"#FIGREGREL">Symbol Scope Table Sub-Record -- RegRelative
</A></LI> <LI><A HREF=
"#FIGDBFSCON">Symbol Scope Table Sub-Record -- Constant
</A></LI> <LI><A HREF=
"#FIGDBCHSEG">Symbol Scope Table Sub-Record -- ChangSeg
</A></LI> <LI><A HREF=
"#FIGDBFSTDF">Symbol Scope Table Sub-Record -- Typedef
</A></LI> <LI><A HREF=
"#FIGDBFSPUB">Symbol Scope Table Sub-Record -- Public
</A></LI> <LI><A HREF=
"#FIGDBFSMEM">Symbol Scope Table Sub-Record -- Member
</A></LI> <LI><A HREF=
"#FIGDBFSBAS">Symbol Scope Table Sub-Record -- Based
</A></LI> <LI><A HREF=
"#FIGDBFSBSM">Symbol Scope Table Sub-Record -- Based with Member
</A></LI> <LI><A HREF=
"#FIGDBFARYS">Symbol Scope Table Sub-Record -- Array Symbol Record
</A></LI> <LI><A HREF=
"#FIGDBFSTAG">Symbol Scope Table Sub-Record -- Tag
</A></LI> <LI><A HREF=
"#FIGDBFSMAP">Symbol Scope Table Sub-Record -- Map
</A></LI> <LI><A HREF=
"#FIGDBFSTAB">Symbol Scope Table Sub-Record -- Table
</A></LI> <LI><A HREF=
"#FIGDBFSCUI">Symbol Scope Table Sub-Record -- CuInfo
</A></LI> <LI><A HREF=
"#FIGCLASSSR">Symbol Scope Table Sub-Record -- Tag2
</A></LI> <LI><A HREF=
"#FIGCPPSR">Symbol Scope Table Sub-Record -- AutoScoped
</A></LI> <LI><A HREF=
"#FIGSTATSR">Symbol Scope Table Sub-Record -- StaticScoped
</A></LI> <LI><A HREF=
"#FIGDBFTYPR">Type Table Record Format
</A></LI> <LI><A HREF=
"#FIGDBFTYSR">Type Table Entry Sub-Record -- General Format
</A></LI> <LI><A HREF=
"#FIGDBFTYSP">Type Table Entry Sub-Record -- Specific Data Format
</A></LI> <LI><A HREF=
"#Table_32">Type Table Entry Sub-Record - Area
</A></LI> <LI><A HREF=
"#Table_33">Type Table Entry Sub-Record - Array
</A></LI> <LI><A HREF=
"#Table_34">Type Table Entry Sub-Record - Base Class
</A></LI> <LI><A HREF=
"#Table_35">Type Table Entry Sub-Record - Bit string
</A></LI> <LI><A HREF=
"#Table_36">Type Table Entry Sub-Record - Character String
</A></LI> <LI><A HREF=
"#Table_37">Type Table Entry Sub-Record - Class
</A></LI> <LI><A HREF=
"#Table_38">Type Table Entry Sub-Record - Class Definition
</A></LI> <LI><A HREF=
"#Table_39">Type Table Entry Sub-Record - Class Member
</A></LI> <LI><A HREF=
"#Table_40">Type Table Entry Sub-Record - Code label
</A></LI> <LI><A HREF=
"#Table_41">Type Table Entry Sub-Record - Entry
</A></LI> <LI><A HREF=
"#Table_42">Type Table Entry Sub-Record - Enum
</A></LI> <LI><A HREF=
"#Table_43">Type Table Entry Sub-Record - File
</A></LI> <LI><A HREF=
"#Table_44">Type Table Entry Sub-Record - Format label
</A></LI> <LI><A HREF=
"#Table_45">Type Table Entry Sub-Record - Friend
</A></LI> <LI><A HREF=
"#Table_46">Type Table Entry Sub-Record - Function
</A></LI> <LI><A HREF=
"#Table_47">Type Table Entry Sub-Record - Graphic
</A></LI> <LI><A HREF=
"#Table_48">Type Table Entry Sub-Record - Logical
</A></LI> <LI><A HREF=
"#Table_49">Type Table Entry Sub-Record - Macro
</A></LI> <LI><A HREF=
"#Table_50">Type Table Entry Sub-Record - Member Function
</A></LI> <LI><A HREF=
"#Table_51">Type Table Entry Sub-Record - Member Pointer
</A></LI> <LI><A HREF=
"#Table_52">Type Table Entry Sub-Record - Picture
</A></LI> <LI><A HREF=
"#Table_53">Type Table Entry Sub-Record - Pointer
</A></LI> <LI><A HREF=
"#Table_54">Type Table Entry Sub-Record - Procedure
</A></LI> <LI><A HREF=
"#Table_55">Type Table Entry Sub-Record - Reference
</A></LI> <LI><A HREF=
"#Table_56">Type Table Entry Sub-Record - Scalars
</A></LI> <LI><A HREF=
"#Table_57">Type Table Entry Sub-Record - Set of
</A></LI> <LI><A HREF=
"#Table_58">Type Table Entry Sub-Record - Stack
</A></LI> <LI><A HREF=
"#Table_59">Type Table Entry Sub-Record - Structure/Union/Record
</A></LI> <LI><A HREF=
"#Table_60">Type Table Entry Sub-Record - Subrange
</A></LI> <LI><A HREF=
"#Table_61">Type Table Entry Sub-Record - User Defined Type
</A></LI> <LI><A HREF=
"#FIGDBFLINT">Line Number Table -- Overview
</A></LI> <LI><A HREF=
"#FIGDBFLHDR">Line Number Table Record -- Header
</A></LI> <LI><A HREF=
"#FIGDBFFLNE">Line Number Table First Entry
</A></LI> <LI><A HREF=
"#FIGDBFLENT">Line Number Entries
</A></LI> <LI><A HREF=
"#FIGDBFPATH">Path Table Entry
</A></LI> <LI><A HREF=
"#FIGDBFFILE">File Names Table
</A></LI></OL><HR><H1><A NAME=
"HDRDBINTRO" HREF=
"#ToC_6">Introduction
</A></H1><P>The HLL Debug Tables described in this this document are generated by the following compilers
:<UL><P><LI>IBM C Set/
2<P><LI>IBM C Set++
<P><LI>VisualAge C++
<P><LI>COBOL VisualAge
<P><LI>VRPG compilers
</UL><P>The following debuggers from IBM make use of the HLL Debug Tables.
<UL><P><LI>IPMD, PMD, PM Debugger or Presentation Manager Debugger refer to the CSET debugger or the IBM VisualAge Debugger.
</UL><P>The tables are designed to support multiple languages. however, only the compilers listed above are currently supported by the IBM VisualAge Debugger. References to other languages, including PL/X
<A HREF=
"#FNFNPLX">(
1)
</A>, are general in nature and imply no specific product plans.
<P>Additional copies of this document, if required, should be requested from the author, whose address is on the title page.
<P>IBM reserves the right to change the HLL Debug Tables as required to support the IBM languages Tools products.
<P>The HLL Debug Tables are organized into three segments
:<OL COMPACT
><LI>Symbol information
<LI>Type information
<LI>Line Number information
</OL>When these optional HLL Debug Tables are generated, the IBM VisualAge Debugger also expects specific information to be present in other
32-bit Object Module Format records.
<P>The record formats described in the remainder of this document are read from the EXE and DLL executable files generated by the Linker. The Linker program copies the records from the compiler generated object files without modification, except for FIXUPPs, and saves the
"HLL Style" information in the Debug section directory (see
<A HREF=
"#HDRDBLXSEC">Appendix A.
"LX Format Debug Section Description"</A>). The PM Debugger reads the information, as required during a debug session, after the executables have been loaded.
<P>The remainder of this document first discusses the information IBM VisualAge Debugger expects in the standard
32-bit Object Module Format records, then the format of the debugger specific records.
<HR><H1><A NAME=
"HDRDBGEN" HREF=
"#ToC_7">32-bit Object Module Format General Requirements
</A></H1><P>The
32-bit Object Module Format (OMF-
32) defines the records contained in the OBJ file, the primary output of the HLL compilers and primary source of debug information (after Linker processing) for PMD.
<P>The OBJ file contains all of the information required by PMD to allow a user to debug a HLL program at the source code and/or listing level. The OMF-
32 record types required by the debugger listed in
<A HREF=
"#TBLDEBRECS">Figure
1.
</A>.
<BR><P><B><A NAME=
"TBLDEBRECS">Figure
1. Debugger Required OMF-
32 Record Types
</A></B><BR><TABLE BORDER
><TR><TH ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>Record
<BR>Type
</TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>Record
<BR>Name
</TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
71%
> <BR>Information
</TH></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>91</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>PUBDEF
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>type information.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>8C
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>EXTDEF
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>type information.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>B0
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>COMDEF
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>type information.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>88</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>COMENT
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>debug style information.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>96</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>LNAMES
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>debug segment names.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>99</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>SEGDEF
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>debug segment definitions.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>A0, A1
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>LEDATA
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>$$SYMBOLS and $$TYPES segments.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>9D
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>FIXUPP
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>must be present for symbols and types LEDATA records.
</TD></TR><TR><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>95</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
15%
>LINNUM
</TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
71%
>line number / offset table.
</TD></TR></TABLE><P>The $$SYMBOLS, $$TYPES, and LINNUM records are defined in
<A HREF=
"#HDRDBSYMBL">"Symbol Scope Table"</A>,
<A HREF=
"#HDRDBTYPE">"Type Table"</A>, and
<A HREF=
"#HDRDBLINUM">"Line Number Table"</A>, respectively. PMD dependencies on the other record types are described in the sections that follow.
<P><H3><A NAME=
"Header_8" HREF=
"#ToC_8">PUBDEF, COMDEF, EXTDEF Records
</A></H3><P>Standard PUBDEF and EXTDEF records for public variables are expected. The TypInd (Type Index) field is assumed null for all records. It is not used by PM Debugger.
<P>The PUBDEF and EXTDEF records contain all the external symbols defined or referenced in the user program. EXTDEF records are for unresolved references.
<P>Standard COMDEF records are allowed for communal variables. The TypInd field is the same as that for PUBDEF/EXTDEF records.
<P>The names in the PUBDEF/EXTDEF/COMDEF records may be mangled names if a C++ program has been compiled; therefore, must be
"interpreted" using a compiler supplied demangler routine. If the
"full" mangled name exceeds the space available in a record, only the class and function name can be derived from the mangled name. Argument information may be incomplete.
<P><H3><A NAME=
"Header_9" HREF=
"#ToC_9">COMENT Record
</A></H3><P>A COMENT record with Comment Class x'A1' (Symbolic Debug Information) must be present in the OBJ with the following commentary byte string
:<UL><P><LI><B>4,'H','L'
</B> for HLL Style Debug Tables
<P>where the first byte is the binary version number; the second and third bytes are the ASCII codes for the characters 'H' and 'L'.
1 was the orginal version. Version
2 is an interim version number, used only for early alloc_text pragma support. Starting with version
3, the version number in this record will match the version number in the document title.
</UL><P>A COMENT record with Comment Class x'A2' (Link Pass) must be present with subclass value of
1, as documented in the OMF-
32 definition.
<P><B>Note:
</B>This record is optional, but improves linkage editor performance.
<P><H3><A NAME=
"Header_10" HREF=
"#ToC_10">LNAMES Record
</A></H3><P>A standard LNAMES record must be in the OBJ. It should include LNAMES for
:<DL COMPACT
><DT>$$SYMBOLS
<DD>The segment name of the symbols segment.
<DT>DEBSYM
<DD>The class name of the symbols segment.
<DT>$$TYPES
<DD>The segment name of the types segment.
<DT>DEBTYP
<DD>The class name of the types segment.
</DL><P><H3><A NAME=
"Header_11" HREF=
"#ToC_11">SEGDEF Record
</A></H3><P>Standard SEGDEF records must be present for both the symbols segment and the types segment.
<UL><P><LI>Class names
"DEBSYM" and
"DEBTYP"<P><LI>Segment names
"$$SYMBOL" and
"$$TYPES"</UL><P><H3><A NAME=
"Header_12" HREF=
"#ToC_12">Order of Debug Info Records
</A></H3><P>The record order is chosen so that linkage editor passes through an object module are minimized. The following order must be maintained for proper passing of the debug information to the executable module.
<P><P><OL><P><I>Identifier record(s)
</I><P><LI>THEADR
<P><I>Link Pass one records
</I><P><LI>COMENT identifying debug format
<P><LI>LNAMES providing ordered name list
<P><LI>SEGDEF providing ordered list of program segments
<P><LI>GRPDEF providing ordered list of logical segments
<P><LI>PUBDEF locating and naming public symbols
<P><LI>COMDEF, LCOMDEF, COMFIX, EXTDEF, and LEXTDEF records, ordered. This group of records is ordered jointly (may be referenced by external index in FIXUPP).
<P><I>Link pass separator
</I><P><LI>COMENT (Comment Class x'A2') indicating that only text, fixups, line number, and the modend record follow (optional). Indicates end of
"link phase 1" records.
<P><I>Link pass two records
</I><P><LI>LEDATA record(s) for $$SYMBOLS segment and corresponding FIXUPP record(s).
<P><LI>LINNUM providing line number and program offset association.
<P><LI>LEDATA record(s) for $$TYPES segment and corresponding FIXUPP record(s).
<P><I>Terminator
</I><P><LI>MODEND indicating end of module, optional start address.
</OL><HR><H1><A NAME=
"HDRDBSYMBL" HREF=
"#ToC_13">Symbol Scope Table
</A></H1><P>The Symbol Scope Table contains the symbolic information required by the debugger to display and alter a program's
"local" variables. The Symbol Scope Table (SST) contains the local (automatic or stack) variables and non-public static variables for a program, including the scoping information for those variables. Public variables are contained in the PUBDEF, COMDEF, or EXTDEF records. They are assumed to have a
"program-wide" scope.
<P>The $$SYMBOLS (DEBSYM) records are built by each HLL compiler to communicate the Symbol Scope Table to PM Debugger via the Linker. These records are stored in the OBJ file by the compilers when the compilers' debug option is specified by the user. The Linker copies the records to the Debug section of the EXE file for reference by PMD while the program is being debugged by the user. The $$SYMBOLS records are stored in the OBJ as LEDATA records, whose format is described in the OMF-
32<A HREF=
"#FNFNOMF">(
2)
</A> Definition, with a segment index pointing to the SEGDEF record for $$SYMBOLS (SegName = '$$SYMBOLS'; ClassName = 'DEBSYM').
<P>Each LEDATA record can contain no more than
1024 bytes, including a checksum byte. It is recommended that records be ended at
"logical" boundaries between sub-records. The Linker will copy the records to the .EXE file in the order stored in the OBJ file. PMD will read the records in the order stored in the .EXE file, concatenating each record to the previous to make a contiguous table in storage. The
"Symbol Scope Table records" in the .EXE file are
<I>not
</I> loaded with the program when the program is started by OS/
2.
<P><B>Note:
</B>All
"offsets" must have a companion FIXUPP record immediately following the containing LEDATA record. See the OMF-
32 Definition for details. Typically, sub-record types
<B>Proc
</B> and
<B>Static
</B> contain segment offsets.
<P><B><A NAME=
"FIGDBFSYMR">Figure
2. Symbol Scope Table Record Format
</A></B><BR><P><BR><PRE>
2 +---------------------------------------+
5 +---------------------------------------+
7 | Symbol Table Sub-Records |
14 +---------+-----------------------------+
18 </PRE><BR><P><P>The Symbol Scope Table is a collection of sub-records organized to provide a representation of the program in the OBJ file containing this Symbol Scope Table, as shown in
<A HREF=
"#FIGDBFSYMR">Figure
2.
</A>. See the OMF-
32 Definition for a description of the LEDATA Header. The order of the individual sub-records is important. PMD determines the scope of automatic and non-public static variables based on the order of the sub-records. See
<A HREF=
"#FIGDBFSXMC">Figure
4.
</A> for a
"typical" Symbol Scope Table organization. A Compile Unit Information record must be the first sub-record. A Change Default Segment sub-record must precede the first Procedure sub-record.
<P>The Symbol Scope Table is designed to support complete debugging of nested blocks. The Symbol Scope Table Sub-Records are designed to support the scoping rules of C and PL/I.
<P><B>Note:
</B>It is assumed here that other HLL compiler scoping rules are similar and can be represented within the structure described here.
<P>The format of the Symbol Scope Table Sub-Record is shown in
<A HREF=
"#FIGDBFSYME">Figure
3.
</A>. The
"Type" field identifies the type of sub-record. Each sub-record has a unique format as described in
<A HREF=
"#FIGDBFSBEG">Figure
5.
</A> through
<A HREF=
"#FIGSTATSR">Figure
28.
</A>. Each sub-record is length-prefixed with an encoded-length of one or two bytes, with the length (Len) field containing the number of bytes in the sub-record (excluding the length field byte(s)). PMD interprets the encoded-length as follows
:<P><PRE>
20 FirstByte = *(LenFldPtr++);
24 SecondByte = *LenFldPtr;
25 Length = ((FirstByte &
0x7F) <<
8) + SecondByte;
32 </PRE><P><B><A NAME=
"FIGDBFSYME">Figure
3. Symbol Scope Table Sub-Record -- General Format
</A></B><BR><P><BR><PRE>
34 +----+----+-------------------------------------------------+
35 | Len|Type| Sub-Record Specific Data |
37 +----+----+-------------------------------------------------+
41 </PRE><BR><P><P>The supported sub-record types (hex values) are
:<DL COMPACT
><DT>Begin
<DD>00 - Begin block ({ in C; Begin or first executable statement in a PL/X-
86 procedure)
<DT>Proc
<DD>01 - Procedure (function in C; Proc in PL/X-
86)
<DT>End
<DD>02 - End block or End procedure
<DT>Auto
<DD>04 - Automatic (Scoped) variable (local in C; AUTOMATIC in PL/X-
86)
<DT>Static
<DD>05 - Static variable (static in C; STATIC non-external in PL/X-
86)
<DT>TLS
<DD>06 - Thread Local Storage variable
<BR><DT>CodeLabel
<DD>0B - Code Label
<DT>With
<DD>0C - With Start Symbol
<BR>not used by PM Debugger.
<DT>Reg
<DD>0D - Register variable (register in C; ???? in PL/X-
86)
<BR><DT>Constant
<DD>0E - Constant Symbol (CONSTANT in PL/X-
86)
<DT>Entry
<DD>0F - Secondary Entry (ENTRY in PL/X-
86)
<DT>Skip
<DD>10 - Skip Record (for future incremental Link capability)
<BR>Not used by PM Debugger.
<DT>ChangSeg
<DD>11 - Change Default Segment (for C alloc_text pragma).
<DT>Typedef
<DD>12 - User Defined Type (typedef in C)
<DT>Public
<DD>13 - Public reference to
"major" structure, Table or Multiply Occuring Data Structure
<DT>Member
<DD>14 - member of
"major" or
"minor" structure
<DT>Based
<DD>15 - Based variables
<DT>Tag
<DD>16 - Tags used in structure, union, record, enum, etc.
<DT>Table
<DD>17 - Table or Multiply Occuring Data Structure (for RPG)
<DT>Map
<DD>18 - Map external variable (for C)
<DT>Tag2
<DD>19 - Extended Tag (long names)
<DT>MemFunc
<DD>1A - Member Function (for C++)
<DT>AutoScoped
<DD>1B - Scoped Automatic Variable (for C++)
<BR>not used by PM Debugger.
<DT>StaticScoped
<DD>1C - Scoped Static Variable (for C++)
<BR>not used by PM Debugger.
<DT>Proc2
<DD>1D - Extended Proc (long names)
<DT>Static2
<DD>1E - Extended Static (long names)
<DT>RegRelative
<DD>20 - Register Relative for use by conversion routines
<DT>BasedMember
<DD>21 - Based with Offset variable
<DT>ArraySym
<DD>22 - Array Symbol Record
<DT>CuInfo
<DD>40 - Compile Unit Information (compiler ID, compiler options, etc.)
<DT>CuFuncNum
<DD>41 - Reserved for use by compiler for Function Name List
</DL><P><B><A NAME=
"FIGDBFSXMC">Figure
4. Symbol Scope Table Sub-Record -- Typical Organization for C
</A></B><BR><TABLE BORDER
><TR><TD><BR><PRE>
44 -- C example -- -- Symbol Scope Subrecords --
45 CuInfo (Compile Unit Information)
46 ChangSeg (Change Default Segment)
49 3 main (void) Proc (main)
57 11 static int X; Static (X)
59 13 P1 (int B, int X) Proc (P1)
63 17 static int D; Static (D)
70 24 static int E; Static (E)
72 26 P2 (void) Proc (P2)
76 30 int A; End (Block0)
78 CuInfo (Compile Unit Information)
80 Along with main, P1 and p2, A in line
2 will also be shown as Public
83 </PRE><BR></TD></TR></TABLE><P><P><P><H3><A NAME=
"Header_14" HREF=
"#ToC_14">Symbol Scope Table Sub-Record Definitions
</A></H3><P><H5><A NAME=
"Header_15">Begin Block
</A></H5><P><B><A NAME=
"FIGDBFSBEG">Figure
5. Symbol Scope Table Sub-Record -- Begin
</A></B><BR><P><BR><PRE>
85 +----+----+-------------------+-------------------+
86 | Len|Type| segment offset | Length of block |
88 +----+----+-------------------+-------------------+
94 .-+----+------------------------+
95 |Len | Name of Block |
97 .-+----+------------------------+
101 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>The length of the block is measured in bytes
<P><LI>Name of Block (and its length) is optional
</UL></DL><P><H5><A NAME=
"Header_16">Procedure
</A></H5><P><H5><A NAME=
"Header_17">Secondary Entry
</A></H5><P><H5><A NAME=
"Header_18">Member Function
</A></H5><P><H5><A NAME=
"Header_19">Extended Procedure
</A></H5><P><B><A NAME=
"FIGDBFSPRC">Figure
6. Symbol Scope Table Sub-Record -- Procedure, Entry, Member Function
</A></B><BR><P><BR><PRE>
103 +----+----+-------------------+---------+-------------------+-
104 | Len|Type| segment offset | Type | Length of Proc |
106 +----+----+-------------------+---------+-------------------+-
111 .-+---------+-------------------+---------+----+-
112 |Length of| Length of prologue| Class |Near|
113 | Prologue| plus Body | Type |/Far|
114 .-+---------+-------------------+---------+----+-
119 .-+----+------------------------+
120 |Len | Name of Procedure |
122 .-+----+------------------------+
126 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><BR><P><LI>All
"Length" fields in this sub-record are measured in bytes.
<BR><P><LI>The same sub-record format is used for Procedure, Secondary Entry, and Proc2 sub-record types. For Member Function sub-records, the Class Type field is also required.
<P><LI>Segment offset, initially zero, is resolved by the Linker using a FIXUPP record that must follow the record containing this sub-record.
<P><LI>Length of Prologue is the offset to the first executable instruction associated with the first user source statement.
<P><LI>Length of Prologue plus Body is the offset to the first executable instruction following the last user source statment (epilogue code).
<P><LI>The Near/Far field indicates the type of return made by the Procedure or Entry. It has the following values
<DL COMPACT
><DT>0 -
<DD>16-bit near (offset-
16)
<DT>4 -
<DD>16-bit far (segment-
32)
<DT>8 -
<DD>32-bit near (offset-
32)
<DT>C -
<DD>32-bit far (segment-
48)
<BR><B>Note
:</B> Only used for Ring
3 Call Gate accessible code.
<BR><B>Note
:</B> Not used by PM Debugger.
</DL><P><LI>The Symbol Name length prefix is encoded, the same as the symbol sub-record length encoding described in
<A HREF=
"#HDRDBSYMBL">"Symbol Scope Table"</A>, only for Member Function and Extended Procedure sub-records.
<P><LI>The Member Function sub-record and Extended Procedure sub-record Name fields may be mangled; therefore, they must be
"interpreted" using a compiler supplied demangler routine.
</UL></DL><P><H5><A NAME=
"Header_20">End of Procedure or Block
</A></H5><P><B><A NAME=
"FIGDBFSEND">Figure
7. Symbol Scope Table Sub-Record -- End
</A></B><BR><P><BR><PRE>
135 </PRE><BR><P><P><H5><A NAME=
"Header_21">Automatic Variable
</A></H5><P><B><A NAME=
"FIGDBFSDEF">Figure
8. Symbol Scope Table Sub-Record -- Auto
</A></B><BR><P><BR><PRE>
137 +----+----+-------------------+---------+----+-------------------+
138 | Len|Type| Offset Into Stack | Type |Len | Symbol Name |
139 | | | Frame | Index |Name| |
140 +----+----+-------------------+---------+----+-------------------+
144 </PRE><BR><P><P><H5><A NAME=
"Header_22">Static Variable
</A></H5><P><H5><A NAME=
"Header_23">Static2
</A></H5><P><B><A NAME=
"FIGDBFSSTA">Figure
9. Symbol Scope Table Sub-Record -- Static
</A></B><BR><P><BR><PRE>
146 +----+----+-------------------+---------+---------+----+-------------------+
147 | Len|Type| Segment offset | Segment | Type |Len | Symbol Name |
148 | | | | Address| Index |Name| |
149 +----+----+-------------------+---------+---------+----+-------------------+
153 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>Segment offset, initially zero, is resolved by the Linker using a FIXUPP record that must follow the record containing this sub-record.
<BR><P><LI>Segment Address is an index into the SEGDEF records.
<P><LI>The Symbol Name length prefix is encoded, the same as the symbol sub-record length encoding described in
<A HREF=
"#HDRDBSYMBL">"Symbol Scope Table"</A>, only for Extended Static (Static2) sub-records.
<P><LI>The Static2 Symbol Name may be mangled; therefore, it must be
"interpreted" using a compiler supplied demangler routine.
</UL></DL><P><H5><A NAME=
"Header_24">Thread Local Storage Variable
</A></H5><P><B><A NAME=
"FIGDBFTLS">Figure
10. Symbol Scope Table Sub-Record -- TLS
</A></B><BR><P><BR><PRE>
155 +----+----+-------------------+---------+---------+----+-------------------+
156 | Len|Type| Offset into thread| reserved| Type |Len | Symbol Name |
157 | | | local storage | | Index |Name| |
158 +----+----+-------------------+---------+---------+----+-------------------+
162 </PRE><BR><P><P><H5><A NAME=
"Header_25">Code Label
</A></H5><P><B><A NAME=
"FIGDBFSCOD">Figure
11. Symbol Scope Table Sub-Record -- CodeLabel
</A></B><BR><P><BR><PRE>
164 +----+----+-------------------+----+----+-------------------+
165 | Len|Type| Segment offset |Near|Len | Symbol Name |
167 +----+----+-------------------+----+----+-------------------+
171 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>The Near/Far field has the following values
<DL COMPACT
><DT>0<DD>-
16-bit near (offset-
16)
<DT>4<DD>-
16-bit far (segment-
32)
<DT>8<DD>-
32-bit near (offset-
32)
<DT>C
<DD>-
32-bit far (segment-
48)
</DL></UL></DL><P><H5><A NAME=
"Header_26">Register Variable
</A></H5><P><B><A NAME=
"FIGDBFSREG">Figure
12. Symbol Scope Table Sub-Record -- Reg
</A></B><BR><P><BR><PRE>
173 +----+----+---------+----+----+-------------------+
174 | Len|Type| Type | Reg|Len | Symbol Name |
175 | | | Index | No.|Name| |
176 +----+----+---------+----+----+-------------------+
180 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>The Reg No. values (in hex) are
:<DL COMPACT
><P>8-bit registers
<DT>00<DD>AL
<DT>01<DD>CL
<DT>02<DD>DL
<DT>03<DD>BL
<DT>04<DD>AH
<DT>05<DD>CH
<DT>06<DD>DH
<DT>07<DD>BH
<P>16-bit registers
<DT>08<DD>AX
<DT>09<DD>CX
<DT>0A
<DD>DX
<DT>0B
<DD>BX
<DT>0C
<DD>SP
<DT>0D
<DD>BP
<DT>0E
<DD>SI
<DT>0F
<DD>DI
<P>32-bit registers
<DT>10<DD>EAX
<DT>11<DD>ECX
<DT>12<DD>EDX
<DT>13<DD>EBX
<DT>14<DD>ESP
<DT>15<DD>EBP
<DT>16<DD>ESI
<DT>17<DD>EDI
<P>Segment registers
<DT>18<DD>ES
<DT>19<DD>CS
<DT>1A
<DD>SS
<DT>1B
<DD>DS
<DT>1C
<DD>FS
<DT>1D
<DD>GS
<P>Special cases
<DT>20<DD>'DX
:AX'
<DT>21<DD>'ES
:BX'
<DT>22<DD>IP
<DT>23<DD>FLAGS
<DT>24<DD>EFLAGS
<P>Register extensions for
8087/
287/
387<DT>80<DD>ST(
0)
<DT>81<DD>ST(
1)
<DT>82<DD>ST(
2)
<DT>83<DD>ST(
3)
<DT>84<DD>ST(
4)
<DT>85<DD>ST(
5)
<DT>86<DD>ST(
6)
<DT>87<DD>ST(
7)
</DL></UL></DL><P><H5><A NAME=
"Header_27">Register Relative
</A></H5><P><B><A NAME=
"FIGREGREL">Figure
13. Symbol Scope Table Sub-Record -- RegRelative
</A></B><BR><P><BR><PRE>
181 +----+----+--------+------------+--------+-.
182 |Len |Type|Register|Offset from | Type | ...
183 | | | Number | Register | Index |
184 +----+----+--------+------------+--------+-.
188 .-+----+------------------------+
189 |Len | Name of Symbol |
191 .-+----+------------------------+
194 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>Intended only for conversion from other formats to PM Debugger format.
</UL><P><DT>Register Number
<P><DD>of register used as
"base register" for variable
<P><DT>Offset from Register
<P><DD>content to storage location of variable
</DL><P><H5><A NAME=
"Header_28">Constant Symbol
</A></H5><P><B><A NAME=
"FIGDBFSCON">Figure
14. Symbol Scope Table Sub-Record -- Constant
</A></B><BR><P><BR><PRE>
196 +----+----+---------+------+------------+----+-------------------+
197 | Len|Type| Type |Len | Value |Len | Symbol Name |
198 | | | Index |Value | |Name| |
199 +----+----+---------+------+------------+----+-------------------+
200 0 1 2 4 5 5 6 + Len Value
201 or
2 3 5 6 6 7 + Len Value
205 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>The Value field may be variable, depending on the Constant Type represented in the Type Index (currently, is character string representing the value of the constant).
</UL></DL><P><H5><A NAME=
"Header_29">With Start Symbol
</A></H5><P>To be supplied in a future draft, if required.
<P><H5><A NAME=
"Header_30">Skip Record
</A></H5><P>To be supplied in a future release, if required.
<P><H5><A NAME=
"Header_31">Change Default Segment
</A></H5><P><B><A NAME=
"FIGDBCHSEG">Figure
15. Symbol Scope Table Sub-Record -- ChangSeg
</A></B><BR><P><BR><PRE>
207 +----+----+---------+---------+
208 | Len|Type| Segment | Reserved|
210 +----+----+---------+---------+
214 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>A Change Default Segment sub-record is required for each #pragma alloc_text statement in the source file being compiled. Each Change Default Segment sub-record must precede the Procedure sub-record corresponding to the function names in the alloc_text statement. A Change Default Segment sub-record must precede the first Procedure sub-record in the Symbol Scope Table.
<P><LI>A
"Selector" type FIXUPP record should be generated for each Change Default Segment sub-record, with a
"target value" equal to the segment number assigned by the compiler for the function whose Procedure sub-record follows. The FIXUPP record is required to allow the Linker to convert the logical segment numbers to physical segment numbers when building the executable.
<P><LI>The segment number is initialized to zero (
0) by the compiler.
</UL></DL><P><H5><A NAME=
"Header_32">User Defined Symbol
</A></H5><P><B><A NAME=
"FIGDBFSTDF">Figure
16. Symbol Scope Table Sub-Record -- Typedef
</A></B><BR><P><BR><PRE>
216 +----+----+---------+----+-------------------+
217 | Len|Type| Type |Len | Symbol Name |
219 +----+----+---------+----+-------------------+
223 </PRE><BR><P><P><H5><A NAME=
"Header_33">Public
</A></H5><P><B><A NAME=
"FIGDBFSPUB">Figure
17. Symbol Scope Table Sub-Record -- Public
</A></B><BR><P><BR><PRE>
225 +----+----+-------------------+---------+---------+----+-------------------+
226 | Len|Type| Segment offset | Segment | Type |Len | Symbol Name |
227 | | | | Address| Index |Name| |
228 +----+----+-------------------+---------+---------+----+-------------------+
232 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>The Public sub-record is a duplicate of the PUBDEF record generated for a public (external)
"major" Structure, RPG Table, or RPG Multiply Occuring Data Structure.
<P>This sub-record is required for languages that support direct symbolic references to
"minor" (nested) structures and/or
"elements" (members) of a structure. In addition, RPG will use this sub-record for the above constructs. The sub-record is used as a
"target" for Member or Table sub-records. PMD uses the Public sub-record as a substitute PUBDEF record to obtain location and type information.
<P><LI>Segment offset, initially zero, is resolved by the Linker using a FIXUPP record that must follow the record containing this sub-record.
<P><LI>Segment Address is an index into the SEGDEF records.
</UL></DL><P><H5><A NAME=
"Header_34">Member
</A></H5><P><B><A NAME=
"FIGDBFSMEM">Figure
18. Symbol Scope Table Sub-Record -- Member
</A></B><BR><P><BR><PRE>
234 +----+----+-------------------+----+-----------------+
235 | Len|Type| Offset to |Len | Symbol Name |
236 | | | Subrecord |Name| |
237 +----+----+-------------------+----+-----------------+
241 </PRE><BR><P><DL><P><DT>Notes
:<P><DD><UL><P><LI>A member sub-record is required for each
"minor" (nested) structure and/or
"element" (member) of a structure the user can reference symbolically.
<P><LI>The offset in this sub-record identifies the Member or Public/Static/Automatic sub-record for the immediate parent of this minor structure or element, respectively.
<P><B>Note:
</B>A Member sub-record will be the
"target" of another Member sub-record if
"minor" structures containing elements exist within a
"major" structure.
" Only one Public/Static/Automatic sub-record will exist for each "major
" structure"</UL></DL><P><H5><A NAME=
"Header_35">Based
</A></H5><P><B><A NAME=
"FIGDBFSBAS">Figure
19. Symbol Scope Table Sub-Record -- Based
</A></B><BR>
245 +----+----+-------------------+---------+----+-----------+
246 | Len|Type| Offset to |Type |Len | Name |
247 | | | Subrecord | Index |Name| |
248 +----+----+-------------------+---------+----+-----------+
258 <P><LI>Offset in this sub-record identifies the sub-record upon which this
259 variable is based. The type index identifies this variable's type.
263 <H5><A NAME=
"Header_36">BasedMember
</A></H5>
264 <P><B><A NAME=
"FIGDBFSBSM">Figure
20. Symbol Scope Table Sub-Record -- Based with Member
</A></B><BR>
268 +----+----+-------------------+---------+-------------------+----+-----------“
269 | Len|Type| Offset to |Type | Offset from |Len | Name |
270 | | | Subrecord | Index | Base |Name| |
271 +----+----+-------------------+---------+-------------------+----+-----------•
281 <P><LI>Offset to Subrecord identifies the sub-record upon which this
282 variable is based. The type index identifies this variable's type.
283 Offset from Base identifies the element in the based structure.
287 <H5><A NAME=
"Header_37">ArraySymbol
</A></H5>
288 <P><B><A NAME=
"FIGDBFARYS">Figure
21. Symbol Scope Table Sub-Record -- Array Symbol Record
</A></B><BR>
292 +----+----+---------+-------------------+
293 | Len|Type|Type | Offset to symbol |
294 | | | Index | of ODO object |
295 +----+----+---------+-------------------+
305 <P><LI>Type Index is reference to array type record
306 <P><LI>Offset to symbol of the ODO object
307 <P><LI>There will be one array symbol for each variable length
308 array which would contain the type index to array type
309 record. The symbol record would also contain a reference
310 to the symbol record which indicated the bounds of the
311 array. In the case of a multi-dimensional array, there
312 would be one array symbol for each dimension of the array.
316 <H5><A NAME=
"Header_38">Tag
</A></H5>
317 <P><B><A NAME=
"FIGDBFSTAG">Figure
22. Symbol Scope Table Sub-Record -- Tag
</A></B><BR>
321 +----+----+---------+----+-----------+
322 | Len|Type| Type |Len | Name |
324 +----+----+---------+----+-----------+
334 <P><LI>This subrecord provides the scope information for tags.
339 <H5><A NAME=
"Header_39">Map
</A></H5>
340 <P><B><A NAME=
"FIGDBFSMAP">Figure
23. Symbol Scope Table Sub-Record -- Map
</A></B><BR>
344 +----+----+--------+--------+-------+-----------+
345 | Len|Type| Len (
1)|Name |Len (
2)|External |
346 | | | Name | |Name |Known Name |
347 +----+----+--------+--------+-------+-----------+
357 <P><LI>Map supports mapped external names for C.
361 <H5><A NAME=
"Header_40">Table
</A></H5>
362 <P><B><A NAME=
"FIGDBFSTAB">Figure
24. Symbol Scope Table Sub-Record -- Table
</A></B><BR>
366 +----+----+-------------+---------+---------+-------------+----+--------------+
367 | Len|Type| Segment | Segment | Type |Index Offset |Len | Symbol Name |
368 | | | offset | Address| Index |to subrecord |Name| |
369 +----+----+-------------+---------+---------+-------------+----+--------------+
379 <P><LI>The Table sub-record identifies the Public/Static sub-records for the
380 name and location of a table and the Index to a table. It is
381 used for the RPG Table and Multiply Occuring Data Structure
383 <P><B>Note:
</B>These two constructs are similiar to arrays except the index to the
384 table is maintained internally in storage; therefore, must be
385 referenced by a separate Public/Static sub-record.
386 <P><LI>Index Offset in this sub-record identifies the sub-record containing
387 the location and symbolic name of the index to the Table.
391 <H5><A NAME=
"Header_41">Compilable Unit Information
</A></H5>
392 <P><B><A NAME=
"FIGDBFSCUI">Figure
25. Symbol Scope Table Sub-Record -- CuInfo
</A></B><BR>
396 +----+----+----+----+-------------------+---------------------------------------+-
397 | Len|Type|Comp|Len | Compiler Options | Compiler Data |
399 +----+----+----+----+-------------------+---------------------------------------+-
404 +---------------------------------------+
407 +---------------------------------------+
417 <P><LI>The Compile Unit Information sub-reord contains compiler specific
418 information required by PMD to correctly process the user program.
421 <DD>is an encoded identification of the compiler generating this OBJ.
422 The values for this data item are
:
437 <DD>ALP (Assembler for Intel)
439 <P><DT>Compiler Options
440 <DD>is a string of bits representing the compiler options in
441 effect for the compilation generating this OBJ.
442 <P><B>Note:
</B>Not used by PMD
444 <DD>in DosGetDateTime format (
8 bytes)
446 <DD>Length-prefixed string containing
"build date" of compiler emitting
447 debug information. Used only for
"visual" verification of compiler
450 <P><LI>The Compile Unit Information sub-record must be the first sub-record in
451 the Symbol Scope Table.
455 <H5><A NAME=
"Header_42">Extended Tag (long names)
</A></H5>
456 <P><B><A NAME=
"FIGCLASSSR">Figure
26. Symbol Scope Table Sub-Record -- Tag2
</A></B><BR>
459 +----+----+----------+----+---------------+
460 |Len |Type| Type |Len | Name |
462 +----+----+----------+----+---------------+
471 <P><LI>Same as Tag record, only support long names generally used for C++.
472 <P><LI>The Name length prefix is encoded, the same as the symbol
473 sub-record length encoding described in
<A HREF=
"#HDRDBSYMBL">"Symbol Scope Table"</A>.
474 <P><LI>The Name may be mangled; therefore, it must be
475 "interpreted" using a compiler supplied demangler routine.
479 <H5><A NAME=
"Header_43">Scoped Automatic Variable
</A></H5>
480 <P><B><A NAME=
"FIGCPPSR">Figure
27. Symbol Scope Table Sub-Record -- AutoScoped
</A></B><BR>
483 +----+----+-------------+-----------+-----------+-.
484 |Len |Type|Offset into |Source File|Source File| ...
485 | | |Stack Frame | Index |Line No. |
486 +----+----+-------------+-----------+-----------+-.
490 .-+---------+----+------------------------+
491 | Type |Len | Name of Symbol |
493 .-+---------+----+------------------------+
502 <P><LI>Intended only for C++, not used by PM Debugger.
504 <P><DT>Source File Index
505 <P><DD>of source file containing Source File Line Number
506 <P><DT>Source File Line No.
507 <P><DD>in source file where symbol scope becomes valid
510 <H5><A NAME=
"Header_44">Scoped Static Variable
</A></H5>
511 <P><B><A NAME=
"FIGSTATSR">Figure
28. Symbol Scope Table Sub-Record -- StaticScoped
</A></B><BR>
514 +----+----+-------+---------+----------+-----------+-.
515 |Len |Type|Segment|Segment |Source |Source File| ...
516 | | |Offset |Address |File Index| Line No. |
517 +----+----+-------+---------+----------+-----------+-.
521 .-+---------+----+------------------------+
522 | Type |Len | Name of Symbol |
524 .-+---------+----+------------------------+
533 <P><LI>Intended only for C++, not used by PM Debugger.
535 <P><DT>Source File Index
536 <P><DD>of source file containing Source File Line Number
537 <P><DT>Source File Line No.
538 <P><DD>in source file where symbol scope becomes valid
541 <H1><A NAME=
"HDRDBTYPE" HREF=
"#ToC_45">Type Table
</A></H1>
543 The Type Table contains all the invariant information required to
544 describe complex (
"non-primitive") variables.
545 A Type Table Entry (or sub-record) is built for
546 every unique complex variable type in the user program (Type Table
547 Entries may be reused for more than one variable if the variables'
548 attributes are exactly alike).
549 The entries may be generated as the symbol information is added to the
550 various OMF records (see
<A HREF=
"#HDRDBSYMBL">"Symbol Scope Table"</A>).
551 No specific order is assumed by PMD.
552 The data is always located using the type index contained in
553 the PUBDEF, EXTDEF, COMDEF, $$SYMBOLS or $$TYPES records, as defined in
554 <A HREF=
"#HDRTTEINDX">"Type Index Formats"</A>.
556 The $$TYPES (DEBTYP) records are used by each HLL compiler to
557 communicate the Type Table information to PM Debugger,
559 These records are stored in the OBJ file by the
560 compilers when the compilers' debug option is specified by the user.
562 copies the records to the Debug section of the EXE file for
563 reference by PMD while the program is being debugged by the user.
564 The $$TYPES records are stored in the OBJ as LEDATA records, whose
565 format is described in the OMF-
32 Definition, with a segment index
566 pointing to the SEGDEF record for $$TYPES (SegName = '$$TYPES';
567 ClassName = 'DEBTYP').
569 Each LEDATA record can contain no more than
1024 bytes, including a
570 checksum byte. It is recommended
571 that records be ended at
"logical" boundaries within the definition
572 of the data below. The Linker
573 will copy the records to the .EXE file
574 in the order stored in the OBJ file.
575 PMD will read the records in the order stored in the .EXE file,
576 concatenating each record to the previous to make a contiguous table
577 in storage. The
"type table records" in the .EXE file are
578 <I>not
</I> loaded with the program when the program is started
580 <P><B>Note:
</B>All
"offsets" must have a companion FIXUPP record immediately
581 following the containing LEDATA record. See the OMF-
32 Definition for
583 <P><B><A NAME=
"FIGDBFTYPR">Figure
29. Type Table Record Format
</A></B><BR>
586 +---------------------------------------+
589 +---------------------------------------+
590 | Type Table Entries (or Sub-Records) |
597 +---------+-----------------------------+
604 An overview of a Type Table Record is shown in
605 <A HREF=
"#FIGDBFTYPR">Figure
29.
</A>.
606 See the OMF-
32 Definition for a description of the LEDATA Header.
607 Each Type Table Entry consists of one or more sub-records, as shown
608 in
<A HREF=
"#FIGDBFTYSR">Figure
30.
</A>.
609 The length of the sub-record is a two byte value containing only the
610 number of data bytes. This number does not include the
611 two bytes for the length field.
612 <P><B>Note:
</B>The first byte in the subrecord, set to be
01 for linkable in
613 Version
1, has been removed.
615 The Sub-Record Specific Data consists
616 of fixed format information followed by varying length
617 individual data items
618 identified by a one byte Field IDentifier (FID) preceding the data.
619 The data may also be a type index to
620 another sub-record for a Type Table Entry.
621 <P><B><A NAME=
"FIGDBFTYSR">Figure
30. Type Table Entry Sub-Record -- General Format
</A></B><BR>
625 +-----------+----+----+-----------------------------+
626 | Length of |Type|Type| Sub-Record Specific Data |
627 | Sub-Record| |Qual| |
628 +-----------+----+----+-----------------------------+
634 <A HREF=
"#FIGDBFTYSP">Figure
31.
</A> illustrates the
635 the Sub-Record Specific Data, including the Type and Type Qualifier
636 fields, in the same format the Type data is defined in
637 <A HREF=
"#HDRTTEDEFN">"Type Table Entry Definitions"</A>.
638 <P><B><A NAME=
"FIGDBFTYSP">Figure
31. Type Table Entry Sub-Record -- Specific Data Format
</A></B><BR>
642 1 1 varying
1 varying
1 varying bytes
643 +----+----+----//---+----+-------------------+-//-+----+-------------------+
644 |Type|Type|Fixed Fmt| FID| Data identified | | FID| Data identified |
645 | |Qual| Data | | by FID | | | by FID |
646 +----+----+----//---+----+-------------------+-//-+----+-------------------+
648 <--------------------- Repeated --------------------->
651 The unique type table entries for each variable type are defined
652 in
<A HREF=
"#HDRTTEDEFN">"Type Table Entry Definitions"</A>.
653 The values for the Type are defined in
<A HREF=
"#HDRTTEPRIM">"Primitive Types Values"</A>
654 and
<A HREF=
"#HDRTTECPLX">"Complex Types Values"</A>.
657 <H3><A NAME=
"HDRTTEINDX" HREF=
"#ToC_46">Type Index Formats
</A></H3>
659 The Type Index (TypInd) field has two formats.
661 <P><LI>The type index may be stored as either one or two bytes values in the following
669 PMD interprets the Type Index in these records as follows
:
673 FirstByte = *(TypeFldPtr++);
675 if (FirstByte &
0x80)
677 SecondByte = *TypeFldPtr;
678 TypeIndex = ((FirstByte &
0x7F) <<
8) + SecondByte;
682 TypeIndex = FirstByte;
686 <P><B>Note:
</B>The only known case where a one byte Type Index can be stored is
687 for a TypInd=
0 in EXTDEF.
688 <P><LI>It must be stored as a normal
"byte reversed"
689 two byte value ('short int' in C; 'FIXED(
16)' in PL/X-
86) in the
690 following records
:
692 <LI>$$SYMBOLS sub-records
693 <LI>$$TYPES sub-records
697 <H3><A NAME=
"HDRTTENAME" HREF=
"#ToC_47">Name Length Formats
</A></H3>
699 Names in type sub-records have two types of length-prefixes. Names
700 preceded by a FID_String byte continue to have single-byte length
701 prefixes. Names not preceded by a FID_String, noted with
"ENC" in
702 the
"Field Length" column, contain an encoded-length prefix of one or
703 two bytes, with the length field containing
704 the number of bytes in the Name (excluding the length field byte(s)).
705 PMD interprets the encoded-length as follows
:
709 FirstByte = *(LenFldPtr++);
711 if (FirstByte &
0x80)
713 SecondByte = *LenFldPtr;
714 Length = ((FirstByte &
0x7F) <<
8) + SecondByte;
723 <H3><A NAME=
"HDRTTEPRIM" HREF=
"#ToC_48">Primitive Types Values
</A></H3>
725 A symbolic variable is considered
"primitive" if the variable can be
726 fully described by a single value (i.e., extended information contained
727 in a Type Table Entry is not required).
728 The Type Index for a primitive variable must have a value less than
255,
730 <P>The Primitive Type values are defined below.
731 Note
: Near is defined as offset_32. Far is defined as segment_48.
732 They are stored in the Type Index field as defined in
733 <A HREF=
"#HDRTTEINDX">"Type Index Formats"</A>.
737 ===== ===== ===============
742 132 84 8 bit unsigned
743 133 85 16 bit unsigned
744 134 86 32 bit unsigned
748 140 8C
64 bit complex
751 142 8E
160 bit complex
753 145 91 16 bit boolean
754 146 92 32 bit boolean
755 148 94 8 bit character
756 149 95 16 bit characters
757 150 96 32 bit characters
759 152 98 15 bit unsigned
760 153 99 24 bit unsigned
761 154 9A
31 bit unsigned
762 155 9B
64 bit signed (long_long)
763 156 9C
64 bit unsigned
764 160 A0 near pointer to
8 bit signed
765 161 A1 near pointer to
16 bit signed
766 162 A2 near pointer to
32 bit signed
767 164 A4 near pointer to
8 bit unsigned
768 165 A5 near pointer to
16 bit unsigned
769 166 A6 near pointer to
32 bit unsigned
770 168 A8 near pointer to
32 bit real
771 169 A9 near pointer to
64 bit real
772 170 AA near pointer to
80 bit real
773 172 AC near pointer to
64 bit complex
774 173 AD near pointer to
128 bit complex
775 174 AE near pointer to
160 bit complex
776 176 B0 near pointer to
8 bit boolean
777 177 B1 near pointer to
16 bit boolean
778 178 B2 near pointer to
32 bit boolean
779 180 B4 near pointer to
8 bit character
780 181 B5 near pointer to
16 bit character
781 182 B6 near pointer to
32 bit character
782 183 B7 near pointer to void
783 184 B8 near pointer to
15 bit unsigned
784 185 B9 near pointer to
24 bit unsigned
785 186 BA near pointer to
31 bit unsigned
786 187 BB near pointer to
64 bit signed
787 188 BC near pointer to
64 bit unsigned
792 ===== ===== ===============
794 192 C0 far pointer to
8 bit signed
795 193 C1 far pointer to
16 bit signed
796 194 C2 far pointer to
32 bit signed
797 196 C4 far pointer to
8 bit unsigned
798 197 C5 far pointer to
16 bit unsigned
799 198 C6 far pointer to
32 bit unsigned
800 200 C8 far pointer to
32 bit real
801 201 C9 far pointer to
64 bit real
802 202 CA far pointer to
80 bit real
803 204 CC far pointer to
64 bit complex
804 205 CD far pointer to
128 bit complex
805 206 CE far pointer to
160 bit complex
806 208 D0 far pointer to
8 bit boolean
807 209 D1 far pointer to
16 bit boolean
808 210 D2 far pointer to
32 bit boolean
809 212 D4 far pointer to
8 bit character
810 213 D5 far pointer to
16 bit character
811 214 D6 far pointer to
32 bit character
812 215 D7 far pointer to void
813 216 D8 far pointer to
15 bit unsigned
814 217 D9 far pointer to
24 bit unsigned
815 218 DA far pointer to
31 bit unsigned
816 219 DB far pointer to
64 bit signed
817 220 DC far pointer to
64 bit unsigned
821 <H3><A NAME=
"HDRTTECPLX" HREF=
"#ToC_49">Complex Types Values
</A></H3>
823 If a symbolic variable is not one of the
"primitive" types defined in
824 <A HREF=
"#HDRTTEPRIM">"Primitive Types Values"</A>, it is considered a
"non-primitive" or complex
825 variable. The Type Index for a complex variable must have a value
826 greater than
511, decimal, (starting at
512 and up),
827 that is a dynamically (as OMF records
828 and $$TYPES sub-records are built)
829 generated index into the $$TYPES records to a Type Table Entry.
830 <P>The complex variable type values are defined, in hex notation, below.
831 The type qualifier values are defined in each sub-record in
832 <A HREF=
"#HDRTTEDEFN">"Type Table Entry Definitions"</A>.
873 <DD>User defined type
893 <DD>Structure/Union/Record
898 <P>Special sub-record types
903 <H3><A NAME=
"HDRTTEFLDI" HREF=
"#ToC_50">Field ID Values
</A></H3>
904 <P>The Field ID values are used in the Type Table Sub-Records to
905 identify the contents and number of byte(s) that follow immediately. (With
906 the exception of FID_nil and FID_void, see note below)
907 <P>The Field ID values are defined, in hex notation, as follows
:
908 <P><B>Note:
</B>The names correspond to the Type Table Entry definitions in
909 <A HREF=
"#HDRTTEDEFN">"Type Table Entry Definitions"</A>.
915 <DD>(this identifies the contents to be nil, no further data expected)
922 <DD>(this identifies the contents to be of type void, no further data expected)
929 <DD>(the contents is a length prefixed character string, the first byte(s) is the length)
936 <DD>(the contents is type index, it may be a primitive or complex type)
943 <DD>(the length and nature of the contents depends on the values listed below)
970 <H3><A NAME=
"HDRTTEDEFN" HREF=
"#ToC_51">Type Table Entry Definitions
</A></H3>
972 <H5><A NAME=
"Header_52">Area
</A></H5>
974 <P><B><A NAME=
"Table_32">Figure
32. Type Table Entry Sub-Record - Area
</A></B><BR>
977 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x55)
978 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
979 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
980 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
981 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
986 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Area (fixed)
987 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
988 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
989 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
990 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
992 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
993 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
994 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
995 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
996 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
997 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
999 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1000 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1001 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of area
1002 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1003 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bytes, field length depends on the preceding FID_span value
1007 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Area - adjustable
1008 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x02
1009 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1010 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1011 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Descriptor is provided by PL/I.
1016 <H5><A NAME=
"Header_53">Array
</A></H5>
1018 The ordering of the FID_index is required as defined in the sub-record.
1019 The array's type qualifier byte has the following bit map
:
1021 Bit Value Data Description
1022 === ===== ========================
1029 2 0 no descriptor required
1030 1 descriptor provided
1032 3 0 fixed length array
1033 1 variable length array
1039 <P><B><A NAME=
"Table_33">Figure
33. Type Table Entry Sub-Record - Array
</A></B><BR>
1042 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x78)
1043 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1044 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
1045 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1046 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
1048 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Array
1049 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1050 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1051 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1052 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1054 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1055 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1056 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of array
1057 </TD><TD ALIGN=LEFT VALIGN=TOP
>4
1058 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bytes
1060 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1061 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1062 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1063 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1064 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1065 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1067 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1068 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1069 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Bounds
1070 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1071 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a sub-record containing the high and low bounds
1073 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1074 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1075 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1076 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1077 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1078 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1080 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1081 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1082 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
1083 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1084 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type Index of the elements in the array
1086 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1087 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1088 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
1089 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1090 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1091 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1093 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1094 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1095 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
1096 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
1097 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed Name of array. The first
1 byte determines the length of the name.
1100 A few words on multi-dimensional array and array of complex type
:
1101 We have a
2 by
4 by
6 array of type char. The index for the dimensions are
1102 4 to
5,
7 to
10, and
4 to
9 respectively. Then the compiler will need
1103 to generate six sub-records (two for each dimension and treat each
1104 dimension as an array itself). The first one will be for the outer most
1105 dimension. It has a length of
384 bits (
48 bytes), a type index identifies a
1106 sub-record (subrange or enum) for its high/low bounds, a type index identifying
1107 the next (second) sub-record, and a name string for that array if available.
1108 In the second sub-record, it will have a length of
192 bits (
24 bytes), a type
1109 index identifies a sub-record (subrange or enum) for its high/low bounds, and a
1110 type index identifying the last (third) record. The third record will have a
1111 length of
48 bits (
6 bytes), a type index identifies a sub-record (subrange or
1112 enum) for it's high/low bounds, and a type index of primitive type char.
1113 The name of the array will appear in the outer most sub-record. The length
1114 field in the name string will be
0 in subsequent sub-records as the name for
1115 the second and third sub-records are not required.
1116 So to derive the dimension, all we need to do is to divide the length by the
1117 type if the type is a primitive type. For complex type, then we need to divide
1118 the length of the current sub-record by the length of the subsequent
1119 sub-record (the current record's type index identifies the subsequent
1120 sub-record). This may sound very complex in the beginning.
1121 However, this design gives us the flexibility of reusing previous defined
1122 types. This multi-language design will support array of complex construct (i.e.
1123 structure/union ) as well as primitive type.
1124 See subrange and enum sub-records for details in coding the dimension of the
1129 <H5><A NAME=
"Header_54">Base Class
</A></H5>
1131 The Base Class' type qualifier byte has the following bit map
:
1133 Bit Value Data Description
1134 === ===== ========================
1135 0 0 not a virtual class
1143 <P><B><A NAME=
"Table_34">Figure
34. Type Table Entry Sub-Record - Base Class
</A></B><BR>
1146 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x41)
1147 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1148 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
1149 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1150 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
1155 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Base Class
1156 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1157 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1158 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1159 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
1161 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1162 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1163 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Protection
1164 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1165 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>0=Private,
1=Protected,
2=Public
1167 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1168 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1169 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field type
1170 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1171 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type index of class record
1173 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1174 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1175 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>FID_span
1176 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1177 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Refer to
"Field ID Values"
1179 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1180 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1181 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Offset
1182 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1183 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>The field's offset in bytes from the
1184 start of class(field length determined by preceding FID_span)
1188 <H5><A NAME=
"Header_55">Bit String
</A></H5>
1190 The bit string's type qualifier byte has the following bit map
:
1192 Bit Value Data Description
1193 === ===== ========================
1203 3 0 display as string of
0 and
1
1204 1 display as a value
1206 4 0 no descriptor required
1207 1 descriptor provided
1213 <P><B><A NAME=
"Table_35">Figure
35. Type Table Entry Sub-Record - Bit string
</A></B><BR>
1216 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x5C)
1217 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1218 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
1219 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1220 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
1225 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Bit String - fixed
1226 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1227 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1228 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1229 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1231 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1232 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1233 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Offset
1234 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1235 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Starting position (from bit
0) of the string in a byte or word depends on bit
2 in type qualifier
1237 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1238 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1239 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1240 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1241 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1242 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1244 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1245 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1246 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of the bit string
1247 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1248 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bits, field length determined by preceding FID_span
1252 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Bit String - varying
1253 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1254 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1255 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1256 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1258 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1259 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1260 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Offset
1261 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1262 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Starting position (from bit
0) of the string in a byte or word depends on bit
2 in type qualifier
1264 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1265 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1266 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1267 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1268 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1269 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1271 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1272 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1273 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max allowable size of the bit string
1274 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1275 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bits, field length determined by preceding FID_span
1279 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Bit String - adjustable
1280 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1281 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1282 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1283 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Descriptor provided by PL/I.
1287 <H5><A NAME=
"Header_56">Character String
</A></H5>
1289 <P><B><A NAME=
"Table_36">Figure
36. Type Table Entry Sub-Record - Character String
</A></B><BR>
1292 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x60)
1293 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1294 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
1295 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1296 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
1301 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Character string (fixed)
1302 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
1303 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1304 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1305 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1307 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1308 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1309 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1310 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1311 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1312 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1314 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1315 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1316 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of string
1317 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1318 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bytes, field length depends on the preceding FID_span value
1322 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Character string - varying (length prefixed)
1323 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x01
1324 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1325 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1326 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1328 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1329 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1330 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1331 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1332 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1333 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1335 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1336 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1337 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. length
1338 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1339 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max. allowable length in bytes, field length depends on the preceding FID_span value
1343 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Character string - adjustable
1344 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x02
1345 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1346 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1347 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Descriptor provided by PL/I.
1351 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Character string - (null terminated)
1352 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x03
1353 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1354 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1355 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1357 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1358 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1359 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1360 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1361 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1362 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1364 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1365 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1366 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. length
1367 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1368 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max. allowable length in bytes, field length depends on the preceding FID_span value
1372 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Character string - DBCS
1373 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x04
1374 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1375 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1376 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1378 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1379 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1380 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1381 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1382 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1383 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1385 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1386 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1387 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. length
1388 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1389 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max. allowable length in bytes, field length depends on the preceding FID_span value
1393 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Character string - DBCS edited
1394 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x05
1395 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1396 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1397 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>To be completed in the next draft
1402 <H5><A NAME=
"Header_57">Class
</A></H5>
1404 The Class' type qualifier byte has the following bit map
:
1406 Bit Value Data Description
1407 === ===== ========================
1412 2 0 not a placeholder for linker
1414 (not used by PM Debugger)
1419 <P><B><A NAME=
"Table_37">Figure
37. Type Table Entry Sub-Record - Class
</A></B><BR>
1422 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x40)
1423 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1424 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
1425 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1426 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
1431 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Class
1432 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1433 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1434 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1435 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
1437 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1438 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1439 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Size of Class
1440 </TD><TD ALIGN=LEFT VALIGN=TOP
>4
1441 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Size in bytes
1443 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1444 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1445 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Class Item count
1446 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1447 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Number of items in class
1449 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1450 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1451 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Index to class item list
1452 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1453 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>This index identifies a sub-record
1454 containing a list of class items
1456 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1457 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1458 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Name
1459 </TD><TD ALIGN=LEFT VALIGN=TOP
>ENC
1460 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Length prefixed name of class tag.
1461 This name may be mangled; therefore, it must be
"interpreted" using a
1462 compiler supplied demangler routine.
1464 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1465 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1466 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1467 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1468 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>The following three data items are present
1469 only if
<B>is_DTS_class
</B>=
1.
1471 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1472 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1473 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>SOMClassMajor
1474 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1475 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>SOM Class Major version
1477 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1478 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1479 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>SOMClassMinor
1480 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1481 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>SOM Class Minor version
1483 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1484 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1485 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>SOMClassName
1486 </TD><TD ALIGN=LEFT VALIGN=TOP
>ENC
1487 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Length prefixed name of SOM class Name.
1488 This name may be mangled; therefore, it must be
"interpreted" using a
1489 compiler supplied demangler routine.?
1494 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
1495 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x01
1496 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1497 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1498 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
1500 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1501 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1502 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1503 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1504 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Repeat begins (for number of class items)
1506 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1507 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1508 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>FID_index
1509 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1510 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Refer to
1511 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1513 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1514 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1515 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Class Item Type
1516 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1517 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type index (
5 different complex types
:
1518 Class Definition, Base Class, Friend, Member Function, Class Member)
1520 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1521 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1522 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1523 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1524 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Repeat ends
1528 <H5><A NAME=
"Header_58">Class Definition
</A></H5>
1530 <P><B><A NAME=
"Table_38">Figure
38. Type Table Entry Sub-Record - Class Definition
</A></B><BR>
1533 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x43)
1534 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1535 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
1536 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1537 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
1542 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Class Definition
1543 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
1544 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1545 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1546 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
1549 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1550 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1551 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Protection
1552 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1553 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>0=Private,
1=Protected,
2=Public
1555 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1556 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1557 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field type
1558 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1559 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type number of the typedef record
1561 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1562 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1563 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Defining class type
1564 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1565 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type of defining class
1569 <H5><A NAME=
"Header_59">Class Member
</A></H5>
1571 The Class Member's type qualifier byte has the following bit map
:
1573 Bit Value Data Description
1574 === ===== ========================
1578 1 0 not virtual table ptr
1581 2 0 not virtual base ptr
1598 <P><B><A NAME=
"Table_39">Figure
39. Type Table Entry Sub-Record - Class Member
</A></B><BR>
1601 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x46)
1602 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1603 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
1604 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1605 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
1610 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Class Member
1611 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1612 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
1613 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1614 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
1616 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1617 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1618 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Protection
1619 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1620 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>0=Private,
1=Protected,
2=Public
1622 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1623 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1624 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field type
1625 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1626 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type index (it may be primitive or complex)
1628 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1629 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1630 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>FID_span
1631 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1632 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Refer to
"Field ID Values"
1634 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1635 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1636 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Offset
1637 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1638 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>The field's offset in bytes from the
1639 start of class(field length determined by preceding FID_span)
1641 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1642 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1643 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Name
1644 </TD><TD ALIGN=LEFT VALIGN=TOP
>ENC
1645 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>If is_static is set, the first Nlen /Name
1646 will be the name of the static symbol in the Symbol Scope Table.
1647 This name may be mangled; therefore, it must be
"interpreted" using a
1648 compiler supplied demangler routine.
1650 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1651 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1652 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Name
1653 </TD><TD ALIGN=LEFT VALIGN=TOP
>ENC
1654 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>The name of the member.
1655 This name may be mangled; therefore, it must be
"interpreted" using a
1656 compiler supplied demangler routine.
1660 <H5><A NAME=
"Header_60">Code label
</A></H5>
1662 The label's type qualifier byte, showing the model of the label, has the following bit map
:
1664 Bit Value Data Description
1665 === ===== ========================
1685 <P><B><A NAME=
"Table_40">Figure
40. Type Table Entry Sub-Record - Code label
</A></B><BR>
1688 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x72)
1689 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1690 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
1691 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1692 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
1697 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Code label
1698 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1699 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1700 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1701 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>No data expected.
1705 <H5><A NAME=
"Header_61">Entry
</A></H5>
1707 The entry sub-record and its corresponding list sub-record are shown together
1708 for completeness. Each sub-record is to be encoded individually as a type table
1710 The ordering of the FID_index is required as defined in the sub-record.
1711 The entry's type qualifier byte, showing the calling convention of the
1712 entry, has the following bit map
:
1715 Bit Value Data Description
1716 === ===== ========================
1717 0 0 args pushed left to right
1718 1 args pushed right to left
1720 1 0 called program (callee) pops args
1729 4 0 fixed number of parameters
1730 1 variable number of parameters
1732 5 0 OS/
2 calling convention
1733 1 private calling convention
1747 The flag for each parameter in the list sub-record has the following bit map
:
1749 Bit Value Data Description
1750 === ===== ========================
1751 0 0 passed by address
1754 1 0 no descriptor required
1755 1 descriptor provided
1765 <P><B><A NAME=
"Table_41">Figure
41. Type Table Entry Sub-Record - Entry
</A></B><BR>
1768 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x53)
1769 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1770 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
1771 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1772 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
1777 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Entry
1778 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
1779 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1780 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1781 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1783 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1784 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1785 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Parameter count
1786 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1787 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Number of parameters
1789 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1790 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1791 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. parameter count
1792 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1793 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max. number of parameters allowable
1795 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1796 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1797 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1798 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1799 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1800 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1802 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1803 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1804 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Index
1805 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1806 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type index of the value returned by the entry
1808 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1809 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1810 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1811 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1812 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1813 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1815 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1816 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1817 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Index to types list
1818 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1819 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a sub-record containing a list of type indexes for the parameters.
1824 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
1825 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x04
1826 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1827 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1828 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1830 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1831 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1832 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1833 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1834 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat begins (for number of parameters in an entry)
1836 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1837 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1838 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Flag
1839 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1840 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>See bit map above
1842 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1843 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1844 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1845 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1846 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1847 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1849 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1850 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1851 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
1852 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1853 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Parameter's type index (it may be primitive or complex)
1855 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1856 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1857 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1858 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1859 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat ends
1863 <H5><A NAME=
"Header_62">Enum
</A></H5>
1865 The enum sub-record and its corresponding list sub-record are shown together
1866 for completeness. The sub-record is to be encoded individually as a type table
1868 The ordering of the FID_index and FID_span in this sub-record is important and required as
1869 defined in the table.
1872 <P><B><A NAME=
"Table_42">Figure
42. Type Table Entry Sub-Record - Enum
</A></B><BR>
1875 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x7B)
1876 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
1877 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
1878 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
1879 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
1884 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Enum
1885 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
1886 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1887 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1888 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1890 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1891 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1892 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1893 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1894 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1895 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1897 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1898 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1899 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
1900 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1901 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Element's data type
1903 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1904 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1905 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
1906 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1907 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1908 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1910 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1911 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1912 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
1913 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
1914 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a list sub-record of name and index for each element.
1916 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1917 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1918 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1919 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1920 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1921 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1923 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1924 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1925 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Starting (minimum) index
1926 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1927 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Beginning index, field length determined by preceding FID_span
1929 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1930 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1931 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1932 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1933 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1934 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1936 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1937 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1938 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Ending (maximum) index
1939 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1940 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field length determined by preceding FID_span
1942 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1943 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1944 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
1945 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1946 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1947 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1949 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1950 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1951 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
1952 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
1953 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed name of the enum tag, first
1 byte determines the length
1958 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
1959 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x03
1960 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1961 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1962 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
1964 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1965 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1966 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1967 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
1968 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat begins (for number of items in enum)
1970 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1971 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1972 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
1973 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1974 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1975 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1977 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1978 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1979 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
1980 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
1981 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed Name of element, first
1 byte determines the length
1983 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1984 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1985 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
1986 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
1987 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
1988 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
1990 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1991 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1992 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Element's index
1993 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
1994 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Index, field length determined by preceding FID_span
1996 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1997 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1998 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
1999 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2000 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat ends
2004 <H5><A NAME=
"Header_63">File
</A></H5>
2006 <P><B><A NAME=
"Table_43">Figure
43. Type Table Entry Sub-Record - File
</A></B><BR>
2009 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x67)
2010 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2011 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2012 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2013 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2018 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>File
2019 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
2020 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2021 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2022 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>No data expected.
2026 <H5><A NAME=
"Header_64">Format label
</A></H5>
2028 The label's type qualifier byte, showing the model of the label, has the following bit map
:
2030 Bit Value Data Description
2031 === ===== ========================
2051 <P><B><A NAME=
"Table_44">Figure
44. Type Table Entry Sub-Record - Format label
</A></B><BR>
2054 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x65)
2055 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2056 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2057 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2058 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2063 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Format label
2064 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2065 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2066 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2067 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>No data expected.
2071 <H5><A NAME=
"Header_65">Friend
</A></H5>
2073 The Base Class' type qualifier byte has the following bit map
:
2075 Bit Value Data Description
2076 === ===== ========================
2085 <P><B><A NAME=
"Table_45">Figure
45. Type Table Entry Sub-Record - Friend
</A></B><BR>
2088 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x42)
2089 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2090 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
2091 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2092 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
2097 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Friend
2098 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2099 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
2100 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2101 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
2103 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2104 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2105 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field type
2106 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2107 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type index of class record if it is a friend
2108 class, and it is a type index of a function record if it is
2111 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2112 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2113 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Name
2114 </TD><TD ALIGN=LEFT VALIGN=TOP
>ENC
2115 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Length-prefixed Name of Friend Function.
2116 This name may be mangled; therefore, it must be
"interpreted" using a
2117 compiler supplied demangler routine.
2121 <H5><A NAME=
"Header_66">Function
</A></H5>
2123 The function sub-record and its corresponding list sub-record are shown together
2124 for completeness. Each sub-record is to be encoded individually as a type table
2126 The ordering of the FID_index is required as defined in the sub-record.
2127 The function's type qualifier byte, showing the calling convention of the
2128 function, has the following bit map
:
2131 Bit Value Data Description
2132 === ===== ========================
2133 0 0 args pushed left to right
2134 1 args pushed right to left
2136 1 0 called program (callee) pops args
2145 4 0 fixed number of parameters
2146 1 variable number of parameters
2148 5 0 OS/
2 calling convention
2149 1 private calling convention
2163 The flag for each parameter in the list sub-record has the following bit map
:
2165 Bit Value Data Description
2166 === ===== ========================
2167 0 0 passed by address
2170 1 0 no descriptor required
2171 1 descriptor provided
2181 <P><B><A NAME=
"Table_46">Figure
46. Type Table Entry Sub-Record - Function
</A></B><BR>
2184 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x54)
2185 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2186 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2187 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2188 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2193 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Function
2194 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2195 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2196 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2197 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2199 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2200 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2201 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Parameter count
2202 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2203 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Number of parameters
2205 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2206 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2207 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. parameter count
2208 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2209 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max. number of parameters allowable
2211 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2212 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2213 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2214 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2215 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2216 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2218 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2219 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2220 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Index
2221 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2222 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type index of the value returned by the function
2224 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2225 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2226 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2227 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2228 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2229 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2231 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2232 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2233 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Index to types list
2234 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2235 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a sub-record containing a list of type indexes for the parameters.
2240 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
2241 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x04
2242 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2243 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2244 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>List not used by PM Debugger
2246 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2247 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2248 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2249 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2250 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat begins (for number of parameters in a function)
2252 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2253 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2254 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Flag
2255 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2256 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>See bit map above
2258 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2259 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2260 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2261 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2262 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2263 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2265 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2266 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2267 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
2268 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2269 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Parameter's type index (it may be primitive or complex)
2271 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2272 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2273 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2274 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2275 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat ends
2279 <H5><A NAME=
"Header_67">Graphic
</A></H5>
2281 <P><B><A NAME=
"Table_47">Figure
47. Type Table Entry Sub-Record - Graphic
</A></B><BR>
2284 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x62)
2285 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2286 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2287 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2288 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2293 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Graphic string (fixed)
2294 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
2295 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2296 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2297 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2299 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2300 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2301 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
2302 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2303 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2304 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2306 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2307 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2308 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of string
2309 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
2310 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bytes, field length depends on the preceding FID_span value
2314 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Graphic string - varying (length prefixed)
2315 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x01
2316 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2317 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2318 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2320 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2321 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2322 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
2323 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2324 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2325 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2327 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2328 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2329 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. length of string
2330 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
2331 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max allowable length in bytes, field length depends on the preceding FID_span value
2335 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Graphic string - adjustable
2336 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x02
2337 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2338 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2339 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Descriptor provided by PL/I.
2344 <H5><A NAME=
"Header_68">Logical
</A></H5>
2346 <P><B><A NAME=
"Table_48">Figure
48. Type Table Entry Sub-Record - Logical
</A></B><BR>
2349 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x56)
2350 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2351 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2352 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2354 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2359 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Logical (Fortran
4)
2360 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x01
2361 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2362 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2363 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>No data expected.
2367 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Logical (Fortran
1)
2368 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x02
2369 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2370 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2371 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>No data expected.
2375 <H5><A NAME=
"Header_69">Macro
</A></H5>
2377 <P><B><A NAME=
"Table_49">Figure
49. Type Table Entry Sub-Record - Macro
</A></B><BR>
2380 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x59)
2381 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2382 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2383 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2384 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2389 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Macro
2390 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
2391 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2392 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2393 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2395 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2396 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2397 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
2398 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2399 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2400 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2402 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2403 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2404 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Length of macro definition
2405 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
2406 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length in bytes, field length depends on the preceding FID_span value
2408 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2409 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2410 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Definition
2411 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
2412 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>String of macro definition
2416 <H5><A NAME=
"Header_70">Member Function
</A></H5>
2418 The Member Function's type qualifier byte has the following bit map
:
2420 Bit Value Data Description
2421 === ===== ========================
2441 <P><B><A NAME=
"Table_50">Figure
50. Type Table Entry Sub-Record - Member Function
</A></B><BR>
2444 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x45)
2445 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2446 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
2447 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2448 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
2453 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Member Function
2454 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2455 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
2456 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2457 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
2459 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2460 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2461 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Protection
2462 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2463 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>0=Private,
1=Protected,
2=Public
2465 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2466 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2467 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Function Type
2468 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2469 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>0 = regular member fcn,
2470 1 = constructor,
2 = destructor
2472 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2473 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2474 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Type Index
2475 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2476 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type Index of function sub-record
2478 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2479 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2480 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>FID_span
2481 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2482 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Refer to
"Field Id Values"
2484 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2485 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2486 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>VirtNo
2487 </TD><TD ALIGN=LEFT VALIGN=TOP
>4
2488 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>For virtual fcns, the index into the virtual
2489 table. This field and the defining FID_span field are present only if
2490 the virtual type qualifier bit is set.
2492 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2493 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2494 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Name
2495 </TD><TD ALIGN=LEFT VALIGN=TOP
>ENC
2496 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Name of the function.
2497 This name may be mangled; therefore, it must be
"interpreted" using a
2498 compiler supplied demangler routine.
2499 If this name is mangled, it is an
"abbreviated" mangled name, meaning
2500 the class information has been excluded from the name.
2504 <H5><A NAME=
"Header_71">Member Pointer
</A></H5>
2506 The Member Pointer's type qualifier byte has the following bit map
:
2508 Bit Value Data Description
2509 === ===== ========================
2526 <P><B><A NAME=
"Table_51">Figure
51. Type Table Entry Sub-Record - Member Pointer
</A></B><BR>
2529 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x49)
2530 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2531 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
2532 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2533 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
2538 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Member Pointer
2539 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2540 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
2541 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2542 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
2544 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2545 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2546 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Child type
2547 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2548 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type of the member that may be pointed at
2550 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2551 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2552 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Class type
2553 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2554 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type of the class that may be pointed at
2556 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2557 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2558 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Representation type
2559 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2560 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Actual type being used to represent this
2561 pointer to member type.
2565 <H5><A NAME=
"Header_72">Picture
</A></H5>
2567 <P><B><A NAME=
"Table_52">Figure
52. Type Table Entry Sub-Record - Picture
</A></B><BR>
2570 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x61)
2571 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2572 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2573 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2574 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2579 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Picture
2580 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
2581 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2582 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2583 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2585 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2586 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2587 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
2588 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2589 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2590 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2592 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2593 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2594 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Length of picture string
2595 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
2596 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bytes, field length depends on the preceding FID_span value
2598 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2599 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2600 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Picture string
2601 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
2602 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Compiler supplied string describing variable.
2603 Used for number of COBOL-specific data types. Requires COBOL supplied
2604 expression evaluation routines to correctly interpret.
2608 <H5><A NAME=
"Header_73">Pointer
</A></H5>
2610 The pointer's type qualifier byte, showing the size of the pointer, has the
2611 the following bit map
:
2613 Bit Value Data Description
2614 === ===== ========================
2635 <P><B><A NAME=
"Table_53">Figure
53. Type Table Entry Sub-Record - Pointer
</A></B><BR>
2638 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x7A)
2639 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2640 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2641 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2642 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2647 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Pointer
2648 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2649 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2650 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2651 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2653 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2654 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2655 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2656 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2657 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2658 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2660 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2661 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2662 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type
2663 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2664 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type Index - the type of data the pointer points to
2666 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2667 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2668 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
2669 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2670 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2671 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2673 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2674 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2675 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
2676 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
2677 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Optional name of pointer. The first
1 byte determines the length of the name.
2681 <H5><A NAME=
"Header_74">Procedure
</A></H5>
2683 The procedure sub-record and its corresponding list sub-record are shown together
2684 for completeness. Each sub-record is to be encoded individually as a type table
2686 The ordering of the FID_index is required as defined in the sub-record.
2687 The procedure's type qualifier byte, showing the calling convention of the
2688 procedure, has the following bit map
:
2691 Bit Value Data Description
2692 === ===== ========================
2693 0 0 args pushed left to right
2694 1 args pushed right to left
2696 1 0 called program (callee) pops args
2705 4 0 fixed number of parameters
2706 1 variable number of parameters
2708 5 0 OS/
2 calling convention
2709 1 private calling convention
2723 The flag for each parameter in the list sub-record has the following bit map
:
2726 Bit Value Data Description
2727 === ===== ========================
2728 0 0 passed by address
2731 1 0 no descriptor required
2732 1 descriptor provided
2741 <P><B><A NAME=
"Table_54">Figure
54. Type Table Entry Sub-Record - Procedure
</A></B><BR>
2744 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x75)
2745 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2746 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2747 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2748 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2753 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Procedure
2754 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2755 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2756 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2757 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2759 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2760 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2761 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Parameter count
2762 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2763 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Number of parameters
2765 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2766 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2767 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Max. parameter count
2768 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2769 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Max. number of parameters allowable
2771 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2772 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2773 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2774 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2775 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2776 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2778 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2779 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2780 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Index
2781 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2782 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type index of the value returned by the procedure
2784 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2785 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2786 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2787 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2788 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2789 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2791 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2792 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2793 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Index to types list
2794 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2795 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a sub-record containing a list of type indexes for the parameters.
2800 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
2801 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x04
2802 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2803 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2804 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2806 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2807 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2808 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2809 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2810 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat begins (for number of parameters in a procedure)
2812 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2813 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2814 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Flag
2815 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2816 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>See bit map above
2818 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2819 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2820 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
2821 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2822 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
2823 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
2825 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2826 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2827 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
2828 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2829 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Parameter's type index (it may be primitive or complex)
2831 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2832 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2833 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2834 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2835 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat ends
2839 <H5><A NAME=
"Header_75">Reference
</A></H5>
2841 <P><B><A NAME=
"Table_55">Figure
55. Type Table Entry Sub-Record - Reference
</A></B><BR>
2844 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x48)
2845 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2846 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field Name
2847 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2848 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Field Data Description
2853 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Reference
2854 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
2855 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>
2856 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2857 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>
2859 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2860 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2861 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
2%
>Field type
2862 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2863 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
96%
>Type number of the reference type
2867 <H5><A NAME=
"Header_76">Scalars
</A></H5>
2869 The scalar's type qualifier byte has the following bit map
:
2871 Bit Value Data Description
2872 === ===== ========================
2873 0 0 unpacked (zoned)
2892 <P><B><A NAME=
"Table_56">Figure
56. Type Table Entry Sub-Record - Scalars
</A></B><BR>
2895 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x51)
2896 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2897 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2898 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2899 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2904 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Scalars
2905 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
2906 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2907 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2908 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2910 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2911 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2912 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Index
2913 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2914 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>A primitive type
2916 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2917 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2918 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Precision
2919 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2920 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Number of significant digits for packed decimal and floating point. Or number of significant bytes for zoned decimal.
2922 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2923 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2924 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Scale factor
2925 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
2926 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>128 + scale factor
2930 <H5><A NAME=
"Header_77">Set
</A></H5>
2934 <P><B><A NAME=
"Table_57">Figure
57. Type Table Entry Sub-Record - Set of
</A></B><BR>
2937 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x52)
2938 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2939 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2940 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2941 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
2946 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Set
2947 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
2948 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2949 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
2950 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
2952 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2953 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2954 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
2955 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
2956 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Base type
2958 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2959 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
2960 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
2961 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
2962 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed name of set's tag. First
1 byte determines the length of the name.
2966 <H5><A NAME=
"Header_78">Stack
</A></H5>
2968 The stack's type qualifier byte, showing the model of the stack, has the following bit map
:
2971 Bit Value Data Description
2972 === ===== ========================
2991 <P><B><A NAME=
"Table_58">Figure
58. Type Table Entry Sub-Record - Stack
</A></B><BR>
2994 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x57)
2995 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
2996 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
2997 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
2998 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
3003 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Stack
3004 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
3005 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3006 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3007 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
3009 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3010 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3011 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of stack
3012 </TD><TD ALIGN=LEFT VALIGN=TOP
>4
3013 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Size in bytes
3015 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3016 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3017 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
3018 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
3019 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length prefixed name of the stack (first
1 byte determines the length)
3023 <H5><A NAME=
"Header_79">Structure/Union/Record
</A></H5>
3025 The structure sub-record and its corresponding list sub-record are shown together
3026 for completeness. Each sub-record is to be encoded individually as a type table
3028 The ordering for the type index to type list and name list is important and
3029 required as defined below.
3030 The type list and the name list in the LIST sub-records must be
3031 synchronized. (i.e. the type for the nth name in the name list is
3032 the nth item in the type list.)
3033 The structure's type qualifier byte has the following bit map
:
3035 Bit Value Data Description
3036 === ===== ========================
3038 2 0 not a placeholder for linker
3040 (not used by PM Debugger)
3048 <P><B><A NAME=
"Table_59">Figure
59. Type Table Entry Sub-Record - Structure/Union/Record
</A></B><BR>
3051 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x79)
3052 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
3053 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
3054 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
3055 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
3060 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Structure, Union
3061 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>See bit map above
3062 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3063 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3064 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
3066 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3067 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3068 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Size of structure
3069 </TD><TD ALIGN=LEFT VALIGN=TOP
>4
3070 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>size in bytes
3072 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3073 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3074 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>field count
3075 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
3076 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Number of fields in structure
3078 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3079 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3080 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
3081 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3082 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3083 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3085 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3086 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3087 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Index to types list
3088 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
3089 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a sub-record containing a list of field types. See type list below.
3091 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3092 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3093 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
3094 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3095 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3096 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3098 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3099 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3100 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Index to names list
3101 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
3102 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a sub-record containing a list of field names and offset. See name list below.
3104 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3105 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3106 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
3107 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3108 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3109 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3111 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3112 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3113 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
3114 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
3115 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed Name of Structure Tag. First
1 byte determines the length of the name.
3120 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
3121 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x01
3122 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3123 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3124 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
3126 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3127 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3128 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3129 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3130 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat begins (for number of items in structure)
3132 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3133 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3134 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
3135 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3136 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3137 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3139 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3140 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3141 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field type
3142 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
3143 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type index (it may be primitive or complex)
3145 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3146 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3147 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3148 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3149 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat ends
3154 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>List (
0x7F)
3155 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x02
3156 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3157 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3158 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
3160 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3161 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3162 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3163 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3164 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat begins (for number of items in structure)
3166 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3167 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3168 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
3169 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3170 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3171 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3173 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3174 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3175 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
3176 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
3177 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed Name of the field, first
1 byte determines the length.
3179 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3180 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3181 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
3182 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3183 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3184 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3186 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3187 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3188 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Offset
3189 </TD><TD ALIGN=LEFT VALIGN=TOP
>1,
2 or
4
3190 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>The field's offset in bytes from the start of structure (field length determined by preceding FID_span)
3192 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3193 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3194 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3195 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3196 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Repeat ends
3200 <H5><A NAME=
"Header_80">Subrange
</A></H5>
3202 The ordering of the FID_span's in this sub-record is important and required as
3203 defined in the table.
3206 <P><B><A NAME=
"Table_60">Figure
60. Type Table Entry Sub-Record - Subrange
</A></B><BR>
3209 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x6F)
3210 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
3211 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
3212 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
3213 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
3218 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Subrange
3219 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
3220 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3221 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3222 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
3224 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3225 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3226 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Element's type
3227 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
3228 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Type index
3230 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3231 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3232 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
3233 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3234 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3235 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3237 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3238 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3239 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Starting value
3240 </TD><TD ALIGN=LEFT VALIGN=TOP
>1 ,
2 or
4
3241 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>The starting value, or low bound in an array (field length determined by preceding FID_span)
3243 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3244 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3245 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_span
3246 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3247 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3248 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3250 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3251 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3252 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Ending value
3253 </TD><TD ALIGN=LEFT VALIGN=TOP
>1 ,
2 or
4
3254 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>The ending value, or high bound in an array (field length determined by preceding FID_span)
3256 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3257 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3258 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
3259 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
3260 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Length-prefixed Name, first
1 byte determines the length.
3264 <H5><A NAME=
"Header_81">User Defined Type
</A></H5>
3266 <P><B><A NAME=
"Table_61">Figure
61. Type Table Entry Sub-Record - User Defined Type
</A></B><BR>
3269 <TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type (
0x5D)
3270 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type Qual.
3271 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Field Name
3272 </TH><TH ALIGN=LEFT VALIGN=TOP
>Field Length (bytes)
3273 </TH><TH ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Field Data Description
3278 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>User defined type
3279 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>0x00
3280 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3281 <BR></TD><TD ALIGN=LEFT VALIGN=TOP
>
3282 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>
3284 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3285 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3286 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_index
3287 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3288 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3289 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3291 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3292 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3293 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Type index
3294 </TD><TD ALIGN=LEFT VALIGN=TOP
>2
3295 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>This index identifies a type previously defined (it may be primitive or complex)
3297 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3298 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3299 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>FID_string
3300 </TD><TD ALIGN=LEFT VALIGN=TOP
>1
3301 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>Refer to
3302 <A HREF=
"#HDRTTEFLDI">"Field ID Values"</A>.
3304 <TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3305 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>
3306 <BR></TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
1%
>Name
3307 </TD><TD ALIGN=LEFT VALIGN=TOP
>N/A
3308 </TD><TD ALIGN=LEFT VALIGN=TOP WIDTH=
97%
>The name assigned to that type, first
1 byte determines the length
3312 <H1><A NAME=
"HDRDBLINUM" HREF=
"#ToC_82">Line Number Table
</A></H1>
3314 The Line Number Table provides the information necessary to associate an
3315 offset into a program segment with either a specific line in the source
3316 file or listing file. If both source and listing information is
3317 provided, the debugger will synchronize multiple views of the program.
3319 The Line Number Table is actually a collection of individual tables
3320 containing unique information required by the debugger to correctly
3321 map the executable output of the compiler to the source code for an
3323 Each table begins in a new OMF-
32 LINNUM record and
3324 may span multiple LINNUM records, if the information exceeds the
3325 maximum record size defined in the
32-bit Object Module Format (
1024). The
3326 tables within the Line Number Table are organized as illustrated in
3327 <A HREF=
"#FIGDBFLINT">Figure
62.
</A>:
3330 The File Names Table is always the first LINNUM record in the obj file.
3331 The File Names Table contains the names of all source files required to
3332 compile the program and optionally the listing file name.
3333 The Base Segment index in the OMF-
32 header is zero for this record,
3334 indicating to the Linker there is no logical-to-physical segment
3335 association or conversion required
3337 A Path Table may be present in the LINNUM records following the File
3338 Names Table if
"path" information is provided by the compiler
3339 describing the general flow of control through the program.
3340 The Path Table starts in a new LINNUM record, unique from the File Names
3342 The Base Segment index in the OMF-
32 header is zero for this record,
3343 indicating to the Linker there is no logical-to-physical segment
3344 association or conversion required
3346 The Line Number Entries for each Logical Segment follow the File Names
3347 Table and the Path Table, if provided.
3348 A separate set of Line Number
3349 entries, beginning in a new LINNUM record, is required for each
3350 Logical Segment in the compiled program. A Logical Segment is
3351 equivalent to the SEGDEF index in the obj file. The compiler saves
3352 the segment number in the LINNUM Header Base Segment index field.
3354 The LINNUM records must appear in ascending order
3355 of segment index. If the Line Number Entries for a logical segment
3356 exceed the maximum size of a LINNUM record, the
"continuation" LINNUM
3357 records must immediately follow the first LINNUM record and contain the
3358 same Base Segment index value. The
"continuation" LINNUM records do not
3359 contain a
"First Entry."
3361 If a logical segment does not contain any executable code, no LINNUM
3362 record should be generated for that segment.
3364 The Line Number Entries for each logical segment must be sorted in
3365 ascending order by offset. More than one entry with different offsets
3366 may exist for the same source line number; however, multiple entries
3367 with different source line numbers for the same offset may NOT exist.
3371 The Line Number Table is organized as follows
:
3372 <P><B><A NAME=
"FIGDBFLINT">Figure
62. Line Number Table -- Overview
</A></B><BR>
3375 +---------------------------------------+
3377 +---------------------------------------+
3378 | First Entry (special) |
3379 +---------------------------------------+
3381 | File Names Table |
3382 /// (may span mult. LINNUM records) ///
3384 +---------------------------------------+
3386 +---------------------------------------+
3387 | First Entry (special) |
3388 +---------------------------------------+
3391 /// (may span mult. LINNUM records) ///
3393 +---------------------------------------+
3395 +---------------------------------------+
3396 | First Entry (special) |
3397 +---------------------------------------+
3399 | Line Number Entries |
3400 /// (may span mult. LINNUM records) ///
3403 +---------------------------------------+
3407 +---------------------------------------+
3409 +---------------------------------------+
3410 | First Entry (special) |
3411 +---------------------------------------+
3413 | Line Number Entries |
3414 /// (may span mult. LINNUM records) ///
3417 +---------------------------------------+
3421 The LINNUM Header format is
:
3422 <P><B><A NAME=
"FIGDBFLHDR">Figure
63. Line Number Table Record -- Header
</A></B><BR>
3425 1 2 1 1 or
2 (bytes)
3426 +----+---------+---------+---------+
3427 | |Rec |Base |Base |
3428 |
95 | Length | Group | Segment|
3431 +----+---------+---------+---------+
3436 <DD>is '
95'x, indicating the record is for
32-bit flat addressing model
3439 <DD>The Base Group is an index specifying a previously defined
3440 GRPDEF record. The group index is ignored and assumed zero.
3442 <DD>The Base Segment is an index specifying a previously defined
3443 SEGDEF record. The segment
3444 index values must correspond to FIXUPP records for the
3445 Symbol Scope Table (see
<A HREF=
"#HDRDBSYMBL">"Symbol Scope Table"</A>), except for
3446 the File Names and Path Tables LINNUM records whose segment indices
3448 The segment index is length-encoded with a
0x80 indicating the value
3449 is contained in the following
15 bits; otherwise, the index is
1 byte.
3452 The First Entry format is
:
3453 <P><B><A NAME=
"FIGDBFFLNE">Figure
64. Line Number Table First Entry
</A></B><BR>
3457 +-------------------+---------+---------+
3458 0 | Line Number =
0 | Entry | Reserved|
3460 +-------------------+---------+---------+
3461 4 | Count of Table | Segment Number |
3463 +-------------------+-------------------+
3464 8 | File Names Table Size or |
3465 | Address of Logical Segment |
3466 +---------------------------------------+
3472 <DD>in the each LINNUM record that begins a File Names Table, Path Table
3473 or group of Line Number Entries for a
3474 logical segment of code, identifing the type of information
3475 in the remainder of the LINNUM record.
3478 <DD>to indicate this is a special entry.
3480 <DD>controls the format of the Line Number entry.
3483 <DD>Source File Information and offset only.
3485 <DD>Listing File Information and offset only.
3487 <B>Note
:</B> Not used by PM Debugger.
3489 <DD>Source and Listing File Information and offset.
3491 <B>Note
:</B> Not used by PM Debugger.
3493 <DD>File Names Table follows first entry
3496 <DD>Path Table follows first entry
3498 <B>Note
:</B> Not used by PM Debugger.
3500 <DT>Count of Table Entries
3501 <DD>for this entry type, not including the First (special) Entry.
3502 Used for Path Table, plus
3503 Source, Listing, and Source/Listing type Line Number information.
3504 <DT>Segment Number for Line Number Table
3505 <DD>initialized to zero by compiler, set by Linker to physical segment
3506 number containing logical segment in LINNUM header
3507 via compiler generated fixup record.
3508 <DT>File Names Table Size
3509 <DD>in bytes, including the three counts preceding the file
3511 This
4-byte value extends the First Entry size to
3512 12 bytes only when Entry Type is
"0x03."
3513 <DT>Address of Logical Segment
3514 <DD>for this Line Number Table, initialized to zero by compiler,
3515 set to correct address by linker via compiler generated fixup record.
3516 This
4-byte value extends the First Entry size to
3517 12 bytes when Entry Type is
"0x00" or
"0x01" or
"0x02"
3522 Each Line Number Entry has one of the following formats
:
3523 <P><B><A NAME=
"FIGDBFLENT">Figure
65. Line Number Entries
</A></B><BR>
3526 <B>Entry Type =
0x00 - Source Line Numbers
</B>
3528 +---------------------------------------+
3529 0 | Source File | Source File |
3530 | Line Number | Index |
3531 +---------------------------------------+
3532 4 | Offset into Segment |
3534 +---------------------------------------+
3537 <B>Entry Type =
0x01 - Listing Statement Numbers
</B>
3539 +---------------------------------------+
3540 0 | Listing File Line Number |
3542 +---------------------------------------+
3543 4 | Listing File Statement Number |
3545 +---------------------------------------+
3546 8 | Offset into Segment |
3548 +---------------------------------------+
3551 <B>Entry Type =
0x02 - Source and Listing File Information
</B>
3553 +---------------------------------------+
3554 0 | Source File | Source File |
3555 | Line Number | Index |
3556 +---------------------------------------+
3557 4 | Listing File Line Number |
3559 +---------------------------------------+
3560 8 | Listing File Statement Number |
3562 +---------------------------------------+
3563 C | Offset into Segment |
3565 +---------------------------------------+
3570 The data items in the different format Line Number Entries are
:
3572 <P><DT>Source File Line Number
3573 <DD>is the line number in the source file identified by the Source
3575 <P><DT>Listing File Line Number
3576 <DD>is the line number in the listing file, whose name is the last name
3577 in the File Names Table (see
<A HREF=
"#HDRDBLFILE">"File Names Table"</A>).
3578 <P><DT>Listing Statement Number
3579 <DD>is the statement number assigned by the compiler to the source
3581 <P><DT>Source File Index
3582 <DD>is a two byte index into the File Names Table, identifying the
3583 source file in which the program offset resides.
3584 The index of the first file is one (
1).
3586 <DD>is a
4 byte quantity which gives the translated code or data
's
3587 start byte in the program segment defined by the SEGDEF index.
3591 <H3><A NAME=
"HDRDBLPATH" HREF=
"#ToC_83">Path Table
</A></H3>
3593 The Path Table immediately follows the File Names Table, starting in a
3594 separate LINNUM record.
3595 Path Information can not reside in an OBJ without Source or Listing
3597 <P><B>Note:
</B>Not used by PM Debugger.
3598 <P><B><A NAME=
"FIGDBFPATH">Figure
66. Path Table Entry
</A></B><BR>
3601 <B>Entry Type = Path Table
</B>
3603 +---------------------------------------+
3604 0 | Offset into Segment |
3606 +-------------------+-------------------+
3607 4 | Path Code | Source File |
3609 +-------------------+-------------------+
3615 <DD>is a
4 byte quantity which gives the translated code or data
's
3616 start byte in the program segment defined by the SEGDEF index.
3617 <P><B>Note:
</B>Path Table entries must be sorted by offset.
3619 <DD>is a two byte quantity identifying significant control flow points
3620 in the compiled program.
3621 <P><B>Note:
</B>The path code is two bytes long only to force word boundaries for
3622 each entry, to improve code efficiency.
3623 <P><DT>Source File Index
3624 <DD>is a two byte index into the File Names Table, identifying the
3625 source file in which the program offset resides.
3626 The index of the first file is one (
1).
3630 <H3><A NAME=
"HDRDBLFILE" HREF=
"#ToC_84">File Names Table
</A></H3>
3632 The File Names Table is the first LINNUM record in an obj file.
3634 The File Names Table contains the names of the primary source file, the source
3635 files, INCLUDEd by the primary source file and, if listing file line numbers or
3636 statement numbers are supplied (see
<A HREF=
"#HDRDBLINUM">"Line Number Table"</A>), the name
3637 of the listing file.
3638 <P><B><A NAME=
"FIGDBFFILE">Figure
67. File Names Table
</A></B><BR>
3641 +-------------------+-------------------+-------------------+-.
3642 | First Displayable | Number Displayable| Number of Source |
3643 | Char in List Line| Chars in List Line| and Listing Files |
3644 +-------------------+-------------------+-------------------+-.
3648 .-+----+------------------------+-//-+----+-------------------+-.
3649 |Len | Name of File |....|Len | Name of File |
3651 .-+----+------------------------+-//-+----+-------------------+-.
3655 .-+----+------------------------+
3656 |Len | Listing File Name |
3658 .-+----+------------------------+
3663 <P><DT>First Displayable Character in Listing Line
3665 <P><B>Note:
</B>Not used by PM Debugger.
3666 <P><DT>Number of Displayable Characters in Listing Line
3668 <P><B>Note:
</B>Not used by PM Debugger.
3669 <P><DT>Number of Source and Listing Files
3670 <DD>is count of the number of file name entries in the table.
3672 <DD>for each Source file and/or the listing file.
3673 The listing file name will always will the last name in the table.
3674 <P><B>Notes:
</B><OL>
3675 <P><LI>The length-prefixed file names are indexed by the Source
3676 File Index in the Line Number records (see
<A HREF=
"#HDRDBLINUM">"Line Number Table"</A>).
3677 <P><LI>The order of search for file names is
:
3679 <LI>The path information (drive and directory) in the file name
3680 <LI>The directory containing the EXE file.
3681 <LI>The path specified in the PMDPATH environment variable.
3682 <LI>The current path in effect when PMD is started.
3687 <H1><A NAME=
"HDRDBLXSEC" HREF=
"#ToC_85">Appendix A. LX Format Debug Section Description
</A></H1>
3689 <H2><A NAME=
"Header_86" HREF=
"#ToC_86">Overview
</A></H2>
3691 The Debug Section of the OS/
2 Warp LX executable file contains symbolic
3692 debug information, which is NOT loaded by the OS/
2 Loader. The Debug
3693 Section begins and ends with the NB04 signature (ASCII char string).
3694 The Debug Section is generated whenever the /DEbug (or /COdeview)
3695 option is specified to the Linker.
3696 <P><B>Note:
</B>NB00 format debug information may also be generated if OBJs are
3697 linked containing ONLY non-HLL style debug information.
3698 The directory header contains only a
2-byte count of number of
3700 Differently formatted and/or additional subsections
3701 will exist for NB00 signatures, consistent with existing
16-bit
3702 Microsoft-compatible debug information; however, all offset/length
3703 fields will be four bytes long, instead of two bytes.
3704 <P>Legend for the following information
3707 DW - word - unsigned short
3708 DD - double - unsigned long
3711 The Directory information (the block of information at the end of the
3713 pointed to by the offset
3714 pointer following the leading NB04 signature, or the Offset/Length
3715 fields in the EXE/DLL header) has the following format
:
3716 <P><B><I>Include structure name = NB04_DEBUG_DIRINFO
</I></B>
3718 00 DW number of bytes in DNT directory structure
3719 (currently
8 -
0x0008)
3720 02 DW number of bytes in the DNT entry
3721 (currently
12 -
0x000c)
3722 04 DD number of directory entries
3724 followed by the array of DNT structures (entries) containing
:
3725 <P><B><I>Include structure name = NB04_DEBUG_DIR
</I></B>
3727 00 DW sst subsection type
3728 02 DW Module index number (
1-based)
3729 04 DD Offset of start of debug subsection
3730 08 DD size of section in bytes
3733 <H2><A NAME=
"Header_87" HREF=
"#ToC_87">Subsection Descriptions
</A></H2>
3735 The sstModules section (type
0x101) of an EXE/DLL file with an
3736 NB04 signature has the following format
:
3737 <P><B><I>Include structure name = NB04_DEBUG_MOD_32
</I></B>
3739 00 DW Code Segment Base
3740 02 DD Code Segment offset
3741 06 DD Code Segment length
3742 0A DW Overlay number
3743 0C DW Index into sstLibraries subsection, or
0 if non-library module
3745 The next
2 bytes indicate the number of Segments to follow
3746 (Total number of segments)
3747 0 or
1 indicate a single segment for the module n where n
>1
3748 indicates n-
1 additional segment structs exist (see below)
3749 0E DB Low order byte of number of segments
3750 0F DB High order byte of number of segments
3751 10 DW Debug Style ('HL
" for HLL debug tables, 'CV' or 00 for
3753 12 DW Version Number of format (containing two-character codes of
3754 the form ('00 01' or '00 03' for HL; '00 00' or '00 01' may be
3756 14 DB Length prefixed name of module (1 byte length)
3758 after the name, the following three fields will be repeated for any
3759 additional segments that may exist for the module. The NOPackcode
3760 Linker option should be used if multiple code segments exist for a
3761 module (using the PACKCode option (default if NOPackcode isn't
3762 specified) may combine separate segments created by the compiler;
3763 therefore, preventing the debugger from being able to locate the
3764 original logical segments).
3765 Addition segment structs have the following format:
3766 <P><B><I>Include structure name = DEBUG_SEGINFO_32 </I></B>
3768 00 DW Code Segment number
3769 02 DD Code Segment offset
3770 06 DD Code Segment length
3771 0A Repeat above three data areas per Number of Segments above
3773 <P>The sstPublics subsection (type 0x102) has the following format for
3774 NB04 Debug sections:
3775 <P><B><I>Include structure name = PUBLIC_32 </I></B>
3780 08 DB Length prefixed name of symbol (1 byte length)
3783 The sstType subsection (type 0x103) contains the HLL Debug Format
3784 Type records, as emitted by the compiler in the OBJ file.
3785 If a sstType subsection does not exist for a module, the type records
3786 have been "packed
" into a single sstType section for the Linker
3787 created module "$$HL04
" (see also the new ILINK DBGP(ACK) option).
3788 <P><B>Note: </B>If object files containing older versions of debug information
3789 are also linked, modules may have also been created with names "$$HL01
"
3792 The sstSymbols subsection (type 0x104) contains the HLL Debug Format
3793 Symbol Scope Table records, as emitted by the compiler in the OBJ file.
3795 The sstLibraries subsection (type 0x106) contains an array of length-
3796 prefixed names (one-byte length) of all the library files used during
3797 the link step. The order of this list defines the library index number
3798 in the sstModules subsection. The use of this list allows removal of
3799 redundant library names in the Modules subsection. The first entry
3800 should be empty (i.e., zero-length string) since library indices are
3803 The sstHLLSrc subsection (type 0x10B) contains the HLL Debug Format
3804 Line Number Tables, as emitted by the compiler in the OBJ file.
3805 <TABLE BORDER><TR><TH ALIGN=LEFT>End of Document</TH><TR><TD>
3807 <HR><B> Footnotes:</B>
3808 <P><A NAME="Footnote_1
" >(1)</A>
3809 IBM Internal Use Only systems language
3810 <P><A NAME="Footnote_2
" >(2)</A>
3811 32-bit Object Module Format defined in OS/2 2.0 documentation
3812 <A NAME=Bot_Of_Page> </A>