VirtualBox

source: vbox/trunk/src/VBox/VMM/testcase/Makefile.kmk@ 50653

Last change on this file since 50653 was 49731, checked in by vboxsync, 11 years ago

FPU save/restore experiment.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 16.6 KB
Line 
1# $Id: Makefile.kmk 49731 2013-11-29 18:19:02Z vboxsync $
2## @file
3# Sub-Makefile for the VMM testcases.
4#
5
6#
7# Copyright (C) 2006-2013 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
18SUB_DEPTH = ../../../..
19include $(KBUILD_PATH)/subheader.kmk
20
21#
22# Include sub-makefiles.
23#
24if 0 # Not ready for general consumption yet.
25 include $(PATH_SUB_CURRENT)/Instructions/Makefile.kmk
26endif
27
28#
29# Target lists.
30#
31PROGRAMS += tstVMStructSize tstAsmStructs
32ifdef VBOX_WITH_RAW_MODE
33 PROGRAMS += tstVMStructRC tstAsmStructsRC
34endif
35if !defined(VBOX_ONLY_EXTPACKS) \
36 && ( defined(VBOX_WITH_DTRACE_R3) \
37 || defined(VBOX_WITH_DTRACE_R0) \
38 || defined(VBOX_WITH_DTRACE_RC))
39 PROGRAMS += tstVMStructDTrace
40 INSTALLS += VMMLibDTraceStructTest
41endif
42ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
43 PROGRAMS += tstGlobalConfig tstInstrEmul
44 ifdef VBOX_WITH_RAW_MODE
45 PROGRAMS += tstVMM tstVMM-HM
46 ifneq ($(KBUILD_TARGET),win)
47 PROGRAMS += tstVMMFork
48 endif
49 endif
50 ifdef VBOX_WITH_TESTCASES
51 PROGRAMS += \
52 tstCFGM \
53 tstCompressionBenchmark \
54 tstIEMCheckMc \
55 tstMMHyperHeap \
56 tstSSM \
57 tstVMMR0CallHost-1 \
58 tstVMMR0CallHost-2 \
59 tstVMREQ \
60 tstX86-FpuSaveRestore
61 ifn1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), solaris.x86 solaris.amd64 win.amd64 ) ## TODO: Fix the code.
62 PROGRAMS += tstX86-1
63 endif
64 ifneq ($(KBUILD_TARGET),l4)
65 PROGRAMS += tstAnimate
66 endif
67 ifdef VBOX_WITH_RAW_MODE
68 PROGRAMS += tstMicro
69 SYSMODS += tstMicroRC
70 endif
71 ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
72 PROGRAMS += tstPDMAsyncCompletion
73 PROGRAMS += tstPDMAsyncCompletionStress
74 endif
75 endif # VBOX_WITH_TESTCASES
76endif # !VBOX_ONLY_EXTPACKS_USE_IMPLIBS
77
78# Where we put our temporary files (just for simplicity)
79VBOX_VMM_TESTCASE_OUT_DIR := $(PATH_TARGET)/VMM
80BLDDIRS += $(VBOX_VMM_TESTCASE_OUT_DIR)
81
82#
83# We setup two 'other' targets for executing the two structure & alignment
84# validation testcases. Perhaps a bit hackish, but extremely useful.
85#
86ifeq ($(KBUILD_TARGET),$(KBUILD_HOST))
87 ifeq ($(filter-out x86.x86 amd64.amd64 x86.amd64, $(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH)),)
88 OTHERS += \
89 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run \
90 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run
91 endif
92endif
93
94# The normal testing pass.
95TESTING += \
96 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run \
97 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run
98ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
99 TESTING += \
100 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstInstrEmul.run
101endif
102
103OTHER_CLEAN += \
104 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run \
105 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run \
106 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstInstrEmul.run \
107 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.h \
108 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o \
109 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac \
110 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac.o \
111 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac.lst \
112 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.h.dump \
113 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsRC.h \
114 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h \
115 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h
116
117#
118# Globals
119#
120VBOX_PATH_VMM_SRC = $(PATH_ROOT)/src/VBox/VMM
121
122#
123# Targets
124#
125ifdef VBOX_WITH_RAW_MODE
126 tstVMStructRC_TEMPLATE = VBoxRcExe
127 tstVMStructRC_DEFS = IN_VMM_RC IN_DIS IN_RT_RC VBOX_WITH_RAW_MODE
128 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
129 tstVMStructRC_DEFS += \
130 VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_RC \
131 VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_RC
132 endif
133 ifdef VBOX_WITH_R0_LOGGING
134 tstVMStructRC_DEFS += VBOX_WITH_R0_LOGGING
135 endif
136 ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
137 tstVMStructRC_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
138 endif
139 tstVMStructRC_SOURCES = tstVMStructRC.cpp
140 tstVMStructRC_INCS = \
141 $(VBOX_PATH_VMM_SRC)/include \
142 $(VBOX_PATH_VMM_SRC)/PATM
143endif
144
145tstVMStructSize_TEMPLATE= VBOXR3AUTOTST
146tstVMStructSize_DEFS = IN_VMM_R3 IN_DIS
147ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
148 tstVMStructSize_DEFS += \
149 VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R3 \
150 VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R3
151endif
152ifdef VBOX_WITH_RAW_MODE
153 tstVMStructSize_DEFS += VBOX_WITH_RAW_MODE
154endif
155tstVMStructSize_INCS = \
156 $(VBOX_PATH_VMM_SRC)/include \
157 $(VBOX_PATH_VMM_SRC)/PATM \
158 $(VBOX_VMM_TESTCASE_OUT_DIR)
159tstVMStructSize_SOURCES = tstVMStructSize.cpp
160ifdef VBOX_WITH_RAW_MODE
161 tstVMStructSize.cpp_DEPS= $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h
162endif
163ifdef VBOX_WITH_R0_LOGGING
164 tstVMStructSize_DEFS += VBOX_WITH_R0_LOGGING
165endif
166ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
167 tstVMStructSize_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
168endif
169
170tstAsmStructs_TEMPLATE = VBOXR3AUTOTST
171tstAsmStructs_DEFS = IN_VMM_R3 IN_DIS
172ifdef VBOX_WITH_RAW_MODE
173 tstAsmStructs_DEFS += VBOX_WITH_RAW_MODE
174endif
175ifdef VBOX_WITH_R0_LOGGING
176 tstAsmStructs_DEFS += VBOX_WITH_R0_LOGGING
177endif
178ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
179 tstAsmStructs_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
180endif
181tstAsmStructs_INCS = \
182 $(VBOX_PATH_VMM_SRC)/include \
183 $(VBOX_VMM_TESTCASE_OUT_DIR)
184tstAsmStructs_SOURCES = tstAsmStructs.cpp
185tstAsmStructs.cpp_DEPS = $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h
186
187ifdef VBOX_WITH_RAW_MODE
188 tstAsmStructsRC_TEMPLATE= VBoxRcExe
189 tstAsmStructsRC_DEFS = IN_VMM_RC IN_DIS IN_RT_RC VBOX_WITH_RAW_MODE
190 ifdef VBOX_WITH_R0_LOGGING
191 tstAsmStructsRC_DEFS += VBOX_WITH_R0_LOGGING
192 endif
193 ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
194 tstAsmStructsRC_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
195 endif
196 tstAsmStructsRC_INCS = \
197 $(VBOX_PATH_VMM_SRC)/include \
198 $(VBOX_VMM_TESTCASE_OUT_DIR)
199 tstAsmStructsRC_SOURCES = tstAsmStructs.cpp
200 tstAsmStructs.cpp_DEPS += $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsRC.h
201endif # VBOX_WITH_RAW_MODE
202
203
204tstGlobalConfig_TEMPLATE= VBOXR3TSTEXE
205tstGlobalConfig_SOURCES = tstGlobalConfig.cpp
206tstGlobalConfig_LIBS = $(LIB_RUNTIME)
207
208tstIEMCheckMc_TEMPLATE = VBOXR3TSTEXE
209tstIEMCheckMc_SOURCES = tstIEMCheckMc.cpp
210tstIEMCheckMc_LIBS = $(LIB_RUNTIME)
211ifneq ($(KBUILD_TARGET),win)
212tstIEMCheckMc_CXXFLAGS = -Wno-unused-parameter
213endif
214
215tstMMHyperHeap_TEMPLATE = VBOXR3TSTEXE
216tstMMHyperHeap_SOURCES = tstMMHyperHeap.cpp
217tstMMHyperHeap_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
218
219tstSSM_TEMPLATE = VBOXR3TSTEXE
220tstSSM_INCS = $(VBOX_PATH_VMM_SRC)/include
221tstSSM_SOURCES = tstSSM.cpp
222tstSSM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
223
224tstInstrEmul_TEMPLATE = VBOXR3EXE
225tstInstrEmul_SOURCES = tstInstrEmul.cpp ../VMMAll/EMAllA.asm
226tstInstrEmul_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
227
228tstCFGM_TEMPLATE = VBOXR3TSTEXE
229tstCFGM_SOURCES = tstCFGM.cpp
230tstCFGM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
231
232tstCompressionBenchmark_TEMPLATE = VBOXR3TSTEXE
233tstCompressionBenchmark_SOURCES = tstCompressionBenchmark.cpp
234
235tstVMMR0CallHost-1_TEMPLATE = VBOXR3TSTEXE
236tstVMMR0CallHost-1_DEFS = VMM_R0_NO_SWITCH_STACK
237tstVMMR0CallHost-1_INCS = $(VBOX_PATH_VMM_SRC)/include
238tstVMMR0CallHost-1_SOURCES = \
239 tstVMMR0CallHost-1.cpp
240tstVMMR0CallHost-1_SOURCES.amd64 = \
241 $(VBOX_PATH_VMM_SRC)/VMMR0/VMMR0JmpA-amd64.asm
242tstVMMR0CallHost-1_SOURCES.x86 = \
243 $(VBOX_PATH_VMM_SRC)/VMMR0/VMMR0JmpA-x86.asm
244
245tstVMMR0CallHost-2_EXTENDS = tstVMMR0CallHost-1
246tstVMMR0CallHost-2_DEFS = VMM_R0_SWITCH_STACK
247
248tstVMREQ_TEMPLATE = VBOXR3EXE
249tstVMREQ_SOURCES = tstVMREQ.cpp
250tstVMREQ_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
251
252tstAnimate_TEMPLATE = VBOXR3EXE
253tstAnimate_SOURCES = tstAnimate.cpp
254tstAnimate_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
255
256tstX86-1_TEMPLATE = VBOXR3TSTEXE
257tstX86-1_SOURCES = tstX86-1.cpp tstX86-1A.asm
258tstX86-1_LIBS = $(LIB_RUNTIME)
259
260tstX86-FpuSaveRestore_TEMPLATE = VBOXR3TSTEXE
261tstX86-FpuSaveRestore_SOURCES = tstX86-FpuSaveRestore.cpp tstX86-FpuSaveRestoreA.asm
262tstX86-FpuSaveRestore_LIBS = $(LIB_RUNTIME)
263
264ifdef VBOX_WITH_RAW_MODE
265
266 tstVMM_TEMPLATE = VBOXR3EXE
267 tstVMM_SOURCES = tstVMM.cpp
268 tstVMM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
269
270 tstVMM-HM_TEMPLATE = VBOXR3EXE
271 tstVMM-HM_SOURCES = tstVMM-HM.cpp
272 tstVMM-HM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
273
274 tstVMMFork_TEMPLATE = VBOXR3EXE
275 tstVMMFork_SOURCES = tstVMMFork.cpp
276 tstVMMFork_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
277
278 tstMicro_TEMPLATE = VBOXR3EXE
279 tstMicro_SOURCES = tstMicro.cpp
280 tstMicro_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
281 tstMicro_DEFS = $(if $(VBOX_WITH_RAW_MODE),VBOX_WITH_RAW_MODE,)
282
283 tstMicroRC_TEMPLATE = VBoxRc
284 tstMicroRC_SOURCES = tstMicroRC.cpp tstMicroRCA.asm
285 tstMicroRC_DEFS = $(if $(VBOX_WITH_RAW_MODE),VBOX_WITH_RAW_MODE,)
286 tstMicroRC_INCS = $(VBOX_PATH_VMM_SRC)/testcase
287 ifeq ($(VBOX_LDR_FMT32),pe)
288 tstMicroRC_LDFLAGS = -Entry:tstMicroRC
289 endif
290 tstMicroRC_SYSSUFF = .gc
291 tstMicroRC_LIBS = \
292 $(PATH_STAGE_LIB)/DisasmRC$(VBOX_SUFF_LIB) \
293 $(PATH_STAGE_LIB)/RuntimeRC$(VBOX_SUFF_LIB)
294 ifeq ($(filter-out pe lx,$(VBOX_LDR_FMT32)),)
295 tstMicroRC_LIBS += \
296 $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
297 $(LIB_VMMGC)
298 endif
299 tstMicroRC_SOURCES.win = tstMicroRC.def
300
301endif # VBOX_WITH_RAW_MODE
302
303ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
304 tstPDMAsyncCompletion_TEMPLATE = VBOXR3EXE
305 tstPDMAsyncCompletion_INCS = $(VBOX_PATH_VMM_SRC)/include
306 tstPDMAsyncCompletion_SOURCES = tstPDMAsyncCompletion.cpp
307 tstPDMAsyncCompletion_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
308
309 tstPDMAsyncCompletionStress_TEMPLATE = VBOXR3EXE
310 tstPDMAsyncCompletionStress_INCS = $(VBOX_PATH_VMM_SRC)/include
311 tstPDMAsyncCompletionStress_SOURCES = tstPDMAsyncCompletionStress.cpp
312 tstPDMAsyncCompletionStress_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
313endif
314
315
316#
317# Generate VM structure tests.
318#
319if !defined(VBOX_ONLY_EXTPACKS) \
320 && ( defined(VBOX_WITH_DTRACE_R3) \
321 || defined(VBOX_WITH_DTRACE_R0) \
322 || defined(VBOX_WITH_DTRACE_RC))
323 tstVMStructDTrace_TEMPLATE= VBOXR3AUTOTST
324 tstVMStructDTrace_DEFS = IN_VMM_R3 IN_DIS
325 ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
326 tstVMStructDTrace_DEFS += \
327 VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R3 \
328 VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R3
329 endif
330 ifdef VBOX_WITH_RAW_MODE
331 tstVMStructDTrace_DEFS += VBOX_WITH_RAW_MODE
332 endif
333 tstVMStructDTrace_INCS = \
334 $(VBOX_PATH_VMM_SRC)/include \
335 $(VBOX_PATH_VMM_SRC)/PATM \
336 $(VBOX_VMM_TESTCASE_OUT_DIR)
337 tstVMStructDTrace_SOURCES = tstVMStructDTrace.cpp
338 ifdef VBOX_WITH_R0_LOGGING
339 tstVMStructDTrace_DEFS += VBOX_WITH_R0_LOGGING
340 endif
341 ifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
342 tstVMStructDTrace_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
343 endif
344
345
346 VMMLibDTraceStructTest_INST = $(VBOX_INST_DTRACE_TST)$(KBUILD_TARGET_ARCH)/
347 VMMLibDTraceStructTest_SOURCES = \
348 $(tstVMStructDTrace_0_OUTDIR)/vbox-vm-struct-test.d
349
350 $$(tstVMStructDTrace_0_OUTDIR)/vbox-vm-struct-test.d: \
351 $$(tstVMStructDTrace_1_STAGE_TARGET) | $$(dir $$@)
352 $(QUIET)$(RM) -f $@
353 $< > $@
354
355endif
356
357
358include $(FILE_KBUILD_SUB_FOOTER)
359
360
361#
362# Run rule for tstInstrEmul.
363#
364$(VBOX_VMM_TESTCASE_OUT_DIR)/tstInstrEmul.run: $$(tstInstrEmul_1_STAGE_TARGET) | $$(dir $$@)
365 $(QUIET)$(RM) -f $@
366 $(QUIET)$(REDIRECT) -E 'VBOX_LOG_FLAGS=disabled' -E 'VBOX_LOG_DEST=nofile' \
367 $(if $(eq $(KBUILD_TARGET),darwin), -E 'DYLD_FALLBACK_LIBRARY_PATH=$(dir $(LIB_RUNTIME))') \
368 -- \
369 $(tstInstrEmul_1_STAGE_TARGET)
370 $(QUIET)$(APPEND) "$@" "done"
371
372
373#
374# Some handcrafted support targets for tstAsmStructs.
375#
376
377ifeq ($(KBUILD_HOST),win)
378 ifndef TOOL_MINGW32
379 include $(KBUILD_PATH)/tools/MINGW32.kmk
380 endif
381 VBOX_NM ?= $(PATH_TOOL_MINGW32)/bin/nm.exe -p
382else
383 VBOX_NM ?= nm -p
384endif
385
386MY_ASA_ASM_STUFF = \
387 $(addprefix -D, \
388 $(DEFS) \
389 $(DEFS.$(KBUILD_TYPE)) \
390 $(DEFS.$(KBUILD_TARGET)) \
391 IN_RING3 $(ARCH_BITS_DEFS) \
392 $(DEFS.$(KBUILD_TARGET_ARCH)) \
393 $(DEFS.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) \
394 $(if $(VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI),VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI,) \
395 ) \
396 -f $(if $(eq $(KBUILD_TARGET),darwin),macho,elf) \
397 $(foreach inc,$(INCS) $(VBOX_PATH_VMM_SRC)/testcase $(VBOX_PATH_VMM_SRC)/include $(VBOX_VMM_TESTCASE_OUT_DIR)\
398 ,-I$(inc)/)
399
400# 1a. make a header file which makes all the structures+members globals.
401$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac: \
402 $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm.asm \
403 $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm-lst.sed \
404 $(DEPTH)/include/iprt/asmdefs.mac \
405 $(DEPTH)/include/VBox/vmm/cpum.mac \
406 $(DEPTH)/include/VBox/vmm/vm.mac \
407 $(DEPTH)/include/VBox/sup.mac \
408 $(DEPTH)/include/iprt/x86.mac \
409 $(VBOX_PATH_VMM_SRC)/include/CPUMInternal.mac \
410 $(VBOX_PATH_VMM_SRC)/include/TRPMInternal.mac \
411 $(VBOX_PATH_VMM_SRC)/include/HMInternal.mac \
412 $(VBOX_PATH_VMM_SRC)/include/VMMInternal.mac \
413 $(VBOX_PATH_VMM_SRC)/testcase/Makefile.kmk \
414 $(PATH_ROOT)/Config.kmk $(LOCALCFG) $(AUTOCFG) \
415 | $$(dir $$@)
416 $(call MSG_GENERATE,tstVMStructSize,$@,$<)
417ifndef DONT_USE_YASM
418 $(QUIET)$(TOOL_YASM_AS) $(MY_ASA_ASM_STUFF) -o $@.o -l $@.lst $<
419 $(SED) -f $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm-lst.sed --output $@ $@.lst
420else
421 $(QUIET)$(TOOL_NASM_AS) -g $(MY_ASA_ASM_STUFF) -o $@.o -l $@.lst $<
422 $(VBOX_NM) $@.o | $(SED) \
423 -e '/[0-9a-fA-F][0-9a-fA-F]* [^a] /d' \
424 -e 's/[0-9a-fA-F][0-9a-fA-F]* a \([^ ]*\)/global \1/' \
425 > $@
426endif
427
428# 1b. make an elf/macho object containing the offsets.
429$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o: \
430 $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm.asm \
431 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac \
432 $(DEPTH)/include/iprt/asmdefs.mac \
433 $(DEPTH)/include/VBox/vmm/cpum.mac \
434 $(DEPTH)/include/VBox/vmm/hm_vmx.mac \
435 $(DEPTH)/include/VBox/vmm/stam.mac \
436 $(DEPTH)/include/VBox/vmm/trpm.mac \
437 $(DEPTH)/include/VBox/vmm/vm.mac \
438 $(DEPTH)/include/VBox/sup.mac \
439 $(DEPTH)/include/iprt/x86.mac \
440 $(VBOX_PATH_VMM_SRC)/include/CPUMInternal.mac \
441 $(VBOX_PATH_VMM_SRC)/include/HMInternal.mac \
442 $(VBOX_PATH_VMM_SRC)/include/VMMInternal.mac \
443 $(VBOX_PATH_VMM_SRC)/include/VMMSwitcher.mac \
444 $(VBOX_PATH_VMM_SRC)/testcase/Makefile.kmk \
445 | $$(dir $$@)
446 $(call MSG_COMPILE,tstAsmStructsasm,$<,$@,AS)
447ifndef DONT_USE_YASM
448 $(QUIET)$(TOOL_YASM_AS) $(MY_ASA_ASM_STUFF) -DDO_GLOBALS -o $@ $<
449else
450 $(QUIET)$(TOOL_NASM_AS) $(MY_ASA_ASM_STUFF) -DDO_GLOBALS -o $@ $<
451endif
452
453# 2. use nm and sed to transform this into the header we want.
454$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h: $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o
455 $(call MSG_GENERATE,tstVMStructSize,$@,$<)
456 $(QUIET)$(RM) -f $@ $@.dump $@.tmp
457 $(QUIET)$(REDIRECT) -wo $@.dump -- $(VBOX_NM) $<
458 $(QUIET)$(SED) \
459 -e '/STAMPROFILEADV/d' \
460 \
461 -e '/00[0-9a-fA-F]* [aA] [^_.]*\./!d' \
462 -e 's/\(00[0-9a-fA-F]*\) [aA] \([^.]*\)\.\(.*$$\)/ CHECK_OFF(\2, 0x0\1, \3);/' \
463 --output $@.tmp $@.dump
464 $(QUIET)$(SED) \
465 -e '/VM_size$$/d' \
466 -e '/VMCPU_size$$/d' \
467 -e '/VMMCPU_size$$/d' \
468 -e '/SUPDRVTRACERUSRCTX32_size$$/d' \
469 \
470 -e '/00[0-9a-fA-F]* [aA] [^_.]*_size$$/!d' \
471 -e 's/\(00[0-9a-fA-F]*\) [aA] \([^_.]*\)_size/ CHECK_SIZE(\2, 0x0\1);/' \
472 --append $@.tmp $@.dump
473 $(QUIET)$(MV) -f $@.tmp $@
474 $(QUIET)$(RM) -f $@.dump
475
476ifdef VBOX_WITH_RAW_MODE
477# 3. transform the HC header into a RC one by omitting some HC only structures.
478$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsRC.h: $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h
479 $(call MSG_GENERATE,tstVMStructSize,$@,$<)
480 $(QUIET)$(SED) -e '/VMMSWITCHERDEF/d' --output $@ $^
481endif
482
483# 4. run it.
484$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run: \
485 $$(tstAsmStructs_1_STAGE_TARGET) \
486 $(if-expr defined(VBOX_WITH_RAW_MODE),$$(tstAsmStructsRC_1_STAGE_TARGET),)
487 $(QUIET)$(RM) -f $@
488 $(tstAsmStructs_1_STAGE_TARGET)
489ifdef VBOX_WITH_RAW_MODE
490 $(tstAsmStructsRC_1_STAGE_TARGET)
491endif
492 $(QUIET)$(APPEND) "$@" "done"
493
494
495
496#
497# Run rule for tstVMStructSize.
498#
499
500ifdef VBOX_WITH_RAW_MODE
501# 1. Manually dump selected structures and members.
502$(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h: $$(tstVMStructRC_1_STAGE_TARGET) | $$(dir $$@)
503 $(call MSG_GENERATE,tstVMStructSize,$@)
504 $(QUIET)$(REDIRECT) -wo $@ -- $<
505endif # VBOX_WITH_RAW_MODE
506
507# 2. run it.
508$(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run: $$(tstVMStructSize_1_STAGE_TARGET) | $$(dir $$@)
509 $(QUIET)$(RM) -f $@
510 $<
511 $(QUIET)$(APPEND) "$@" "done"
512
513# alias for the two struct tests.
514run-struct-tests: $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run
515
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use