VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-common.mac@ 78210

Last change on this file since 78210 was 76553, checked in by vboxsync, 6 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.4 KB
Line 
1; $Id: bs3-first-common.mac 76553 2019-01-01 01:45:53Z vboxsync $
2;; @file
3; BS3Kit - First Object, common stuff.
4;
5
6;
7; Copyright (C) 2007-2019 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26
27
28%define BS3_BEGIN_TEXT16_WITHOUT_GROUP
29%define BS3_BEGIN_DATA16_WITHOUT_GROUP
30%define BS3_BEGIN_RMTEXT16_WITHOUT_GROUP
31%define BS3_BEGIN_X0TEXT16_WITHOUT_GROUP
32%define BS3_BEGIN_X1TEXT16_WITHOUT_GROUP
33
34%include "bs3kit.mac"
35
36
37;
38;
39; Define all the segments and their grouping, just to get that right once at
40; the start of everything.
41;
42;
43
44;
45; 16-bit text
46;
47%ifndef BS3_IS_DOS_EXE
48BS3_BEGIN_TEXT16
49%else
50section BEGTEXT align=2 CLASS=BS3CLASS16CODE PUBLIC USE16
51BS3_BEGIN_TEXT16
52section BEGTEXT
53%endif
54BS3_GLOBAL_DATA Bs3Text16_StartOfSegment, 0
55
56; Entry point with eye-catcher.
57GLOBALNAME start
58global __ImageBase ; for MS compiler - must be first!
59__ImageBase:
60global ___begtext ; for DOS EXEs (causes harmless duplicate symbol warning)
61___begtext:
62%ifndef BS3_IS_DOS_EXE
63 jmp .after_eye_catcher
64%else
65 int3
66 jmp __ImageBase
67%endif
68 db 10,13,'eye-catcher: BS3TEXT16',10,13
69BS3_BEGIN_TEXT16
70.after_eye_catcher:
71
72section _TEXT align=2 CLASS=BS3CLASS16CODE PUBLIC USE16
73section BS3TEXT16_NEARSTUBS align=1 CLASS=BS3CLASS16CODE PUBLIC USE16
74section BS3TEXT16_FARSTUBS align=1 CLASS=BS3CLASS16CODE PUBLIC USE16
75section BS3TEXT16_END align=1 CLASS=BS3CLASS16CODE PUBLIC USE16
76
77BS3_GLOBAL_DATA Bs3Text16_EndOfSegment, 0
78
79%ifndef BS3_IS_DOS_EXE
80GROUP CGROUP16 BS3TEXT16 _TEXT BS3TEXT16_NEARSTUBS BS3TEXT16_FARSTUBS BS3TEXT16_END
81%else
82GROUP CGROUP16 BEGTEXT BS3TEXT16 _TEXT BS3TEXT16_NEARSTUBS BS3TEXT16_FARSTUBS BS3TEXT16_END
83%endif
84
85
86;
87; 16-bit data
88;
89BS3_BEGIN_DATA16
90BS3_GLOBAL_DATA Bs3Data16_StartOfSegment, 0
91 db 10,13,'eye-catcher: BS3DATA16',10,13
92
93ALIGNDATA(16)
94BS3_GLOBAL_DATA Bs3Data16_Size, 4
95 dd BS3_DATA_NM(Bs3Data16_EndOfSegment) wrt BS3KIT_GRPNM_DATA16
96BS3_GLOBAL_DATA Bs3Data16Thru64Text32And64_TotalSize, 4
97 dd BS3_DATA_NM(Bs3Data64_EndOfSegment) wrt BS3KIT_GRPNM_DATA16
98BS3_GLOBAL_DATA Bs3TotalImageSize, 4
99 dd BS3_DATA_NM(Bs3Text64_EndOfSegment) wrt CGROUP16 ; ASSUMES TEXT64 is last.
100
101BS3_GLOBAL_DATA Bs3Text16_Size, 2
102 dw BS3_DATA_NM(Bs3Text16_EndOfSegment) wrt CGROUP16
103BS3_GLOBAL_DATA Bs3RmText16_Size, 2
104 dw BS3_DATA_NM(Bs3RmText16_EndOfSegment) wrt BS3GROUPRMTEXT16
105BS3_GLOBAL_DATA Bs3X0Text16_Size, 2
106 dw BS3_DATA_NM(Bs3X0Text16_EndOfSegment) wrt BS3GROUPX0TEXT16
107BS3_GLOBAL_DATA Bs3X1Text16_Size, 2
108 dw BS3_DATA_NM(Bs3X1Text16_EndOfSegment) wrt BS3GROUPX1TEXT16
109
110BS3_GLOBAL_DATA Bs3RmText16_FlatAddr, 4
111 dd BS3_DATA_NM(Bs3RmText16_StartOfSegment) wrt BS3FLAT
112BS3_GLOBAL_DATA Bs3X0Text16_FlatAddr, 4
113 dd BS3_DATA_NM(Bs3X0Text16_StartOfSegment) wrt BS3FLAT
114BS3_GLOBAL_DATA Bs3X1Text16_FlatAddr, 4
115 dd BS3_DATA_NM(Bs3X1Text16_StartOfSegment) wrt BS3FLAT
116
117section BS3DATA16CONST align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
118section BS3DATA16CONST2 align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
119section BS3DATA16_DATA align=2 CLASS=BS3KIT_CLASS_DATA16 PUBLIC USE16
120%ifdef BS3_IS_DOS_EXE
121section _NULL align=16 CLASS=BEGDATA PUBLIC USE16
122section _AFTERNULL align=2 CLASS=BEGDATA PUBLIC USE16
123%endif
124section CONST align=2 CLASS=DATA PUBLIC USE16
125section CONST2 align=2 CLASS=DATA PUBLIC USE16
126section _DATA align=2 CLASS=DATA PUBLIC USE16
127%ifdef BS3_IS_DOS_EXE
128section XIB align=1 CLASS=DATA PUBLIC USE16
129section XI align=1 CLASS=DATA PUBLIC USE16
130section XIE align=1 CLASS=DATA PUBLIC USE16
131section YIB align=1 CLASS=DATA PUBLIC USE16
132section YI align=1 CLASS=DATA PUBLIC USE16
133section YIE align=1 CLASS=DATA PUBLIC USE16
134%endif
135section STRINGS align=2 CLASS=DATA PUBLIC USE16
136section DATA align=2 CLASS=DATA PUBLIC USE16
137section _BSS align=2 CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16
138section BSS align=2 CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16
139%ifdef BS3_IS_DOS_EXE
140section STACK align=16 CLASS=STACK STACK USE16
141%endif
142section BS3DATA16_END align=2 CLASS=BS3KIT_CLASS_BSS16 PUBLIC USE16
143
144BS3_GLOBAL_DATA Bs3Data16_EndOfSegment, 0
145
146%ifndef BS3_IS_DOS_EXE
147GROUP BS3KIT_GRPNM_DATA16 BS3DATA16 BS3DATA16_DATA _DATA DATA BS3DATA16CONST CONST BS3DATA16CONST2 CONST2 STRINGS _BSS BSS BS3DATA16_END
148%else
149GROUP BS3KIT_GRPNM_DATA16 \
150 _NULL _AFTERNULL \
151 CONST BS3DATA16CONST CONST2 BS3DATA16CONST2 _DATA XIB XI XIE YIB YI YIE STRINGS DATA BS3DATA16 BS3DATA16_DATA \
152 _BSS BSS BS3DATA16_END \
153 STACK
154%endif
155
156;
157; 16-bit real-mode text
158;
159section BS3RMTEXT16_START align=16 CLASS=BS3CLASS16RMCODE PUBLIC USE16
160BS3_GLOBAL_DATA Bs3RmText16_StartOfSegment, 0
161 ;db 10,13,'eye-catcher: BS3RMTEXT16',10,13 - messes up switch in C code. Alt. is fConvertFixupp VBoxBs3ObjConverter.cpp.
162BS3_BEGIN_RMTEXT16
163section BS3RMTEXT16_END align=1 CLASS=BS3CLASS16RMCODE PUBLIC USE16
164BS3_GLOBAL_DATA Bs3RmText16_EndOfSegment, 0
165GROUP BS3GROUPRMTEXT16 BS3RMTEXT16_START BS3RMTEXT16 BS3RMTEXT16_END
166
167
168;
169; 16-bit extra text segment #0.
170;
171section BS3X0TEXT16_START align=16 CLASS=BS3CLASS16X0CODE PUBLIC USE16
172BS3_GLOBAL_DATA Bs3X0Text16_StartOfSegment, 0
173 ;db 10,13,'eye-catcher: BS3X0TEXT16',10,13 - messes up switch in C code. Alt. is fConvertFixupp VBoxBs3ObjConverter.cpp.
174BS3_BEGIN_X0TEXT16 4
175section BS3X0TEXT16_END align=16 CLASS=BS3CLASS16X0CODE PUBLIC USE16
176BS3_GLOBAL_DATA Bs3X0Text16_EndOfSegment, 0
177GROUP BS3GROUPX0TEXT16 BS3X0TEXT16_START BS3X0TEXT16 BS3X0TEXT16_END
178
179
180;
181; 16-bit extra text segment #1.
182;
183section BS3X1TEXT16_START align=16 CLASS=BS3CLASS16X1CODE PUBLIC USE16
184BS3_GLOBAL_DATA Bs3X1Text16_StartOfSegment, 0
185 ;db 10,13,'eye-catcher: BS3X1TEXT16',10,13 - messes up switch in C code. Alt. is fConvertFixupp VBoxBs3ObjConverter.cpp.
186BS3_BEGIN_X1TEXT16 4
187section BS3X1TEXT16_END align=16 CLASS=BS3CLASS16X1CODE PUBLIC USE16
188BS3_GLOBAL_DATA Bs3X1Text16_EndOfSegment, 0
189GROUP BS3GROUPX1TEXT16 BS3X1TEXT16_START BS3X1TEXT16 BS3X1TEXT16_END
190
191
192;
193; 32-bit text
194;
195BS3_BEGIN_TEXT32
196BS3_GLOBAL_DATA Bs3Text32_StartOfSegment, 0
197 db 10,13,'eye-catcher: BS3TEXT32',10,13
198section BS3TEXT32_END align=1 CLASS=BS3CLASS32CODE PUBLIC USE32 FLAT
199BS3_GLOBAL_DATA Bs3Text32_EndOfSegment, 0
200
201
202;
203; This is a hack to separate the 32-bit and 64-bit text segments when linking,
204; such that they don't share the same base frame because they're both assigned
205; to the AUTO group by the linker.
206;
207section BS3SEPARATE32AND64BITCODE align=16 CLASS=BS3CLASSSEPARATE32AND64BITCODE PUBLIC USE16
208BS3_GLOBAL_DATA Bs3Separate32And64BitCode_StartOfSegment, 0
209 db 10,13,'eye-catcher: 32-64 wedge',10,13
210section BS3SEPARATE32AND64BITCODE_END align=16 CLASS=BS3CLASSSEPARATE32AND64BITCODE PUBLIC USE16
211BS3_GLOBAL_DATA Bs3Separate32And64BitCode_EndOfSegment, 0
212GROUP BS3SEPARATE32AND64BITCODEGROUP BS3SEPARATE32AND64BITCODE BS3SEPARATE32AND64BITCODE_END
213
214
215;
216; 64-bit text
217;
218BS3_BEGIN_TEXT64
219BS3_GLOBAL_DATA Bs3Text64_StartOfSegment, 0
220 db 10,13,'eye-catcher: BS3TEXT64',10,13
221section BS3TEXT64_END align=1 CLASS=BS3CLASS64CODE PUBLIC USE32 FLAT
222BS3_GLOBAL_DATA Bs3Text64_EndOfSegment, 0
223
224
225;
226; FAR_DATA segment in DOS EXEs should be near the other FAR_DATA class segments.
227;
228%ifdef BS3_IS_DOS_EXE
229section FAR_DATA align=1 CLASS=FAR_DATA PUBLIC USE16
230%endif
231
232;
233; 32-bit data
234;
235BS3_BEGIN_DATA32
236BS3_GLOBAL_DATA Bs3Data32_StartOfSegment, 0
237 db 10,13,'eye-catcher: BS3DATA32',10,13
238section BS3DATA32CONST align=16 CLASS=FAR_DATA PUBLIC USE32
239section BS3DATA32CONST2 align=16 CLASS=FAR_DATA PUBLIC USE32
240section BS3DATA32_DATA align=16 CLASS=FAR_DATA PUBLIC USE32
241section BS3DATA32_BSS align=16 CLASS=FAR_DATA PUBLIC USE32
242section BS3DATA32_END align=16 CLASS=FAR_DATA PUBLIC USE32
243BS3_GLOBAL_DATA Bs3Data32_EndOfSegment, 0
244GROUP BS3DATA32_GROUP BS3DATA32 BS3DATA32_DATA BS3DATA32CONST BS3DATA32CONST2 BS3DATA32_BSS BS3DATA32_END
245
246;
247; 64-bit data
248;
249BS3_BEGIN_DATA64
250BS3_GLOBAL_DATA Bs3Data64_StartOfSegment, 0
251 db 10,13,'eye-catcher: BS3DATA64',10,13
252section BS3DATA64CONST align=16 CLASS=FAR_DATA PUBLIC USE32
253section BS3DATA64_BSS align=16 CLASS=FAR_DATA PUBLIC USE32
254section BS3DATA64_END align=16 CLASS=FAR_DATA PUBLIC USE32
255BS3_GLOBAL_DATA Bs3Data64_EndOfSegment, 0
256GROUP BS3DATA64_GROUP BS3DATA64 BS3DATA64CONST BS3DATA64_BSS BS3DATA64_END
257
258
259;
260; 16-bit accessible system data.
261; No need to do anything here.
262;
263BS3_BEGIN_SYSTEM16
264
265
266;
267; Switch back to the 16-bit code segment and the startup code.
268;
269BS3_BEGIN_TEXT16
270BS3_GLOBAL_NAME_EX Bs3KitEntryPoint, function, 0
271
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