* remove "\r" nonsense
[mascara-docs.git] / manuals / openwatcom / devel-docs / docs / ibmhll.html
bloba76a3310661d2e1c0bc6ed87d536edf9678f5a1c
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>&#32;</A><H1>High Level Languages Debug Table Documentation</H1><P>Alan Boxall<BR><P>Alan Boxall<BR>Date of Issue&#58; 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&#58;</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&#58;<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&#58;<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&#58;<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%>&#32;<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&#58;<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&#58;<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 +---------------------------------------+
3 | LEDATA Header |
4 | |
5 +---------------------------------------+
6 | |
7 | Symbol Table Sub-Records |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 +---------+-----------------------------+
15 | Check |
16 | Sum |
17 +---------+
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&#58;<P><PRE>
20 FirstByte = *(LenFldPtr++);
22 if (FirstByte & 0x80)
24 SecondByte = *LenFldPtr;
25 Length = ((FirstByte & 0x7F) << 8) + SecondByte;
27 else
29 Length = FirstByte;
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 |
36 | | | |
37 +----+----+-------------------------------------------------+
38 0 1 2
39 or 2 3
41 </PRE><BR><P><P>The supported sub-record types (hex values) are&#58;<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)
48 2 int A; Static (A)
49 3 main (void) Proc (main)
51 5 { Begin (Block0)
52 6 int A,X; Auto (A)
53 7 } Auto (X)
54 8 End (Block0)
55 9 End (Proc_main)
57 11 static int X; Static (X)
59 13 P1 (int B, int X) Proc (P1)
60 14 Auto (B)
61 15 Auto (X)
62 16 { Begin (Block0)
63 17 static int D; Static (D)
64 18 { Begin (Block1)
65 19 int B; Auto (B)
66 20 } End (Block1)
67 21 } End (Block0)
68 22 End (Proc_P1)
70 24 static int E; Static (E)
72 26 P2 (void) Proc (P2)
74 28 { Begin (Block0)
75 29 Auto (A)
76 30 int A; End (Block0)
77 31 } End (proc_P2)
78 CuInfo (Compile Unit Information)
79 Note&#58;
80 Along with main, P1 and p2, A in line 2 will also be shown as Public
81 symbol in PUBDEF.
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 |
87 | | | | |
88 +----+----+-------------------+-------------------+
89 0 1 2 6 A
90 or 2 3 7 B
94 .-+----+------------------------+
95 |Len | Name of Block |
96 |Name| |
97 .-+----+------------------------+
98 A B
99 or B C
101 </PRE><BR><P><DL><P><DT>Notes&#58;<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 |
105 | | | | Index | |
106 +----+----+-------------------+---------+-------------------+-
107 0 1 2 6 8 C
108 or 2 3 7 9 D
111 .-+---------+-------------------+---------+----+-
112 |Length of| Length of prologue| Class |Near|
113 | Prologue| plus Body | Type |/Far|
114 .-+---------+-------------------+---------+----+-
115 C E 12 14 15
116 D F 13 15 16
119 .-+----+------------------------+
120 |Len | Name of Procedure |
121 |Name| |
122 .-+----+------------------------+
123 15 16
124 16 17 or 18
126 </PRE><BR><P><DL><P><DT>Notes&#58;<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&#58;</B> Only used for Ring 3 Call Gate accessible code.<BR><B>Note&#58;</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>
128 +----+----+
129 | Len|Type|
130 | | |
131 +----+----+
132 0 1 2
133 or 2 3
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 +----+----+-------------------+---------+----+-------------------+
141 0 1 2 6 8 9
142 or 2 3 7 9 A
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 +----+----+-------------------+---------+---------+----+-------------------+
150 0 1 2 6 8 A B
151 or 2 3 7 9 B C or D
153 </PRE><BR><P><DL><P><DT>Notes&#58;<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 +----+----+-------------------+---------+---------+----+-------------------+
159 0 1 2 6 8 A B
160 or 2 3 7 9 B C or D
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 |
166 | | | |/Far|Name| |
167 +----+----+-------------------+----+----+-------------------+
168 0 1 2 6 7 8
169 or 2 3 7 8 9
171 </PRE><BR><P><DL><P><DT>Notes&#58;<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 +----+----+---------+----+----+-------------------+
177 0 1 2 4 5 6
178 or 2 3 5 6 7
180 </PRE><BR><P><DL><P><DT>Notes&#58;<P><DD><UL><P><LI>The Reg No. values (in hex) are&#58;<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&#58;AX'<DT>21<DD>'ES&#58;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 +----+----+--------+------------+--------+-.
185 0 1 2 4 8 A
186 or 2 3 5 9 B
188 .-+----+------------------------+
189 |Len | Name of Symbol |
190 |Name| |
191 .-+----+------------------------+
193 or B C
194 </PRE><BR><P><DL><P><DT>Notes&#58;<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
203 Len Value
205 </PRE><BR><P><DL><P><DT>Notes&#58;<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|
209 | | | Number | |
210 +----+----+---------+---------+
211 0 1 2 4
212 or 2 3 5
214 </PRE><BR><P><DL><P><DT>Notes&#58;<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 |
218 | | | Index |Name| |
219 +----+----+---------+----+-------------------+
220 0 1 2 4 5
221 or 2 3 5 6
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 +----+----+-------------------+---------+---------+----+-------------------+
229 0 1 2 6 8 A B
230 or 2 3 7 9 B C
232 </PRE><BR><P><DL><P><DT>Notes&#58;<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 +----+----+-------------------+----+-----------------+
238 0 1 2 6 7
239 or 2 3 7 8
241 </PRE><BR><P><DL><P><DT>Notes&#58;<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>
242 <P><BR>
243 <PRE>
245 +----+----+-------------------+---------+----+-----------+
246 | Len|Type| Offset to |Type |Len | Name |
247 | | | Subrecord | Index |Name| |
248 +----+----+-------------------+---------+----+-----------+
249 0 1 2 6 8 9
250 or 2 3 7 9 A
252 </PRE><BR>
254 <DL>
255 <P><DT>Notes&#58;
256 <P><DD>
257 <UL>
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.
260 </UL>
261 </DL>
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>
265 <P><BR>
266 <PRE>
268 +----+----+-------------------+---------+-------------------+----+-----------“
269 | Len|Type| Offset to |Type | Offset from |Len | Name |
270 | | | Subrecord | Index | Base |Name| |
271 +----+----+-------------------+---------+-------------------+----+-----------•
272 0 1 2 6 8 C D
273 or 2 3 7 9 D E
275 </PRE><BR>
277 <DL>
278 <P><DT>Notes&#58;
279 <P><DD>
280 <UL>
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.
284 </UL>
285 </DL>
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>
289 <P><BR>
290 <PRE>
292 +----+----+---------+-------------------+
293 | Len|Type|Type | Offset to symbol |
294 | | | Index | of ODO object |
295 +----+----+---------+-------------------+
296 0 1 2 4 8
297 or 2 3 5 9
299 </PRE><BR>
301 <DL>
302 <P><DT>Notes&#58;
303 <P><DD>
304 <UL>
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.
313 </UL>
314 </DL>
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>
318 <P><BR>
319 <PRE>
321 +----+----+---------+----+-----------+
322 | Len|Type| Type |Len | Name |
323 | | | Index |Name| |
324 +----+----+---------+----+-----------+
325 0 1 2 4 5
326 or 2 3 5 6
328 </PRE><BR>
330 <DL>
331 <P><DT>Notes&#58;
332 <P><DD>
333 <UL>
334 <P><LI>This subrecord provides the scope information for tags.
335 (e.g. structure)
336 </UL>
337 </DL>
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>
341 <P><BR>
342 <PRE>
344 +----+----+--------+--------+-------+-----------+
345 | Len|Type| Len (1)|Name |Len (2)|External |
346 | | | Name | |Name |Known Name |
347 +----+----+--------+--------+-------+-----------+
348 0 1 2 3 3 + 4 +
349 or 2 3 4 4 + 5 +
350 Len(1) Len(1)
351 </PRE><BR>
353 <DL>
354 <P><DT>Notes&#58;
355 <P><DD>
356 <UL>
357 <P><LI>Map supports mapped external names for C.
358 </UL>
359 </DL>
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>
363 <P><BR>
364 <PRE>
366 +----+----+-------------+---------+---------+-------------+----+--------------+
367 | Len|Type| Segment | Segment | Type |Index Offset |Len | Symbol Name |
368 | | | offset | Address| Index |to subrecord |Name| |
369 +----+----+-------------+---------+---------+-------------+----+--------------+
370 0 1 2 6 8 A E F
371 or 2 3 7 9 B F 10
373 </PRE><BR>
375 <DL>
376 <P><DT>Notes&#58;
377 <P><DD>
378 <UL>
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
382 constructs.
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.
388 </UL>
389 </DL>
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>
393 <P><BR>
394 <PRE>
396 +----+----+----+----+-------------------+---------------------------------------+-
397 | Len|Type|Comp|Len | Compiler Options | Compiler Data |
398 | | | ID |Opts| | |
399 +----+----+----+----+-------------------+---------------------------------------+-
400 0 1 2 3 4 8 10
401 or 2 3 4 5 9 11
404 +---------------------------------------+
405 | Timestamp |
407 +---------------------------------------+
408 10 18
409 or 11 19
411 </PRE><BR>
413 <DL>
414 <P><DT>Notes&#58;
415 <P><DD>
416 <UL>
417 <P><LI>The Compile Unit Information sub-reord contains compiler specific
418 information required by PMD to correctly process the user program.
419 <DL>
420 <P><DT>Compiler ID
421 <DD>is an encoded identification of the compiler generating this OBJ.
422 The values for this data item are&#58;
423 <DL COMPACT>
424 <DT>01
425 <DD>C
426 <DT>02
427 <DD>C++
428 <DT>03
429 <DD>PL/X-86
430 <DT>04
431 <DD>PL/I
432 <DT>05
433 <DD>RPG
434 <DT>06
435 <DD>COBOL
436 <DT>07
437 <DD>ALP (Assembler for Intel)
438 </DL>
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
443 <P><DT>Timestamp
444 <DD>in DosGetDateTime format (8 bytes)
445 <P><DT>Compiler Date
446 <DD>Length-prefixed string containing "build date" of compiler emitting
447 debug information. Used only for "visual" verification of compiler
448 level.
449 </DL>
450 <P><LI>The Compile Unit Information sub-record must be the first sub-record in
451 the Symbol Scope Table.
452 </UL>
453 </DL>
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>
457 <P><BR>
458 <PRE>
459 +----+----+----------+----+---------------+
460 |Len |Type| Type |Len | Name |
461 | | | Index |Name| |
462 +----+----+----------+----+---------------+
463 0 1 2 4 5
464 or 2 3 5 6 or 7
465 </PRE><BR>
467 <DL>
468 <P><DT>Notes&#58;
469 <P><DD>
470 <UL>
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.
476 </UL>
477 </DL>
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>
481 <P><BR>
482 <PRE>
483 +----+----+-------------+-----------+-----------+-.
484 |Len |Type|Offset into |Source File|Source File| ...
485 | | |Stack Frame | Index |Line No. |
486 +----+----+-------------+-----------+-----------+-.
487 0 1 2 6 8 C
488 or 2 3 7 9 D
490 .-+---------+----+------------------------+
491 | Type |Len | Name of Symbol |
492 | Index |Name| |
493 .-+---------+----+------------------------+
494 D F 10
495 or E 10 11
496 </PRE><BR>
498 <DL>
499 <P><DT>Notes&#58;
500 <P><DD>
501 <UL>
502 <P><LI>Intended only for C++, not used by PM Debugger.
503 </UL>
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
508 </DL>
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>
512 <P><BR>
513 <PRE>
514 +----+----+-------+---------+----------+-----------+-.
515 |Len |Type|Segment|Segment |Source |Source File| ...
516 | | |Offset |Address |File Index| Line No. |
517 +----+----+-------+---------+----------+-----------+-.
518 0 1 2 6 8 A E
519 or 2 3 7 9 B F
521 .-+---------+----+------------------------+
522 | Type |Len | Name of Symbol |
523 | Index |Name| |
524 .-+---------+----+------------------------+
525 E 10 11
526 or F 11 12
527 </PRE><BR>
529 <DL>
530 <P><DT>Notes&#58;
531 <P><DD>
532 <UL>
533 <P><LI>Intended only for C++, not used by PM Debugger.
534 </UL>
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
539 </DL>
540 <HR>
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,
558 via the Linker.
559 These records are stored in the OBJ file by the
560 compilers when the compilers' debug option is specified by the user.
561 The Linker
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
579 by OS/2.
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
582 details.
583 <P><B><A NAME="FIGDBFTYPR">Figure 29. Type Table Record Format</A></B><BR>
584 <P><BR>
585 <PRE>
586 +---------------------------------------+
587 | LEDATA Header |
589 +---------------------------------------+
590 | Type Table Entries (or Sub-Records) |
597 +---------+-----------------------------+
598 | Check |
599 | Sum |
600 +---------+
601 </PRE><BR>
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>
622 <P><BR>
623 <PRE>
625 +-----------+----+----+-----------------------------+
626 | Length of |Type|Type| Sub-Record Specific Data |
627 | Sub-Record| |Qual| |
628 +-----------+----+----+-----------------------------+
629 0 2 3 4
631 </PRE><BR>
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>
639 <P><BR>
640 <PRE>
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 --------------------->
649 </PRE><BR>
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>.
655 <P><P>
657 <H3><A NAME="HDRTTEINDX" HREF="#ToC_46">Type Index Formats</A></H3>
659 The Type Index (TypInd) field has two formats.
660 <OL>
661 <P><LI>The type index may be stored as either one or two bytes values in the following
662 records&#58;
663 <UL COMPACT>
664 <LI>PUBDEF, LPUBDEF
665 <LI>COMDEF, LCOMDEF
666 <LI>EXTDEF, LEXTDEF
667 </UL>
669 PMD interprets the Type Index in these records as follows&#58;
671 <PRE>
673 FirstByte = *(TypeFldPtr++);
675 if (FirstByte & 0x80)
677 SecondByte = *TypeFldPtr;
678 TypeIndex = ((FirstByte & 0x7F) << 8) + SecondByte;
680 else
682 TypeIndex = FirstByte;
685 </PRE>
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&#58;
691 <UL COMPACT>
692 <LI>$$SYMBOLS sub-records
693 <LI>$$TYPES sub-records
694 </UL>
695 </OL>
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&#58;
707 <PRE>
709 FirstByte = *(LenFldPtr++);
711 if (FirstByte & 0x80)
713 SecondByte = *LenFldPtr;
714 Length = ((FirstByte & 0x7F) << 8) + SecondByte;
716 else
718 Length = FirstByte;
721 </PRE>
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,
729 decimal.
730 <P>The Primitive Type values are defined below.
731 Note&#58; 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>.
734 <PRE>
736 DEC HEX DESCRIPTION
737 ===== ===== ===============
739 128 80 8 bit signed
740 129 81 16 bit signed
741 130 82 32 bit signed
742 132 84 8 bit unsigned
743 133 85 16 bit unsigned
744 134 86 32 bit unsigned
745 136 88 32 bit real
746 137 89 64 bit real
747 138 8A 80 bit real
748 140 8C 64 bit complex
749 141 8D
750 128 bit complex
751 142 8E 160 bit complex
752 144 90 8 bit boolean
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
758 151 97 void
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
788 </PRE>
789 <PRE>
791 DEC HEX DESCRIPTION
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
819 </PRE>
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>.
833 <DL COMPACT>
834 <DT>0x40
835 <DD>Class
836 <DT>0x41
837 <DD>Base Class
838 <DT>0x42
839 <DD>Friend
840 <DT>0x43
841 <DD>Class Definition
842 <DT>0x44
843 <DD>not used
844 <DT>0x45
845 <DD>Member Function
846 <DT>0x46
847 <DD>Class Member
848 <DT>0x47
849 <DD>not used
850 <DT>0x48
851 <DD>Reference
852 <DT>0x49
853 <DD>Member Pointer
854 <DT>0x51
855 <DD>Scalars
856 <DT>0x52
857 <DD>Set
858 <DT>0x53
859 <DD>Entry
860 <DT>0x54
861 <DD>Function
862 <DT>0x55
863 <DD>Area
864 <DT>0x56
865 <DD>Logical
866 <DT>0x57
867 <DD>Stack
868 <DT>0x59
869 <DD>Macro
870 <DT>0x5C
871 <DD>Bit String
872 <DT>0x5D
873 <DD>User defined type
874 <DT>0x60
875 <DD>Character String
876 <DT>0x61
877 <DD>Picture
878 <DT>0x62
879 <DD>Graphic
880 <DT>0x65
881 <DD>Format Label
882 <DT>0x67
883 <DD>File
884 <DT>0x6F
885 <DD>Subrange
886 <DT>0x72
887 <DD>Code Label
888 <DT>0x75
889 <DD>Procedure
890 <DT>0x78
891 <DD>Array
892 <DT>0x79
893 <DD>Structure/Union/Record
894 <DT>0x7A
895 <DD>Pointer
896 <DT>0x7B
897 <DD>Enum
898 <P>Special sub-record types
899 <DT>0x7F
900 <DD>List
901 </DL>
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&#58;
908 <P><B>Note: </B>The names correspond to the Type Table Entry definitions in
909 <A HREF="#HDRTTEDEFN">"Type Table Entry Definitions"</A>.
910 <DL COMPACT>
911 <DT>FID_nil
912 <DD>
913 <DL COMPACT>
914 <DT>0x80
915 <DD>(this identifies the contents to be nil, no further data expected)
916 <DD>
917 </DL>
918 <DT>FID_void
919 <DD>
920 <DL COMPACT>
921 <DT>0x81
922 <DD>(this identifies the contents to be of type void, no further data expected)
923 <DD>
924 </DL>
925 <DT>FID_string
926 <DD>
927 <DL COMPACT>
928 <DT>0x82
929 <DD>(the contents is a length prefixed character string, the first byte(s) is the length)
930 <DD>
931 </DL>
932 <DT>FID_index
933 <DD>
934 <DL COMPACT>
935 <DT>0x83
936 <DD>(the contents is type index, it may be a primitive or complex type)
937 <DD>
938 </DL>
939 <DT>FID_span
940 <DD>
941 <DL COMPACT>
942 <DT>
943 <DD>(the length and nature of the contents depends on the values listed below)
944 <DD>
945 </DL>
946 <BR>
947 <DL COMPACT>
948 <DT>0x85
949 <DD>16-bit unsigned
950 <DT>0x86
951 <DD>32-bit unsigned
952 <DT>0x88
953 <DD>8-bit signed
954 <DT>0x89
955 <DD>16-bit signed
956 <DT>0x8A
957 <DD>32-bit signed
958 <DT>0x8B
959 <DD>8-bit unsigned
960 </DL>
961 <DT>FID_precision
962 <DD>
963 <DL COMPACT>
964 <DT>0x8C
965 <DD>deleted
966 </DL>
967 </DL>
968 <P><P>
970 <H3><A NAME="HDRTTEDEFN" HREF="#ToC_51">Type Table Entry Definitions</A></H3>
972 <H5><A NAME="Header_52">Area</A></H5>
973 <BR>
974 <P><B><A NAME="Table_32">Figure 32. Type Table Entry Sub-Record - Area</A></B><BR>
975 <TABLE BORDER>
976 <TR>
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
982 </TH></TR><TR>
983 <TR>
984 <TR>
985 <TR>
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%>
991 <BR></TD></TR><TR>
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>.
998 </TD></TR><TR>
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
1004 </TD></TR><TR>
1005 <TR>
1006 <TR>
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.
1012 </TD></TR><TR>
1013 </TABLE>
1014 <P><P>
1016 <H5><A NAME="Header_53">Array</A></H5>
1017 <DL COMPACT>
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&#58;
1020 <PRE>
1021 Bit Value Data Description
1022 === ===== ========================
1023 0 0 row major
1024 1 column major
1026 1 0 unpacked array
1027 1 packed array
1029 2 0 no descriptor required
1030 1 descriptor provided
1032 3 0 fixed length array
1033 1 variable length array
1035 4-7 reserved
1036 </PRE>
1037 </DL>
1038 <BR>
1039 <P><B><A NAME="Table_33">Figure 33. Type Table Entry Sub-Record - Array</A></B><BR>
1040 <TABLE BORDER>
1041 <TR>
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
1047 </TH></TR><TR>
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%>
1053 <BR></TD></TR><TR>
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
1059 </TD></TR><TR>
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>.
1066 </TD></TR><TR>
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
1072 </TD></TR><TR>
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>.
1079 </TD></TR><TR>
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
1085 </TD></TR><TR>
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>.
1092 </TD></TR><TR>
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.
1098 </TD></TR></TABLE>
1099 <DL COMPACT>
1100 A few words on multi-dimensional array and array of complex type&#58;
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
1125 array.
1126 </DL>
1127 <P><P>
1129 <H5><A NAME="Header_54">Base Class</A></H5>
1130 <DL COMPACT>
1131 The Base Class' type qualifier byte has the following bit map&#58;
1132 <PRE>
1133 Bit Value Data Description
1134 === ===== ========================
1135 0 0 not a virtual class
1136 1 is_virtual
1138 1-7 reserved
1140 </PRE>
1141 </DL>
1142 <BR>
1143 <P><B><A NAME="Table_34">Figure 34. Type Table Entry Sub-Record - Base Class</A></B><BR>
1144 <TABLE BORDER>
1145 <TR>
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
1151 </TH></TR><TR>
1152 <TR>
1153 <TR>
1154 <TR>
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%>
1160 <BR></TD></TR><TR>
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
1166 </TD></TR><TR>
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
1172 </TD></TR><TR>
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"
1178 </TD></TR><TR>
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)
1185 </TD></TR></TABLE>
1186 <P><P>
1188 <H5><A NAME="Header_55">Bit String</A></H5>
1189 <DL COMPACT>
1190 The bit string's type qualifier byte has the following bit map&#58;
1191 <PRE>
1192 Bit Value Data Description
1193 === ===== ========================
1194 0 0 non-varying
1195 1 varying
1197 1 0 unsigned
1198 1 signed
1200 2 0 byte alignment
1201 1 word alignment
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
1209 5-7 reserved
1210 </PRE>
1211 </DL>
1212 <BR>
1213 <P><B><A NAME="Table_35">Figure 35. Type Table Entry Sub-Record - Bit string</A></B><BR>
1214 <TABLE BORDER>
1215 <TR>
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
1221 </TH></TR><TR>
1222 <TR>
1223 <TR>
1224 <TR>
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%>
1230 <BR></TD></TR><TR>
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
1236 </TD></TR><TR>
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>.
1243 </TD></TR><TR>
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
1249 </TD></TR><TR>
1250 <TR>
1251 <TR>
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%>
1257 <BR></TD></TR><TR>
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
1263 </TD></TR><TR>
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>.
1270 </TD></TR><TR>
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
1276 </TD></TR><TR>
1277 <TR>
1278 <TR>
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.
1284 </TD></TR></TABLE>
1285 <P><P>
1287 <H5><A NAME="Header_56">Character String</A></H5>
1288 <BR>
1289 <P><B><A NAME="Table_36">Figure 36. Type Table Entry Sub-Record - Character String</A></B><BR>
1290 <TABLE BORDER>
1291 <TR>
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
1297 </TH></TR><TR>
1298 <TR>
1299 <TR>
1300 <TR>
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%>
1306 <BR></TD></TR><TR>
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>.
1313 </TD></TR><TR>
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
1319 </TD></TR><TR>
1320 <TR>
1321 <TR>
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%>
1327 <BR></TD></TR><TR>
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>.
1334 </TD></TR><TR>
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
1340 </TD></TR><TR>
1341 <TR>
1342 <TR>
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.
1348 </TD></TR><TR>
1349 <TR>
1350 <TR>
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%>
1356 <BR></TD></TR><TR>
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>.
1363 </TD></TR><TR>
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
1369 </TD></TR><TR>
1370 <TR>
1371 <TR>
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%>
1377 <BR></TD></TR><TR>
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>.
1384 </TD></TR><TR>
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
1390 </TD></TR><TR>
1391 <TR>
1392 <TR>
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
1398 </TD></TR><TR>
1399 </TABLE>
1400 <P><P>
1402 <H5><A NAME="Header_57">Class</A></H5>
1403 <DL COMPACT>
1404 The Class' type qualifier byte has the following bit map&#58;
1405 <PRE>
1406 Bit Value Data Description
1407 === ===== ========================
1408 0 0 not a structure
1409 1 is_struct
1410 1 0 not a DTS class
1411 1 is_DTS_class
1412 2 0 not a placeholder for linker
1413 1 is_place_holder
1414 (not used by PM Debugger)
1415 3-7 reserved
1416 </PRE>
1417 </DL>
1418 <BR>
1419 <P><B><A NAME="Table_37">Figure 37. Type Table Entry Sub-Record - Class</A></B><BR>
1420 <TABLE BORDER>
1421 <TR>
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
1427 </TH></TR><TR>
1428 <TR>
1429 <TR>
1430 <TR>
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%>
1436 <BR></TD></TR><TR>
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
1442 </TD></TR><TR>
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
1448 </TD></TR><TR>
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
1455 </TD></TR><TR>
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.
1463 </TD></TR><TR>
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.
1470 </TD></TR><TR>
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
1476 </TD></TR><TR>
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
1482 </TD></TR><TR>
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.?
1490 </TD></TR><TR>
1491 <TR>
1492 <TR>
1493 <TR>
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%>
1499 <BR></TD></TR><TR>
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)
1505 </TD></TR><TR>
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>.
1512 </TD></TR><TR>
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&#58;
1518 Class Definition, Base Class, Friend, Member Function, Class Member)
1519 </TD></TR><TR>
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
1525 </TD></TR></TABLE>
1526 <P><P>
1528 <H5><A NAME="Header_58">Class Definition</A></H5>
1529 <BR>
1530 <P><B><A NAME="Table_38">Figure 38. Type Table Entry Sub-Record - Class Definition</A></B><BR>
1531 <TABLE BORDER>
1532 <TR>
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
1538 </TH></TR><TR>
1539 <TR>
1540 <TR>
1541 <TR>
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%>
1547 <BR></TD></TR><TR>
1548 <TR>
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
1554 </TD></TR><TR>
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
1560 </TD></TR><TR>
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
1566 </TD></TR></TABLE>
1567 <P><P>
1569 <H5><A NAME="Header_59">Class Member</A></H5>
1570 <DL COMPACT>
1571 The Class Member's type qualifier byte has the following bit map&#58;
1572 <PRE>
1573 Bit Value Data Description
1574 === ===== ========================
1575 0 0 non-static
1576 1 is_static
1578 1 0 not virtual table ptr
1579 1 is_vtbl_ptr
1581 2 0 not virtual base ptr
1582 1 is_vbase_ptr
1584 3 0 non_const
1585 1 Const
1587 4 0 non_volatile
1588 1 volatile
1590 5 0 not self_ptr
1591 1 is_self_ptr
1593 6-7 reserved
1595 </PRE>
1596 </DL>
1597 <BR>
1598 <P><B><A NAME="Table_39">Figure 39. Type Table Entry Sub-Record - Class Member</A></B><BR>
1599 <TABLE BORDER>
1600 <TR>
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
1606 </TH></TR><TR>
1607 <TR>
1608 <TR>
1609 <TR>
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%>
1615 <BR></TD></TR><TR>
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
1621 </TD></TR><TR>
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)
1627 </TD></TR><TR>
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"
1633 </TD></TR><TR>
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)
1640 </TD></TR><TR>
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.
1649 </TD></TR><TR>
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.
1657 </TD></TR></TABLE>
1658 <P><P>
1660 <H5><A NAME="Header_60">Code label</A></H5>
1661 <DL COMPACT>
1662 The label's type qualifier byte, showing the model of the label, has the following bit map&#58;
1663 <PRE>
1664 Bit Value Data Description
1665 === ===== ========================
1666 0 0 16
1667 1 32
1669 1 0 near
1670 1 far
1672 2-7 reserved
1675 Note&#58;
1676 16 near = offset-16
1677 16 far = segment-32
1678 32 near = offset-32
1679 32 far = segment-48
1682 </PRE>
1683 </DL>
1684 <BR>
1685 <P><B><A NAME="Table_40">Figure 40. Type Table Entry Sub-Record - Code label</A></B><BR>
1686 <TABLE BORDER>
1687 <TR>
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
1693 </TH></TR><TR>
1694 <TR>
1695 <TR>
1696 <TR>
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.
1702 </TD></TR></TABLE>
1703 <P><P>
1705 <H5><A NAME="Header_61">Entry</A></H5>
1706 <DL COMPACT>
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
1709 entry.
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&#58;
1713 </DL>
1714 <PRE>
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
1721 1 caller pops args
1723 2 0 16
1724 1 32
1726 3 0 near
1727 1 far
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
1735 6-7 reserved
1738 Note&#58;
1739 16 near = offset-16
1740 16 far = segment-32
1741 32 near = offset-32
1742 32 far = segment-48
1745 </PRE>
1746 <DL COMPACT>
1747 The flag for each parameter in the list sub-record has the following bit map&#58;
1748 <PRE>
1749 Bit Value Data Description
1750 === ===== ========================
1751 0 0 passed by address
1752 1 passed by value
1754 1 0 no descriptor required
1755 1 descriptor provided
1757 2-7 reserved
1762 </PRE>
1763 </DL>
1764 <BR>
1765 <P><B><A NAME="Table_41">Figure 41. Type Table Entry Sub-Record - Entry</A></B><BR>
1766 <TABLE BORDER>
1767 <TR>
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
1773 </TH></TR><TR>
1774 <TR>
1775 <TR>
1776 <TR>
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%>
1782 <BR></TD></TR><TR>
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
1788 </TD></TR><TR>
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
1794 </TD></TR><TR>
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>.
1801 </TD></TR><TR>
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
1807 </TD></TR><TR>
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>.
1814 </TD></TR><TR>
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.
1820 </TD></TR><TR>
1821 <TR>
1822 <TR>
1823 <TR>
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%>
1829 <BR></TD></TR><TR>
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)
1835 </TD></TR><TR>
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
1841 </TD></TR><TR>
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>.
1848 </TD></TR><TR>
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)
1854 </TD></TR><TR>
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
1860 </TD></TR></TABLE>
1861 <P><P>
1863 <H5><A NAME="Header_62">Enum</A></H5>
1864 <DL COMPACT>
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
1867 entry.
1868 The ordering of the FID_index and FID_span in this sub-record is important and required as
1869 defined in the table.
1870 </DL>
1871 <BR>
1872 <P><B><A NAME="Table_42">Figure 42. Type Table Entry Sub-Record - Enum</A></B><BR>
1873 <TABLE BORDER>
1874 <TR>
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
1880 </TH></TR><TR>
1881 <TR>
1882 <TR>
1883 <TR>
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%>
1889 <BR></TD></TR><TR>
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>.
1896 </TD></TR><TR>
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
1902 </TD></TR><TR>
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>.
1909 </TD></TR><TR>
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.
1915 </TD></TR><TR>
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>.
1922 </TD></TR><TR>
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
1928 </TD></TR><TR>
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>.
1935 </TD></TR><TR>
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
1941 </TD></TR><TR>
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>.
1948 </TD></TR><TR>
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
1954 </TD></TR><TR>
1955 <TR>
1956 <TR>
1957 <TR>
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%>
1963 <BR></TD></TR><TR>
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)
1969 </TD></TR><TR>
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>.
1976 </TD></TR><TR>
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
1982 </TD></TR><TR>
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>.
1989 </TD></TR><TR>
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
1995 </TD></TR><TR>
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
2001 </TD></TR></TABLE>
2002 <P><P>
2004 <H5><A NAME="Header_63">File</A></H5>
2005 <BR>
2006 <P><B><A NAME="Table_43">Figure 43. Type Table Entry Sub-Record - File</A></B><BR>
2007 <TABLE BORDER>
2008 <TR>
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
2014 </TH></TR><TR>
2015 <TR>
2016 <TR>
2017 <TR>
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.
2023 </TD></TR></TABLE>
2024 <P><P>
2026 <H5><A NAME="Header_64">Format label</A></H5>
2027 <DL COMPACT>
2028 The label's type qualifier byte, showing the model of the label, has the following bit map&#58;
2029 <PRE>
2030 Bit Value Data Description
2031 === ===== ========================
2032 0 0 16
2033 1 32
2035 1 0 near
2036 1 far
2038 2-7 reserved
2041 Note&#58;
2042 16 near = offset-16
2043 16 far = segment-32
2044 32 near = offset-32
2045 32 far = segment-48
2048 </PRE>
2049 </DL>
2050 <BR>
2051 <P><B><A NAME="Table_44">Figure 44. Type Table Entry Sub-Record - Format label</A></B><BR>
2052 <TABLE BORDER>
2053 <TR>
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
2059 </TH></TR><TR>
2060 <TR>
2061 <TR>
2062 <TR>
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.
2068 </TD></TR></TABLE>
2069 <P><P>
2071 <H5><A NAME="Header_65">Friend</A></H5>
2072 <DL COMPACT>
2073 The Base Class' type qualifier byte has the following bit map&#58;
2074 <PRE>
2075 Bit Value Data Description
2076 === ===== ========================
2077 0 0 friend_function
2078 1 friend_class
2080 1-7 reserved
2082 </PRE>
2083 </DL>
2084 <BR>
2085 <P><B><A NAME="Table_45">Figure 45. Type Table Entry Sub-Record - Friend</A></B><BR>
2086 <TABLE BORDER>
2087 <TR>
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
2093 </TH></TR><TR>
2094 <TR>
2095 <TR>
2096 <TR>
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%>
2102 <BR></TD></TR><TR>
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
2109 a friend function.
2110 </TD></TR><TR>
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.
2118 </TD></TR></TABLE>
2119 <P><P>
2121 <H5><A NAME="Header_66">Function</A></H5>
2122 <DL COMPACT>
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
2125 entry.
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&#58;
2129 </DL>
2130 <PRE>
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
2137 1 caller pops args
2139 2 0 16
2140 1 32
2142 3 0 near
2143 1 far
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
2151 6-7 reserved
2154 Note&#58;
2155 16 near = offset-16
2156 16 far = segment-32
2157 32 near = offset-32
2158 32 far = segment-48
2161 </PRE>
2162 <DL COMPACT>
2163 The flag for each parameter in the list sub-record has the following bit map&#58;
2164 <PRE>
2165 Bit Value Data Description
2166 === ===== ========================
2167 0 0 passed by address
2168 1 passed by value
2170 1 0 no descriptor required
2171 1 descriptor provided
2173 2-7 reserved
2178 </PRE>
2179 </DL>
2180 <BR>
2181 <P><B><A NAME="Table_46">Figure 46. Type Table Entry Sub-Record - Function</A></B><BR>
2182 <TABLE BORDER>
2183 <TR>
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
2189 </TH></TR><TR>
2190 <TR>
2191 <TR>
2192 <TR>
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%>
2198 <BR></TD></TR><TR>
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
2204 </TD></TR><TR>
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
2210 </TD></TR><TR>
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>.
2217 </TD></TR><TR>
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
2223 </TD></TR><TR>
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>.
2230 </TD></TR><TR>
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.
2236 </TD></TR><TR>
2237 <TR>
2238 <TR>
2239 <TR>
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
2245 </TD></TR><TR>
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)
2251 </TD></TR><TR>
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
2257 </TD></TR><TR>
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>.
2264 </TD></TR><TR>
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)
2270 </TD></TR><TR>
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
2276 </TD></TR></TABLE>
2277 <P><P>
2279 <H5><A NAME="Header_67">Graphic</A></H5>
2280 <BR>
2281 <P><B><A NAME="Table_47">Figure 47. Type Table Entry Sub-Record - Graphic</A></B><BR>
2282 <TABLE BORDER>
2283 <TR>
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
2289 </TH></TR><TR>
2290 <TR>
2291 <TR>
2292 <TR>
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%>
2298 <BR></TD></TR><TR>
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>.
2305 </TD></TR><TR>
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
2311 </TD></TR><TR>
2312 <TR>
2313 <TR>
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%>
2319 <BR></TD></TR><TR>
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>.
2326 </TD></TR><TR>
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
2332 </TD></TR><TR>
2333 <TR>
2334 <TR>
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.
2340 </TD></TR><TR>
2341 </TABLE>
2342 <P><P>
2344 <H5><A NAME="Header_68">Logical</A></H5>
2345 <BR>
2346 <P><B><A NAME="Table_48">Figure 48. Type Table Entry Sub-Record - Logical</A></B><BR>
2347 <TABLE BORDER>
2348 <TR>
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
2355 </TH></TR><TR>
2356 <TR>
2357 <TR>
2358 <TR>
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.
2364 </TD></TR><TR>
2365 <TR>
2366 <TR>
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.
2372 </TD></TR></TABLE>
2373 <P><P>
2375 <H5><A NAME="Header_69">Macro</A></H5>
2376 <BR>
2377 <P><B><A NAME="Table_49">Figure 49. Type Table Entry Sub-Record - Macro</A></B><BR>
2378 <TABLE BORDER>
2379 <TR>
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
2385 </TH></TR><TR>
2386 <TR>
2387 <TR>
2388 <TR>
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%>
2394 <BR></TD></TR><TR>
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>.
2401 </TD></TR><TR>
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
2407 </TD></TR><TR>
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
2413 </TD></TR></TABLE>
2414 <P><P>
2416 <H5><A NAME="Header_70">Member Function</A></H5>
2417 <DL COMPACT>
2418 The Member Function's type qualifier byte has the following bit map&#58;
2419 <PRE>
2420 Bit Value Data Description
2421 === ===== ========================
2422 0 0 non-static
2423 1 static
2425 1 0 non-inline
2426 1 inline
2428 2 0 non-const
2429 1 const
2431 3 0 non-volatile
2432 1 volatile
2434 4 0 non-virtual
2435 1 virtual
2437 5-7 reserved
2438 </PRE>
2439 </DL>
2440 <BR>
2441 <P><B><A NAME="Table_50">Figure 50. Type Table Entry Sub-Record - Member Function</A></B><BR>
2442 <TABLE BORDER>
2443 <TR>
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
2449 </TH></TR><TR>
2450 <TR>
2451 <TR>
2452 <TR>
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%>
2458 <BR></TD></TR><TR>
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
2464 </TD></TR><TR>
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
2471 </TD></TR><TR>
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
2477 </TD></TR><TR>
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"
2483 </TD></TR><TR>
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.
2491 </TD></TR><TR>
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.
2501 </TD></TR></TABLE>
2502 <P><P>
2504 <H5><A NAME="Header_71">Member Pointer</A></H5>
2505 <DL COMPACT>
2506 The Member Pointer's type qualifier byte has the following bit map&#58;
2507 <PRE>
2508 Bit Value Data Description
2509 === ===== ========================
2510 0 0 no vbases
2511 1 has vbases
2513 1 0 no mult-inh
2514 1 has mult-inh
2516 2 0 non-const
2517 1 const
2519 3 0 non-volatile
2520 1 volatile
2522 4-7 reserved
2523 </PRE>
2524 </DL>
2525 <BR>
2526 <P><B><A NAME="Table_51">Figure 51. Type Table Entry Sub-Record - Member Pointer</A></B><BR>
2527 <TABLE BORDER>
2528 <TR>
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
2534 </TH></TR><TR>
2535 <TR>
2536 <TR>
2537 <TR>
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%>
2543 <BR></TD></TR><TR>
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
2549 </TD></TR><TR>
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
2555 </TD></TR><TR>
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.
2562 </TD></TR></TABLE>
2563 <P><P>
2565 <H5><A NAME="Header_72">Picture</A></H5>
2566 <BR>
2567 <P><B><A NAME="Table_52">Figure 52. Type Table Entry Sub-Record - Picture</A></B><BR>
2568 <TABLE BORDER>
2569 <TR>
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
2575 </TH></TR><TR>
2576 <TR>
2577 <TR>
2578 <TR>
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%>
2584 <BR></TD></TR><TR>
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>.
2591 </TD></TR><TR>
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
2597 </TD></TR><TR>
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.
2605 </TD></TR></TABLE>
2606 <P><P>
2608 <H5><A NAME="Header_73">Pointer</A></H5>
2609 <DL COMPACT>
2610 The pointer's type qualifier byte, showing the size of the pointer, has the
2611 the following bit map&#58;
2612 <PRE>
2613 Bit Value Data Description
2614 === ===== ========================
2616 0 0 16
2617 1 32
2619 1 0 near
2620 1 far
2622 2-7 reserved
2626 Note&#58;
2627 16 near = offset-16
2628 16 far = segment-32
2629 32 near = offset-32
2630 32 far = segment-48
2632 </PRE>
2633 </DL>
2634 <BR>
2635 <P><B><A NAME="Table_53">Figure 53. Type Table Entry Sub-Record - Pointer</A></B><BR>
2636 <TABLE BORDER>
2637 <TR>
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
2643 </TH></TR><TR>
2644 <TR>
2645 <TR>
2646 <TR>
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%>
2652 <BR></TD></TR><TR>
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>.
2659 </TD></TR><TR>
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
2665 </TD></TR><TR>
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>.
2672 </TD></TR><TR>
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.
2678 </TD></TR></TABLE>
2679 <P><P>
2681 <H5><A NAME="Header_74">Procedure</A></H5>
2682 <DL COMPACT>
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
2685 entry.
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&#58;
2689 </DL>
2690 <PRE>
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
2697 1 caller pops args
2699 2 0 16
2700 1 32
2702 3 0 near
2703 1 far
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
2711 6-7 reserved
2714 Note&#58;
2715 16 near = offset-16
2716 16 far = segment-32
2717 32 near = offset-32
2718 32 far = segment-48
2721 </PRE>
2722 <DL COMPACT>
2723 The flag for each parameter in the list sub-record has the following bit map&#58;
2724 </DL>
2725 <PRE>
2726 Bit Value Data Description
2727 === ===== ========================
2728 0 0 passed by address
2729 1 passed by value
2731 1 0 no descriptor required
2732 1 descriptor provided
2734 2-7 reserved
2739 </PRE>
2740 <BR>
2741 <P><B><A NAME="Table_54">Figure 54. Type Table Entry Sub-Record - Procedure</A></B><BR>
2742 <TABLE BORDER>
2743 <TR>
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
2749 </TH></TR><TR>
2750 <TR>
2751 <TR>
2752 <TR>
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%>
2758 <BR></TD></TR><TR>
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
2764 </TD></TR><TR>
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
2770 </TD></TR><TR>
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>.
2777 </TD></TR><TR>
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
2783 </TD></TR><TR>
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>.
2790 </TD></TR><TR>
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.
2796 </TD></TR><TR>
2797 <TR>
2798 <TR>
2799 <TR>
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%>
2805 <BR></TD></TR><TR>
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)
2811 </TD></TR><TR>
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
2817 </TD></TR><TR>
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>.
2824 </TD></TR><TR>
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)
2830 </TD></TR><TR>
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
2836 </TD></TR></TABLE>
2837 <P><P>
2839 <H5><A NAME="Header_75">Reference</A></H5>
2840 <BR>
2841 <P><B><A NAME="Table_55">Figure 55. Type Table Entry Sub-Record - Reference</A></B><BR>
2842 <TABLE BORDER>
2843 <TR>
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
2849 </TH></TR><TR>
2850 <TR>
2851 <TR>
2852 <TR>
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%>
2858 <BR></TD></TR><TR>
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
2864 </TD></TR></TABLE>
2865 <P><P>
2867 <H5><A NAME="Header_76">Scalars</A></H5>
2868 <DL COMPACT>
2869 The scalar's type qualifier byte has the following bit map&#58;
2870 <PRE>
2871 Bit Value Data Description
2872 === ===== ========================
2873 0 0 unpacked (zoned)
2874 1 packed
2876 1 0 real
2877 1 complex
2879 2 0 fixed
2880 1 float
2882 3 0 binary
2883 1 decimal
2886 4-7 reserved
2889 </PRE>
2890 </DL>
2891 <BR>
2892 <P><B><A NAME="Table_56">Figure 56. Type Table Entry Sub-Record - Scalars</A></B><BR>
2893 <TABLE BORDER>
2894 <TR>
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
2900 </TH></TR><TR>
2901 <TR>
2902 <TR>
2903 <TR>
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%>
2909 <BR></TD></TR><TR>
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
2915 </TD></TR><TR>
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.
2921 </TD></TR><TR>
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
2927 </TD></TR></TABLE>
2928 <P><P>
2930 <H5><A NAME="Header_77">Set</A></H5>
2931 <DL COMPACT>
2932 </DL>
2933 <BR>
2934 <P><B><A NAME="Table_57">Figure 57. Type Table Entry Sub-Record - Set of</A></B><BR>
2935 <TABLE BORDER>
2936 <TR>
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
2942 </TH></TR><TR>
2943 <TR>
2944 <TR>
2945 <TR>
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%>
2951 <BR></TD></TR><TR>
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
2957 </TD></TR><TR>
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.
2963 </TD></TR></TABLE>
2964 <P><P>
2966 <H5><A NAME="Header_78">Stack</A></H5>
2967 <DL COMPACT>
2968 The stack's type qualifier byte, showing the model of the stack, has the following bit map&#58;
2969 </DL>
2970 <PRE>
2971 Bit Value Data Description
2972 === ===== ========================
2973 0 0 16
2974 1 32
2976 1 0 near
2977 1 far
2979 2-7 reserved
2982 Note&#58;
2983 16 near = offset-16
2984 16 far = segment-32
2985 32 near = offset-32
2986 32 far = segment-48
2989 </PRE>
2990 <BR>
2991 <P><B><A NAME="Table_58">Figure 58. Type Table Entry Sub-Record - Stack</A></B><BR>
2992 <TABLE BORDER>
2993 <TR>
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
2999 </TH></TR><TR>
3000 <TR>
3001 <TR>
3002 <TR>
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%>
3008 <BR></TD></TR><TR>
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
3014 </TD></TR><TR>
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)
3020 </TD></TR></TABLE>
3021 <P><P>
3023 <H5><A NAME="Header_79">Structure/Union/Record</A></H5>
3024 <DL COMPACT>
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
3027 entry.
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&#58;
3034 <PRE>
3035 Bit Value Data Description
3036 === ===== ========================
3037 0-1 reserved
3038 2 0 not a placeholder for linker
3039 1 is_place_holder
3040 (not used by PM Debugger)
3042 3-7 reserved
3045 </PRE>
3046 </DL>
3047 <BR>
3048 <P><B><A NAME="Table_59">Figure 59. Type Table Entry Sub-Record - Structure/Union/Record</A></B><BR>
3049 <TABLE BORDER>
3050 <TR>
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
3056 </TH></TR><TR>
3057 <TR>
3058 <TR>
3059 <TR>
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%>
3065 <BR></TD></TR><TR>
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
3071 </TD></TR><TR>
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
3077 </TD></TR><TR>
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>.
3084 </TD></TR><TR>
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.
3090 </TD></TR><TR>
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>.
3097 </TD></TR><TR>
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.
3103 </TD></TR><TR>
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>.
3110 </TD></TR><TR>
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.
3116 </TD></TR><TR>
3117 <TR>
3118 <TR>
3119 <TR>
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%>
3125 <BR></TD></TR><TR>
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)
3131 </TD></TR><TR>
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>.
3138 </TD></TR><TR>
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)
3144 </TD></TR><TR>
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
3150 </TD></TR><TR>
3151 <TR>
3152 <TR>
3153 <TR>
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%>
3159 <BR></TD></TR><TR>
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)
3165 </TD></TR><TR>
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>.
3172 </TD></TR><TR>
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.
3178 </TD></TR><TR>
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>.
3185 </TD></TR><TR>
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)
3191 </TD></TR><TR>
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
3197 </TD></TR></TABLE>
3198 <P><P>
3200 <H5><A NAME="Header_80">Subrange</A></H5>
3201 <DL COMPACT>
3202 The ordering of the FID_span's in this sub-record is important and required as
3203 defined in the table.
3204 </DL>
3205 <BR>
3206 <P><B><A NAME="Table_60">Figure 60. Type Table Entry Sub-Record - Subrange</A></B><BR>
3207 <TABLE BORDER>
3208 <TR>
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
3214 </TH></TR><TR>
3215 <TR>
3216 <TR>
3217 <TR>
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%>
3223 <BR></TD></TR><TR>
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
3229 </TD></TR><TR>
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>.
3236 </TD></TR><TR>
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)
3242 </TD></TR><TR>
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>.
3249 </TD></TR><TR>
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)
3255 </TD></TR><TR>
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.
3261 </TD></TR></TABLE>
3262 <P><P>
3264 <H5><A NAME="Header_81">User Defined Type</A></H5>
3265 <BR>
3266 <P><B><A NAME="Table_61">Figure 61. Type Table Entry Sub-Record - User Defined Type</A></B><BR>
3267 <TABLE BORDER>
3268 <TR>
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
3274 </TH></TR><TR>
3275 <TR>
3276 <TR>
3277 <TR>
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%>
3283 <BR></TD></TR><TR>
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>.
3290 </TD></TR><TR>
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)
3296 </TD></TR><TR>
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>.
3303 </TD></TR><TR>
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
3309 </TD></TR><TR>
3310 </TABLE>
3311 <HR>
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
3322 application.
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>&#58;
3328 <OL>
3329 <P><LI>
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
3336 <P><LI>
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
3341 Table.
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
3345 <P><LI>
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.
3368 </OL>
3369 <P><P>
3371 The Line Number Table is organized as follows&#58;
3372 <P><B><A NAME="FIGDBFLINT">Figure 62. Line Number Table -- Overview</A></B><BR>
3373 <P><BR>
3374 <PRE>
3375 +---------------------------------------+
3376 | Header |
3377 +---------------------------------------+
3378 | First Entry (special) |
3379 +---------------------------------------+
3381 | File Names Table |
3382 /// (may span mult. LINNUM records) ///
3384 +---------------------------------------+
3385 | Header |
3386 +---------------------------------------+
3387 | First Entry (special) |
3388 +---------------------------------------+
3390 | Path Table |
3391 /// (may span mult. LINNUM records) ///
3393 +---------------------------------------+
3394 | Header |
3395 +---------------------------------------+
3396 | First Entry (special) |
3397 +---------------------------------------+
3399 | Line Number Entries |
3400 /// (may span mult. LINNUM records) ///
3403 +---------------------------------------+
3404 | . |
3405 /// . ///
3406 | . |
3407 +---------------------------------------+
3408 | Header |
3409 +---------------------------------------+
3410 | First Entry (special) |
3411 +---------------------------------------+
3413 | Line Number Entries |
3414 /// (may span mult. LINNUM records) ///
3417 +---------------------------------------+
3418 </PRE><BR>
3421 The LINNUM Header format is&#58;
3422 <P><B><A NAME="FIGDBFLHDR">Figure 63. Line Number Table Record -- Header</A></B><BR>
3423 <P><BR>
3424 <PRE>
3425 1 2 1 1 or 2 (bytes)
3426 +----+---------+---------+---------+
3427 | |Rec |Base |Base |
3428 | 95 | Length | Group | Segment|
3429 | | | | |
3430 | | | | |
3431 +----+---------+---------+---------+
3432 </PRE><BR>
3434 <DL>
3435 <P><DT>Record Type
3436 <DD>is '95'x, indicating the record is for 32-bit flat addressing model
3437 programs.
3438 <P><DT>Base Group
3439 <DD>The Base Group is an index specifying a previously defined
3440 GRPDEF record. The group index is ignored and assumed zero.
3441 <P><DT>Base Segment
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
3447 will set to zero.
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.
3450 </DL>
3452 The First Entry format is&#58;
3453 <P><B><A NAME="FIGDBFFLNE">Figure 64. Line Number Table First Entry</A></B><BR>
3454 <P><BR>
3455 <PRE>
3457 +-------------------+---------+---------+
3458 0 | Line Number = 0 | Entry | Reserved|
3459 | | Type | |
3460 +-------------------+---------+---------+
3461 4 | Count of Table | Segment Number |
3462 | Entries | |
3463 +-------------------+-------------------+
3464 8 | File Names Table Size or |
3465 | Address of Logical Segment |
3466 +---------------------------------------+
3468 </PRE><BR>
3470 <DL>
3471 <P><DT>First Entry
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.
3476 <DL COMPACT>
3477 <DT>Line Number = 0
3478 <DD>to indicate this is a special entry.
3479 <DT>Entry Type
3480 <DD>controls the format of the Line Number entry.
3481 <DL COMPACT>
3482 <DT>0x00
3483 <DD>Source File Information and offset only.
3484 <DT>0x01
3485 <DD>Listing File Information and offset only.
3486 <BR>
3487 <B>Note&#58;</B> Not used by PM Debugger.
3488 <DT>0x02
3489 <DD>Source and Listing File Information and offset.
3490 <BR>
3491 <B>Note&#58;</B> Not used by PM Debugger.
3492 <DT>0x03
3493 <DD>File Names Table follows first entry
3494 <BR>
3495 <DT>0x04
3496 <DD>Path Table follows first entry
3497 <BR>
3498 <B>Note&#58;</B> Not used by PM Debugger.
3499 </DL>
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
3510 name entries.
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"
3518 </DL>
3519 </DL>
3520 <P><P>
3522 Each Line Number Entry has one of the following formats&#58;
3523 <P><B><A NAME="FIGDBFLENT">Figure 65. Line Number Entries</A></B><BR>
3524 <P><BR>
3525 <PRE>
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 +---------------------------------------+
3567 </PRE><BR>
3570 The data items in the different format Line Number Entries are&#58;
3571 <DL>
3572 <P><DT>Source File Line Number
3573 <DD>is the line number in the source file identified by the Source
3574 File Index
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
3580 program.
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).
3585 <P><DT>Offset
3586 <DD>is a 4 byte quantity which gives the translated code or data&#39;s
3587 start byte in the program segment defined by the SEGDEF index.
3588 </DL>
3589 <P><P>
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
3596 information.
3597 <P><B>Note: </B>Not used by PM Debugger.
3598 <P><B><A NAME="FIGDBFPATH">Figure 66. Path Table Entry</A></B><BR>
3599 <P><BR>
3600 <PRE>
3601 <B>Entry Type = Path Table</B>
3603 +---------------------------------------+
3604 0 | Offset into Segment |
3606 +-------------------+-------------------+
3607 4 | Path Code | Source File |
3608 | | Index |
3609 +-------------------+-------------------+
3611 </PRE><BR>
3613 <DL>
3614 <P><DT>Offset
3615 <DD>is a 4 byte quantity which gives the translated code or data&#39;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.
3618 <P><DT>Path Code
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).
3627 </DL>
3628 <P><P>
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>
3639 <P><BR>
3640 <PRE>
3641 +-------------------+-------------------+-------------------+-.
3642 | First Displayable | Number Displayable| Number of Source |
3643 | Char in List Line| Chars in List Line| and Listing Files |
3644 +-------------------+-------------------+-------------------+-.
3645 0 4 8 C
3648 .-+----+------------------------+-//-+----+-------------------+-.
3649 |Len | Name of File |....|Len | Name of File |
3650 |Name| | |Name| |
3651 .-+----+------------------------+-//-+----+-------------------+-.
3655 .-+----+------------------------+
3656 |Len | Listing File Name |
3657 |Name| |
3658 .-+----+------------------------+
3660 </PRE><BR>
3662 <DL>
3663 <P><DT>First Displayable Character in Listing Line
3664 <DD>
3665 <P><B>Note: </B>Not used by PM Debugger.
3666 <P><DT>Number of Displayable Characters in Listing Line
3667 <DD>
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.
3671 <P><DT>File Names
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&#58;
3678 <OL COMPACT>
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.
3683 </OL>
3684 </OL>
3685 </DL>
3686 <HR>
3687 <H1><A NAME="HDRDBLXSEC" HREF="#ToC_85">Appendix A. LX Format Debug Section Description</A></H1>
3688 <HR>
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
3699 directory entries.
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
3705 <PRE>
3706 DB - byte - char
3707 DW - word - unsigned short
3708 DD - double - unsigned long
3709 </PRE>
3711 The Directory information (the block of information at the end of the
3712 Debug section
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&#58;
3716 <P><B><I>Include structure name = NB04_DEBUG_DIRINFO </I></B>
3717 <PRE>
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
3723 </PRE>
3724 followed by the array of DNT structures (entries) containing&#58;
3725 <P><B><I>Include structure name = NB04_DEBUG_DIR </I></B>
3726 <PRE>
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
3731 </PRE>
3732 <HR>
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&#58;
3737 <P><B><I>Include structure name = NB04_DEBUG_MOD_32 </I></B>
3738 <PRE>
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
3752 CodeView)
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
3755 present for CV?)
3756 14 DB Length prefixed name of module (1 byte length)
3757 </PRE>
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&#58;
3766 <P><B><I>Include structure name = DEBUG_SEGINFO_32 </I></B>
3767 <PRE>
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
3772 </PRE>
3773 <P>The sstPublics subsection (type 0x102) has the following format for
3774 NB04 Debug sections&#58;
3775 <P><B><I>Include structure name = PUBLIC_32 </I></B>
3776 <PRE>
3777 00 DD Offset
3778 04 DW Segment
3779 06 DW Type Index
3780 08 DB Length prefixed name of symbol (1 byte length)
3781 </PRE>
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"
3790 and/or "$$HL03"
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
3801 1-based.
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>
3806 </TD></TR></TABLE>
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>&#32;</A>
3813 </BODY></HTML>