source: branches/v2.9/mediafolder/include/omf.h@ 17

Last change on this file since 17 was 2, checked in by stevenhl, 8 years ago

Import sources from cwmm-full.zip dated 2005-03-21

File size: 17.0 KB
Line 
1/*
2**
3** OMF.H - Object Module Format structures
4**
5*/
6
7struct exehdr_rec {
8 BYTE signature[2]; // Must be "MZ"
9 USHORT image_len; // Image Length
10 USHORT pages; // Pages
11 USHORT reloc_items; // Relocation table items
12 USHORT min_paragraphs; // Mininum 16-bytes paragraphs
13 USHORT max_paragraphs; // Maximum 16-bytes paragraphs
14 USHORT stack_pos; // Stack position
15 USHORT offset_in_sp; // Offset in SP
16 USHORT checksum; // Checksum
17 USHORT offset_in_ip; // Offset in IP
18 USHORT code_pos; // Code segment pos.
19 USHORT reloc_item_pos; // Position of first relocation item
20 USHORT overlay_number; // Overlay number
21 BYTE unused[8]; // Unused bytes
22 USHORT oem_id; // OEM Identifier
23 BYTE oem_info[24]; // OEM Info
24 ULONG lexe_offset; // Offset to linear header
25};
26
27struct lexehdr_rec {
28 BYTE signature[2]; // Must be "LX"
29 BYTE b_ord; // Byte ordering
30 BYTE w_ord; // Word ordering
31 ULONG format_level; // Format level
32 USHORT cpu_type; // CPU Type
33 USHORT os_type; // Operating system
34 ULONG module_version; // Module version
35 ULONG mod_flags; // Module flags
36 ULONG mod_pages; // Module pages
37 ULONG EIP_object; // EIP Object no.
38 ULONG EIP; // EIP Value
39 ULONG ESP_object; // ESP Object no
40 ULONG ESP; // ESP Value
41 ULONG page_size; // Page size
42 ULONG page_ofs_shift; // Page offset shift
43 ULONG fixup_sect_size; // Fixup section size
44 ULONG fixup_sect_checksum; // Fixup section checksum
45 ULONG loader_sect_size; // Loader section size
46 ULONG loader_sect_checksum; // Loader section checksum
47 ULONG obj_table_ofs; // Object table offset
48 ULONG obj_count; // Object count
49 ULONG obj_page_tab_ofs; // Object page table offset
50 ULONG obj_iter_page_ofs; // Object iteration pages offset
51 ULONG res_tab_ofs; // Resource table offset
52 ULONG res_table_entries; // Resource table entries
53 ULONG res_name_tab_ofs; // Resident name table offset;
54 ULONG ent_tab_ofs; // Entry table offset
55 ULONG mod_dir_ofs; // Module directives offset
56 ULONG mod_dir_count; // Number of module directives
57 ULONG fixup_page_tab_ofs; // Fixup page table offset
58 ULONG fixup_rec_tab_ofs; // Fixup record table offset
59 ULONG imp_tab_ofs; // Import module table offset
60 ULONG imp_mod_entries; // Import module entries
61 ULONG imp_proc_tab_ofs; // Import proc table offset
62 ULONG per_page_check_ofs; // Per page checksum offset
63 ULONG data_page_offset; // Data pages offset
64 ULONG preload_page_count; // Preload pages count
65 ULONG nonres_tab_ofs; // Nonresident name table offset
66 ULONG nonres_tab_len; // Nonresident name table len
67 ULONG nonres_tab_check; // Nonresident tables checksum
68 ULONG auto_ds_objectno; // Auto DS object number
69 ULONG debug_info_ofs; // Debug info offset
70 ULONG debug_info_len; // Debug info length
71 ULONG inst_preload_count; // Instance preload count
72 ULONG inst_demand_count; // Instance demand count
73 ULONG heapsize; // Heap size
74 ULONG stacksize; // Stack size
75};
76
77struct debug_head_rec {
78 BYTE signature[3]; // Debug signature
79 BYTE type; // Debug info type
80};
81
82struct dir_inf_rec {
83 USHORT dirstruct_size; // Size of directory structure
84 USHORT number_of_entries; // Number of dnt_rec's in the array
85 USHORT unknown; // Unknown data
86 // Followed by an array of dnt_rec structures
87};
88
89struct dnt_rec {
90 USHORT subsect_type; // sst Subsection type
91 USHORT mod_index; // Module index (1-based)
92 ULONG offset; // Offset of start of section
93 ULONG size; // Size of section
94};
95
96// Modules subsection
97struct modules_rec {
98 USHORT code_seg_base; // Code segment base
99 ULONG code_seg_offset; // Code segment offset
100 ULONG code_seg_len; // Code segment length
101 USHORT overlay_no; // Overlay number
102 USHORT lib_idx; // Index into library section or 0
103 BYTE segments; // Number of segments
104 BYTE reserved;
105 BYTE debug_style[2]; // "HL" for HLL, "CV" or 0 for CodeView
106 BYTE debug_version[2]; // 00 01 or 00 03 for HLL, 00 00 for CV
107 BYTE name_len; // Length of name (which follows)
108};
109
110// Publics subsection
111struct publics_rec {
112 ULONG offset; // Offset
113 USHORT segment; // Segment
114 USHORT type; // Type index
115 BYTE name_len; // Length of name (wich follows)
116};
117
118#if 0
119// Linenumbers header
120struct linhead_rec {
121 BYTE id; // 0x95 for flat mem, 32 bit progs
122 USHORT length; // Record length
123 USHORT base_group; // Base group
124 USHORT base_segment; // Base segment
125};
126#endif
127
128// First linenumber record
129struct linfirst_rec {
130 USHORT lineno; // Line number (0)
131 BYTE entry_type; // Entry type
132 BYTE reserved; // Reserved
133 USHORT entries_count; // Number of table entries
134 USHORT segment_no; // Segment number
135 ULONG filename_tabsize; // File names table size
136};
137
138
139// Source line numbers
140struct linsource_rec {
141 USHORT source_line; // Source file line number
142 USHORT source_idx; // Source file index
143 ULONG offset; // Offset into segment
144};
145
146
147// Listing statement numbers
148struct linlist_rec {
149 ULONG list_line; // Listing file linenumber
150 ULONG statement; // Listing file statement number
151 ULONG offset; // Offset into segment
152};
153
154
155// Source and Listing statement numbers
156struct linsourcelist_rec {
157 USHORT source_line; // Source file line number
158 USHORT source_idx; // Source file index
159 ULONG list_line; // Listing file linenumber
160 ULONG statement; // Listing file statement number
161 ULONG offset; // Offset into segment
162};
163
164
165// Path table
166struct pathtab_rec {
167 ULONG offset; // Offset into segment
168 USHORT path_code; // Path code
169 USHORT source_idx; // Source file index
170};
171
172
173// File names table
174struct filenam_rec {
175 ULONG first_char; // First displayable char in list file
176 ULONG disp_chars; // Number of displayable chars in list line
177 ULONG filecount; // Number of source/listing files
178};
179
180
181// Symbol types
182#define SYM_BEGIN 0x00 // Begin block
183#define SYM_PROC 0x01 // Function
184#define SYM_END 0x02 // End block of function
185#define SYM_AUTO 0x04 // Auto variable
186#define SYM_STATIC 0x05 // Static variable
187#define SYM_LABEL 0x0B // Label
188#define SYM_WITH 0x0C // With start symbol (not used)
189#define SYM_REG 0x0D // Register variable
190#define SYM_CONST 0x0E // Constant
191#define SYM_ENTRY 0x0F // Secondary entry (not in C)
192#define SYM_SKIP 0x10 // For incremental linking (not used)
193#define SYM_CHANGESEG 0x11 // Change segment (#pragma alloc_text)
194#define SYM_TYPEDEF 0x12 // Typedef variable
195#define SYM_PUBLIC 0x13 // Public reference
196#define SYM_MEMBER 0x14 // Member of minor or major structure
197#define SYM_BASED 0x15 // Based variable
198#define SYM_TAG 0x16 // Tag in struct, union, enum ...
199#define SYM_TABLE 0x17 // Table (used in RPG - not C)
200#define SYM_MAP 0x18 // Map variable (extern in C)
201#define SYM_CLASS 0x19 // Class symbol (C++)
202#define SYM_MEMFUNC 0x1A // Member function
203#define SYM_AUTOSCOPE 0x1B // Scoped auto for C++ (not used)
204#define SYM_STATICSCOPE 0x1C // scoped static for C++ (not used)
205#define SYM_CPPPROC 0x1D // C++ Proc
206#define SYM_CPPSTAT 0x1E // C++ Static var
207#define SYM_COMP 0x40 // Compiler information
208
209
210// Symbolic begin record
211struct symbegin_rec {
212 ULONG offset; // Segment offset
213 ULONG length; // Length of block
214 BYTE name_len; // Length of block name
215 // Block name follows
216};
217
218
219// Symbolic auto var record
220struct symauto_rec {
221 ULONG stack_offset; // Stack offset
222 USHORT type_idx; // Type index
223 BYTE name_len; // Length of name
224 // Var name follows
225};
226
227
228// Symbolic procedure record
229struct symproc_rec {
230 ULONG offset; // Segment offset
231 USHORT type_idx; // Type index
232 ULONG length; // Length of procedure
233 USHORT pro_len; // Length of prologue
234 ULONG pro_bodylen; // Length of prologue + body
235 USHORT class_type; // Class type
236 BYTE near_far; // Near or far
237 BYTE name_len; // Length of name
238 // Function name follows
239};
240
241
242// Symbolic static var record
243struct symstatic_rec {
244 ULONG offset; // Segment offset
245 USHORT segaddr; // Segment address
246 USHORT type_idx; // Type index
247 BYTE name_len; // Length of name
248 // Var name follows
249};
250
251
252// Symbolic label var record
253struct symlabel_rec {
254 ULONG offset; // Segment offset
255 BYTE near_far; // Near or far
256 BYTE name_len; // Length of name
257 // Var name follows
258};
259
260// Symbolic register var record
261struct symreg_rec {
262 USHORT type_idx; // Type index
263 BYTE reg_no; // Register number
264 BYTE name_len; // Length of name
265 // Var name follows
266};
267
268// Symbolic change-segment record
269struct symseg_rec {
270 USHORT seg_no; // Segment number
271};
272
273// Symbolic typedef record
274struct symtypedef_rec {
275 USHORT type_idx; // Type index
276 BYTE name_len; // Length of name
277 // Name follows
278};
279
280// Symbolic public record
281struct sympublic_rec {
282 ULONG offset; // Segment offset
283 USHORT segaddr; // Segment address
284 USHORT type_idx; // Type index
285 BYTE name_len; // Length of name
286 // Name follows
287};
288
289// Symbolic member record
290struct symmember_rec {
291 ULONG offset; // Offset to subrecord
292 BYTE name_len; // Length of name
293 // Name follows
294};
295
296// Symbolic based record
297struct symbased_rec {
298 ULONG offset; // Offset to subrecord
299 USHORT type_idx; // Type index
300 BYTE name_len; // Length of name
301 // Name follows
302};
303
304// Symbolic tag record
305struct symtag_rec {
306 USHORT type_idx; // Type index
307 BYTE name_len; // Length of name
308 // Name follows
309};
310
311
312// Symbolic table record
313struct symtable_rec {
314 ULONG offset; // Segment offset
315 USHORT segaddr; // Segment address
316 USHORT type_idx; // Type index
317 ULONG idx_ofs; // Index offset to subrecord
318 BYTE name_len; // Length of name
319 // Name follows
320};
321
322
323// Type record
324struct type_rec {
325 USHORT length; // Length of sub-record
326 BYTE type; // Sub-record type
327 BYTE type_qual; // Type qualifier
328};
329
330
331
332// Types
333#define TYPE_CLASS 0x40 // Class
334#define TYPE_BASECLASS 0x41 // Base class
335#define TYPE_FRIEND 0x42 // Friend
336#define TYPE_CLASSDEF 0x43 // Class definition
337#define TYPE_MEMBERFUNC 0x45 // Member function
338#define TYPE_CLASSMEMBER 0x46 // Class member
339#define TYPE_REF 0x48 // Reference
340#define TYPE_MEMBERPTR 0x49 // Member pointer
341#define TYPE_SCALARS 0x51 // Scalars
342#define TYPE_SET 0x52 // Set
343#define TYPE_ENTRY 0x53 // Entry
344#define TYPE_FUNCTION 0x54 // Function
345#define TYPE_AREA 0x55 // Area
346#define TYPE_LOGICAL 0x56 // Logical
347#define TYPE_STACK 0x57 // Stack
348#define TYPE_MACRO 0x59 // Macro
349#define TYPE_BITSTRING 0x5C // Bit string
350#define TYPE_USERDEF 0x5D // User defined
351#define TYPE_CHARSTR 0x60 // Character string
352#define TYPE_PICTURE 0x61 // Picture
353#define TYPE_GRAPHIC 0x62 // Graphic
354#define TYPE_FORMATLAB 0x65 // Format label
355#define TYPE_FILE 0x67 // File
356#define TYPE_SUBRANGE 0x6F // Subrange
357#define TYPE_CODELABEL 0x72 // Code label
358#define TYPE_PROCEDURE 0x75 // Procedure
359#define TYPE_ARRAY 0x78 // Array
360#define TYPE_STRUCT 0x79 // Structure / Union / Record
361#define TYPE_POINTER 0x7A // Pointer
362#define TYPE_ENUM 0x7B // Enum
363#define TYPE_LIST 0x7F // List
364
365
366// Type userdef
367struct type_userdefrec {
368 BYTE FID_index; // Field ID
369 USHORT type_index; // Type index
370 BYTE FID_string; // String ID
371 BYTE name_len; // Length of name which follows
372};
373
374
375// Type function
376struct type_funcrec {
377 USHORT params;
378 USHORT max_params;
379 BYTE FID_index; // Field ID
380 USHORT type_index; // Type index of return value
381 BYTE FID_index1; // String ID
382 USHORT typelist_index; // Index of list of params
383};
384
385
386// Type struct
387struct type_structrec {
388 ULONG size; // Size of structure
389 USHORT field_count; // Number of fields in structure
390 BYTE FID_index; // Field ID
391 USHORT type_list_idx; // Index to type list
392 BYTE FID_index1; // Field ID
393 USHORT type_name_idx; // Index to names / offsets
394 BYTE dont_know; // Haven't a clue, but it seems to be needed
395 BYTE name_len; // Length of structure name which follows
396};
397
398// Type list, type qualifier 1: contains types for structures
399// This record is repeated for the number of items in the structure definition
400struct type_list1 {
401 BYTE FID_index; // Field identifier for index
402 USHORT type_index; // Type index.
403};
404
405// Type list, type qualifier 2: contains names and offsets for structure items
406// This record is repeated for the number of items in the structure definition
407struct type_list2 {
408 BYTE FID_string; // String identifier
409 BYTE name_len; // Length of name which follows
410};
411
412// Type list, subrecord to the above, contains offset of variable in the structure
413struct type_list2_1 {
414 BYTE FID_span; // Defines what type of variable follows
415 union {
416 BYTE b_len;
417 USHORT s_len;
418 ULONG l_len;
419 } u;
420};
421
422// Type pointer
423struct type_pointerrec {
424 BYTE FID_index; // Index identifier
425 USHORT type_index; // Type index
426 BYTE FID_string; // String identifier
427 BYTE name_len; // Length of name which follows
428};
Note: See TracBrowser for help on using the repository browser.