VirtualBox

source: vbox/trunk/include/iprt/formats/omf.h@ 60259

Last change on this file since 60259 was 60259, checked in by vboxsync, 9 years ago

dbgmodcodeview.cpp: Parse CV8 line numbers.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.1 KB
Line 
1/* $Id: omf.h 60259 2016-03-30 11:35:50Z vboxsync $ */
2/** @file
3 * IPRT - Relocatable Object Module Format (OMF).
4 *
5 * @remarks For a more details description, see specification from Tools
6 * Interface Standards (TIS), version 1.1 dated May 2015.
7 * Typically named found as OMF_v1.1.pdf.
8 */
9
10/*
11 * Copyright (C) 2006-2016 Oracle Corporation
12 *
13 * This file is part of VirtualBox Open Source Edition (OSE), as
14 * available from http://www.virtualbox.org. This file is free software;
15 * you can redistribute it and/or modify it under the terms of the GNU
16 * General Public License (GPL) as published by the Free Software
17 * Foundation, in version 2 as it comes in the "COPYING" file of the
18 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
19 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
20 *
21 * The contents of this file may alternatively be used under the terms
22 * of the Common Development and Distribution License Version 1.0
23 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
24 * VirtualBox OSE distribution, in which case the provisions of the
25 * CDDL are applicable instead of those of the GPL.
26 *
27 * You may elect to license modified versions of this file under the
28 * terms and conditions of either the GPL or the CDDL or both.
29 */
30
31#ifndef ___iprt_formats_omf_h
32#define ___iprt_formats_omf_h
33
34#include <iprt/stdint.h>
35
36
37/** @defgroup grp_rt_formats_omf Relocatable Object Module Format (OMF) structures and definitions
38 * @ingroup grp_rt_formats
39 * @{
40 */
41
42/**
43 * OMF record header.
44 */
45#pragma pack(1)
46typedef struct OMFRECHDR
47{
48 /** The record type. */
49 uint8_t bType;
50 /** The record length, excluding the this header. */
51 uint16_t cbLen;
52} OMFRECHDR;
53#pragma pack()
54/** Pointer to an OMF header. */
55typedef OMFRECHDR *POMFRECHDR;
56/** Pointer to a const OMF header. */
57typedef OMFRECHDR *PCOMFRECHDR;
58
59/** The max OMF record length, including the header. */
60#define OMF_MAX_RECORD_LENGTH UINT16_C(1024)
61
62/** The max OMF record payload, including CRC byte. */
63#define OMF_MAX_RECORD_PAYLOAD UINT16_C(1021)
64
65
66/** @name OMF Record Types (OMFRECHDR::bType).
67 * @{ */
68/** Record type flag indicating 32-bit record. */
69#define OMF_REC32 UINT8_C(0x01)
70/** Object file header record.
71 * Is followed by a length prefixed string */
72#define OMF_THEADR UINT8_C(0x80)
73/** Comment record.
74 * Is followed by a comment type byte and a commen class byte, thereafter comes
75 * type specific byte sequence. */
76#define OMF_COMENT UINT8_C(0x88)
77/** Local name table referenced by segment and group defintions.
78 * Array of length prefixed strings. Multi record. */
79#define OMF_LNAMES UINT8_C(0x96)
80/** 16-bit segment definition.
81 * Complicated, see TIS docs. */
82#define OMF_SEGDEF16 UINT8_C(0x98)
83/** 32-bit segment definition.
84 * Complicated, see TIS docs. */
85#define OMF_SEGDEF32 UINT8_C(0x99)
86/** Segment group definition.
87 * Starts with an LNAMES index (one or two bytes) of the group name. Followed
88 * by an array which entries consists of a 0xff byte and a segment
89 * defintion index (one or two bytes). */
90#define OMF_GRPDEF UINT8_C(0x9a)
91/** External symbol defintions.
92 * Array where each entry is a length prefixed symbol name string followed by a
93 * one or two byte type number. */
94#define OMF_EXTDEF UINT8_C(0x8c)
95/** 16-but public symbol definitions.
96 * Starts with a group index (one or two bytes) and a segment index (ditto)
97 * which indicates which group/segment the symbols belong to.
98 * Is followed by an array with entries consiting of a length prefixed symbol
99 * name string, a two byte segment offset, and a one or two byte type index. */
100#define OMF_PUBDEF16 UINT8_C(0x90)
101/** 32-but public symbol definitions.
102 * Identical to #OMF_PUBDEF16 except that the symbol offset field is four
103 * byte. */
104#define OMF_PUBDEF32 UINT8_C(0x91)
105/** 16-bit local symbol definitions.
106 * Same format as #OMF_PUBDEF16. */
107#define OMF_LPUBDEF16 UINT8_C(0xb6)
108/** 16-bit local symbol definitions.
109 * Same format as #OMF_PUBDEF32. */
110#define OMF_LPUBDEF32 UINT8_C(0xb7)
111/** Logical enumerated data record (a chunk of raw segment bits).
112 * Starts with the index of the segment it contributes to (one or two bytes) and
113 * is followed by the offset into the segment of the bytes (two bytes).
114 * After that comes the raw data bytes. */
115#define OMF_LEDATA16 UINT8_C(0xa0)
116/** Logical enumerated data record (a chunk of raw segment bits).
117 * Identical to #OMF_LEDATA16 except that is has a the segment offset field is
118 * four bytes. */
119#define OMF_LEDATA32 UINT8_C(0xa1)
120/** 16-bit fixup record.
121 * Complicated, see TIS docs. */
122#define OMF_FIXUPP16 UINT8_C(0x9c)
123/** 32-bit fixup record.
124 * Complicated, see TIS docs. */
125#define OMF_FIXUPP32 UINT8_C(0x9d)
126/** 16-bit line numbers record. */
127#define OMF_LINNUM16 UINT8_C(0x94)
128/** 32-bit line numbers record. */
129#define OMF_LINNUM32 UINT8_C(0x95)
130/** 16-bit object file end record.
131 * Duh! wrong bitfield order.
132 *
133 * Starts with a byte bitfield indicating module type: bit 0 is set if this is a
134 * main program module; bit 1 is set if this is a start address is available;
135 * bits 2 thru 6 are reserved and must be zero; bit 7 is set to indicate
136 * a non-absolute start address.
137 *
138 * When bit 1 is set what follow is: A FIXUPP byte, one or two byte frame datum,
139 * one or two byte target datum, and a 2 byte target displacement. */
140#define OMF_MODEND16 UINT8_C(0x8a)
141/** 32-bit object file end record.
142 * Identical to #OMF_MODEND16 except that is has a 4 byte target
143 * displacement field. */
144#define OMF_MODEND32 UINT8_C(0x8a)
145/** @} */
146
147/** @name OMF COMENT Type Flags
148 * @{ */
149/** Comment type: Don't remove comment when object is manipulated. */
150#define OMF_CTYP_NO_PURGE UINT8_C(0x80)
151/** Comment type: Don't include in object listing. */
152#define OMF_CTYP_NO_LIST UINT8_C(0x40)
153/** @} */
154
155/** @name OMF COMENT Classes
156 * @{ */
157/** Comment class: Dependency file.
158 * Is followed by a dword timestamp (1980 based?) and a length prefix
159 * filename string. */
160#define OMF_CCLS_DEP_FILE UINT8_C(0x88)
161/** Comment class: Link pass separator.
162 * Contains a byte with the value 01 to indicate the linker can stop pass 1
163 * processing now. */
164#define OMF_CCLS_LINK_PASS_SEP UINT8_C(0xa2)
165/** @} */
166
167
168/** @name OMF FIXUPP Locations.
169 * @{ */
170#define OMF_FIX_LOC_8BIT_LOW_BYTE UINT8_C(0) /**< FIXUP location: low byte (offset or displacement). */
171#define OMF_FIX_LOC_16BIT_OFFSET UINT8_C(1) /**< FIXUP location: 16-bit offset. */
172#define OMF_FIX_LOC_16BIT_SEGMENT UINT8_C(2) /**< FIXUP location: 16-bit segment. */
173#define OMF_FIX_LOC_1616FAR UINT8_C(3) /**< FIXUP location: 16:16 far pointer. */
174#define OMF_FIX_LOC_8BIT_HIGH_BYTE UINT8_C(4) /**< FIXUP location: high byte (offset). Not supported by MS/IBM. */
175#define OMF_FIX_LOC_16BIT_OFFSET_LDR UINT8_C(5) /**< FIXUP location: 16-bit loader resolved offset, same a 1 for linker. PharLab conflict. */
176#define OMF_FIX_LOC_RESERVED_FAR1632 UINT8_C(6) /**< FIXUP location: PharLab 16:32 far pointers, not defined by MS/IBM. */
177#define OMF_FIX_LOC_RESERVED_7 UINT8_C(7) /**< FIXUP location: Not defined. */
178#define OMF_FIX_LOC_RESERVED_8 UINT8_C(8) /**< FIXUP location: Not defined. */
179#define OMF_FIX_LOC_32BIT_OFFSET UINT8_C(9) /**< FIXUP location: 32-bit offset. */
180#define OMF_FIX_LOC_RESERVED_10 UINT8_C(10) /**< FIXUP location: Not defined. */
181#define OMF_FIX_LOC_1632FAR UINT8_C(11) /**< FIXUP location: 16:32 far pointer. */
182#define OMF_FIX_LOC_RESERVED_12 UINT8_C(12) /**< FIXUP location: Not defined. */
183#define OMF_FIX_LOC_32BIT_OFFSET_LDR UINT8_C(13) /**< FIXUP location: 32-bit loader resolved offset, same as 9 for linker. */
184/** @} */
185/** @name OMF FIXUPP Targets
186 * @{ */
187#define OMF_FIX_T_SEGDEF UINT8_C(0) /**< FIXUP target: SEGDEF index. */
188#define OMF_FIX_T_GRPDEF UINT8_C(1) /**< FIXUP target: GRPDEF index. */
189#define OMF_FIX_T_EXTDEF UINT8_C(2) /**< FIXUP target: EXTDEF index. */
190#define OMF_FIX_T_FRAME_NO UINT8_C(3) /**< FIXUP target: Explicit frame number, not supported by MS/IBM. */
191#define OMF_FIX_T_SEGDEF_NO_DISP UINT8_C(4) /**< FIXUP target: SEGDEF index only, displacement take as 0. */
192#define OMF_FIX_T_GRPDEF_NO_DISP UINT8_C(5) /**< FIXUP target: GRPDEF index only, displacement take as 0. */
193#define OMF_FIX_T_EXTDEF_NO_DISP UINT8_C(6) /**< FIXUP target: EXTDEF index only, displacement take as 0. */
194/** @} */
195/** @name OMF FIXUPP Frames
196 * @{ */
197#define OMF_FIX_F_SEGDEF UINT8_C(0) /**< FIXUP frame: SEGDEF index. */
198#define OMF_FIX_F_GRPDEF UINT8_C(1) /**< FIXUP frame: GRPDEF index. */
199#define OMF_FIX_F_EXTDEF UINT8_C(2) /**< FIXUP frame: EXTDEF index. */
200#define OMF_FIX_F_FRAME_NO UINT8_C(3) /**< FIXUP frame: Explicit frame number, not supported by any linkers. */
201#define OMF_FIX_F_LXDATA_SEG UINT8_C(4) /**< FIXUP frame: Determined from the data being fixed up. (No index field.) */
202#define OMF_FIX_F_TARGET_SEG UINT8_C(5) /**< FIXUP frame: Determined from the target. (No index field.) */
203#define OMF_FIX_F_RESERVED_6 UINT8_C(6) /**< FIXUP frame: Reserved. */
204/** @} */
205
206
207/** @} */
208#endif
209
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette