home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / o / omf.zip / OMF.INF (.txt) next >
OS/2 Help File  |  1993-03-25  |  85KB  |  3,156 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Introduction ΓòÉΓòÉΓòÉ
  3.  
  4. IBM OS/2 32 bit Object Module Format (OMF) 
  5.  
  6. and Linear eXecutable Module Format (LX) 
  7.  
  8. Revision 6 
  9.  
  10. Boca Programming Center 
  11.  
  12. Boca Raton, Florida 
  13.  
  14. This document is intended to describe the interface that is used by language 
  15. translators and generators as their intermediate output to the linker for the 
  16. 32-bit OS/2 operating system. The linker will generate the executable module 
  17. that is used by the loader to invoke the .EXE and .DLL programs at execution 
  18. time. 
  19.  
  20.  
  21. ΓòÉΓòÉΓòÉ 1.1. Purpose of this document ΓòÉΓòÉΓòÉ
  22.  
  23. THIS DOCUMENT PROVIDED BY IBM SHALL BE PROVIDED ON AN "AS IS" BASIS WITHOUT ANY 
  24. WARRANTY OF ANY KIND EITHER EXPRESS OR IMPLIED. THE IMPLIED WARRANTIES OF 
  25. MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. 
  26.  
  27. FURTHERMORE, THIS DOCUMENTATION IS IN A PRELIMINARY FORM; IS NOT COMPLETE; HAS 
  28. NOT YET BEEN TESTED, VALIDATED OR REVIEWED; MAY CONTAIN ERRORS, OMISSIONS, 
  29. INACCURACIES OR THE LIKE; AND IS SUBJECT TO BEING CHANGED, REVISED OR 
  30. SUPERSEDED IN WHOLE OR IN PART BY IBM. IBM DOES NOT ASSUME ANY RESPONSIBILITY 
  31. TO NOTIFY ANY PARTIES, COMPANIES, USERS, AND OR OTHERS OF DEFECTS, 
  32. DEFICIENCIES, CHANGES, ERRORS OR OTHER FAILINGS OR SHORTCOMING OF THE 
  33. DOCUMENTATION. 
  34.  
  35. RECIPIENT'S USE OF THIS DOCUMENT IS LIMITED TO RECIPIENT'S PERSONAL USE FOR THE 
  36. SOLE PURPOSE OF CREATING TOOLS FOR THE OS/2Reference OPERATING SYSTEM. 
  37.  
  38.  
  39. ΓòÉΓòÉΓòÉ 1.2. Major changes to this document ΓòÉΓòÉΓòÉ
  40.  
  41. Draft 1   = Combined information from several documents into one. 
  42.  
  43. Draft 2   = Added Comments from Lexington and Toronto. 
  44.  
  45. Draft 3   = Added the Linear Executable format (LX). 
  46.  
  47. Draft 4   = Minor corrections. 
  48.  
  49. Draft 5   = Added StackSize to LX structure. 
  50.  
  51. Revision 6 = Added IDMDLL COMENT record 
  52.  
  53.  
  54. ΓòÉΓòÉΓòÉ 2. THE 32-BIT OBJECT MODULE FORMAT ΓòÉΓòÉΓòÉ
  55.  
  56. Record Format:
  57.  
  58.             All object records conform to the following format:
  59.  
  60.  
  61.  
  62.  
  63.  
  64.    1 byte  2 byte
  65.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  66.   ΓöéRecord Γöé Record         Γöé
  67.   ΓöéType   Γöé  Length        Γöé
  68.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  69.  
  70.           <------ record length in bytes -------->
  71.  
  72.           <variable length>                 1 byte
  73.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  74.          Γöé  Record                         ΓöéChk SumΓöé
  75.          Γöé  Contents                       Γöéor 0   Γöé
  76.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  77. Standard object module record format
  78.  
  79. The Record type field is a 1-byte field containing the
  80. hexadecimal number that identifies the type of object record.
  81. The format is determined by the least significant bit of the
  82. RecTyp field.
  83. Note that this does not govern Use32/Use16
  84. segment attributes; it simply specifies the size of certain numeric
  85. fields within the record.
  86. An odd RecTyp indicates that 32-bit
  87. values are present; the fields affected are described with each
  88. record.
  89.  
  90. An entire record occupies RecLength + 3 bytes.
  91. The record length does not include the count for the record type and
  92. record length fields.
  93. Unless otherwise noted within the record definition, the record length
  94. should not exceed 1024 bytes.
  95.  
  96. The record contents are determined by the record type.
  97.  
  98. The Chk Sum field is a 1-byte field that contains the negative
  99. sum (modulo 256) of all other bytes in the record.
  100. The byte sum over the entire record, ignoring overflow, is zero.
  101.  
  102. NOTES : 
  103.  
  104. LINK386  ignores  the  value  of  the  Chk  Sum  byte . 
  105.  
  106.  
  107. ΓòÉΓòÉΓòÉ 2.1. Frequent Object Record Subfields ΓòÉΓòÉΓòÉ
  108.  
  109. Certain  subfields  appear  frequently ;  the  format  of  such  fields  is 
  110. described  next . 
  111.  
  112.  
  113. ΓòÉΓòÉΓòÉ 2.1.1. Names ΓòÉΓòÉΓòÉ
  114.  
  115. Name  strings  are  encoded  as  an  8 - bit  unsigned  count  followed  by  a 
  116. string  of  " count "  characters .   The  character  set  is  usually  some 
  117. ASCII  subset .   A  null  name  is  specified  by  a  single  byte  of  0  ( 
  118. indicating  a  string  of  length  zero ) . 
  119.  
  120.  
  121. ΓòÉΓòÉΓòÉ 2.1.2. Indexed References ΓòÉΓòÉΓòÉ
  122.  
  123. Certain  items  are  ordered  by  occurrence ,  and  referenced  by  index  ( 
  124. starting  index  is  1 ) .   Index  fields  can  contain  0 ,  indicating  not 
  125. - present ,  or  values  from  1  through  7FFF .   The  index  is  encoded  as 
  126. 1  or  2  bytes  and  a  16 - bit  value  is  obtained  as  follows :   if  ( 
  127. first _ byte    0x80 )      index _ word   =  ( first _ byte    7F )  *  0x100 
  128. +   second _ byte ;  else      index _ word  =  first _ byte 
  129.  
  130.  
  131. Type  indices 
  132.  
  133. The  type  index  is  treated  as  an  index  field  when  a  record  is 
  134. parsed  ( occupies  one  or  two  bytes ,  occurs  in  PUBDEF ,  COMDEF , 
  135. EXTDEF  records ) .  They  are  encoded  as  described  under  indexed 
  136. references . 
  137.  
  138. NOTE :  At  present ,  no  type  checking  is  done  by  the  linker .  If  any 
  139. link - time  semantics  are  defined ,  that  information  will  be  recorded 
  140. somewhere  within  this  document . 
  141.  
  142.  
  143. Ordered  Collections 
  144.  
  145. Certain  records  and  record  groups  are  ordered ;  the  ordering  is 
  146. obtained  from  the  order  of  the  record  types  within  the  file  together 
  147. with  the  ordering  of  repeated  fields  within  these  records .  Such 
  148. ordered  collections  are  referenced  by  index ,  counting  from  1  ( index 
  149. 0  indicates  unknown  or  decline - to - state ) . 
  150.  
  151. The  ordered  collections  are : 
  152.  
  153. o NAMES :  ordered  by  LNAMES  record  and  names  within  each .  Referenced 
  154.   as  a  Name  Index . 
  155.  
  156. o LOGICAL  SEGMENTS :  ordered  by  SEGDEF  records  in  file .  Referenced  as 
  157.   a  Segment  Index . 
  158.  
  159. o GROUPS :  ordered  by  GRPDEF  of  records  in  file .  Referenced  as  a 
  160.   Group  Index . 
  161.  
  162. o External  symbols :  ordered  by  EXTDEF  and  COMDEF  records  and  symbols 
  163.   within  each .  Referenced  as  an  External  Index  ( in  FIXUPs ) . 
  164.  
  165.  
  166. ΓòÉΓòÉΓòÉ 2.1.3. Numeric 2 and 4 byte fields ΓòÉΓòÉΓòÉ
  167.  
  168. Words  and  double  words  ( 16  and  32  bit  quantities )  are  stored  in 
  169. Intel  byte  order  ( lowest  address  is  least  significant ) . 
  170.  
  171. Certain  records ,  notably  SEGDEF ,  PUBDEF ,  LINNUM ,  LEDATA ,  LIDATA , 
  172. FIXUPP  and  MODEND ,  contain  size ,  offset ,  and  displacement  values 
  173. which  may  be  32  bit  quantities  for  Use32  segments .  The  encoding  is 
  174. as  follows . 
  175.  
  176. o When  the  least  significant  bit  of  the  record  type  byte  is  set  ( 
  177.   ie  record  type  is  an  odd  number ) ,  the  numeric  fields  are  4 
  178.   bytes . 
  179.  
  180. o When  the  least  significant  bit  of  the  record  type  byte  is  clear , 
  181.   the  fields  occupy  2  bytes  ( 16  bit  Object  Module  Format ) .  The 
  182.   values  are  zero - extended  when  applied  to  Use32  segments . 
  183.  
  184. See  the  description  of  SEGDEF  records  for  an  explanation  of  Use16 / 
  185. Use32  segments . 
  186.  
  187.  
  188. ΓòÉΓòÉΓòÉ 2.2. Order of records ΓòÉΓòÉΓòÉ
  189.  
  190. The  record  order  is  chosen  so  that  bind / link  passes  through  an 
  191. object  module  are  minimized .   This  differs  from  the  previous  less 
  192. specific  ordering  in  that  all  symbolic  information  ( in  particular , 
  193. all  export  and  public  symbols )  must  occur  at  the  start  of  the 
  194. object  module .  This  order  is  recommended  but  not  mandatory . 
  195.  
  196. Identifier  record ( s ) : 
  197.  
  198. Must  be  the  first  record . 
  199.  
  200.  1 . THEADR 
  201.  
  202.     Records  processed  by  Link  Pass  one : 
  203.  
  204.     May  occur  in  any  order  but  must  precede  the  Link  pass  separator 
  205.     if  it  is  present . 
  206.  
  207.  2 . COMENT  class  AF  providing  name  of  Identifier  Manipulator  Dynamic 
  208.     Link  Library  ( should  be  near  the  beginning  of  the  file ) 
  209.  
  210.  3 . COMENT  identifying  object  format  and  extensions 
  211.  
  212.  4 . COMENT  any ,  other  than  link  pass  separator  comment 
  213.  
  214.  5 . LNAMES  providing  ordered  name  list 
  215.  
  216.  6 . SEGDEF  providing  ordered  list  of  program  segments 
  217.  
  218.  7 . GRPDEF  providing  ordered  list  of  logical  segments 
  219.  
  220.  8 . PUBDEF  locating  and  naming  public  symbols 
  221.  
  222.  9 . COMDEF  and  EXTDEF  records 
  223.  
  224.    o This  group  of  records  is  indexed  together ,  so  External  Index 
  225.      fields  in  FIXUPP  records  may  refer  to  any  of  the  record  types 
  226.      listed . 
  227.  
  228. 10 . COMDAT  records 
  229.  
  230.     Link  pass  separator  ( optional ) : 
  231.  
  232. 11 . COMENT  class  A2  indicating  that  pass  1  of  the  linker  is 
  233.     complete .  When  this  record  is  encountered ,  LINK  immediately 
  234.     starts  Pass  2 ;  no  records  after  this  comment  are  read  in  Pass 
  235.     1 .  All  the  above  listed  records  must  come  before  this  comment 
  236.     record . 
  237.  
  238.     For  greater  linking  speed ,  all  LIDATA ,  LEDATA ,  FIXUPP  and 
  239.     LINNUM  records  should  come  after  the  A2  comment  record ,  but  this 
  240.     is  not  required .  In  LINK ,  Pass  2  begins  again  at  the  start  of 
  241.     the  object  module ,  so  LIDATA  records ,  etc . ,  are  processed  in 
  242.     Pass  2  no  matter  where  they  are  placed  in  the  object  module . 
  243.  
  244.     Records  ignored  by  link  pass  one  and  processed  by  link  pass  two 
  245.     : 
  246.  
  247. 12 . LIDATA  or  LEDATA  records  followed  by  applicable  FIXUPP  records . 
  248.  
  249. 13 . FIXUPPs  containing  THREADs  only . 
  250.  
  251. 14 . LINNUM  providing  line  number  to  program  code  or  data  association 
  252.     . 
  253.  
  254.     Terminator 
  255.  
  256. 15 . MODEND  indicating  end  of  module  with  optional  start  address . 
  257.  
  258.  
  259. ΓòÉΓòÉΓòÉ 2.3. Object Record Descriptions ΓòÉΓòÉΓòÉ
  260.  
  261.  
  262. ΓòÉΓòÉΓòÉ 2.3.1. 80H THEADR  Translator Header Record ΓòÉΓòÉΓòÉ
  263.  
  264.  
  265. Description :  The  THEADR  record  contains  the  name  of  the  object 
  266. module .  This  name  identifies  an  object  module  within  an  object 
  267. library  or  in  messages  produced  by  the  linker . 
  268.  
  269.    1 byte  2 byte
  270.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  271.   Γöé  80   Γöé Record         Γöé
  272.   Γöé       Γöé  Length        Γöé
  273.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  274.  
  275.  
  276.           1 byte   <variable length>        1 byte
  277.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  278.          ΓöéString Γöé   Name string           ΓöéChk SumΓöé
  279.          ΓöéLength Γöé                         Γöéor 0   Γöé
  280.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  281.  
  282. THEADR record type definition
  283. TheStringLengthbytegivesthenumberofcharactersinthenamestring 
  284. ;thenamestringitselfisASCII . Thisnameisusuallythatofthesourceprogram( 
  285. ifsuppliedbythelanguagetranslator ) ,ormaybespecifieddirectlybytheprogrammer( e 
  286. . g .TITLEpseudo - op ) .
  287.  
  288. This record must occur as the first object record.  More than one header record 
  289. is allowed (as a result of an object bind, or if source arose from multiple 
  290. files as a result of include processing). 
  291. NOTES: 
  292.  
  293. The name string is always present; a null name is allowed but not recommended 
  294. (not much information for a debugger that way). 
  295.  
  296. It is recommended that the module be generated with the full path and filename 
  297. containing the source code. 
  298.  
  299. The THEADR record must be the first record of the object module. 
  300.  
  301. More than one header record is allowed (as a result of source from multiple 
  302. files during the include process). 
  303.  
  304.  
  305. ΓòÉΓòÉΓòÉ 2.3.2. 88H COMENT  Comment Record ΓòÉΓòÉΓòÉ
  306.  
  307.  
  308. Description: The COMENT record contains a character string that may represent a 
  309. plain text comment, a symbol meaningful to a program such as LINK or LIB, or 
  310. some binary coded information that alters the linking process. The comment 
  311. records are actually a group of items, classified by "comment class". 
  312.  
  313.    1 byte  2 byte
  314.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  315.   Γöé  88   Γöé Record         Γöé
  316.   Γöé       Γöé  Length        Γöé
  317.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  318.  
  319.  
  320.           1 byte  1 byte  <Record length - 3>      1 byte
  321.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  322.          ΓöéCommentΓöéCommentΓöé Commentary byte string ΓöéChk SumΓöé
  323.          Γöé Type  Γöé Class Γöé    (optional)          Γöéor 0   Γöé
  324.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  325.  
  326. COMENT record type definition 
  327.  
  328.  
  329. Comment Type 
  330.  
  331. The comment type byte is bit-significant; layout is: 
  332.  
  333.          <----------------------- 1 byte ------------------------------>
  334.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  335.         Γöé NP    Γöé NL    Γöé   0   Γöé   0   Γöé   0   Γöé   0   Γöé   0   Γöé   0   Γöé
  336.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  337. where 
  338.  
  339. NP  is set if the comment is to be preserved by object bind utilities 
  340. NL  is set if the comment is not for display by object bind utilities 
  341.  
  342.  
  343. Comment class and commentary byte string 
  344.  
  345. The comment class is an 8-bit numeric which conveys information by its value 
  346. (accompanied by a null byte string), or indicates the information to be found 
  347. in the accompanying byte string. The byte string's length is determined from 
  348. the record length, not by an initial count byte. 
  349.  
  350. The values in use currently are the following: 
  351.  
  352. 0  Translator 
  353.     For translator; may name the source language or translator. Recommended: 
  354.     translator name and version plus optimization level used for compilation be 
  355.     recorded here.  Other compiler or assembler options can be included, 
  356.     although current practice seems to be to place these under comment class 
  357.     9D. 
  358.  
  359. 1  Intel copyright 
  360.     Ignored by the linker. 
  361.  
  362. 2 through 9B  Intel reserved 
  363.     The values from 9C through FF are ignored by Intel products. 
  364.  
  365. 9C MS-DOS version -- obsolete 
  366.     Ignored by linker 
  367.  
  368. 9D Memory Model -- ignored 
  369.     Ignored by linker 
  370.  
  371. 9E DOSSEG 
  372.     Sets the linkers DOSSEG switch. The byte string is null. This record is 
  373.     included in the startup module in each language library. It directs the 
  374.     linker to use the standardized segment ordering, according to the naming 
  375.     conventions documented with DOS, OS/2 and accompanying language products. 
  376.  
  377. 9F  Library indicator 
  378.     The byte string contains a library file name (without a lead count byte and 
  379.     without an extension). Can be over-ridden via NOD link switch. 
  380.  
  381. A0  OMF extensions 
  382.     This class consists of a set of records, identified by subtype (first byte 
  383.     of commentary string).  Values supported by the OS/2 2.0 linker are 
  384.  
  385.    01          Reserved by Microsoft 
  386.    02          Reserved by Microsoft 
  387.    03          Reserved by Microsoft 
  388.    04 Protected Memory Library Relevant to 32 bit DLL's. This comment record is 
  389.                inserted in the object module by the compiler when it encounters 
  390.                a compiler option or pragma indicating a protected DLL. The 
  391.                linker then sets a flag in the header of the executable file 
  392.                (DLL) to indicate that the DLL should be loaded in such a way 
  393.                that its shared code and data is protected from corruption. 
  394.  
  395.                When the flag is set in the EXE header, the loader loads the 
  396.                selector of the protected memory area into the DS while 
  397.                performing run-time fixups (relocations). All other DLL's and 
  398.                applications get the regular DGROUP selector, which doesn't 
  399.                allow access to the protected memory area set up by the 
  400.                operating system. 
  401.  
  402. A1  Symbolic debug information 
  403.     This comment class is now used solely to indicate the version of the 
  404.     symbolic debug information. 
  405.  
  406.     The byte string will be a version number (8-bit numeric) followed by an 
  407.     ASCII character string indicating the style of symbol and line number 
  408.     (LINNUM) information. Current values are 
  409.  
  410.    n,'C','V' CodeView style 
  411.    n,'D','X' AIX style 
  412.    n,'H','L' IBM PM Debugger 
  413.  
  414. A2  Link Pass 
  415.     This record conveys information to the linker about the organization of the 
  416.     file.  At present, a single sub-extension is defined. The commentary string 
  417.     is 
  418.  
  419.               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ--------ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  420.               Γöé   01    Γöé  Optional              Γöé
  421.               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ--------ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  422.     Subclass 01 indicates the start of link pass 2 records; this may be 
  423.     followed by anything at all, which will be ignored by the linker 
  424.     (determined from the RecLength). When this comment appears, the linker can 
  425.     rest assured that only LEDATA, LIDATA, FIXUPP, LINNUM and the terminal 
  426.     MODEND records will occur after this.  All other record types, plus THREAD 
  427.     fixups, occur before. 
  428.  
  429.     WARNING: It is assumed that this comment will not be present in a module 
  430.     whose MODEND record contains a program starting address. 
  431.  
  432. A4  EXESTR indicator 
  433.     Executable Module Identification String 
  434.  
  435.     A commentary string specifying a string to be placed in the executable 
  436.     module, but which is not loaded with the load module. 
  437.  
  438. A8 WKEXT 
  439.     Weak Extern record.  See WKEXT section for a complete description. 
  440.  
  441. AF  IDMDLL indicator 
  442.     Identifier Manipulator Dynamic Link Library.  See IDMDLL section for a 
  443.     complete description 
  444.  
  445. B2H-BFH 
  446.     Unused 
  447.  
  448. C0H-FFH 
  449.     Reserved for user-defined comment classes. 
  450.  
  451. Notes: 
  452.  
  453. A COMENT record can appear almost anywhere in an object module. Only two 
  454. restrictions apply: 
  455.  
  456. o A COMENT record cannot be placed between a FIXUPP record and the LEDATA or 
  457.   LIDATA record to which it refers. 
  458.  
  459. o A COMENT record can not be the first or last record in an object module. (The 
  460.   first record must always be a THEADR record and the last must always be a 
  461.   MODEND). 
  462.  
  463.  
  464. ΓòÉΓòÉΓòÉ 2.3.3. 88H EXESTR  Executable String Record (comment class A4) ΓòÉΓòÉΓòÉ
  465.  
  466.  
  467. Description: The EXESTR comment record implements these ANSI and UNIX features 
  468. in c: 
  469.  
  470. o #PRAGMA comment(exestr, <char-sequence>) 
  471.  
  472. o #IDENT string 
  473.  
  474.      The Subrecord Format is:
  475.  
  476.           1 byte   <variable>  (bytes)
  477.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  478.          Γöé  A4   Γöé Arbitrary text                      Γöé
  479.          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  480.          The linker will copy the text in the "arbitrary text" field
  481.          byte for byte to the end of the executable file.  The text
  482.          will not be included in the program load image.
  483.  
  484. EXESTR executable string record 
  485.  
  486. Notes: 
  487.  
  488. If debug information is present, the text will not be at the end of the file, 
  489. but somewhere before so as not to interfere with the debug signature. 
  490.  
  491. There is no limit to the number of EXESTR comment records. 
  492.  
  493.  
  494. ΓòÉΓòÉΓòÉ 2.3.4. 88H WKEXT Weak Extern Record (comment class A8) ΓòÉΓòÉΓòÉ
  495.  
  496.  
  497. Description: This record marks a set of external names as "weak" and for every 
  498. weak extern associates another external name to used as the default resolution. 
  499.  
  500.      The Subrecord Format is:
  501.  
  502.           1 byte  1 or 2 bytes     1 or 2 bytes
  503.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  504.          Γöé  A8   Γöé Weak extern     Γöé Default resolution Γöé
  505.          Γöé       Γöé EXTDEF Index    Γöé EXTDEF Index       Γöé
  506.          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  507.  
  508. WKEXT  weak extern subrecord format definition 
  509.  
  510. The Weak EXTDEF Index field is the 1 or 2 byte index to the EXTDEF of the 
  511. extern which is weak. 
  512.  
  513. The Default Resolution EXTDEF Index is the 1 or 2 byte index to the EXTDEF of 
  514. the extern that will be used to resolve the extern if no "stronger" link is 
  515. found to resolve it. 
  516. Notes: 
  517.  
  518. There are two ways to cancel the "weakness" of a weak extern:  both result in 
  519. the extern becoming a "strong" extern (the same as an EXTDEF). They are: 
  520.  
  521. o If a PUBDEF for the weak extern is linked in. 
  522.  
  523. o If an EXTDEF for the weak extern is found in another module (including 
  524.   libraries). 
  525.  
  526. If a weak extern becomes strong, them it must be resolved with a matching 
  527. PUBDEF, just like a regular EXTDEF. If a weak extern has not become strong by 
  528. the end of the linking process, then the default resolution is used. 
  529.  
  530. If two weak externs for the same symbol in different modules have differing 
  531. default resolutions, the linker will emit a warning. 
  532.  
  533. Weak externs do not query libraries for resolution: if an extern is still weak 
  534. when libraries are searched, it stays weak and gets the default resolution. 
  535. However, if a library module is linked in for other reasons (eg. to resolve a 
  536. strong extern) and there are EXTDEF's for symbols that were weak, the symbols 
  537. become strong. 
  538.  
  539. For example, suppose there is a weak extern for "foo" with a default resolution 
  540. name of "bar". If there is a PUBDEF for "foo" in some library nodule which 
  541. would not otherwise be linked in, then the library module is not linked in, and 
  542. any references to "foo" are resolved to "bar". However, if a library module is 
  543. linked in for other reasons, for example to resolve references to a strong 
  544. extern named "bletch", then "foo" will be resolved by the PUBDEF from the 
  545. library, not to the default resolution "bar". 
  546.  
  547. WKEXT's are best understood by explaining why they were added in the first 
  548. place. The run time library for a programming language is generally very large 
  549. and has a significant amount of code that need not be linked in for the smaller 
  550. programs. Much of the code is not called directly by the user, but was called 
  551. indirectly from other routines in the library, so it is linked in to resolve 
  552. the external references. 
  553.  
  554. For instance, the floating point library is linked in even when the user 
  555. program does not require floating point, because the PRINT library routine has 
  556. calls to the floating point library to support printing floating point numbers. 
  557.  
  558. The solution is to make the function calls between the library routines into 
  559. weak externals, with the default resolution to dummy symbols. If the user 
  560. doesn't require floating point then the compiler will not generate a strong 
  561. external for floating point routines. The weak extern's in the PRINT library 
  562. routine that call floating point will be resolved to dummy symbols (or stub 
  563. routines) and the unnecessary floating point library routines are not included 
  564. in the executable module. This requires that the compiler know a lot about the 
  565. run time library routines to sort this out correctly, but it results in a much 
  566. smaller executable module. 
  567.  
  568.  
  569. ΓòÉΓòÉΓòÉ 2.3.5. 88H IDMDLL Identifier Manipulator DLL (comment class AF) ΓòÉΓòÉΓòÉ
  570.  
  571.  
  572. Description: This record provides the name and initialization parmameters of a 
  573. DLL that will demangle the compiler generated mangled names. The linker will 
  574. use this DLL when displaying error messages. 
  575.  
  576.      The Subrecord Format is:
  577.  
  578.           1      1         <-Name Length-> 1         <-Parms Length->
  579.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  580.          Γöé 0xAF Γöé Name    Γöé DLL Name      Γöé Parms   Γöé Demangle Init  Γöé
  581.          Γöé      Γöé Length  Γöé               Γöé Length  Γöé Parameters     Γöé
  582.          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  583.  
  584. IDMDLL  Identifier Manipulator DLL subrecord format definition 
  585.  
  586. The Name Length byte gives the number of characters in the DLL Name; the DLL 
  587. Name itself is ASCII. 
  588.  
  589. The DLL Name is the name of the Identifier Manipulator Dynamic Link Library 
  590. provided by the language.  This DLL is used to demangle an internal identifier 
  591. when that identifier will be displayed in an error message. 
  592.  
  593. The Parms Length byte gives the number of characters in the Demangle Init 
  594. Parameters; the Demangle Init Parameters itself is ASCII. 
  595.  
  596. The Demangle Init Parameters provides information (to the DLL) on how internal 
  597. identifiers are mangled. 
  598.  
  599. The linker will not scan forward for an IDMDLL record when an identifier will 
  600. be displayed.  This record should occur near the beginning of the file. 
  601.  
  602. IDMDLL class COMENT records are processed during pass 1 of the linker. 
  603. Notes: 
  604.  
  605. Because object oriented compilers allow for two functions to have the same name 
  606. but different parameters, the compiler uniquely identifies each function by 
  607. changing the name of the function. This is known as mangling. An example of 
  608. this would be: 
  609.  
  610.  
  611.              User Prototype                 Compiler Generated
  612.                                             Mangled Name
  613.              --------------------------     ------------------
  614.              void doit( int, float )        _doit__Fif
  615.              void doit( const char * )      _doit__FCPc
  616.  
  617. The user will usually not be aware that the compiler changed the name, so it is 
  618. neccessary for the linker to demangle the compiler generated name when printing 
  619. out linker error messages. 
  620.  
  621. The dynamic link library (DLL) provided by an object oriented language compiler 
  622. must contain two 16-bit functions which employ the pascal calling convention: 
  623.  
  624. INITDEMANGLEID       Receive initialization parameters specified in the IDMDLL 
  625.                      COMENT record. 
  626.  
  627. DEMANGLEID           Demangles first parameter (identifier, "_add__i_ii") to 
  628.                      appropriate prototype (i.e. "int add(int, int)") and 
  629.                      returns result in second parameter. 
  630.  
  631. The INITDEMANGLEID and DEMANGLEID entry points may be called more than once. 
  632.  
  633. All functions must return true (non-zero) if the call is successful and false 
  634. (zero) if the call fails.  In this manner the linker can ignore whatever is 
  635. returned in the second parameter of the DEMANGLEID fuction if the function 
  636. returns false. When calling DEMANGLEID, the linker will pass in the address of 
  637. a buffer for the second parameter, and the size of the buffer for the third 
  638. parameter. 
  639.  
  640. All string parameters must be length-prefixed ASCII strings except for 
  641. pszPrototype, parameter 2 for DEMANGLEID (because the length might not fit in a 
  642. byte). Function prototypes for these routines look like: 
  643.  
  644.   unsigned short pascal far INITDEMANGLEID(char far * psInitParms);
  645.  
  646.   unsigned short pascal far DEMANGLEID(char far * psMangledName,
  647.                                        char far * pszPrototype,
  648.                                        unsigned long BufferLen);
  649.  
  650. Note:  Languages may also wish to provide 32-bit functions for use by 32-bit 
  651. linkers, when they become available.  Function prototypes look like: 
  652.  
  653.   unsigned long _system InitDemangleID32(char * psInitParms);
  654.  
  655.   unsigned long _system DemangleID32(char * psMangledName,
  656.                                      char * pszPrototype,
  657.                                      unsigned long BufferLen);
  658.  
  659.  
  660. ΓòÉΓòÉΓòÉ 2.3.6. 8BH MODEND  Module End Record ΓòÉΓòÉΓòÉ
  661.  
  662.  
  663. Description: The MODEND record denotes the end of the object module. It also 
  664. indicates whether the object module contains a main routine in a program, and 
  665. it can, optionally, contain a reference to a programs entry point. 
  666.  
  667.    1 byte  2 bytes
  668.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  669.   Γöé  8B   Γöé Record         Γöé
  670.   Γöé       Γöé  Length        Γöé
  671.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  672.  
  673.           1 byte  1 byte  1 or 2    1 or 2    4 bytes        1 byte
  674.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  675.          Γöé ModuleΓöé End   Γöé Frame   Γöé Target  Γöé Target       ΓöéChk sumΓöé
  676.          Γöé  Type Γöé  Data Γöé  Datum  Γöé  Datum  Γöé  DisplacementΓöé or 0  Γöé
  677.          Γöé       Γöé       Γöé   Index Γöé   Index Γöé              Γöé       Γöé
  678.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  679.                   <------ Start Address, conditional ------>
  680.  
  681. MODEND  module end record 
  682.  
  683.  
  684. Module Type 
  685.  
  686. The module type byte is bit-significant; layout is: 
  687.  
  688.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  689.      Γöé   MATTR   Γöé Seg Γöé  0  Γöé  0  Γöé  0  Γöé  0  Γöé  X  Γöé
  690.      ΓöéMain  Strt Γöé Bit Γöé     Γöé     Γöé     Γöé     Γöé     Γöé
  691.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  692.         2 bits      1     1     1     1     1     1
  693. where 
  694.  
  695. MATTR   is a 2-bit field 
  696.  
  697.    Main  is set if the module is a main module 
  698.  
  699.    Strt  is set if the module contains a start address; if this bit is set, the 
  700.          field starting with the EndDat byte is present and specifies the start 
  701.          address. 
  702.  
  703. SegBit  Reserved. Only 0 is supported by OS/2. 
  704.  
  705. X       This bit should be set (as described for OMF86).  However, as is the 
  706.         case for the OMF86 linkers, the value will be ignored. 
  707.  
  708.  
  709. Start Address 
  710.  
  711. The Start Address subfield is present only if the Strt bit in the Module Type 
  712. byte is set.  Its format is identical to the FixDat, Frame Datum, Target Datum, 
  713. and Target displacement in a FIXUP subrecord of a FIXUPP record. The 
  714. displacement (if present) is a 4 byte field. This value provides the initial 
  715. contents of CS:EIP. 
  716. Notes: 
  717.  
  718. A MODEND record can appear only as the last record in an object module. 
  719.  
  720. It is assumed that the link pass separator comment record (COMENT A2, subtype 
  721. 01) will not be present in a module whose MODEND record contains a program 
  722. starting address. 
  723.  
  724.  
  725. ΓòÉΓòÉΓòÉ 2.3.7. 8CH EXTDEF External Names Definition Record ΓòÉΓòÉΓòÉ
  726.  
  727.  
  728. Description: The EXTDEF record contains a list of symbolic external references 
  729. -- that is, references to symbols defined in other object modules. The linker 
  730. resolves external references by matching the symbols declared in EXTDEF records 
  731. with symbols declared in PUBDEF records. 
  732.  
  733.    1 byte  2 bytes
  734.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  735.   Γöé  8C   Γöé Record         Γöé
  736.   Γöé       Γöé  Length        Γöé
  737.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  738.  
  739.                  1 byte <string>      1 or 2   1 byte
  740.               --Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  741.                 ΓöéString ΓöéExternal     ΓöéType    ΓöéChk sumΓöé
  742.                 Γöé LengthΓöé Name string Γöé Index  Γöé or 0  Γöé
  743.               --Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  744.                  <-------- repeated --------->
  745.  
  746. EXTDEF  external names definition record 
  747.  
  748. This record provides a list of unresolved references, identified by name and 
  749. with optional associated type information. The external names are ordered by 
  750. occurrence jointly with the COMDEF records and referenced by an index in other 
  751. records (FIXUPPs); the name may not be null. Indices start from one. 
  752.  
  753. String Length is a 1-byte field containing the length of the name field that 
  754. follows it. The length of the name is restricted to 255 bytes. 
  755.  
  756. The Type Index is encoded as an index field and contains debug information. No 
  757. type checking is performed by the linker. 
  758. Notes: 
  759.  
  760. The linker imposes a limit of 1023 external names. 
  761.  
  762. Any EXTDEF records in an object module must appear before the FIXUPP records 
  763. that reference them. 
  764.  
  765. Resolution of an external reference is by name match (case sensitive) and 
  766. symbol type match.  The search first looks for a matching name, in the 
  767. sequence: 
  768.  
  769.  1. Searches PUBDEF and COMDEF for resolution. 
  770.  
  771.  2. If this is not a DLL, then searches for an export with the same name -- a 
  772.     self-imported alias. 
  773.  
  774.  3. Searches for the symbol name among undefined symbols. If the reference is 
  775.     to a weak extern, then the default resolution is used. If the reference is 
  776.     to a strong extern, then it's an undefined external and a link error is 
  777.     generated. 
  778.  
  779. All external references must be resolved at link time (using the above search 
  780. order). Even though the linker produces an executable file for and unsuccessful 
  781. link session, an error bit is set in the header which prevents the loader from 
  782. running the executable. 
  783.  
  784.  
  785. ΓòÉΓòÉΓòÉ 2.3.8. 91H PUBDEF Public Names Definition Record ΓòÉΓòÉΓòÉ
  786.  
  787.  
  788. Description: The PUBDEF record contains a list of public names. It makes items 
  789. defined in this object module available to satisfy external references in other 
  790. modules with which it is bound or linked. 
  791.  
  792. The symbols are also available for export if so indicated in an EXPDEF comment 
  793. record. 
  794.  
  795.    1 byte  2 bytes
  796.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  797.   Γöé  91   Γöé Record         Γöé
  798.   Γöé       Γöé  Length        Γöé
  799.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  800.  
  801.       1 or 2   1 or 2   2 bytes  1 byte <string>  4 bytes    1 or 2   1 byte
  802.    --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  803.      ΓöéBase    ΓöéBase    ΓöéBase    ΓöéStr.  ΓöéPublic   ΓöéPublic    ΓöéType    ΓöéChk sumΓöé
  804.      Γöé Group  Γöé SegmentΓöé Frame  Γöé Len  ΓöéName str.Γöé Offset   Γöé Index  Γöéor 0   Γöé
  805.      Γöé  Index Γöé  Index Γöé  Index Γöé      Γöé         Γöé          Γöé        Γöé       Γöé
  806.    --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  807.                         <cnd1>   <------------ repeated ------------>
  808.  
  809. PUBDEF  public names definition record 
  810.  
  811. Base Group, Base Segment and Base Frame 
  812.  
  813. The base group and segment are indices specifying previously defined SEGDEF and 
  814. GRPDEF records. The group index may be zero, meaning that no group is 
  815. associated with this PUBDEF record. 
  816.  
  817. The Base Frame field is present only if the Base Segment is zero, but the 
  818. content of the Base Frame is always ignored by the linker. 
  819.  
  820. The Segment Index is normally nonzero and no Base Frame is present. 
  821.  
  822. The Base Frame is normally used for absolute addressing when the Group and 
  823. Segment Index are both zero. Absolute addressing is not fully supported in the 
  824. linker. 
  825. Public name, Public Offset and Type Index 
  826.  
  827. The public name string is in <count, char> form and cannot be null. The maximum 
  828. length of a public name is 255 bytes. 
  829.  
  830. The public offset is a 4 byte numeric field containing the offset of the 
  831. location referred to by the public name. This offset is assumed to lie within 
  832. the segment, group or frame specified in the public base field. 
  833.  
  834. The Type Index field is encoded in index format; it contains either debug type 
  835. information or zero. This field is ignored by the OS/2 2.0 linker. 
  836. NOTES: 
  837.  
  838. All defined functions and initialized global variables generate PUBDEF records. 
  839.  
  840. Any PUBDEF records in an object module must appear after the GRPDEF and SEGDEF 
  841. records to which they refer. 
  842.  
  843. The IBM C Compiler will generate PUBDEF records for all defined functions and 
  844. initialized global variables. Globals for scalars that are initialized to zero 
  845. produce COMDEF records. 
  846.  
  847.  
  848. ΓòÉΓòÉΓòÉ 2.3.9. 95H LINNUM  Line Number Record ΓòÉΓòÉΓòÉ
  849.  
  850.  
  851. Description: The LINNUM record relates line number within language source 
  852. statements to addresses in the object code. 
  853.  
  854.    1 byte  2 bytes
  855.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  856.   Γöé  95   Γöé Record         Γöé
  857.   Γöé       Γöé  Length        Γöé
  858.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  859.  
  860.            1 or 2   1 or 2     <variable>        1 byte
  861.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  862.          Γöé Base    Γöé Base    Γöé  Debugger Style  ΓöéChk SumΓöé
  863.          Γöé  Group  Γöé  SegmentΓöé   Specific       Γöéor 0   Γöé
  864.          Γöé   Index Γöé   Index Γöé    Information   Γöé       Γöé
  865.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  866.                               <--- repeated --->
  867.  
  868. LINNUM  line number record 
  869.  
  870. Associates a source line number with translated code or data. The LINNUM record 
  871. is only generated when the debug option is selected and is therefore specific 
  872. to the debug information. Refer to the specific debug documentation for more 
  873. information. 
  874.  
  875.  
  876. Base Group and Segment The Base group and segment are indices specifying 
  877. previously defined GRPDEF and SEGDEF records.  The group index is ignored and 
  878. the segment index must be nonzero. 
  879.  
  880.  
  881. ΓòÉΓòÉΓòÉ 2.3.10. 96H LNAMES  List of Names Record ΓòÉΓòÉΓòÉ
  882.  
  883.  
  884. Description: The LNAMES record is a list of names that can be referenced by 
  885. subsequent SEGDEF and GRPDEF records in the object module. 
  886.  
  887. The names are ordered by occurrence and referenced by index from subsequent 
  888. records. More than one LNAMES record may appear. The names themselves are used 
  889. as segment, class and group names. 
  890.  
  891.    1 byte  2 bytes
  892.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  893.   Γöé  96   Γöé Record         Γöé
  894.   Γöé       Γöé  Length        Γöé
  895.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  896.  
  897.           <-------- String Length ------->  1 byte
  898.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  899.          ΓöéStringΓöé     Name                 ΓöéChk SumΓöé
  900.          ΓöéLengthΓöé       String             Γöéor 0   Γöé
  901.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  902.           <---------- repeated ----------->
  903.  
  904. LNAMES list of names record 
  905.  
  906. Each name appears in count/char format, and a null name is valid.  The 
  907. character set is ASCII. 
  908.  
  909.  
  910. NOTES: 
  911.  
  912. The linker imposes a limit of 255 logical names per object module. 
  913.  
  914. Any LNAMES records in an object module must appear before the records that 
  915. refer to them. Because it does not refer to any other type of object record, an 
  916. LNAMES record usually appears near the start of an object module. 
  917.  
  918.  
  919. ΓòÉΓòÉΓòÉ 2.3.11. 99H SEGDEF  Segment Definition Record ΓòÉΓòÉΓòÉ
  920.  
  921.  
  922. Description: The SEGDEF record describes a logical segment in an object module. 
  923. It defines the segment's name, length and alignment, as well as the way the 
  924. segment can be combined with other logical segments at bind, link and load 
  925. time. 
  926.  
  927. Object records that follow the SEGDEF record can refer to it to identify a 
  928. particular segment. The SEGDEF records are ordered by occurrence and are 
  929. referenced by segment indexes (origin 1) in subsequent records. 
  930.  
  931.    1 byte  2 bytes
  932.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  933.   Γöé  99   Γöé Record         Γöé
  934.   Γöé       Γöé  Length        Γöé
  935.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  936.  
  937.           <variable>   4 bytes      1 or 2   1 or 2   1 or 2  1 byte
  938.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  939.          Γöé Segment    Γöé Segment    Γöé SegmentΓöé Class  ΓöéOverlayΓöéChk SumΓöé
  940.          Γöé Attribute  Γöé Length     Γöé Name   Γöé Name   ΓöéName   Γöéor 0   Γöé
  941.          Γöé            Γöé            Γöé Index  Γöé Index  ΓöéIndex  Γöé       Γöé
  942.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  943.  
  944. SEGDEF  segment definition record 
  945.  
  946. Segment Attributes 
  947.  
  948. The segment attribute is bit-significant; the layout is: 
  949.  
  950.     <-3 bits-> <-3 bits->  <-1 bit ->  <-1 bit ->   2 bytes    1 byte
  951.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  952.    Γöé A        Γöé C         Γöé B         Γöé P         Γöé Frame     Γöé Offset    Γöé
  953.    Γöé          Γöé           Γöé           Γöé           Γöé   Number  Γöé           Γöé
  954.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  955.                                                     <cond>      <cond>
  956.  
  957. The fields have the following meaning: 
  958.  
  959. A   alignment, a 3-bit field, which specifies the alignment required when this 
  960.     program segment is placed within a logical segment.  Values are: 
  961.  
  962.    0  absolute segment 
  963.    1  relocatable, byte aligned 
  964.    2  relocatable, word (2 byte, 16-bit) aligned 
  965.    3  relocatable, paragraph (16 byte) aligned 
  966.    4  relocatable, aligned on page (4K byte) boundary. 
  967.    5  relocatable, aligned on double word (4 byte) boundary 
  968.    6  not supported 
  969.    7  not defined 
  970.  
  971.     The new values are A=4 and A=5.  Dword alignment is required for 80386 
  972.     hardware. Page-align maps to the 80386 hardware page size of 4K bytes. 
  973.  
  974. C   combination, a 3-bit field, which determines the way the program segment is 
  975.     mapped into a logical segment. Values are: 
  976.  
  977.    0  private, do not combine with any other program segment 
  978.    1  reserved 
  979.    2  public, combine by appending at an offset which meets the alignment 
  980.       requirement 
  981.    3  reserved 
  982.    4  same as C=2 (public) 
  983.    5  stack, combine as for C=2. 
  984.    6  common, combine by overlay using maximum size 
  985.    7  same as C=2 (public) 
  986.  
  987. B   big, used as the high order bit of the segment length field.  If this bit 
  988.     is set the segment length value must be zero and the segment's size is 2╨║32 
  989.     or 4Gbytes long. 
  990.  
  991. P   Holds the descriptor table B/D bit value (this is the descriptor table D 
  992.     bit for code segments and the B bit for data segments). 
  993.  
  994.     If zero, then segment is no larger than 64K (if data) and 16-bit addressing 
  995.     and operands are the default (if code). This is a Use16 segment. 
  996.  
  997.     if not zero, this is a 4Gbyte segment Use32 segment. 
  998.  
  999.     Note that this is the only method for defining Use32 segments. 
  1000.  
  1001.  
  1002. Segment Length 
  1003.  
  1004. The Segment Length is a 4 byte numeric quantity and specifies the number of 
  1005. bytes in this program segment. 
  1006. NOTE: If segment is exactly 4Gbytes in size, segment length should be set to 
  1007. zero and the B field in the ACBP byte should be set to 1. 
  1008. Complete Segment Name 
  1009.  
  1010. The three name indices refer to names that appeared in previous LNAMES 
  1011. record(s). The linker ignores the overlay name index. The full name of a 
  1012. segment consists of the segment and class names. Segments in different object 
  1013. modules are normally combined according to the A and C values if their full 
  1014. names are identical. These indices must be nonzero, although the name itself 
  1015. may be null. 
  1016.  
  1017. The segment name index identifies the segment with a name. the name need not be 
  1018. unique -- other segments of the same name will be concatenated onto the first 
  1019. segment with that name. The name may have been assigned by the programmer, or 
  1020. it may have been generated by the compiler. 
  1021.  
  1022. The class name index identifies the segment with a class name (such as CODE, 
  1023. DATA or STACK). The linker places segments with the same class name into a 
  1024. contiguous area of memory in the run-time memory map. 
  1025.  
  1026. The overlay index is ignored by the linker. 
  1027. notes: 
  1028.  
  1029. The linker imposes a limit of 255 SEGDEF records per object module. 
  1030.  
  1031. The following name/class combinations are reserved: 
  1032.  
  1033. $$TYPE Reserved for Debug types. 
  1034. $$SYMBOLS Reserved for Debug names. 
  1035. CODE32 Reserved for IBM C Compiler. 
  1036. DATA32 Reserved for IBM C Compiler. 
  1037. CONST32 Reserved for IBM C Compiler. 
  1038. BSS32 Reserved for IBM C Compiler. 
  1039. DGROUP32 Reserved for IBM C Compiler. 
  1040.  
  1041.  
  1042. ΓòÉΓòÉΓòÉ 2.3.12. 9AH GRPDEF  Group Definition Record ΓòÉΓòÉΓòÉ
  1043.  
  1044.  
  1045. Description: The GRPDEF record causes the program segments defined by SEGDEF 
  1046. records to be collected together (grouped). For OS/2 2.0, the segments are 
  1047. combined into a logical segment which is to be addressed through a single 
  1048. selector for flat memory. 
  1049.  
  1050.    1 byte  2 bytes
  1051.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  1052.   Γöé  9A   Γöé Record         Γöé
  1053.   Γöé       Γöé  Length        Γöé
  1054.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  1055.  
  1056.            1 or 2     1 byte   1 or 2     1 byte
  1057.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1058.          Γöé Group     Γöé FF    Γöé Segment   ΓöéChk SumΓöé
  1059.          Γöé Name IndexΓöé       Γöé Def. IndexΓöéor 0   Γöé
  1060.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1061.                       <---- repeated ---->
  1062.  
  1063. GRPDEF  group definition record 
  1064.  
  1065. This record causes the program segments identified by SEGDEF records to be 
  1066. collected together (grouped) within a logical segment which is to be addressed 
  1067. through a single selector. 
  1068.  
  1069.  
  1070. Group Name 
  1071.  
  1072. The group name is specified as an index into a previously defined LNAMES name 
  1073. and must be nonzero. 
  1074.  
  1075. Groups from different object modules are coalesced if their names are 
  1076. identical. 
  1077.  
  1078.  
  1079. Group Components 
  1080.  
  1081. The group's components are segments, specified as indices into previously 
  1082. defined SEGDEF records. 
  1083.  
  1084. The first byte of each group component is a type field for the remainder of the 
  1085. component. The linker requires a type value of FFH and always assumes that the 
  1086. component contains a segment index value. 
  1087.  
  1088. The component fields are usually repeated so that all segments constituting a 
  1089. group can be included in one GRPDEF record. 
  1090. Notes: 
  1091.  
  1092. This record is frequently followed by a THREAD fixup. 
  1093.  
  1094. The linker imposes a limit of 31 GRPDEF records in a single object module and 
  1095. limits the total number of group definitions across all object modules to 31. 
  1096.  
  1097. An example of a group for the IBM C Compiler is DGROUP32 which groups DATA32, 
  1098. CONST32 and BSS32. 
  1099.  
  1100. The linker does special handling of the pseudo-group FLAT. All address 
  1101. references to this group are made as offsets from the virtual zero address, 
  1102. which is the start of the memory image of the executable. 
  1103.  
  1104.  
  1105. ΓòÉΓòÉΓòÉ 2.3.13. 9DH FIXUPP  Fixup Record ΓòÉΓòÉΓòÉ
  1106.  
  1107.  
  1108. Description: The FIXUPP record contains information that allows the linker to 
  1109. resolve (fix up) and eventually relocate references between object modules. 
  1110. FIXUPP records describe the LOCATION of each address value to be fixed up, the 
  1111. TARGET address to which the fixup refers and the FRAME relative to which the 
  1112. address computation is performed. 
  1113.  
  1114.    1 byte  2 bytes
  1115.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  1116.   Γöé  9D   Γöé Record         Γöé
  1117.   Γöé       Γöé  Length        Γöé
  1118.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  1119.  
  1120.           <--- from the record length --->  1 byte
  1121.        --ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1122.          Γöé  THREAD subrecord or            ΓöéChk SumΓöé
  1123.          Γöé    FIXUP subrecord              Γöéor 0   Γöé
  1124.        --ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1125.           <--------- repeated ------------>
  1126.  
  1127. FIXUPP  fixup record 
  1128.  
  1129. These records convey the information needed to resolve and eventually relocate 
  1130. references between different object modules. 
  1131.  
  1132. Each subrecord in a FIXUPP object record either defines a thread for subsequent 
  1133. use, or refers to a data location in the nearest previous LEDATA or LIDATA 
  1134. record. The high order bit of the subrecord determines the subrecord type:  if 
  1135. the high order bit is 0, the subrecord is a THREAD subrecord;  if the high 
  1136. order bit is 1, the subrecord is a FIXUP subrecord. Subrecords of different 
  1137. types may be mixed within one object record. 
  1138.  
  1139. Information that determines how to resolve a reference can be specified 
  1140. explicitly in a FIXUP subrecord, or can be specified within a FIXUP subrecord 
  1141. by a reference to a previous THREAD subrecord. A THREAD subrecord describes 
  1142. only the method to be used by the linker to refer to a particular target or 
  1143. frame. Because the same THREAD can be referenced in several subsequent FIXUP 
  1144. subrecords, a FIXUPP object record that uses THREADs may be smaller than one in 
  1145. which THREADs are not used. 
  1146.  
  1147. THREAD subrecords can be referenced in the same object record in which they 
  1148. appear and also in subsequent FIXUPP object records. 
  1149. THREAD 
  1150.  
  1151. There are 4 frame threads and 4 target threads; not all need be defined and 
  1152. they can be redefined by later THREAD subrecords in the same or later FIXUPP 
  1153. object records. The frame threads are used to specify the Frame Datum field in 
  1154. a later FIXUP subrecord:  the target threads are used to specify the Target 
  1155. Datum field in a later FIXUP subrecord. 
  1156.  
  1157. A THREAD subrecord defines a thread, and does not require that a previous 
  1158. LEDATA or LIDATA record occur. 
  1159.  
  1160. The layout of the THREAD subrecord is as follows: 
  1161.  
  1162.      <-------- one byte ----------->  1 or 2 bytes
  1163.     ΓöîΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1164.     Γöé 0 Γöé D Γöé 0 Γöé METHOD    ΓöéTHRED  Γöé   Index             Γöé
  1165.     ΓööΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1166.      1   1   1   3 bits      2 bits  <--- conditional --->
  1167. where: 
  1168.  
  1169. 0         The high order bit is zero to indicate that this is a THREAD 
  1170.           subrecord. 
  1171.  
  1172. D         is 0 for a target thread, 1 for a frame thread 
  1173.  
  1174. METHOD    is a 3-bit field. 
  1175.  
  1176.           For target threads, only the lower two bits of the field are used; 
  1177.           the high-order bit of the method is derived from the P bit in the 
  1178.           FixDat field of the FIXUP subrecords that refer to this thread. The 
  1179.           full list of methods is given here for completeness. This field 
  1180.           determines the kind of index required to specify the Target Datum. 
  1181.  
  1182.    T0  specified by a SEGDEF index 
  1183.    T1  specified by a GRPDEF index 
  1184.    T2  specified by a EXTDEF index 
  1185.    T3  specified by an explicit frame number (not supported by the linker) 
  1186.    T4  specified by a SEGDEF index only; the displacement in the FIXUP 
  1187.        subrecord is assumed to be 0. 
  1188.    T5  specified by a GRPDEF index only; the displacement in the FIXUP 
  1189.        subrecord is assumed to be 0. 
  1190.    T6  specified by a EXTDEF index only; the displacement in the FIXUP 
  1191.        subrecord is assumed to be 0. The index type specified by the target 
  1192.           thread method is encoded in the index field. 
  1193.  
  1194.           For frame threads, the method field determines the Frame Datum field 
  1195.           of subsequent FIXUP subrecords that refer to this thread. Values for 
  1196.           the method field are: 
  1197.  
  1198.    F0  the FRAME is specified by a SEGDEF index 
  1199.    F1  the FRAME is specified by a GRPDEF index 
  1200.    F2  the FRAME is specified by a EXTDEF index. The linker determines the 
  1201.        FRAME from the external name's corresponding PUBDEF record in another 
  1202.        object module, which specifies either a logical segment or a group. 
  1203.    F3  invalid (The FRAME is identified by an explicit frame number; this is 
  1204.        not supported by the linker) 
  1205.    F4  the FRAME is determined by the segment index of the previous LEDATA or 
  1206.        LIDATA record (ie the segment in which the location is defined). 
  1207.    F5  the FRAME is determined by the TARGET's segment, group or external index 
  1208.    F6  invalid The index field is present for frame methods F0, F1, and F2 
  1209.           only. 
  1210.  
  1211. THRED     is a 2-bit field and determines the thread number (0 through 3, for 
  1212.           the 4 threads of each kind). 
  1213.  
  1214. Index     is a conditional field that contains an index value that refers to a 
  1215.           previous SEGDEF, GRPDEF or EXTDEF record. The field is only present 
  1216.           if the thread method is 0, 1 or 2. If method 3 were supported by the 
  1217.           linker, the Index field would contain an explicit frame number. 
  1218.  
  1219. FIXUP 
  1220.  
  1221. A FIXUP subrecord gives the how/what/why/where/who information required to 
  1222. convert a reference when program segments are combined or placed within logical 
  1223. segments.  It applies to the nearest previous LEDATA or LIDATA record, which 
  1224. must be defined before the FIXUP. This FIXUP subrecord is as follows: 
  1225.  
  1226.        2 bytes     1 byte  1 or 2    1 or 2    4 bytes
  1227.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1228.      Γöé LOCAT     Γöé Fix    Γöé Frame   Γöé Target  Γöé Target        Γöé
  1229.      Γöé           Γöé  Dat   Γöé  Datum  Γöé  Datum  Γöé  Displacement Γöé
  1230.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1231.                            <cond>     <cond>    <conditional>
  1232. where the LOCAT field has an unusual format. Contrary to the usual byte order 
  1233. in Intel data structures, the most significant bits of the LOCAT field are 
  1234. found in the low-order, rather than the high-order byte. 
  1235.  
  1236. The LOCAT field is: 
  1237.  
  1238.     <------ lo byte ------> <----- high byte ----->
  1239.    ΓöîΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÉ
  1240.    Γöé1 ΓöéM Γöé    LOC    Γöé      Data Record Offset     Γöé
  1241.    ΓööΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÿ
  1242.     1  1       4                 10     (bits)
  1243. where: 
  1244.  
  1245. 1   the high bit of the low-order byte is set to indicate a FIXUP subrecord. 
  1246.  
  1247. M   is the mode, M=1 for segment-relative and M=0 for self-relative fixups 
  1248.  
  1249. LOC is a 4-bit field which determines what type of location is to be fixed up: 
  1250.  
  1251.    0   Low-order byte (8-bit displacement or low byte of 16-bit offset) 
  1252.    1   16-bit Offset 
  1253.    2   16-bit Base - logical segment base (selector) 
  1254.    3   32-bit Long pointer (16-bit base : 16-bit offset) 
  1255.    4   Hi-order byte (high byte of 16-bit offset) No linker support for this 
  1256.        type. 
  1257.    5   16-bit loader-resolved offset, treated as LOC=1 by the linker 
  1258.  
  1259.        CONFLICT PharLap OMF uses LOC=5 to indicate a 32-bit offset, where 
  1260.        Microsoft and IBM use LOC=9. 
  1261.    6   not defined, reserved 
  1262.  
  1263.        CONFLICT PharLap OMF uses LOC=6 to indicate a 48-bit pointer (16-bit 
  1264.        base : 32-bit offset) where Microsoft and IBM use LOC=11. 
  1265.    7   not defined, reserved 
  1266.    9   32-bit offset 
  1267.    11  48-bit pointer (16-bit base : 32-bit offset) 
  1268.    13  32-bit loader-resolved offset, treated as LOC=9 by the linker 
  1269.  
  1270. Data Record Offset The Data record offset indicates the position of the 
  1271.     location to be fixed up in the LEDATA or LIDATA record immediatly preceding 
  1272.     the FIXUPP record. This offset indicates either a byte in the data field of 
  1273.     an LEDATA record or a data byte in the content field of an iterated data 
  1274.     block in an LIDATA record. 
  1275. The FixDat bit layout is: 
  1276.  
  1277.  
  1278.     ΓöîΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÉ
  1279.     Γöé F Γöé   FRAME   Γöé T Γöé P ΓöéTARGT  Γöé
  1280.     ΓööΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÿ
  1281.       1       3       1   1     2   (bits)
  1282.  
  1283. and is interpreted as follows: 
  1284.  
  1285. F   If F=1, the frame is given by a frame thread whose number is in the FRAME 
  1286.     field (modulo 4).  There is no frame datum field in the subrecord. 
  1287.  
  1288.     If F=0, the frame method (in the range F0 to F5) is explicitly defined in 
  1289.     this FIXUP subrecord. The method is stored in the FRAME field. 
  1290.  
  1291. FRAME 
  1292.  
  1293.     3-bit numeric, interpreted according to the F bit. The Frame Datum field is 
  1294.     present and is an index field for frame methods F0, F1, and F2 only. 
  1295.  
  1296. T   If T=1 the target is defined by a target thread whose thread number is 
  1297.     given in the 2-bit TARGT field. The TARGT field contains a number between 0 
  1298.     and 3 that refers to a previous thread field containing the target method. 
  1299.     The P bit, combined with the two low-order bits of the method field in the 
  1300.     THREAD subrecord, determines the target method. 
  1301.  
  1302.     If T=0 the target is specified explicitly in this FIXUP subrecord. In this 
  1303.     case, the P bit and the TARGT field can be considered a 3-bit field 
  1304.     analogous to the FRAME field. 
  1305.  
  1306. P   Determines whether the target displacement field is present. 
  1307.  
  1308.     If P=1 there is no displacement field. 
  1309.  
  1310.     If P=0, the displacement field is present. 
  1311.  
  1312. TARGT is a 2-bit numeric, which gives the lower two bits of the target method 
  1313.     (if T=0) or gives the target thread number (if T=1). 
  1314.  
  1315. Frame Datum is an index field that refers to a previous SEGDEF, GRPDEF or 
  1316.     EXTDEF record, depending on the FRAME method. 
  1317.  
  1318. Target Datum contains a segment index, a group index or an external index 
  1319.     depending on the TARGET method. 
  1320.  
  1321. Target Displacement is present only if the P bit in the FixDat field is set to 
  1322.     0, in which case the Target Displacement field contains the offset used in 
  1323.     methods 0, 1 and 2 of specifying a TARGET. 
  1324.  
  1325. notes: 
  1326.  
  1327. FIXUPP records are used to fix references in the immediately preceding LEDATA, 
  1328. LIDATA or COMDAT record. 
  1329.  
  1330. The FRAME is the translator's way of telling the linker the contents of the 
  1331. segment register used for the reference; the TARGET is the item being 
  1332. referenced whose address was not completely resolved by the translator.  In 
  1333. protect mode, the only legal segment register value are selectors; every 
  1334. segment and group of segments is mapped through some selector and addressed by 
  1335. offset within the underlying memory defined by that selector. 
  1336.  
  1337.  
  1338. ΓòÉΓòÉΓòÉ 2.3.14. A1H LEDATA  Logical Enumerated Data Record ΓòÉΓòÉΓòÉ
  1339.  
  1340.  
  1341. Description: This record provides contiguous binary data -- executable code or 
  1342. program data -- which is part of a program segment. The data is eventually 
  1343. copied into the program's executable binary image by the linker. 
  1344.  
  1345. The data bytes may be subject to relocation or fix-up as determined by the 
  1346. presence of a subsequent FIXUPP record but otherwise requires no expansion when 
  1347. mapped to memory at run time. 
  1348.  
  1349.    1 byte  2 bytes
  1350.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  1351.   Γöé  A1   Γöé Record         Γöé
  1352.   Γöé       Γöé  Length        Γöé
  1353.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  1354.  
  1355.                  1 or 2    4 bytes       <from Record Length> 1 byte
  1356.               --Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1357.                 Γöé Seg.    Γöé Enum Data   Γöé     Data           ΓöéChk sumΓöé
  1358.                 Γöé  Index  Γöé  Offset     Γöé       Bytes        Γöé or 0  Γöé
  1359.               --Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1360.  
  1361. LEDATA  logical enumerated data record 
  1362.  
  1363. Segment Index 
  1364.  
  1365. The SegIndex must be nonzero and is the index of a previously defined SEGDEF 
  1366. record. This is the segment into which the data in this LEDATA record is to be 
  1367. placed. 
  1368.  
  1369.  
  1370. Enumerated Data Offset 
  1371.  
  1372. The enumerated data offset is a 4 byte field which determines the offset at 
  1373. which the first data byte is to be placed relative to the start of the SEGDEF 
  1374. segment. Successive data bytes occupy successively higher locations. 
  1375.  
  1376.  
  1377. Data Bytes 
  1378.  
  1379. The maximum number of data bytes is 1024, so that a FIXUPP location field, 
  1380. which is 10 bits, can reference any of these data bytes.  The number of data 
  1381. bytes is computed as the RecLength minus 5 minus the size of the SegIndex field 
  1382. (1 or 2 bytes). 
  1383.  
  1384.  
  1385. NOTES: 
  1386.  
  1387. If the LEDATA requires fixup, a FIXUPP record must immediately follow the 
  1388. LEDATA record. 
  1389.  
  1390.  
  1391. ΓòÉΓòÉΓòÉ 2.3.15. A3H LIDATA  Logical Iterated Data Record ΓòÉΓòÉΓòÉ
  1392.  
  1393.  
  1394. Description: Like the LEDATA record, the LIDATA record contains binary data -- 
  1395. executable code or program data. The data in an LIDATA record, however, is 
  1396. specified as a repeating pattern (iterated), rather than by explicit 
  1397. enumeration. 
  1398.  
  1399. The data in an LIDATA record may be modified by the linker if the LIDATA record 
  1400. is immediately followed by a FIXUPP record. 
  1401.  
  1402.    1 byte  2 bytes
  1403.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  1404.   Γöé  A3   Γöé Record         Γöé
  1405.   Γöé       Γöé  Length        Γöé
  1406.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  1407.  
  1408.                  1 or 2    4 bytes       <from Record Length> 1 byte
  1409.               --Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1410.                 Γöé Seg.    Γöé Data        Γöé     Data           ΓöéChk sumΓöé
  1411.                 Γöé  Index  Γöé  Offset     Γöé       Block        Γöé or 0  Γöé
  1412.               --Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1413.                                          <----- repeat ----->
  1414.  
  1415. LIDATA  logical iterated data record 
  1416.  
  1417. Segment Index and Data Offset 
  1418.  
  1419. The segment index and data offset (4 bytes) are the same as for an LEDATA 
  1420. record. The index must be nonzero. 
  1421.  
  1422.  
  1423. Data Block 
  1424.  
  1425. The data blocks have the following form: 
  1426.  
  1427.    4 bytes       2 bytes       <-- from block count -->
  1428.  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1429.  Γöé Repeat       Γöé Block       Γöé    Content             Γöé
  1430.  Γöé  Count       Γöé  Count      Γöé                        Γöé
  1431.  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1432.   <-------------------- Data Block ------------------->
  1433.  
  1434. Repeat Count 
  1435.  
  1436. The Repeat Count is a 32-bit value which determines the number of repeats of 
  1437. the content portion. 
  1438.  
  1439. CONFLICT:The PharLap OMF uses a 16-bit repeat count even in 32-bit records. 
  1440. Block Count 
  1441.  
  1442. The Block Count is a 16-bit word whose value determines the interpretation of 
  1443. the content portion, as follows: 
  1444.  
  1445. 0   indicates that the content field that follows is a one byte "count" value 
  1446.     followed by "count" data bytes.  The data bytes will be mapped to memory, 
  1447.     repeated Repeat Count times. 
  1448.  
  1449.  0  indicates the content field that follows is comprised of one or more Data 
  1450.     Blocks.  The Block Count value specifies the number of Data Blocks 
  1451.     (recursive definition). 
  1452.  
  1453. Notes: 
  1454.  
  1455. A subsequent FIXUPP record may occur; the fixup is applied before the iterated 
  1456. data block is expanded. It is a translator error for a fixup to reference any 
  1457. of the count fields. 
  1458.  
  1459.  
  1460. ΓòÉΓòÉΓòÉ 2.3.16. B0H COMDEF Communal Names Definition Record ΓòÉΓòÉΓòÉ
  1461.  
  1462.  
  1463. Description: The COMDEF record declares a list of one or more communal 
  1464. variables (uninitialized static data, or data that may match initialized static 
  1465. data in another compilation group). 
  1466.  
  1467. The size of such a variable the the maximum size defined in any module naming 
  1468. the variable as communal or public. The placement of communal variables is 
  1469. determined by the data type using established conventions (see data type and 
  1470. communal length below). 
  1471.  
  1472.    1 byte  2 bytes
  1473.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  1474.   Γöé  B0   Γöé Record         Γöé
  1475.   Γöé       Γöé  Length        Γöé
  1476.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  1477.  
  1478.       1 byte <string>  1 or 2   1 byte <- from data type -> 1 byte
  1479.    --Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1480.      ΓöéStr.  ΓöéCommunal ΓöéType    ΓöéDate  Γöé  Communal          ΓöéChk sumΓöé
  1481.      Γöé Len  Γöé Name    Γöé Index  Γöé Type Γöé   Length           Γöé or 0  Γöé
  1482.    --Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1483.       <-------------------- repeated --------------------->
  1484.  
  1485. COMDEF  communal names definition record 
  1486.  
  1487. Communal name 
  1488.  
  1489. The name is in <count, char> string format (and name may be null).  Near and 
  1490. Far communals from different object files are matched at bind or link time if 
  1491. their names agree; the variable's size is the maximum of the sizes specified 
  1492. (subject to some constraints, as documented below). 
  1493. Type Index 
  1494.  
  1495. Encodes symbol information; it is parsed as an index field (one or 2 bytes), 
  1496. and not inspected by the linker. 
  1497. Data Type and Communal Length 
  1498.  
  1499. The data type field indicates the contents of the Communal Length field. All 
  1500. Data type values for Near data indicate that the Communal Length field has only 
  1501. one numeric value: the amount of memory to be allocated for the communal 
  1502. variable. All Data Type values for Far data indicate that the Communal Length 
  1503. field has two numeric  values: the first is the number of elements and the 
  1504. second is the element size. 
  1505.  
  1506. The DataType is one of the following hex values: 
  1507.  
  1508. 61H FAR data: length specified as number of elements followed by element size 
  1509.     in bytes. 
  1510. 62  NEAR data: length specified as number of bytes. 
  1511.  
  1512. The communal length is a single numeric or a pair of numeric fields (as 
  1513. specified by the Data Type), encoded as follows: 
  1514.  
  1515. 1 byte value 0 through 128 (80 hex) 
  1516. 3 byte byte 81 hex, followed by a 16-bit word whose value is used (range 0 to 
  1517.        64K-1) 
  1518. 4 byte byte 84 hex, followed by a 3 byte value (range 0 to 16M-1) 
  1519. 5 byte byte 88 hex, followed by a 4 byte value (range -2G-1 to 2G-1, signed) 
  1520.  
  1521. Groups of name, type index, segment type and communal length fields can be 
  1522. repeated so that more than one communal variable can be declared in the same 
  1523. COMDEF record. 
  1524. Notes: 
  1525.  
  1526. If a public or exported symbol with the same name is found in another module 
  1527. with which this is bound or linked, the linker gives a multiple defined symbol 
  1528. error message, 
  1529.  
  1530. Communal variables cannot be resolved to dynamic links (ie, imported symbols). 
  1531.  
  1532. The records are ordered by occurrence, together with the items named in EXTDEF 
  1533. records (for reference in FIXUPS). 
  1534.  
  1535. The IBM C Compiler generates COMDEF's for all uninitialized global data and for 
  1536. global scalars initialized to zero. 
  1537.  
  1538.  
  1539. ΓòÉΓòÉΓòÉ 2.3.17. C3H COMDAT Initialized Communal Data Record ΓòÉΓòÉΓòÉ
  1540.  
  1541.  
  1542. Description: The purpose of the COMDAT record is to combine logical blocks of 
  1543. code and data which may be duplicated across a number of compiled modules. 
  1544.  
  1545.    1 byte  2 bytes
  1546.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼---
  1547.   Γöé  C3   Γöé Record         Γöé
  1548.   Γöé       Γöé  Length        Γöé
  1549.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤---
  1550.  
  1551.     1 byte 1 byte 1 byte   4 bytes    1 or 2  <cond>  <string> 1 byte  1 byte
  1552.  --Γö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1553.    ΓöéFlags Γöé Attr.ΓöéAlign Γöé Enum Data  Γöé Type  ΓöéPublic Γöé Public Γöé DAT   ΓöéChk.  Γöé
  1554.    Γöé      Γöé      Γöé      Γöé Offset     Γöé  IndexΓöé Base  Γöé  Name  Γöé       Γöé Sum  Γöé
  1555.  --Γö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1556.                                                                <repeat>
  1557.  
  1558. COMDAT  initialized communal data record 
  1559.  
  1560. Flags 
  1561.  
  1562. This field contains three defined bits: 
  1563.  
  1564. 01H - Continuation bit. If clear, then this COMDAT record establishes a new 
  1565. instance of the COMDAT variable, otherwise the data is a continuation of the 
  1566. previous COMDAT of the symbol. 
  1567.  
  1568. 02H - Iterated data bit. If clear, the Dat field contains enumerated data, 
  1569. otherwise the Dat field contains iterated data, as in an LIDATA record. 
  1570.  
  1571. 04H - Local COMDAT. The public name is local. 
  1572. Attr 
  1573.  
  1574. This field contains two 4-bit fields:  the selection criteria to be used, the 
  1575. allocation type and the ordinal specifying the type of allocation to be 
  1576. performed. Values are: 
  1577.  
  1578. Selection criteria (high-order 4 bits): 
  1579.  
  1580. 00H - No match -  only one instance of this comdat allowed. 
  1581.  
  1582. 10H - Pick any -  pick any instance of this COMDAT record. 
  1583.  
  1584. 20H - Same size - pick any, but instances must have the same length or linker 
  1585. will generate an error. 
  1586.  
  1587. 30H - Exact Match - pick any, but checksums of instances must match of linker 
  1588. will generate an error. Fixups are ignored. 
  1589.  
  1590. 40H - F0H - reserved. 
  1591. Allocation Type (low-order 4 bits): 
  1592.  
  1593. 00H - Explicit -  allocate in the segment specified in the ensuing public base 
  1594. field. 
  1595.  
  1596. 01H - Far Code -  allocate as CODE16. The linker will create segments to 
  1597. contain all COMDAT's of this type. 
  1598.  
  1599. 02H - Far DATA -  allocate as DATA16. The linker will create segments to 
  1600. contain all COMDAT's of this type. 
  1601.  
  1602. 03H - CODE32 -  allocate as CODE32. The linker will create segments to contain 
  1603. all COMDAT's of this type. 
  1604.  
  1605. 04H - DATA32 -  allocate as DATA32. The linker will create segments to contain 
  1606. all COMDAT's of this type. 
  1607.  
  1608. 05H - 0FH - Reserved. 
  1609. Align 
  1610.  
  1611. These codes are based on the ones used by the SEGDEF record: 
  1612.  
  1613. 0 - use value from SEGDEF. 
  1614.  
  1615. 1 - byte aligned. 
  1616.  
  1617. 2 - word (2 byte) aligned. 
  1618.  
  1619. 3 - paragraph (16 byte) aligned. 
  1620.  
  1621. 4 - 4K page aligned. 
  1622.  
  1623. 5 - dword (4 byte) aligned. 
  1624.  
  1625. 6 - not defined. 
  1626.  
  1627. 7 - not defined. 
  1628. Enum Data Offset 
  1629.  
  1630. This field specifies an offset relative to the beginning location of the symbol 
  1631. specified in the public name field and defines the relative location of the 
  1632. first byte of the DAT field. Successive data bytes in the DAT field occupy 
  1633. higher locations of memory. This works very much like the offset field in an 
  1634. LEDATA record, but instead of an offset relative to a segment, this is relative 
  1635. to the beginning of the COMDAT symbol. 
  1636. Type Index 
  1637.  
  1638. The type index field is encoded in index format; it contains either debug type 
  1639. information or an old-style TYPDEF index. If this index is zero, there is no 
  1640. associated type data. Old-style TYPDEF indices are ignored by the linker. 
  1641. Present linkers do no type checking. 
  1642. Public Base 
  1643.  
  1644. This field is conditional and is identical to the public base stored in the 
  1645. public base field in the PUBDEF record. This field is only present if the 
  1646. allocation type field specifies explicit allocation. 
  1647. Public Name 
  1648.  
  1649. This field is a regular length prefixed name. 
  1650. Dat 
  1651.  
  1652. The Dat field provides up to 1024 consecutive bytes of data. If there are 
  1653. fixups, they must be emitted in a FIXUPP record that follows the COMDAT record. 
  1654. The data can be either enumerated or iterated, depending on the flags field. 
  1655. Notes: 
  1656.  
  1657. While creating addressing frames, the linker will add the COMDAT data to the 
  1658. appropriate logical segments, adjusting their sizes. At that time the offset at 
  1659. which the data will go inside the logical segment will be calculated. Next, the 
  1660. linker will create physical segments from adjusted logical segments reporting 
  1661. any 64K boundary overflows. 
  1662.  
  1663. If the allocation type is not explicit, COMDAT code and data is accumulated by 
  1664. the linker and broken up into segments, so that the total may exceed 64K. 
  1665.  
  1666. In pass two, only the selected occurrence of COMDAT data will be stored in the 
  1667. VM, fixed up and later written into the .EXE file. 
  1668.  
  1669.  
  1670. ΓòÉΓòÉΓòÉ 3. LX - Linear eXecutable Module Format Description ΓòÉΓòÉΓòÉ
  1671.  
  1672.  
  1673. ΓòÉΓòÉΓòÉ 3.1. Revision codes: ΓòÉΓòÉΓòÉ
  1674.  
  1675. revision 1 - Library termination. 
  1676.  
  1677. revision 2 - Sector Align and Exepack support. 
  1678.  
  1679. revision 3 - Address Based linking. 
  1680.  
  1681. revision 4 - OS/2 2.0 PM Debugger (IBM) support. 
  1682.  
  1683.  
  1684. ΓòÉΓòÉΓòÉ 3.2. 32-bit Linear EXE Header ΓòÉΓòÉΓòÉ
  1685.  
  1686.       00h ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  <ΓöÇΓöÇΓöÉ
  1687.           Γöé DOS 2 Compatible Γöé     Γöé
  1688.           Γöé    EXE Header    Γöé     Γöé
  1689.       1Ch Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1690.           Γöé      unused      Γöé     Γöé
  1691.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1692.       24h Γöé  OEM Identifier  Γöé     Γöé
  1693.       26h Γöé  OEM Info        Γöé     Γöé
  1694.           Γöé                  Γöé     Γö£ΓöÇΓöÇ DOS 2.0 Section
  1695.       3Ch Γöé  Offset to       Γöé     Γöé   (Discarded)
  1696.           Γöé  Linear EXE      Γöé     Γöé
  1697.           Γöé  Header          Γöé     Γöé
  1698.       40h Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1699.           Γöé   DOS 2.0 Stub   Γöé     Γöé
  1700.           Γöé   Program        Γöé     Γöé
  1701.           Γöé   Reloc. Table   Γöé     Γöé
  1702.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  <ΓöÇΓöÇΓöÿ
  1703.  
  1704. Dos 2.0 Section (Discarded) 
  1705.  
  1706.       xxh ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  <ΓöÇΓöÇΓöÉ
  1707.           Γöé    Executable    Γöé     Γöé
  1708.           Γöé       Info       Γöé     Γöé
  1709.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1710.           Γöé      Module      Γöé     Γöé
  1711.           Γöé       Info       Γöé     Γöé
  1712.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γö£ΓöÇΓöÇ Linear Executable
  1713.           Γöé  Loader Section  Γöé     Γöé   Module Header
  1714.           Γöé       Info       Γöé     Γöé   (Resident)
  1715.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1716.           Γöé   Table Offset   Γöé     Γöé
  1717.           Γöé       Info       Γöé     Γöé
  1718.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  <ΓöÇΓöÇΓöÿ
  1719.  
  1720. Linear Executable Module Header (Resident) 
  1721.  
  1722.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  <ΓöÇΓöÇΓöÉ
  1723.           Γöé   Object Table   Γöé     Γöé
  1724.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1725.           Γöé Object Page TableΓöé     Γöé
  1726.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1727.           Γöé  Resource Table  Γöé     Γöé
  1728.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1729.           Γöé  Resident Name   Γöé     Γöé
  1730.           Γöé      Table       Γöé     Γöé
  1731.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γö£ΓöÇΓöÇ Loader Section
  1732.           Γöé   Entry Table    Γöé     Γöé   (Resident)
  1733.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1734.           Γöé   Module Format  Γöé     Γöé
  1735.           Γöé Directives Table Γöé     Γöé
  1736.           Γöé    (Optional)    Γöé     Γöé
  1737.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1738.           Γöé     Resident     Γöé     Γöé
  1739.           Γöé Directives Data  Γöé     Γöé
  1740.           Γöé    (Optional)    Γöé     Γöé
  1741.           Γöé                  Γöé     Γöé
  1742.           Γöé  (Verify Record) Γöé     Γöé
  1743.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1744.           Γöé     Per-Page     Γöé     Γöé
  1745.           Γöé     Checksum     Γöé     Γöé
  1746.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  <ΓöÇΓöÇΓöÿ
  1747.  
  1748. Loader Section (Resident) 
  1749.  
  1750.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  <ΓöÇΓöÇΓöÉ
  1751.           Γöé Fixup Page Table Γöé     Γöé
  1752.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1753.           Γöé   Fixup Record   Γöé     Γöé
  1754.           Γöé       Table      Γöé     Γöé
  1755.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γö£ΓöÇΓöÇ Fixup Section
  1756.           Γöé   Import Module  Γöé     Γöé   (Optionally Resident)
  1757.           Γöé    Name Table    Γöé     Γöé
  1758.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1759.           Γöé Import Procedure Γöé     Γöé
  1760.           Γöé    Name Table    Γöé     Γöé
  1761.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  <ΓöÇΓöÇΓöÿ
  1762.  
  1763. Loader Section (Resident) 
  1764.  
  1765.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  <ΓöÇΓöÇΓöÉ
  1766.           Γöé   Preload Pages  Γöé     Γöé
  1767.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1768.           Γöé    Demand Load   Γöé     Γöé
  1769.           Γöé       Pages      Γöé     Γöé
  1770.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1771.           Γöé  Iterated Pages  Γöé     Γöé
  1772.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1773.           Γöé   Non-Resident   Γöé     Γö£ΓöÇΓöÇ (Non-Resident)
  1774.           Γöé    Name Table    Γöé     Γöé
  1775.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé
  1776.           Γöé   Non-Resident   Γöé     Γöé
  1777.           Γöé Directives Data  Γöé     Γöé
  1778.           Γöé    (Optional)    Γöé     Γöé
  1779.           Γöé                  Γöé     Γöé
  1780.           Γöé  (To be Defined) Γöé     Γöé
  1781.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  <ΓöÇΓöÇΓöÿ
  1782.  
  1783. Non-Resident Section 
  1784.  
  1785.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  <ΓöÇΓöÇΓöÉ
  1786.           Γöé    Debug Info    Γöé     Γö£ΓöÇΓöÇ (Not used by Loader)
  1787.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  <ΓöÇΓöÇΓöÿ
  1788.  
  1789. Not used by the Loader 
  1790.  
  1791.  
  1792. ΓòÉΓòÉΓòÉ 3.3. 32-bit LX Header ΓòÉΓòÉΓòÉ
  1793.  
  1794.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1795.       00h Γöé "L"   "X" ΓöéB-ORDΓöéW-ORDΓöé     FORMAT LEVEL      Γöé
  1796.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1797.       08h Γöé CPU TYPE  Γöé  OS TYPE  Γöé    MODULE VERSION     Γöé
  1798.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1799.       10h Γöé     MODULE FLAGS      Γöé   MODULE # OF PAGES   Γöé
  1800.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1801.       18h Γöé     EIP OBJECT #      Γöé          EIP          Γöé
  1802.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1803.       20h Γöé     ESP OBJECT #      Γöé          ESP          Γöé
  1804.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1805.       28h Γöé       PAGE SIZE       Γöé   PAGE OFFSET SHIFT   Γöé
  1806.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1807.       30h Γöé  FIXUP SECTION SIZE   Γöé FIXUP SECTION CHECKSUMΓöé
  1808.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1809.       38h Γöé  LOADER SECTION SIZE  ΓöéLOADER SECTION CHECKSUMΓöé
  1810.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1811.       40h Γöé    OBJECT TABLE OFF   Γöé  # OBJECTS IN MODULE  Γöé
  1812.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1813.       48h Γöé OBJECT PAGE TABLE OFF Γöé OBJECT ITER PAGES OFF Γöé
  1814.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1815.       50h Γöé RESOURCE TABLE OFFSET Γöé#RESOURCE TABLE ENTRIESΓöé
  1816.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1817.       58h Γöé RESIDENT NAME TBL OFF Γöé   ENTRY TABLE OFFSET  Γöé
  1818.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1819.       60h Γöé MODULE DIRECTIVES OFF Γöé # MODULE DIRECTIVES   Γöé
  1820.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1821.       68h Γöé FIXUP PAGE TABLE OFF  ΓöéFIXUP RECORD TABLE OFF Γöé
  1822.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1823.       70h Γöé IMPORT MODULE TBL OFF Γöé # IMPORT MOD ENTRIES  Γöé
  1824.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1825.       78h Γöé  IMPORT PROC TBL OFF  Γöé PER-PAGE CHECKSUM OFF Γöé
  1826.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1827.       80h Γöé   DATA PAGES OFFSET   Γöé    #PRELOAD PAGES     Γöé
  1828.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1829.       88h Γöé NON-RES NAME TBL OFF  Γöé NON-RES NAME TBL LEN  Γöé
  1830.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1831.       90h Γöé NON-RES NAME TBL CKSM Γöé   AUTO DS OBJECT #    Γöé
  1832.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1833.       98h Γöé    DEBUG INFO OFF     Γöé    DEBUG INFO LEN     Γöé
  1834.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1835.       A0h Γöé   #INSTANCE PRELOAD   Γöé   #INSTANCE DEMAND    Γöé
  1836.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1837.       A8h Γöé       HEAPSIZE        Γöé       STACKSIZE       Γöé
  1838.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1839.  
  1840. 32-bit Linear EXE Header 
  1841. Note  The OBJECT ITER PAGES OFF must either be 0 or set to the same value as 
  1842. DATA PAGES OFFSET in OS/2 2.0. Ie., iterated pages are required to be in the 
  1843. same section of the file as regular pages.  Note  Table offsets in the Linear 
  1844. EXE Header may be set to zero to indicate that the table does not exist in the 
  1845. EXE file and it's size is zero. 
  1846.  
  1847. "L" "X" = DW  Signature word. The signature word is used by the loader to 
  1848. identify the EXE file as a valid 32-bit Linear Executable Module Format. "L" is 
  1849. low order byte. "X" is high order byte. 
  1850.  
  1851. B-ORD = DB  Byte Ordering. This byte specifies the byte ordering for the linear 
  1852. EXE format.  The values are 
  1853.  
  1854.       00H - Little Endian Byte Ordering. 
  1855.       01H - Big Endian Byte Ordering. 
  1856.  
  1857. W-ORD = DB  Word Ordering. This byte specifies the Word ordering for the linear 
  1858. EXE format.  The values are 
  1859.  
  1860.       00H - Little Endian Word Ordering. 
  1861.       01H - Big Endian Word Ordering. 
  1862.  
  1863. Format Level = DD  Linear EXE Format Level. The Linear EXE Format Level is set 
  1864. to 0 for the initial version of the 32-bit linear EXE format.  Each 
  1865. incompatible change to the linear EXE format must increment this value.  This 
  1866. allows the system to recognized future EXE file versions so that an appropriate 
  1867. error message may be displayed if an attempt is made to load them. 
  1868.  
  1869. CPU Type = DW  Module CPU Type. This field specifies the type of CPU required 
  1870. by this module to run.  The values are 
  1871.  
  1872.       01H - 80286 or upwardly compatible CPU is required to execute this 
  1873.       module. 
  1874.       02H - 80386 or upwardly compatible CPU is required to execute this 
  1875.       module. 
  1876.       03H - 80486 or upwardly compatible CPU is required to execute this 
  1877.       module. 
  1878.  
  1879. OS Type = DW  Module OS Type. This field specifies the type of Operating system 
  1880. required to run this module. The currently defined values are 
  1881.  
  1882.       00H - Unknown (any "new-format" OS) 
  1883.       01H - OS/2 (default) 
  1884.       02H - WindowsReference 
  1885.       03H - DOS 4.x 
  1886.       04H - Windows 386Reference 
  1887.  
  1888. MODULE VERSION = DD  Version of the linear EXE module. This is useful for 
  1889. differentiating between revisions of dynamic linked modules. This value is 
  1890. specified at link time by the user. 
  1891.  
  1892. MODULE FLAGS = DD  Flag bits for the module. The module flag bits have the 
  1893. following definitions. 
  1894.  
  1895.       00000001h = Reserved for system use. 
  1896.       00000002h = Reserved for system use. 
  1897.       00000004h = Per-Process Library Initialization. The setting of this bit 
  1898.       requires the EIP Object # and EIP fields to have valid values.  If the 
  1899.       EIP Object # and EIP fields are valid and this bit is NOT set, then 
  1900.       Global Library Initialization is assumed.  Setting this bit for an EXE 
  1901.       file is invalid. 
  1902.  
  1903.       00000008h = Reserved for system use. 
  1904.       00000010h = Internal fixups for the module have been applied. The setting 
  1905.       of this bit in a Linear Executable Module indicates that each object of 
  1906.       the module has a preferred load address specified in the Object Table 
  1907.       Reloc Base Addr.  If the module's objects can not be loaded at these 
  1908.       preferred addresses, then the relocation records that have been retained 
  1909.       in the file data will be applied. 
  1910.  
  1911.       00000020h = External fixups for the module have been applied. 
  1912.       00000040h = Reserved for system use. 
  1913.       00000080h = Reserved for system use. 
  1914.       00000100h = Incompatible with PM windowing. 
  1915.       00000200h = Compatible with PM windowing. 
  1916.       00000300h = Uses PM windowing API. 
  1917.       00000400h = Reserved for system use. 
  1918.       00000800h = Reserved for system use. 
  1919.       00001000h = Reserved for system use. 
  1920.       00002000h = Module is not loadable. When the 'Module is not loadable' 
  1921.       flag is set, it indicates that either errors were detected at link time 
  1922.       or that the module is being incrementally linked and therefore can't be 
  1923.       loaded. 
  1924.  
  1925.       00004000h = Reserved for system use. 
  1926.       00038000h = Module type mask. 
  1927.       00000000h = Program module. A module can not contain dynamic links to 
  1928.       other modules that have the 'program module' type. 
  1929.  
  1930.       00008000h = Library module. 
  1931.       00018000h = Protected Memory Library module. 
  1932.       00020000h = Physical Device Driver module. 
  1933.       00028000h = Virtual Device Driver module. 
  1934.       40000000h = Per-process Library Termination. The setting of this bit 
  1935.       requires the EIP Object # and EIP fields to have valid values.  If the 
  1936.       EIP Object # and EIP fields are valid and this bit is NOT set, then 
  1937.       Global Library Termination is assumed.  Setting this bit for an EXE file 
  1938.       is invalid. 
  1939.  
  1940. MODULE # PAGES = DD  Physical number of pages in module. This field specifies 
  1941. the number of pages physically contained in this module. In other words, pages 
  1942. containing either enumerated or iterated data, not invalid or zero-fill pages. 
  1943. These pages are contained in the 'preload pages', 'demand load pages' and 
  1944. 'iterated data pages' sections of the linear EXE module.  This is used to 
  1945. determine the size of the other physical page based tables in the linear EXE 
  1946. module. 
  1947.  
  1948. EIP OBJECT # = DD The Object number to which the Entry Address is relative. 
  1949. This specifies the object to which the Entry Address is relative.  This must be 
  1950. a nonzero value for a program module to be correctly loaded. A zero value for a 
  1951. library module indicates that no library entry routine exists.  If this value 
  1952. is zero, then both the Per-process Library Initialization bit and the 
  1953. Per-process Library Termination bit must be clear in the module flags, or else 
  1954. the loader will fail to load the module.  Further, if the Per-process Library 
  1955. Termination bit is set, then the object to which this field refers must be a 
  1956. 32-bit object (i.e., the Big/Default bit must be set in the object flags; see 
  1957. below). 
  1958.  
  1959. EIP = DD  Entry Address of module. The Entry Address is the starting address 
  1960. for program modules and the library initialization and Library termination 
  1961. address for library modules. 
  1962.  
  1963. ESP OBJECT # = DD The Object number to which the ESP is relative. This 
  1964. specifies the object to which the starting ESP is relative.  This must be a 
  1965. nonzero value for a program module to be correctly loaded. This field is 
  1966. ignored for a library module. 
  1967.  
  1968. ESP = DD  Starting stack address of module. The ESP defines the starting stack 
  1969. pointer address for program modules.  A zero value in this field indicates that 
  1970. the stack pointer is to be initialized to the highest address/offset in the 
  1971. object. This field is ignored for a library module. 
  1972.  
  1973. PAGE SIZE = DD  The size of one page for this system. This field specifies the 
  1974. page size used by the linear EXE format and the system.  For the initial 
  1975. version of this linear EXE format the page size is 4Kbytes. (The 4K page size 
  1976. is specified by a value of 4096 in this field.) 
  1977.  
  1978. PAGE OFFSET SHIFT = DD The shift left bits for page offsets. This field gives 
  1979. the number of bit positions to shift left when interpreting the Object Page 
  1980. Table entries' page offset field.  This determines the alignment of the page 
  1981. information in the file.  For example, a value of 4 in this field would align 
  1982. all pages in the Data Pages and Iterated Pages sections on 16 byte (paragraph) 
  1983. boundaries.  A Page Offset Shift of 9 would align all pages on a 512 byte (disk 
  1984. sector) basis.  The default value for this field is 12 (decimal), which give a 
  1985. 4096 byte alignment.  All other offsets are byte aligned. 
  1986.  
  1987. FIXUP SECTION SIZE = DD  Total size of the fixup information in bytes. This 
  1988. includes the following 4 tables: 
  1989.  
  1990.       - Fixup Page Table 
  1991.       - Fixup Record Table 
  1992.       - Import Module name Table 
  1993.       - Import Procedure Name Table 
  1994.  
  1995. FIXUP SECTION CHECKSUM = DD  Checksum for fixup information. This is a 
  1996. cryptographic checksum covering all of the fixup information.  The checksum for 
  1997. the fixup information is kept separate because the fixup data is not always 
  1998. loaded into main memory with the 'loader section'.  If the checksum feature is 
  1999. not implemented, then the linker will set these fields to zero. 
  2000.  
  2001. LOADER SECTION SIZE = DD  Size of memory resident tables. This is the total 
  2002. size in bytes of the tables required to be memory resident for the module, 
  2003. while the module is in use.  This total size includes all tables from the 
  2004. Object Table down to and including the Per-Page Checksum Table. 
  2005.  
  2006. LOADER SECTION CHECKSUM = DD  Checksum for loader section. This is a 
  2007. cryptographic checksum covering all of the loader section information.  If the 
  2008. checksum feature is not implemented, then the linker will set these fields to 
  2009. zero. 
  2010.  
  2011. OBJECT TABLE OFF = DD  Object Table offset. This offset is relative to the 
  2012. beginning of the linear EXE header. 
  2013.  
  2014. # OBJECTS IN MODULE = DD  Object Table Count. This defines the number of 
  2015. entries in Object Table. 
  2016.  
  2017. OBJECT PAGE TABLE OFFSET = DD  Object Page Table offset This offset is relative 
  2018. to the beginning of the linear EXE header. 
  2019.  
  2020. OBJECT ITER PAGES OFF = DD  Object Iterated Pages offset. This offset is 
  2021. relative to the beginning of the EXE file. 
  2022.  
  2023. RESOURCE TABLE OFF = DD  Resource Table offset. This offset is relative to the 
  2024. beginning of the linear EXE header. 
  2025.  
  2026. # RESOURCE TABLE ENTRIES = DD  Number of entries in Resource Table. 
  2027.  
  2028. RESIDENT NAME TBL OFF = DD  Resident Name Table offset. This offset is relative 
  2029. to the beginning of the linear EXE header. 
  2030.  
  2031. ENTRY TBL OFF = DD  Entry Table offset. This offset is relative to the 
  2032. beginning of the linear EXE header. 
  2033.  
  2034. MODULE DIRECTIVES OFF = DD Module Format Directives Table offset. This offset 
  2035. is relative to the beginning of the linear EXE header. 
  2036.  
  2037. # MODULE DIRECTIVES = DD  Number of Module Format Directives in the Table. This 
  2038. field specifies the number of entries in the Module Format Directives Table. 
  2039.  
  2040. FIXUP PAGE TABLE OFF = DD  Fixup Page Table offset. This offset is relative to 
  2041. the beginning of the linear EXE header. 
  2042.  
  2043. FIXUP RECORD TABLE OFF = DD  Fixup Record Table Offset This offset is relative 
  2044. to the beginning of the linear EXE header. 
  2045.  
  2046. IMPORT MODULE TBL OFF = DD  Import Module Name Table offset. This offset is 
  2047. relative to the beginning of the linear EXE header. 
  2048.  
  2049. # IMPORT MOD ENTRIES = DD  The number of entries in the Import Module Name 
  2050. Table. 
  2051.  
  2052. IMPORT PROC TBL OFF = DD  Import Procedure Name Table offset. This offset is 
  2053. relative to the beginning of the linear EXE header. 
  2054.  
  2055. PER-PAGE CHECKSUM OFF = DD  Per-Page Checksum Table offset. This offset is 
  2056. relative to the beginning of the linear EXE header. 
  2057.  
  2058. DATA PAGES OFFSET = DD  Data Pages Offset. This offset is relative to the 
  2059. beginning of the EXE file. 
  2060.  
  2061. # PRELOAD PAGES = DD  Number of Preload pages for this module. Note that OS/2 
  2062. 2.0 does not respect the preload of pages as specified in the executable file 
  2063. for performance reasons. 
  2064.  
  2065. NON-RES NAME TBL OFF = DD  Non-Resident Name Table offset. This offset is 
  2066. relative to the beginning of the EXE file. 
  2067.  
  2068. NON-RES NAME TBL LEN = DD  Number of bytes in the Non-resident name table. 
  2069.  
  2070. NON-RES NAME TBL CKSM = DD  Non-Resident Name Table Checksum. This is a 
  2071. cryptographic checksum of the Non-Resident Name Table. 
  2072.  
  2073. AUTO DS OBJECT # = DD The Auto Data Segment Object number. This is the object 
  2074. number for the Auto Data Segment used by 16-bit modules. This field is 
  2075. supported for 16-bit compatibility only and is not used by 32-bit modules. 
  2076.  
  2077. DEBUG INFO OFF = DD  Debug Information offset. This offset is relative to the 
  2078. beginning of the file.  Note  Earlier versions of this doc stated that this 
  2079. offset was from the linear EXE header - this is incorrect. 
  2080.  
  2081. DEBUG INFO LEN = DD  Debug Information length. The length of the debug 
  2082. information in bytes. 
  2083.  
  2084.  # INSTANCE PRELOAD = DD Instance pages in preload section. The number of 
  2085. instance data pages found in the preload section. 
  2086.  
  2087.  # INSTANCE DEMAND = DD Instance pages in demand section. The number of 
  2088. instance data pages found in the demand section. 
  2089.  
  2090.  HEAPSIZE = DD Heap size added to the Auto DS Object. The heap size is the 
  2091. number of bytes added to the Auto Data Segment by the loader.  This field is 
  2092. supported for 16-bit compatibility only and is not used by 32-bit modules. 
  2093.  
  2094.  STACKSIZE = DD Stack size. The stack size is the number of bytes specified by: 
  2095.  
  2096.        1. size of a segment with combine type stack 
  2097.  
  2098.        2. STACKSIZE in the .DEF file 
  2099.  
  2100.        3. /STACK link option 
  2101.  
  2102.           The stacksize may be zero. 
  2103.  
  2104.           Note  Stack sizes with byte 2 equal to 02 or 04 (e.g. 00020000h, 
  2105.           11041111h, 0f02ffffh) should be avoided for programs that will run on 
  2106.           OS/2 2.0. 
  2107.  
  2108.  
  2109. ΓòÉΓòÉΓòÉ 3.4. Program (EXE) startup registers and Library entry registers ΓòÉΓòÉΓòÉ
  2110.  
  2111. Program startup registers are defined as follows. 
  2112.  
  2113.    EIP = Starting program entry address. 
  2114.  
  2115.    ESP = Top of stack address. 
  2116.  
  2117.    CS = Code selector for base of linear address space. 
  2118.  
  2119.    DS = ES = SS = Data selector for base of linear address space. 
  2120.  
  2121.    FS = Data selector of base of Thread Information Block (TIB). 
  2122.  
  2123.    GS = 0. 
  2124.  
  2125.    EAX = EBX = 0. 
  2126.  
  2127.    ECX = EDX = 0. 
  2128.  
  2129.    ESI = EDI = 0. 
  2130.  
  2131.    EBP = 0. 
  2132.  
  2133.    [ESP+0] = Return address to routine which calls DosExit(1,EAX). 
  2134.  
  2135.    [ESP+4] = Module handle for program module. 
  2136.  
  2137.    [ESP+8] = Reserved. 
  2138.  
  2139.    [ESP+12] = Environment data object address. 
  2140.  
  2141.    [ESP+16] = Command line linear address in environment data object. 
  2142.  Library initialization registers are defined as follows. 
  2143.  
  2144.    EIP = Library entry address. 
  2145.  
  2146.    ESP = User program stack. 
  2147.  
  2148.    CS = Code selector for base of linear address space. 
  2149.  
  2150.    DS = ES = SS = Data selector for base of linear address space. 
  2151.  
  2152.    FS = Data selector of base of Thread Information Block (TIB). 
  2153.  
  2154.    GS = 0. 
  2155.  
  2156.    EAX = EBX = 0. 
  2157.  
  2158.    ECX = EDX = 0. 
  2159.  
  2160.    ESI = EDI = 0. 
  2161.  
  2162.    EBP = 0. 
  2163.  
  2164.    [ESP+0] = Return address to system, (EAX) = return code. 
  2165.  
  2166.    [ESP+4] = Module handle for library module. 
  2167.  
  2168.    [ESP+8] = 0 (Initialization) Note that a 32-bit library may specify that its 
  2169. entry address is in a 16-bit code object.  In this case, the entry registers 
  2170. are the same as for entry to a library using the Segmented EXE format.  These 
  2171. are documented elsewhere. This means that a 16-bit library may be relinked to 
  2172. take advantage of the benefits of the Linear EXE format (notably, efficient 
  2173. paging). 
  2174.  Library termination registers are defined as follows. 
  2175.  
  2176.    EIP = Library entry address. 
  2177.  
  2178.    ESP = User program stack. 
  2179.  
  2180.    CS = Code selector for base of linear address space. 
  2181.  
  2182.    DS = ES = SS = Data selector for base of linear address space. 
  2183.  
  2184.    FS = Data selector of base of Thread Information Block (TIB). 
  2185.  
  2186.    GS = 0. 
  2187.  
  2188.    EAX = EBX = 0. 
  2189.  
  2190.    ECX = EDX = 0. 
  2191.  
  2192.    ESI = EDI = 0. 
  2193.  
  2194.    EBP = 0. 
  2195.  
  2196.    [ESP+0] = Return address to system. 
  2197.  
  2198.    [ESP+4] = Module handle for library module. 
  2199.  
  2200.    [ESP+8] = 1 (Termination) Note that Library termination is not allowed for 
  2201. libraries with 16-bit entries. 
  2202.  
  2203.  
  2204. ΓòÉΓòÉΓòÉ 3.5. Object Table ΓòÉΓòÉΓòÉ
  2205.  
  2206. The number of entries in the Object Table is given by the # Objects in Module 
  2207. field in the linear EXE header.  Entries in the Object Table are numbered 
  2208. starting from one.  Each Object Table entry has the following format 
  2209.  
  2210.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2211.       00h Γöé     VIRTUAL SIZE      Γöé    RELOC BASE ADDR    Γöé
  2212.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2213.       08h Γöé     OBJECT FLAGS      Γöé    PAGE TABLE INDEX   Γöé
  2214.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2215.       10h Γöé  # PAGE TABLE ENTRIES Γöé       RESERVED        Γöé
  2216.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2217.  
  2218. Object Table 
  2219.  
  2220. VIRTUAL SIZE = DD  Virtual memory size. This is the size of the object that 
  2221. will be allocated when the object is loaded.  The object data length must be 
  2222. less than or equal to the total size of the pages in the EXE file for the 
  2223. object. This memory size must also be large enough to contain all of the 
  2224. iterated data and uninitialized data in the EXE file. 
  2225.  
  2226. RELOC BASE ADDR = DD Relocation Base Address. The relocation base address the 
  2227. object is currently relocated to. If the internal relocation fixups for the 
  2228. module have been removed, this is the address the object will be allocated at 
  2229. by the loader. 
  2230.  
  2231. OBJECT FLAGS = DW  Flag bits for the object. The object flag bits have the 
  2232. following definitions. 
  2233.  
  2234.       0001h = Readable Object. 
  2235.       0002h = Writable Object. 
  2236.       0004h = Executable Object. The readable, writable and executable flags 
  2237.       provide support for all possible protections.  In systems where all of 
  2238.       these protections are not supported,  the loader will be responsible for 
  2239.       making the appropriate protection match for the system. 
  2240.  
  2241.       0008h = Resource Object. 
  2242.       0010h = Discardable Object. 
  2243.       0020h = Object is Shared. 
  2244.       0040h = Object has Preload Pages. 
  2245.       0080h = Object has Invalid Pages. 
  2246.       0100h = Object has Zero Filled Pages. 
  2247.       0200h = Object is Resident (valid for VDDs, PDDs only). 
  2248.       0300h = Object is Resident  Contiguous (VDDs, PDDs only). 
  2249.       0400h = Object is Resident  'long-lockable' (VDDs, PDDs only). 
  2250.       0800h = Reserved for system use. 
  2251.       1000h = 16 
  2252.       2000h = Big/Default Bit Setting (80x86 Specific). The 'big/default' bit , 
  2253.       for data segments, controls the setting of the Big bit in the segment 
  2254.       descriptor.  (The Big bit, or B-bit, determines whether ESP or SP is used 
  2255.       as the stack pointer.)  For code segments, this bit controls the setting 
  2256.       of the Default bit in the segment descriptor. (The Default bit, or D-bit, 
  2257.       determines whether the default word size is 32-bits or 16-bits.  It also 
  2258.       affects the interpretation of the instruction stream.) 
  2259.  
  2260.       4000h = Object is conforming for code (80x86 Specific). 
  2261.       8000h = Object I/O privilege level (80x86 Specific). Only used for 16 
  2262.  
  2263. PAGE TABLE INDEX = DD  Object Page Table Index. This specifies the number of 
  2264. the first object page table entry for this object.  The object page table 
  2265. specifies where in the EXE file a page can be found for a given object and 
  2266. specifies per-page attributes.  The object table entries are ordered by logical 
  2267. page in the object table. In other words the object table entries are sorted 
  2268. based on the object page table index value. 
  2269.  
  2270. # PAGE TABLE ENTRIES = DD  # of object page table entries for this object. Any 
  2271. logical pages at the end of an object that do not have an entry in the object 
  2272. page table associated with them are handled as zero filled or invalid pages by 
  2273. the loader.  When the last logical pages of an object are not specified with an 
  2274. object page table entry, they are treated as either zero filled pages or 
  2275. invalid pages based on the last entry in the object page table for that object. 
  2276. If the last entry was neither a zero filled or invalid page, then the 
  2277. additional pages are treated as zero filled pages. 
  2278.  
  2279. RESERVED = DD  Reserved for future use. Must be set to zero. 
  2280.  
  2281.  
  2282. ΓòÉΓòÉΓòÉ 3.6. Object Page Table ΓòÉΓòÉΓòÉ
  2283.  
  2284. The Object page table provides information about a logical page in an object. A 
  2285. logical page may be an enumerated page, a pseudo page or an iterated page. The 
  2286. structure of the object page table in conjunction with the structure of the 
  2287. object table allows for efficient access of a page when a page fault occurs, 
  2288. while still allowing the physical page data to be located in the preload page, 
  2289. demand load page or iterated data page sections in the linear EXE module. The 
  2290. logical page entries in the Object Page Table are numbered starting from one. 
  2291. The Object Page Table is parallel to the Fixup Page Table as they are both 
  2292. indexed by the logical page number.  Each Object Page Table entry has the 
  2293. following format 
  2294.  
  2295.  
  2296.          63                     32 31       16 15         0
  2297.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2298.       00h Γöé    PAGE DATA OFFSET   Γöé DATA SIZE Γöé   FLAGS   Γöé
  2299.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2300.  
  2301.  
  2302.  
  2303. Object Page Table Entry 
  2304.  
  2305. PAGE DATA OFFSET = DD  Offset to the page data in the EXE file. This field, 
  2306. when bit shifted left by the PAGE OFFSET SHIFT from the module header, 
  2307. specifies the offset from the beginning of the Preload Page section of the 
  2308. physical page data in the EXE file that corresponds to this logical page entry. 
  2309. The page data may reside in the Preload Pages, Demand Load Pages or the 
  2310. Iterated Data Pages sections.  If the FLAGS field specifies that this is a 
  2311. Zero-Filled page then the PAGE DATA OFFSET field will contain a 0.  If the 
  2312. logical page is specified as an iterated data page, as indicated by the FLAGS 
  2313. field, then this field specifies the offset into the Iterated Data Pages 
  2314. section.  The logical page number (Object Page Table index), is used to index 
  2315. the Fixup Page Table to find any fixups associated with the logical page. 
  2316.  
  2317. DATA SIZE = DW  Number of bytes of data for this page. This field specifies the 
  2318. actual number of bytes that represent the page in the file.  If the PAGE SIZE 
  2319. field from the module header is greater than the value of this field and the 
  2320. FLAGS field indicates a Legal Physical Page, the remaining bytes are to be 
  2321. filled with zeros.  If the FLAGS field indicates an Iterated Data Page, the 
  2322. iterated data records will completely fill out the remainder. 
  2323.  
  2324. FLAGS = DW  Attributes specifying characteristics of this logical page. The bit 
  2325. definitions for this word field follow, 
  2326.  
  2327.       00h = Legal Physical Page in the module (Offset from Preload Page 
  2328.       Section). 
  2329.       01h = Iterated Data Page (Offset from Iterated Data Pages Section). 
  2330.       02h = Invalid Page (zero). 
  2331.       03h = Zero Filled Page (zero). 
  2332.       04h = Range of Pages. 
  2333.  
  2334.  
  2335. ΓòÉΓòÉΓòÉ 3.7. Resource Table ΓòÉΓòÉΓòÉ
  2336.  
  2337. The resource table is an array of resource table entries.  Each resource table 
  2338. entry contains a type ID and name ID.  These entries are used to locate 
  2339. resource objects contained in the Object table.  The number of entries in the 
  2340. resource table is defined by the Resource Table Count located in the linear EXE 
  2341. header.  More than one resource may be contained within a single object. 
  2342. Resource table entries are in a sorted order, (ascending, by Resource Name ID 
  2343. within the Resource Type ID).  This allows the DosGetResource API function to 
  2344. use a binary search when looking up a resource in a 32-bit module instead of 
  2345. the linear search being used in the current 16-bit module.  Each resource entry 
  2346. has the following format 
  2347.  
  2348.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2349.       00h Γöé  TYPE ID  Γöé  NAME ID  Γöé
  2350.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2351.       04h Γöé     RESOURCE SIZE     Γöé
  2352.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2353.       08h Γöé   OBJECT  Γöé        OFFSET         Γöé
  2354.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2355.  
  2356. Resource Table 
  2357.  
  2358. TYPE ID = DW  Resource type ID. The type of resources are 
  2359.  
  2360.       01h = RT_POINTER    = mouse pointer shape 
  2361.       02h = RT_BITMAP    = bitmap 
  2362.       03h = RT_MENU     = menu template 
  2363.       04h = RT_DIALOG    = dialog template 
  2364.       05h = RT_STRING    = string tables 
  2365.       06h = RT_FONTDIR    = font directory 
  2366.       07h = RT_FONT     = font 
  2367.       08h = RT_ACCELTABLE  = accelerator tables 
  2368.       09h = RT_RCDATA    = binary data 
  2369.       0Ah = RT_MESSAGE    = error msg tables 
  2370.       0Bh = RT_DLGINCLUDE  = dialog include file name 
  2371.       0Ch = RT_VKEYTBL    = key to vkey tables 
  2372.       0Dh = RT_KEYTBL    = key to UGL tables 
  2373.       0Eh = RT_CHARTBL    = glyph to character tables 
  2374.       0Fh = RT_DISPLAYINFO  = screen display information 
  2375.       10h = RT_FKASHORT   = function key area short form 
  2376.       11h = RT_FKALONG    = function key area long form 
  2377.       12h = RT_HELPTABLE   = Help table for Cary Help manager 
  2378.       13h = RT_HELPSUBTABLE = Help subtable for Cary Help manager 
  2379.       14h = RT_FDDIR     = DBCS uniq/font driver directory 
  2380.       15h = RT_FD      = DBCS uniq/font driver 
  2381.  
  2382. NAME ID = DW  An ID used as a name for the resource when referred to. 
  2383.  
  2384. RESOURCE SIZE = DD  The number of bytes the resource consists of. 
  2385.  
  2386. OBJECT = DW  The number of the object which contains the resource. 
  2387.  
  2388. OFFSET = DD  The offset within the specified object where the resource begins. 
  2389.  
  2390.  
  2391. ΓòÉΓòÉΓòÉ 3.8. Resident or Non-resident Name Table Entry ΓòÉΓòÉΓòÉ
  2392.  
  2393. The resident and non-resident name tables define the ASCII names and ordinal 
  2394. numbers for exported entries in the module. In addition the first entry in the 
  2395. resident name table contains the module name. These tables are used to 
  2396. translate a procedure name string into an ordinal number by searching for a 
  2397. matching name string. The ordinal number is used to locate the entry point 
  2398. information in the entry table.  The resident name table is kept resident in 
  2399. system memory while the module is loaded.  It is intended to contain the 
  2400. exported entry point names that are frequently dynamicaly linked to by name. 
  2401. Non-resident names are not kept in memory and are read from the EXE file when a 
  2402. dynamic link reference is made.  Exported entry point names that are 
  2403. infrequently dynamicaly linked to by name or are commonly referenced by ordinal 
  2404. number should be placed in the non-resident name table.  The trade off made for 
  2405. references by name is performance vs memory usage.  Import references by name 
  2406. require these tables to be searched to obtain the entry point ordinal number. 
  2407. Import references by ordinal number provide the fastest lookup since the search 
  2408. of these tables is not required. 
  2409.  
  2410. Installable File Systems, Physical Device Drivers, and Virtual Device Drivers 
  2411. are closed after the file is loaded.  Any refeference to the non-resident name 
  2412. table after this time will fail.  The strings are CASE SENSITIVE and are NOT 
  2413. NULL TERMINATED.  Each name table entry has the following format 
  2414.  
  2415.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2416.       00h Γöé LEN Γöé    ASCII STRING  . . .      Γöé ORDINAL # Γöé
  2417.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2418.  
  2419. Resident or Non-resident Name Table Entry 
  2420.  
  2421. LEN = DB  String Length. This defines the length of the string in bytes. A zero 
  2422. length indicates there are no more entries in table. The length of each ascii 
  2423. name string is limited to 127 characters.  The high bit in the LEN field (bit 
  2424. 7) is defined as an Overload bit. This bit signifies that additional 
  2425. information is contained in the linear EXE module and will be used in the 
  2426. future for parameter type checking. 
  2427.  
  2428. ASCII STRING = DB  ASCII String. This is a variable length string with it's 
  2429. length defined in bytes by the LEN field.  The string is case case sensitive 
  2430. and is not null terminated. 
  2431.  
  2432. ORDINAL # = DW  Ordinal number. The ordinal number in an ordered index into the 
  2433. entry table for this entry point. 
  2434.  
  2435.  
  2436. ΓòÉΓòÉΓòÉ 3.9. Entry Table ΓòÉΓòÉΓòÉ
  2437.  
  2438. The entry table contains object and offset information that is used to resolve 
  2439. fixup references to the entry points within this module. Not all entry points 
  2440. in the entry table will be exported, some entry points will only be used within 
  2441. the module.  An ordinal number is used to index into the entry table.  The 
  2442. entry table entries are numbered starting from one.  The list of entries are 
  2443. compressed into 'bundles', where possible. The entries within each bundle are 
  2444. all the same size. A bundle starts with a count field which indicates the 
  2445. number of entries in the bundle.  The count is followed by a type field which 
  2446. identifies the bundle format.  This provides both a means for saving space as 
  2447. well as a mechanism for extending the bundle types.  The type field allows the 
  2448. definition of 256 bundle types.  The following bundle types will initially be 
  2449. defined: 
  2450.  
  2451. Unused Entry. 
  2452. 16-bit Entry. 
  2453. 286 Call Gate Entry. 
  2454. 32-bit Entry. 
  2455. Forwarder Entry. 
  2456. The bundled entry table has the following format 
  2457.  
  2458.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2459.       00h Γöé CNT ΓöéTYPE Γöé BUNDLE INFO . . Γöé
  2460.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2461.  
  2462. Entry Table 
  2463.  
  2464. CNT = DB  Number of entries. This is the number of entries in this bundle.  A 
  2465. zero value for the number of entries identifies the end of the entry table. 
  2466. There is no further bundle information when the number of entries is zero.  In 
  2467. other words the entry table is terminated by a single zero byte. 
  2468.  
  2469. TYPE = DB  Bundle type. This defines the  bundle type  which determines the 
  2470. contents of the BUNDLE INFO.  The follow types are defined 
  2471.  
  2472.          00h = Unused Entry. 
  2473.          01h = 16-bit Entry. 
  2474.          02h = 286 Call Gate Entry. 
  2475.          03h = 32-bit Entry. 
  2476.          04h = Forwarder Entry. 
  2477.          80h = Parameter Typing Information Present. This bit signifies that 
  2478.          additional information is contained in the linear EXE module and will 
  2479.          be used in the future for parameter type checking. 
  2480.  
  2481. The following is the format for each bundle type 
  2482.  
  2483.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2484.       00h Γöé CNT ΓöéTYPE Γöé
  2485.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2486.  
  2487.    CNT = DB  Number of entries. This is the number of unused entries to skip. 
  2488.  
  2489.    TYPE = DB  0 (Unused Entry) 
  2490.  
  2491.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2492.       00h Γöé CNT ΓöéTYPE Γöé   OBJECT  Γöé
  2493.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2494.       04h ΓöéFLAGSΓöé  OFFSET   Γöé
  2495.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2496.       07h Γöé ... Γöé   . Γöé .   Γöé
  2497.  
  2498.    CNT = DB  Number of entries. This is the number of 16-bit entries in this 
  2499.    bundle.  The flags and offset value are repeated this number of times. 
  2500.  
  2501.    TYPE = DB  1 (16-bit Entry) 
  2502.  
  2503.       OBJECT = DW  Object number. This is the object number for the entries in 
  2504.       this bundle. 
  2505.  
  2506.       FLAGS = DB  Entry flags. These are the flags for this entry point.  They 
  2507.       have the following definition. 
  2508.  
  2509.             01h = Exported entry flag. 
  2510.             F8h = Parameter word count mask. 
  2511.  
  2512.       OFFSET = DW  Offset in object. This is the offset in the object for the 
  2513.       entry point defined at this ordinal number. 
  2514.  
  2515.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2516.       00h Γöé CNT ΓöéTYPE Γöé   OBJECT  Γöé
  2517.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2518.       04h ΓöéFLAGSΓöé  OFFSET   Γöé CALLGATE  Γöé
  2519.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2520.       09h Γöé ... Γöé   . . .   Γöé   . . .   Γöé
  2521.  
  2522.    CNT = DB  Number of entries. This is the number of 286 call gate entries in 
  2523.    this bundle.  The flags, callgate, and offset value are repeated this number 
  2524.    of times. 
  2525.  
  2526.    TYPE = DB  2 (286 Call Gate Entry) The 286 Call Gate Entry Point type is 
  2527.    needed by the loader only if ring 2 segments are to be supported. 286 Call 
  2528.    Gate entries contain 2 extra bytes which are used by the loader to store an 
  2529.    LDT callgate selector value. 
  2530.  
  2531.    OBJECT = DW  Object number. This is the object number for the entries in 
  2532.    this bundle. 
  2533.  
  2534.    FLAGS = DB  Entry flags. These are the flags for this entry point.  They 
  2535.    have the following definition. 
  2536.  
  2537.          01h = Exported entry flag. 
  2538.          F8h = Parameter word count mask. 
  2539.  
  2540.    OFFSET = DW  Offset in object. This is the offset in the object for the 
  2541.    entry point defined at this ordinal number. 
  2542.  
  2543.    CALLGATE = DW  Callgate selector. The callgate selector is a reserved field 
  2544.    used by the loader to store a call gate selector value for references to 
  2545.    ring 2 entry points.  When a ring 3 reference to a ring 2 entry point is 
  2546.    made, the callgate selector with a zero offset is place in the relocation 
  2547.    fixup address.  The segment number and offset in segment is placed in the 
  2548.    LDT callgate. 
  2549.  
  2550.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2551.       00h Γöé CNT ΓöéTYPE Γöé   OBJECT  Γöé
  2552.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2553.       04h ΓöéFLAGSΓöé        OFFSET         Γöé
  2554.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2555.       09h Γöé ... Γöé         . . .         Γöé
  2556.  
  2557.    CNT = DB  Number of entries. This is the number of 32-bit entries in this 
  2558.    bundle.  The flags and offset value are repeated this number of times. 
  2559.  
  2560.    TYPE = DB  3 (32-bit Entry) The 32-bit Entry type will only be defined by 
  2561.    the linker when the offset in the object can not be specified by a 16-bit 
  2562.    offset. 
  2563.  
  2564.    OBJECT = DW  Object number. This is the object number for the entries in 
  2565.    this bundle. 
  2566.  
  2567.    FLAGS = DB  Entry flags. These are the flags for this entry point.  They 
  2568.    have the following definition. 
  2569.  
  2570.          01h = Exported entry flag. 
  2571.          F8h = Parameter dword count mask. 
  2572.  
  2573.    OFFSET = DD  Offset in object. This is the offset in the object for the 
  2574.    entry point defined at this ordinal number. 
  2575.  
  2576.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2577.       00h Γöé CNT ΓöéTYPE Γöé RESERVED  Γöé
  2578.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2579.       04h ΓöéFLAGSΓöé MOD ORD#  Γöé OFFSET / ORDNUM       Γöé
  2580.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2581.       09h Γöé ... Γöé    ...    Γöé          ...          Γöé
  2582.  
  2583. CNT = DB  Number of entries. This is the number of forwarder entries in this 
  2584. bundle.  The FLAGS, MOD ORD#, and OFFSET/ORDNUM values are repeated this number 
  2585. of times. 
  2586.  
  2587. TYPE = DB  4 (Forwarder Entry) 
  2588.  
  2589. RESERVED = DW 0 This field is reserved for future use. 
  2590.  
  2591. FLAGS = DB  Forwarder flags. These are the flags for this entry point.  They 
  2592. have the following definition. 
  2593.  
  2594.       01h = Import by ordinal. 
  2595.       F7h = Reserved for future use; should be zero. 
  2596.  
  2597. MOD ORD# = DW Module Ordinal Number This is the index into the Import Module 
  2598. Name Table for this forwarder. 
  2599.  
  2600. OFFSET / ORDNUM = DD Procedure Name Offset or Import Ordinal Number If the 
  2601. FLAGS field indicates import by ordinal, then this field is the ordinal number 
  2602. into the Entry Table of the target module, otherwise this field is the offset 
  2603. into the Procedure Names Table of the target module. 
  2604.  
  2605. A Forwarder entry (type = 4) is an entry point whose value is an imported 
  2606. reference.  When a load time fixup occurs whose target is a forwarder, the 
  2607. loader obtains the address imported by the forwarder and uses that imported 
  2608. address to resolve the fixup. 
  2609.  
  2610. A forwarder may refer to an entry point in another module which is itself a 
  2611. forwarder, so there can be a chain of forwarders.  The loader will traverse the 
  2612. chain until it finds a non-forwarded entry point which terminates the chain , 
  2613. and use this to resolve the original fixup. Circular chains are detected by the 
  2614. loader and result in a load time error.  A maximum of 1024 forwarders is 
  2615. allowed in a chain; more than this results in a load time error. 
  2616.  
  2617. Forwarders are useful for merging and recombining API calls into different sets 
  2618. of libraries, while maintaining compatibility with applications. For example, 
  2619. if one wanted to combine MONCALLS, MOUCALLS, and VIOCALLS into a single 
  2620. libraries, one could provide entry points for the three libraries that are 
  2621. forwarders pointing to the common implementation. 
  2622.  
  2623.  
  2624. ΓòÉΓòÉΓòÉ 3.10. Module Format Directives Table ΓòÉΓòÉΓòÉ
  2625.  
  2626. The Module Format Directives Table is an optional table that allows additional 
  2627. options to be specified. It also allows for the extension of the linear EXE 
  2628. format by allowing additional tables of information to be added to the linear 
  2629. EXE module without affecting the format of the linear EXE header. Likewise, 
  2630. module format directives provide a place in the linear EXE module for 
  2631. 'temporary tables' of information, such as incremental linking information and 
  2632. statistic information gathered on the module.  When there are no module format 
  2633. directives for a linear EXE module, the fields in the linear EXE header 
  2634. referencing the module format directives table are zero.  Each Module Format 
  2635. Directive Table entry has the following format 
  2636.  
  2637.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2638.       00h Γöé DIRECT #  Γöé DATA LEN  Γöé     DATA OFFSET     Γöé
  2639.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2640.  
  2641. Module Format Directive Table 
  2642.  
  2643. DIRECT # = DW  Directive number. The directive number specifies the type of 
  2644. directive defined. This can be used to determine the format of the information 
  2645. in the directive data. The following directive numbers have been defined 
  2646.  
  2647.       8000h = Resident Flag Mask. Directive numbers with this bit set indicate 
  2648.       that the directive data is in the resident area and will be kept resident 
  2649.       in memory when the module is loaded. 
  2650.  
  2651.       8001h = Verify Record Directive. (Verify record is a resident table.) 
  2652.       0002h = Language Information Directive. (This is a non-resident table.) 
  2653.       0003h = Co-Processor Required Support Table. 
  2654.       0004h = Thread State Initialization Directive. Additional directives can 
  2655.    be added as needed in the future, as long as they do not overlap previously 
  2656.    defined directive numbers. 
  2657.  
  2658. DATA LEN = DW  Directive data length. This specifies the length in byte of the 
  2659. directive data for this directive number. 
  2660.  
  2661. DIRECTIVE OFFSET = DD  Directive data offset. This is the offset to the 
  2662. directive data for this directive number. It is relative to beginning of linear 
  2663. EXE header for a resident table, and relative to the beginning of the EXE file 
  2664. for non-resident tables. 
  2665.  
  2666.  
  2667. ΓòÉΓòÉΓòÉ 3.11. Verify Record Directive Table ΓòÉΓòÉΓòÉ
  2668.  
  2669. The Verify Record Directive Table is an optional table. It maintains a record 
  2670. of the pages in the EXE file that have been fixed up and written back to the 
  2671. original linear EXE module, along with the module dependencies used to perform 
  2672. these fixups.  This table provides an efficient means for verifying the virtual 
  2673. addresses required for the fixed up pages when the module is loaded.  Each 
  2674. Verify Record entry has the following format 
  2675.  
  2676.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2677.       00h Γöé# OF ENTRY Γöé
  2678.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2679.       02h Γöé MOD ORD # Γöé  VERSION  Γöé MOD # OBJ Γöé
  2680.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2681.       08h Γöé OBJECT #  Γöé BASE ADDR Γöé  VIRTUAL  Γöé
  2682.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2683.       0Eh Γöé   . . .   Γöé   . . .   Γöé   . . .   Γöé
  2684.  
  2685.  
  2686. Verify Record Table 
  2687.  
  2688. # OF ENTRY = DW  Number of module dependencies. This field specifies how many 
  2689. entries there are in the verify record directive table. This is equal to the 
  2690. number of modules referenced by this module. 
  2691.  
  2692. MOD ORD # = DW  Ordinal index into the Import Module Name Table. This value is 
  2693. an ordered index in to the Import Module Name Table for the referenced module. 
  2694.  
  2695. VERSION = DW  Module Version. This is the version of the referenced module that 
  2696. the fixups were originally performed.  This is used to insure the same version 
  2697. of the referenced module is loaded that was fixed up in this module and 
  2698. therefore the fixups are still correct.  This requires the version number in a 
  2699. module to be incremented anytime the entry point offsets change. 
  2700.  
  2701. MOD # OBJ = DW  Module # of Object Entries. This field is used to identify the 
  2702. number of object verify entries that follow for the referenced module. 
  2703.  
  2704. OBJECT # = DW  Object # in Module. This field specifies the object number in 
  2705. the referenced module that is being verified. 
  2706.  
  2707. BASE ADDR = DW  Object load base address. This is the address that the object 
  2708. was loaded at when the fixups were performed. 
  2709.  
  2710. VIRTUAL = DW  Object virtual address size. This field specifies the total 
  2711. amount of virtual memory required for this object. 
  2712.  
  2713.  
  2714. ΓòÉΓòÉΓòÉ 3.12. Per-Page Checksum ΓòÉΓòÉΓòÉ
  2715.  
  2716. The Per-Page Checksum table provides space for a cryptographic checksum for 
  2717. each physical page in the EXE file.  The checksum table is arranged such that 
  2718. the first entry in the table corresponds to the first logical page of code/data 
  2719. in the EXE file (usually a preload page) and the last entry corresponds to the 
  2720. last logical page in the EXE file (usually a iterated data page). 
  2721.  
  2722.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2723.    Logical Page #1  Γöé        CHECKSUM       Γöé
  2724.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2725.    Logical Page #2  Γöé        CHECKSUM       Γöé
  2726.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2727.                               . . .
  2728.  
  2729.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2730.    Logical Page #n  Γöé        CHECKSUM       Γöé
  2731.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2732.  
  2733. Per-Page Checksum 
  2734.  
  2735. CHECKSUM = DD  Cryptographic checksum. 
  2736.  
  2737.  
  2738. ΓòÉΓòÉΓòÉ 3.13. Fixup Page Table ΓòÉΓòÉΓòÉ
  2739.  
  2740. The Fixup Page Table provides a simple mapping of a logical page number to an 
  2741. offset into the Fixup Record Table for that page.  This table is parallel to 
  2742. the Object Page Table, except that there is one additional entry in this table 
  2743. to indicate the end of the Fixup Record Table.  The format of each entry is 
  2744.  
  2745.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2746.  Logical Page #1  Γöé  OFFSET FOR PAGE #1   Γöé
  2747.                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2748.  Logical Page #2  Γöé  OFFSET FOR PAGE #2   Γöé
  2749.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2750.                             . . .
  2751.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2752.  Logical Page #n  Γöé  OFFSET FOR PAGE #n   Γöé
  2753.                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2754.                   ΓöéOFF TO END OF FIXUP RECΓöé   This is equal to:
  2755.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   Offset for page #n + Size
  2756.                                               of fixups for page #n
  2757.  
  2758. Fixup Page Table 
  2759.  
  2760. OFFSET FOR PAGE # = DD  Offset for fixup record for this page. This field 
  2761. specifies the offset, from the beginning of the fixup record table, to the 
  2762. first fixup record for this page. 
  2763.  
  2764. OFF TO END OF FIXUP REC = DD  Offset to the end of the fixup records. This 
  2765. field specifies the offset following the last fixup record in the fixup record 
  2766. table.  This is the last entry in the fixup page table.  The fixup records are 
  2767. kept in order by logical page in the fixup record table.  This allows the end 
  2768. of each page's fixup records is defined by the offset for the next logical 
  2769. page's fixup records.  This last entry provides support of this mechanism for 
  2770. the last page in the fixup page table. 
  2771.  
  2772.  
  2773. ΓòÉΓòÉΓòÉ 3.14. Fixup Record Table ΓòÉΓòÉΓòÉ
  2774.  
  2775. The Fixup Record Table contains entries for all fixups in the linear EXE 
  2776. module.  The fixup records for a logical page are grouped together and kept in 
  2777. sorted order by logical page number.  The fixups for each page are further 
  2778. sorted such that all external fixups and internal selector/pointer fixups come 
  2779. before internal non-selector/non-pointer fixups.  This allows the loader to 
  2780. ignore internal fixups if the loader is able to load all objects at the 
  2781. addresses specified in the object table.  Each relocation record has the 
  2782. following format 
  2783.  
  2784.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2785.       00h Γöé SRC ΓöéFLAGSΓöéSRCOFF/CNT*Γöé
  2786.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2787.   03h/04h Γöé           TARGET DATA *           Γöé
  2788.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2789.           Γöé SRCOFF1 @ Γöé   . . .   Γöé SRCOFFn @ Γöé
  2790.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2791.  
  2792.         * These fields are variable size.
  2793.         @ These fields are optional.
  2794.  
  2795. Fixup Record Table 
  2796.  
  2797. SRC = DB  Source type. The source type specifies the size and type of the fixup 
  2798. to be performed on the fixup source.  The source type is defined as follows 
  2799.  
  2800.       0Fh = Source mask. 
  2801.       00h = Byte fixup (8-bits). 
  2802.       01h = (undefined). 
  2803.       02h = 16-bit Selector fixup (16-bits). 
  2804.       03h = 16 
  2805.       04h = (undefined). 
  2806.       05h = 16-bit Offset fixup (16-bits). 
  2807.       06h = 16 
  2808.       07h = 32-bit Offset fixup (32-bits). 
  2809.       08h = 32-bit Self-relative offset fixup (32-bits). 
  2810.       10h = Fixup to Alias Flag. When the 'Fixup to Alias' Flag is set, the 
  2811.       source fixup refers to the 16  This is only valid for source types of 2, 
  2812.       3, and 6. For fixups such as this, the linker and loader will be required 
  2813.       to perform additional checks such as ensuring that the target offset for 
  2814.       this fixup is less than 64K. 
  2815.  
  2816.       20h = Source List Flag. When the 'Source List' Flag is set, the SRCOFF 
  2817.       field is compressed to a byte and contains the number of source offsets, 
  2818.       and a list of source offsets follows the end of fixup record (after the 
  2819.       optional additive value). 
  2820.  
  2821. FLAGS = DB  Target Flags. The target flags specify how the target information 
  2822. is interpreted. The target flags are defined as follows 
  2823.  
  2824.       03h = Fixup target type mask. 
  2825.       00h = Internal reference. 
  2826.       01h = Imported reference by ordinal. 
  2827.       02h = Imported reference by name. 
  2828.       03h = Internal reference via entry table. 
  2829.       04h = Additive Fixup Flag. When set, an additive value trails the fixup 
  2830.       record (before the optional source offset list). 
  2831.  
  2832.       08h = Reserved.  Must be zero. 
  2833.       10h = 32-bit Target Offset Flag. When set, the target offset is 32-bits, 
  2834.       otherwise it is 16-bits. 
  2835.  
  2836.       20h = 32-bit Additive Fixup Flag. When set, the additive value is 
  2837.       32-bits, otherwise it is 16-bits. 
  2838.  
  2839.       40h = 16-bit Object Number/Module Ordinal Flag. When set, the object 
  2840.       number or module ordinal number is 16-bits, otherwise it is 8-bits. 
  2841.  
  2842.       80h = 8-bit Ordinal Flag. When set, the ordinal number is 8-bits, 
  2843.       otherwise it is 16-bits. 
  2844.  
  2845. SRCOFF = DW/CNT = DB  Source offset or source offset list count. This field 
  2846. contains either an offset or a count depending on the Source List Flag. If the 
  2847. Source List Flag is set, a list of source offsets follows the additive field 
  2848. and this field contains the count of the entries in the source offset list. 
  2849. Otherwise, this is the single source offset for the fixup. Source offsets are 
  2850. relative to the beginning of the page where the fixup is to be made.  Note that 
  2851. for fixups that cross page boundaries, a separate fixup record is specified for 
  2852. each page.  An offset is still used for the 2nd page but it now becomes a 
  2853. negative offset since the fixup originated on the preceding page.  (For 
  2854. example, if only the last one byte of a 32-bit address is on the page to be 
  2855. fixed up, then the offset would have a value of -3.) 
  2856.  
  2857. TARGET DATA = Target data for fixup. The format of the TARGET DATA is dependent 
  2858. upon target flags. 
  2859.  
  2860. SRCOFF1 - SRCOFFn = DW[]  Source offset list. This list is present if the 
  2861. Source List Flag is set in the Target Flags field.  The number of entries in 
  2862. the source offset list is defined in the SRCOFF/CNT field.  The source offsets 
  2863. are relative to the beginning of the page where the fixups are to be made. 
  2864.  
  2865.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2866.       00h Γöé SRC ΓöéFLAGSΓöéSRCOFF/CNT*Γöé
  2867.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2868.   03h/04h Γöé  OBJECT * Γöé        TRGOFF * @     Γöé
  2869.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2870.           Γöé SRCOFF1 @ Γöé   . . .   Γöé SRCOFFn @ Γöé
  2871.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2872.  
  2873.         * These fields are variable size.
  2874.         @ These fields are optional.
  2875.  
  2876. Internal Fixup Record 
  2877.  
  2878.    OBJECT = D[B|W]  Target object number. This field is an index into the 
  2879.    current module's Object Table to specify the target Object. It is a Byte 
  2880.    value when the '16-bit Object Number/Module Ordinal Flag' bit in the target 
  2881.    flags field is clear and a Word value when the bit is set. 
  2882.  
  2883.    TRGOFF = D[W|D]  Target offset. This field is an offset into the specified 
  2884.    target Object. It is not present when the Source Type specifies a 16-bit 
  2885.    Selector fixup. It is a Word value when the '32-bit Target Offset Flag' bit 
  2886.    in the target flags field is clear and a Dword value when the bit is set. 
  2887.  
  2888.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2889.       00h Γöé SRC ΓöéFLAGSΓöéSRCOFF/CNT*Γöé
  2890.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2891.   03h/04h Γöé MOD ORD# *Γöé PROCEDURE NAME OFFSET*Γöé     ADDITIVE * @      Γöé
  2892.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2893.           Γöé SRCOFF1 @ Γöé   . . .   Γöé SRCOFFn @ Γöé
  2894.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2895.  
  2896.         * These fields are variable size.
  2897.         @ These fields are optional.
  2898.  
  2899. Import by Name Fixup Record 
  2900.  
  2901.    MOD ORD # = D[B|W]  Ordinal index into the Import Module Name Table. This 
  2902.    value is an ordered index in to the Import Module Name Table for the module 
  2903.    containing the procedure entry point. It is a Byte value when the '16-bit 
  2904.    Object Number/Module Ordinal' Flag bit in the target flags field is clear 
  2905.    and a Word value when the bit is set. The loader creates a table of pointers 
  2906.    with each pointer in the table corresponds to the modules named in the 
  2907.    Import Module Name Table. This value is used by the loader to index into 
  2908.    this table created by the loader to locate the referenced module. 
  2909.  
  2910.    PROCEDURE NAME OFFSET = D[W|D]  Offset into the Import Procedure Name Table. 
  2911.    This field is an offset into the Import Procedure Name Table.  It is a Word 
  2912.    value when the '32-bit Target Offset Flag' bit in the target flags field is 
  2913.    clear and a Dword value when the bit is set. 
  2914.  
  2915.    ADDITIVE = D[W|D]  Additive fixup value. This field exists in the fixup 
  2916.    record only when the 'Additive Fixup Flag' bit in the target flags field is 
  2917.    set.  When the 'Additive Fixup Flag' is clear the fixup record does not 
  2918.    contain this field and is immediately followed by the next fixup record (or 
  2919.    by the source offset list for this fixup record).  This value is added to 
  2920.    the address derived from the target entry point. This field is a Word value 
  2921.    when the '32-bit Additive Flag' bit in the target flags field is clear and a 
  2922.    Dword value when the bit is set. 
  2923.  
  2924.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2925.       00h Γöé SRC ΓöéFLAGSΓöéSRCOFF/CNT*Γöé
  2926.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2927.   03h/04h Γöé MOD ORD# *ΓöéIMPORT ORD*Γöé     ADDITIVE * @      Γöé
  2928.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2929.           Γöé SRCOFF1 @ Γöé   . . .   Γöé SRCOFFn @ Γöé
  2930.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2931.  
  2932.         * These fields are variable size.
  2933.         @ These fields are optional.
  2934.  
  2935. Import by Ordinal Fixup Record 
  2936.  
  2937.    MOD ORD # = D[B|W]  Ordinal index into the Import Module Name Table. This 
  2938.    value is an ordered index in to the Import Module Name Table for the module 
  2939.    containing the procedure entry point. It is a Byte value when the '16-bit 
  2940.    Object Number/Module Ordinal' Flag bit in the target flags field is clear 
  2941.    and a Word value when the bit is set. The loader creates a table of pointers 
  2942.    with each pointer in the table corresponds to the modules named in the 
  2943.    Import Module Name Table. This value is used by the loader to index into 
  2944.    this table created by the loader to locate the referenced module. 
  2945.  
  2946.    IMPORT ORD = D[B|W|D]  Imported ordinal number. This is the imported 
  2947.    procedure's ordinal number. It is a Byte value when the '8-bit Ordinal' bit 
  2948.    in the target flags field is set. Otherwise it is a Word value when the 
  2949.    '32-bit Target Offset Flag' bit in the target flags field is clear and a 
  2950.    Dword value when the bit is set. 
  2951.  
  2952.    ADDITIVE = D[W|D]  Additive fixup value. This field exists in the fixup 
  2953.    record only when the 'Additive Fixup Flag' bit in the target flags field is 
  2954.    set.  When the 'Additive Fixup Flag' is clear the fixup record does not 
  2955.    contain this field and is immediately followed by the next fixup record (or 
  2956.    by the source offset list for this fixup record).  This value is added to 
  2957.    the address derived from the target entry point. This field is a Word value 
  2958.    when the '32-bit Additive Flag' bit in the target flags field is clear and a 
  2959.    Dword value when the bit is set. 
  2960.  
  2961.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2962.       00h Γöé SRC ΓöéFLAGSΓöéSRCOFF/CNT*Γöé
  2963.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2964.   03h/04h Γöé  ORD # *  Γöé     ADDITIVE * @      Γöé
  2965.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2966.           Γöé SRCOFF1 @ Γöé   . . .   Γöé SRCOFFn @ Γöé
  2967.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2968.  
  2969.         * These fields are variable size.
  2970.         @ These fields are optional.
  2971.  
  2972. Internal Entry Table Fixup Record 
  2973.  
  2974.    ENTRY # = D[B|W]  Ordinal index into the Entry Table. This field is an index 
  2975.    into the current module's Entry Table to specify the target Object and 
  2976.    offset. It is a Byte value when the '16-bit Object Number/Module Ordinal' 
  2977.    Flag bit in the target flags field is clear and a Word value when the bit is 
  2978.    set. 
  2979.  
  2980.    ADDITIVE = D[W|D]  Additive fixup value. This field exists in the fixup 
  2981.    record only when the 'Additive Fixup Flag' bit in the target flags field is 
  2982.    set.  When the 'Additive Fixup Flag' is clear the fixup record does not 
  2983.    contain this field and is immediately followed by the next fixup record (or 
  2984.    by the source offset list for this fixup record).  This value is added to 
  2985.    the address derived from the target entry point. This field is a Word value 
  2986.    when the '32-bit Additive Flag' bit in the target flags field is clear and a 
  2987.    Dword value when the bit is set. 
  2988.  
  2989.  
  2990. ΓòÉΓòÉΓòÉ 3.15. Import Module Name Table ΓòÉΓòÉΓòÉ
  2991.  
  2992. The import module name table defines the module name strings imported through 
  2993. dynamic link references.  These strings are referenced through the imported 
  2994. relocation fixups.  To determine the length of the import module name table 
  2995. subtract the import module name table offset from the import procedure name 
  2996. table offset. These values are located in the linear EXE header. The end of the 
  2997. import module name table is not terminated by a special character, it is 
  2998. followed directly by the import procedure name table.  The strings are CASE 
  2999. SENSITIVE and NOT NULL TERMINATED.  Each name table entry has the following 
  3000. format 
  3001.  
  3002.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3003.       00h Γöé LEN Γöé    ASCII STRING  . . .      Γöé
  3004.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3005.  
  3006. Import Module Name Table 
  3007.  
  3008. LEN = DB  String Length. This defines the length of the string in bytes. The 
  3009. length of each ascii name string is limited to 127 characters. 
  3010.  
  3011. ASCII STRING = DB  ASCII String. This is a variable length string with it's 
  3012. length defined in bytes by the LEN field.  The string is case sensitive and is 
  3013. not null terminated. 
  3014.  
  3015.  
  3016. ΓòÉΓòÉΓòÉ 3.16. Import Procedure Name Table ΓòÉΓòÉΓòÉ
  3017.  
  3018. The import procedure name table defines the procedure name strings imported by 
  3019. this module through dynamic link references.  These strings are referenced 
  3020. through the imported relocation fixups.  To determine the length of the import 
  3021. procedure name table add the fixup section size to the fixup page table offset, 
  3022. this computes the offset to the end of the fixup section, then subtract the 
  3023. import procedure name table offset.  These values are located in the linear EXE 
  3024. header. The import procedure name table is followed by the data pages section. 
  3025. Since the data pages section is aligned on a 'page size' boundary, padded space 
  3026. may exist between the last import name string and the first page in the data 
  3027. pages section.  If this padded space exists it will be zero filled.  The 
  3028. strings are CASE SENSITIVE and NOT NULL TERMINATED.  Each name table entry has 
  3029. the following format 
  3030.  
  3031.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3032.       00h Γöé LEN Γöé    ASCII STRING  . . .      Γöé
  3033.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3034.  
  3035. Import Procedure Name Table 
  3036.  
  3037. LEN = DB  String Length. This defines the length of the string in bytes. The 
  3038. length of each ascii name string is limited to 127 characters.  The high bit in 
  3039. the LEN field (bit 7) is defined as an Overload bit. This bit signifies that 
  3040. additional information is contained in the linear EXE module and will be used 
  3041. in the future for parameter type checking. 
  3042.  
  3043. ASCII STRING = DB  ASCII String. This is a variable length string with it's 
  3044. length defined in bytes by the LEN field.  The string is case sensitive and is 
  3045. not null terminated. 
  3046.  
  3047.  
  3048. ΓòÉΓòÉΓòÉ 3.17. Preload Pages ΓòÉΓòÉΓòÉ
  3049.  
  3050. The Preload Pages section is an optional section in the linear EXE module that 
  3051. coalesces a 'preload page set' into a contiguous section.  The preload page set 
  3052. can be defined as the set of first used pages in the module.  The preload page 
  3053. set can be specified by the application developer or can be derived by a tool 
  3054. that analyzes the programs memory usage while it is running.  By grouping the 
  3055. preload page set together, the preload pages can be read from the linear EXE 
  3056. module with one disk read.  The structure of the preload pages is no different 
  3057. than if they were demand loaded. Their sizes are determined by the Object Page 
  3058. Table entries that correspond.  If the specified size is less than the PAGE 
  3059. SIZE field given in the linear EXE module header the remainder of the page is 
  3060. filled with zeros when loaded.  All pages begin on a PAGE OFFSET SHIFT boundary 
  3061. from the base of the preload page section, as specified in the linear EXE 
  3062. header.  The pages are ordered by logical page number within this section. 
  3063. Note that OS/2 2.x does not respect the preload of pages as specified in the 
  3064. executable file for performance reasons. 
  3065.  
  3066.  
  3067. ΓòÉΓòÉΓòÉ 3.18. Demand Load Pages ΓòÉΓòÉΓòÉ
  3068.  
  3069. The Demand Loaded Pages section contains all the non-iterated pages for a 
  3070. linear EXE module that are not preloaded.  When required, the whole page is 
  3071. loaded into memory from the module.  The characteristics of each of these pages 
  3072. is specified in the Object Page Table.  Every page begins on a PAGE OFFSET 
  3073. SHIFT boundary aligned offset from the demand loaded pages base specified in 
  3074. the linear EXE header.  Their sizes are determined by the Object Page Table 
  3075. entries that correspond.  If the specified size is less than the PAGE SIZE 
  3076. field given in the linear EXE module header the remainder of the page is filled 
  3077. with zeros when loaded.  The pages are ordered by logical page number within 
  3078. this section. 
  3079.  
  3080.  
  3081. ΓòÉΓòÉΓòÉ 3.19. Iterated Data Pages ΓòÉΓòÉΓòÉ
  3082.  
  3083. The Iterated Data Pages section contains all the pages for a linear EXE module 
  3084. that are iterated.  When required, the set of iteration records are loaded into 
  3085. memory from the module and expanded to reconstitute the page.  Every set of 
  3086. iteration records begins on a PAGE OFFSET SHIFT offset from the OBJECT ITER 
  3087. PAGES OFF specified in the linear EXE header.  Their sizes are determined by 
  3088. the Object Page Table entries that correspond.  The pages are ordered by 
  3089. logical page number within this section.  This record structure is used to 
  3090. describe the iterated data for an object on a per-page basis. 
  3091.  
  3092.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3093.       00h Γöé#ITERATIONSΓöéDATA LENGTHΓöé
  3094.           Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3095.       04h ΓöéDATA BYTES Γöé   . . .   Γöé ... Γöé
  3096.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3097.  
  3098. Object Iterated Data Record (Iteration Record)
  3099.  
  3100. #ITERATIONS = DW  Number of iterations. This specifies the number of times that 
  3101. the data is replicated. 
  3102.  
  3103. DATA LENGTH = DW  The size of the data pattern in bytes. This specifies the 
  3104. number of bytes of data of which the pattern consists. The maximum size is one 
  3105. half of the PAGE SIZE (given in the module header). If a pattern exceeds this 
  3106. value then the data page will not be condensed into iterated data. 
  3107.  
  3108. DATA = DB * DATA LENGTH  The Data pattern to be replicated. The next iteration 
  3109. record will immediately follow the last byte of the pattern. The offset of the 
  3110. next iteration record is easily calculated from the offset of this record by 
  3111. adding the DATA LENGTH field and the sizes of the #ITERATIONS and DATA LENGTH 
  3112. fields. 
  3113.  
  3114.  
  3115. ΓòÉΓòÉΓòÉ 3.20. Debug Information ΓòÉΓòÉΓòÉ
  3116.  
  3117. The debug information  is defined by the debugger and  is not controlled by the 
  3118. linear EXE format or linker.  The only data defined by the linear EXE format 
  3119. relative to the debug  information is it's offset in the EXE file and length in 
  3120. bytes as defined in the linear EXE header.  To support multiple debuggers the 
  3121. first word of  the debug information is a type field which determines the 
  3122. format of the debug information. 
  3123.  
  3124.           00h   01h   02h   03h   04h
  3125.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3126.           Γöé 'N' Γöé 'B' Γöé '0' Γöé  n  Γöé   DEBUGGER DATA  . . . .
  3127.           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  3128.  
  3129. Debug Information 
  3130.  
  3131. TYPE = DB DUP 4 Format type. This defines the type of debugger data that exists 
  3132. in the remainder of the debug information.  The signature consists of a string 
  3133. of four (4) ASCII characters  "NB0" followed by the ASCII representation for 
  3134. 'n'.  The values for 'n' are defined as follows.  These format types are 
  3135. defined. 
  3136.  
  3137.       00h = 32-bit CodeView debugger format. 
  3138.       01h = AIX debugger format. 
  3139.       02h = 16-bit CodeView debugger format. 
  3140.       04h = 32-bit OS/2 PM debugger (IBM) format. 
  3141.  
  3142. DEBUGGER DATA = Debugger specific data. The format of the debugger data  is 
  3143. defined by the debugger that is being used.  The values defined for the  type 
  3144. field are not enforced by the  system.  It is the  responsibility of  the 
  3145. linker  or  debugging tools to  follow  the convention for the type field that 
  3146. is defined here. 
  3147.  
  3148.  
  3149. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3150.  
  3151. OS/2 is a Registered Trademark of International Business Machines Corp. 
  3152.  
  3153.  
  3154. ΓòÉΓòÉΓòÉ <hidden>  ΓòÉΓòÉΓòÉ
  3155.  
  3156. Windows is a Registered Trademark of Microsoft Corp.