VirtualBox

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

Last change on this file since 96732 was 96732, checked in by vboxsync, 2 years ago

VMM/testcase/tstIEMAImpl: Implement basic cvttss2si/cvtss2si testcases, ​bugref:9898

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 27.7 KB
Line 
1# $Id: Makefile.kmk 96732 2022-09-14 09:21:31Z vboxsync $
2## @file
3# Sub-Makefile for the VMM testcases.
4#
5
6#
7# Copyright (C) 2006-2022 Oracle and/or its affiliates.
8#
9# This file is part of VirtualBox base platform packages, as
10# available from https://www.virtualbox.org.
11#
12# This program is free software; you can redistribute it and/or
13# modify it under the terms of the GNU General Public License
14# as published by the Free Software Foundation, in version 3 of the
15# License.
16#
17# This program is distributed in the hope that it will be useful, but
18# WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20# General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, see <https://www.gnu.org/licenses>.
24#
25# SPDX-License-Identifier: GPL-3.0-only
26#
27
28SUB_DEPTH = ../../../..
29include $(KBUILD_PATH)/subheader.kmk
30
31#
32# Include sub-makefiles.
33#
34if 0 # Not ready for general consumption yet.
35 include $(PATH_SUB_CURRENT)/Instructions/Makefile.kmk
36endif
37
38#
39# Target lists.
40#
41PROGRAMS += tstVMStructSize tstAsmStructs
42ifdef VBOX_WITH_RAW_MODE
43 PROGRAMS += tstVMStructRC tstAsmStructsRC
44endif
45if !defined(VBOX_ONLY_EXTPACKS) \
46 && ( defined(VBOX_WITH_DTRACE_R3) \
47 || defined(VBOX_WITH_DTRACE_R0) \
48 || defined(VBOX_WITH_DTRACE_RC))
49PROGRAMS += tstVMStructDTrace
50INSTALLS += VMMLibDTraceStructTest
51endif
52ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
53 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
54PROGRAMS += tstGlobalConfigHardened
55DLL += tstGlobalConfig
56 else
57PROGRAMS += tstGlobalConfig
58 endif
59
60 ifdef VBOX_WITH_RAW_MODE
61 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
62PROGRAMS += tstVMMHardened
63DLLS += tstVMM
64 else
65PROGRAMS += tstVMM tstVMM-HM
66 endif
67 ifneq ($(KBUILD_TARGET),win)
68PROGRAMS += tstVMMFork
69 endif
70 endif
71 ifdef VBOX_WITH_TESTCASES
72 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
73PROGRAMS += tstCFGMHardened tstVMREQHardened tstAnimateHardened
74DLLS += tstCFGM tstVMREQ tstAnimate
75 else
76PROGRAMS += tstCFGM tstVMREQ tstAnimate
77 endif
78PROGRAMS += \
79 tstCompressionBenchmark \
80 tstIEMCheckMc \
81 tstIEMAImpl \
82 tstPDMQueue \
83 tstSSM
84PROGRAMS.amd64 += tstIEMAImplAsm
85
86 if1of ($(KBUILD_TARGET_ARCH),amd64 x86)
87PROGRAMS += \
88 tstVMMR0CallHost-1 \
89 tstX86-FpuSaveRestore
90 ifn1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), solaris.x86 solaris.amd64 win.amd64 ) ## TODO: Fix the code.
91PROGRAMS += tstX86-1
92 endif
93 endif
94 ifdef VBOX_WITH_RAW_MODE
95 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
96PROGRAMS += tstMicroHardened
97DLLS += tstMicro
98 else
99PROGRAMS += tstMicro
100 endif
101SYSMODS += tstMicroRC
102 endif
103 ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
104 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
105PROGRAMS += tstPDMAsyncCompletionHardened tstPDMAsyncCompletionStressHardened
106DLLS += tstPDMAsyncCompletion tstPDMAsyncCompletionStress
107 else
108PROGRAMS += tstPDMAsyncCompletion tstPDMAsyncCompletionStress
109 endif
110 endif
111 endif # VBOX_WITH_TESTCASES
112endif # !VBOX_ONLY_EXTPACKS_USE_IMPLIBS
113
114# Where we put our temporary files (just for simplicity)
115VBOX_VMM_TESTCASE_OUT_DIR := $(PATH_TARGET)/VMM
116BLDDIRS += $(VBOX_VMM_TESTCASE_OUT_DIR)
117
118#
119# We setup two 'other' targets for executing the two structure & alignment
120# validation testcases. Perhaps a bit hackish, but extremely useful.
121#
122ifeq ($(KBUILD_TARGET),$(KBUILD_HOST))
123 ifeq ($(filter-out x86.x86 amd64.amd64 x86.amd64, $(KBUILD_TARGET_ARCH).$(KBUILD_HOST_ARCH)),)
124OTHERS += \
125 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run \
126 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run
127 endif
128endif
129
130# The normal testing pass.
131TESTING += \
132 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run \
133 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run
134
135OTHER_CLEAN += \
136 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run \
137 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run \
138 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o \
139 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o.dep \
140 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac \
141 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac.o \
142 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac.lst \
143 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsRC.h \
144 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h \
145 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h
146
147#
148# Globals
149#
150VBOX_PATH_VMM_SRC = $(PATH_ROOT)/src/VBox/VMM
151
152#
153# Targets
154#
155ifdef VBOX_WITH_RAW_MODE
156tstVMStructRC_TEMPLATE = VBoxRcExe
157tstVMStructRC_DEFS = VBOX_IN_VMM IN_VMM_RC IN_DIS IN_RT_RC VBOX_WITH_RAW_MODE $(VMM_COMMON_DEFS)
158 ifdef VBOX_WITH_R0_LOGGING
159tstVMStructRC_DEFS += VBOX_WITH_R0_LOGGING
160 endif
161tstVMStructRC_SOURCES = tstVMStructRC.cpp
162tstVMStructRC_INCS = \
163 $(VBOX_PATH_VMM_SRC)/include \
164 $(VBOX_PATH_VMM_SRC)/PATM
165endif
166
167tstVMStructSize_TEMPLATE= VBOXR3AUTOTST
168ifneq ($(KBUILD_TARGET),win)
169tstVMStructSize_CXXFLAGS += $(VBOX_GCC_Wno-invalid-offsetof)
170endif
171tstVMStructSize_DEFS = VBOX_IN_VMM IN_VMM_R3 IN_DIS $(VMM_COMMON_DEFS)
172ifdef VBOX_WITH_RAW_MODE
173tstVMStructSize_DEFS += VBOX_WITH_RAW_MODE
174endif
175tstVMStructSize_INCS = \
176 $(VBOX_PATH_VMM_SRC)/include \
177 $(VBOX_PATH_VMM_SRC)/PATM \
178 $(VBOX_VMM_TESTCASE_OUT_DIR)
179tstVMStructSize_SOURCES = tstVMStructSize.cpp
180ifdef VBOX_WITH_RAW_MODE
181tstVMStructSize.cpp_DEPS= $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h
182endif
183ifdef VBOX_WITH_R0_LOGGING
184tstVMStructSize_DEFS += VBOX_WITH_R0_LOGGING
185endif
186
187tstAsmStructs_TEMPLATE = VBOXR3AUTOTST
188ifneq ($(KBUILD_TARGET),win)
189tstAsmStructSize_CXXFLAGS += $(VBOX_GCC_Wno-invalid-offsetof)
190endif
191tstAsmStructs_DEFS = VBOX_IN_VMM IN_VMM_R3 IN_DIS $(VMM_COMMON_DEFS)
192ifdef VBOX_WITH_RAW_MODE
193tstAsmStructs_DEFS += VBOX_WITH_RAW_MODE
194endif
195ifdef VBOX_WITH_R0_LOGGING
196tstAsmStructs_DEFS += VBOX_WITH_R0_LOGGING
197endif
198tstAsmStructs_INCS = \
199 $(VBOX_PATH_VMM_SRC)/include \
200 $(VBOX_VMM_TESTCASE_OUT_DIR)
201tstAsmStructs_SOURCES = tstAsmStructs.cpp
202tstAsmStructs.cpp_DEPS = $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h
203
204ifdef VBOX_WITH_RAW_MODE
205tstAsmStructsRC_TEMPLATE= VBoxRcExe
206tstAsmStructsRC_DEFS = VBOX_IN_VMM IN_VMM_RC IN_DIS IN_RT_RC VBOX_WITH_RAW_MODE $(VMM_COMMON_DEFS)
207 ifdef VBOX_WITH_R0_LOGGING
208tstAsmStructsRC_DEFS += VBOX_WITH_R0_LOGGING
209 endif
210tstAsmStructsRC_INCS = \
211 $(VBOX_PATH_VMM_SRC)/include \
212 $(VBOX_VMM_TESTCASE_OUT_DIR)
213tstAsmStructsRC_SOURCES = tstAsmStructs.cpp
214tstAsmStructs.cpp_DEPS += $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsRC.h
215endif # VBOX_WITH_RAW_MODE
216
217
218#
219# Global config tool.
220#
221if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
222tstGlobalConfigHardened_TEMPLATE = VBoxR3HardenedTstExe
223tstGlobalConfigHardened_NAME = tstGlobalConfig
224 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
225tstGlobalConfigHardened_DEFS = PROGRAM_NAME_STR="tstGlobalConfig"
226 else
227tstGlobalConfigHardened_DEFS = PROGRAM_NAME_STR=\"tstGlobalConfig\"
228 endif
229tstGlobalConfigHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplateTestcase.cpp
230tstGlobalConfig_TEMPLATE = VBoxR3HardenedTstDll
231else
232tstGlobalConfig_TEMPLATE = VBOXR3TSTEXE
233endif
234tstGlobalConfig_SOURCES = tstGlobalConfig.cpp
235tstGlobalConfig_LIBS = $(LIB_RUNTIME)
236
237
238#
239# Testcase for checking the C (IEMAllAImplC.cpp) and assembly (IEMAllAImpl.asm)
240# instruction emulation helpers.
241#
242# Note! The IN_TSTVMSTRUCT define is for avoiding IEMInstructionStatisticsTmpl.h.
243#
244TSTIEMAIMPL_TEST_DATA_DEPS = \
245 tstIEMAImplDataSseBinary-addps_u128.bin \
246 tstIEMAImplDataSseBinary-mulps_u128.bin \
247 tstIEMAImplDataSseBinary-subps_u128.bin \
248 tstIEMAImplDataSseBinary-minps_u128.bin \
249 tstIEMAImplDataSseBinary-divps_u128.bin \
250 tstIEMAImplDataSseBinary-maxps_u128.bin \
251 tstIEMAImplDataSseBinary-haddps_u128.bin \
252 tstIEMAImplDataSseBinary-hsubps_u128.bin \
253 tstIEMAImplDataSseBinary-sqrtps_u128.bin \
254 tstIEMAImplDataSseBinary-addsubps_u128.bin \
255 tstIEMAImplDataSseBinary-cvtps2pd_u128.bin \
256 tstIEMAImplDataSseBinary-addpd_u128.bin \
257 tstIEMAImplDataSseBinary-mulpd_u128.bin \
258 tstIEMAImplDataSseBinary-subpd_u128.bin \
259 tstIEMAImplDataSseBinary-minpd_u128.bin \
260 tstIEMAImplDataSseBinary-divpd_u128.bin \
261 tstIEMAImplDataSseBinary-maxpd_u128.bin \
262 tstIEMAImplDataSseBinary-haddpd_u128.bin \
263 tstIEMAImplDataSseBinary-hsubpd_u128.bin \
264 tstIEMAImplDataSseBinary-sqrtpd_u128.bin \
265 tstIEMAImplDataSseBinary-addsubpd_u128.bin \
266 tstIEMAImplDataSseBinary-cvtpd2ps_u128.bin \
267 tstIEMAImplDataSseBinary-addss_u128_r32.bin \
268 tstIEMAImplDataSseBinary-addsd_u128_r64.bin \
269 tstIEMAImplDataSseBinary-mulss_u128_r32.bin \
270 tstIEMAImplDataSseBinary-mulsd_u128_r64.bin \
271 tstIEMAImplDataSseBinary-subss_u128_r32.bin \
272 tstIEMAImplDataSseBinary-subsd_u128_r64.bin \
273 tstIEMAImplDataSseBinary-minss_u128_r32.bin \
274 tstIEMAImplDataSseBinary-minsd_u128_r64.bin \
275 tstIEMAImplDataSseBinary-divss_u128_r32.bin \
276 tstIEMAImplDataSseBinary-divsd_u128_r64.bin \
277 tstIEMAImplDataSseBinary-maxss_u128_r32.bin \
278 tstIEMAImplDataSseBinary-maxsd_u128_r64.bin \
279 tstIEMAImplDataSseBinary-cvtss2sd_u128_r32.bin \
280 tstIEMAImplDataSseBinary-cvtsd2ss_u128_r64.bin \
281 tstIEMAImplDataSseBinary-sqrtss_u128_r32.bin \
282 tstIEMAImplDataSseBinary-sqrtsd_u128_r64.bin \
283 tstIEMAImplDataSseBinary-cvttsd2si_i32_r64.bin \
284 tstIEMAImplDataSseBinary-cvtsd2si_i32_r64.bin \
285 tstIEMAImplDataSseBinary-cvttsd2si_i64_r64.bin \
286 tstIEMAImplDataSseBinary-cvtsd2si_i64_r64.bin \
287 tstIEMAImplDataSseBinary-cvttss2si_i32_r32.bin \
288 tstIEMAImplDataSseBinary-cvtss2si_i32_r32.bin \
289 tstIEMAImplDataSseBinary-cvttss2si_i64_r32.bin \
290 tstIEMAImplDataSseBinary-cvtss2si_i64_r32.bin
291
292tstIEMAImpl_TEMPLATE = VBOXR3TSTEXE
293tstIEMAImpl_DEFS = $(VMM_COMMON_DEFS) IEM_WITHOUT_ASSEMBLY IN_TSTVMSTRUCT
294tstIEMAImpl_SDKS = VBOX_SOFTFLOAT
295tstIEMAImpl_INCS = ../include .
296tstIEMAImpl_CLEAN = \
297 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataInt.cpp \
298 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataInt-Amd.cpp \
299 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataInt-Intel.cpp \
300 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuLdSt.cpp \
301 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuLdSt-Amd.cpp \
302 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuLdSt-Intel.cpp \
303 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuBinary1.cpp \
304 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuBinary1-Amd.cpp \
305 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuBinary1-Intel.cpp \
306 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuBinary2.cpp \
307 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuOther.cpp \
308 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuOther-Amd.cpp \
309 $(tstIEMAImpl_0_OUTDIR)/tstIEMAImplDataFpuOther-Intel.cpp
310tstIEMAImpl_SOURCES = \
311 tstIEMAImpl.cpp \
312 ../VMMAll/IEMAllAImplC.cpp \
313 $(tstIEMAImpl_CLEAN)
314tstIEMAImpl_SOURCES.x86 += tstIEMAImplDataSseBinary.asm
315tstIEMAImpl_SOURCES.amd64 += tstIEMAImplDataSseBinary.asm
316tstIEMAImplDataSseBinary.asm_DEPS = \
317 $(TSTIEMAIMPL_TEST_DATA_DEPS)
318
319tstIEMAImpl_SOURCES.arm64 += tstIEMAImplDataSseBinary.S
320tstIEMAImplDataSseBinary.S_DEPS = \
321 $(TSTIEMAIMPL_TEST_DATA_DEPS)
322$(call KB_FN_DO_PASS0_ON_TARGET,tstIEMAImpl)
323
324# This variant mainly for generating data.
325tstIEMAImplAsm_TEMPLATE = VBOXR3TSTEXE
326tstIEMAImplAsm_SDKS = VBOX_SOFTFLOAT
327tstIEMAImplAsm_DEFS = $(VMM_COMMON_DEFS) IEM_WITH_ASSEMBLY IN_TSTVMSTRUCT TSTIEMAIMPL_WITH_GENERATOR
328tstIEMAImplAsm_INCS = ../include .
329tstIEMAImplAsm_SOURCES = \
330 tstIEMAImpl.cpp \
331 ../VMMAll/IEMAllAImpl.asm \
332 ../VMMAll/IEMAllAImplC.cpp \
333 $(tstIEMAImpl_CLEAN)
334tstIEMAImplAsm_SOURCES.x86 += tstIEMAImplDataSseBinary.asm
335tstIEMAImplAsm_SOURCES.amd64 += tstIEMAImplDataSseBinary.asm
336tstIEMAImplDataSseBinary.asm_DEPS = \
337 $(TSTIEMAIMPL_TEST_DATA_DEPS)
338
339tstIEMAImplAsm_SOURCES.arm64 += tstIEMAImplDataSseBinary.S
340tstIEMAImplDataSseBinary.S_DEPS = \
341 $(TSTIEMAIMPL_TEST_DATA_DEPS)
342
343## @param 1 The sub-name of the file in question.
344define def_tstIEMAImplData_adjust
345$$(tstIEMAImpl_0_OUTDIR)/tstIEMAImplData$(1).cpp: \
346 $$(tstIEMAImpl_DEFPATH)/tstIEMAImplData$(1).cpp \
347 $$(tstIEMAImpl_DEFPATH)/tstIEMAImplData.sh \
348 $$(tstIEMAImpl_DEFPATH)/tstIEMAImpl.h \
349 | $$(tstIEMAImpl_0_OUTDIR)/
350 $$(ASH) "$$(tstIEMAImpl_DEFPATH)/tstIEMAImplData.sh" \
351 "$$(CP_EXT)" \
352 "$$(MV_EXT)" \
353 "$$(SED_EXT)" \
354 "$$(APPEND_EXT)" \
355 "$$(tstIEMAImpl_0_OUTDIR)" \
356 "$$(tstIEMAImpl_DEFPATH)" \
357 "$(1)"
358endef
359$(evalcall2 def_tstIEMAImplData_adjust,Int)
360$(evalcall2 def_tstIEMAImplData_adjust,Int-Amd)
361$(evalcall2 def_tstIEMAImplData_adjust,Int-Intel)
362$(evalcall2 def_tstIEMAImplData_adjust,FpuLdSt)
363$(evalcall2 def_tstIEMAImplData_adjust,FpuLdSt-Amd)
364$(evalcall2 def_tstIEMAImplData_adjust,FpuLdSt-Intel)
365$(evalcall2 def_tstIEMAImplData_adjust,FpuBinary1)
366$(evalcall2 def_tstIEMAImplData_adjust,FpuBinary1-Amd)
367$(evalcall2 def_tstIEMAImplData_adjust,FpuBinary1-Intel)
368$(evalcall2 def_tstIEMAImplData_adjust,FpuBinary2)
369$(evalcall2 def_tstIEMAImplData_adjust,FpuOther)
370$(evalcall2 def_tstIEMAImplData_adjust,FpuOther-Amd)
371$(evalcall2 def_tstIEMAImplData_adjust,FpuOther-Intel)
372
373
374#
375# Testcase for checking the repurposing of the IEM instruction code.
376#
377tstIEMCheckMc_TEMPLATE = VBOXR3TSTEXE
378tstIEMCheckMc_SOURCES = tstIEMCheckMc.cpp
379tstIEMCheckMc_DEFS = $(VMM_COMMON_DEFS)
380tstIEMCheckMc_LIBS = $(LIB_RUNTIME)
381ifeq ($(KBUILD_TARGET),win)
382tstIEMCheckMc_CXXFLAGS = $(VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS) -wd4189 # local variable is initialized but not used.
383else
384tstIEMCheckMc_CXXFLAGS = $(VBOX_C_CXX_FLAGS_NO_UNUSED_PARAMETERS) -Wno-unused-value -Wno-unused-variable
385endif
386
387#
388# Saved state manager testcase.
389#
390tstSSM_TEMPLATE = VBOXR3TSTEXE
391tstSSM_INCS = $(VBOX_PATH_VMM_SRC)/include
392tstSSM_DEFS = $(VMM_COMMON_DEFS)
393tstSSM_SOURCES = tstSSM.cpp
394tstSSM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
395
396#
397# VMM configuration manager tests.
398#
399if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
400tstCFGMHardened_TEMPLATE = VBoxR3HardenedTstExe
401tstCFGMHardened_NAME = tstCFGM
402 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
403tstCFGMHardened_DEFS = PROGRAM_NAME_STR="tstCFGM"
404 else
405tstCFGMHardened_DEFS = PROGRAM_NAME_STR=\"tstCFGM\"
406 endif
407tstCFGMHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplateTestcase.cpp
408tstCFGM_TEMPLATE = VBoxR3HardenedTstDll
409else
410tstCFGM_TEMPLATE = VBOXR3TSTEXE
411endif
412tstCFGM_DEFS = $(VMM_COMMON_DEFS)
413tstCFGM_SOURCES = tstCFGM.cpp
414tstCFGM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
415
416#
417# Comparing some compression algorithms considered for SSM usage.
418#
419tstCompressionBenchmark_TEMPLATE = VBOXR3TSTEXE
420tstCompressionBenchmark_SOURCES = tstCompressionBenchmark.cpp
421
422#
423# Two testcases for checking the ring-0 setjmp/longjmp code.
424#
425tstVMMR0CallHost-1_TEMPLATE = VBOXR3TSTEXE
426tstVMMR0CallHost-1_INCS = $(VBOX_PATH_VMM_SRC)/include
427tstVMMR0CallHost-1_SOURCES = \
428 tstVMMR0CallHost-1.cpp
429tstVMMR0CallHost-1_SOURCES.amd64 = \
430 $(VBOX_PATH_VMM_SRC)/VMMR0/VMMR0JmpA-amd64.asm
431tstVMMR0CallHost-1_SOURCES.x86 = \
432 $(VBOX_PATH_VMM_SRC)/VMMR0/VMMR0JmpA-x86.asm
433
434
435#
436# For testing the VM request queue code.
437#
438if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
439tstVMREQHardened_TEMPLATE = VBOXR3HARDENEDEXE
440tstVMREQHardened_NAME = tstVMREQ
441 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
442tstVMREQHardened_DEFS = PROGRAM_NAME_STR="tstVMREQ"
443 else
444tstVMREQHardened_DEFS = PROGRAM_NAME_STR=\"tstVMREQ\"
445 endif
446tstVMREQHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
447tstVMREQ_TEMPLATE = VBOXR3
448else
449tstVMREQ_TEMPLATE = VBOXR3EXE
450endif
451tstVMREQ_DEFS = $(VMM_COMMON_DEFS)
452tstVMREQ_SOURCES = tstVMREQ.cpp
453tstVMREQ_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
454
455#
456# Tool for reanimate things like OS/2 dumps.
457#
458if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
459tstAnimateHardened_TEMPLATE = VBOXR3HARDENEDEXE
460tstAnimateHardened_NAME = tstAnimate
461 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
462tstAnimateHardened_DEFS = PROGRAM_NAME_STR="tstAnimate"
463 else
464tstAnimateHardened_DEFS = PROGRAM_NAME_STR=\"tstAnimate\"
465 endif
466tstAnimateHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
467tstAnimate_TEMPLATE = VBOXR3
468else
469tstAnimate_TEMPLATE = VBOXR3EXE
470endif
471tstAnimate_DEFS = $(VMM_COMMON_DEFS)
472tstAnimate_SOURCES = tstAnimate.cpp
473tstAnimate_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
474
475tstX86-1_TEMPLATE = VBOXR3TSTEXE
476tstX86-1_SOURCES = tstX86-1.cpp tstX86-1A.asm
477tstX86-1_LIBS = $(LIB_RUNTIME)
478tstX86-1_LDFLAGS.linux = $(VBOX_GCC_no-pie)
479
480tstX86-FpuSaveRestore_TEMPLATE = VBOXR3TSTEXE
481tstX86-FpuSaveRestore_SOURCES = tstX86-FpuSaveRestore.cpp tstX86-FpuSaveRestoreA.asm
482tstX86-FpuSaveRestore_LIBS = $(LIB_RUNTIME)
483
484ifdef VBOX_WITH_RAW_MODE
485
486 #
487 # Raw-mode VMM testcase.
488 #
489 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
490tstVMMHardened_TEMPLATE = VBOXR3HARDENEDEXE
491tstVMMHardened_NAME = tstVMM
492 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
493tstVMMHardened_DEFS = PROGRAM_NAME_STR="tstVMM"
494 else
495tstVMMHardened_DEFS = PROGRAM_NAME_STR=\"tstVMM\"
496 endif
497tstVMMHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
498tstVMM_TEMPLATE = VBOXR3
499 else
500tstVMM_TEMPLATE = VBOXR3EXE
501 endif
502tstVMM_SOURCES = tstVMM.cpp
503tstVMM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
504
505#
506# HM VMM testcase.
507#
508tstVMM-HM_TEMPLATE = VBOXR3EXE
509tstVMM-HM_SOURCES = tstVMM-HM.cpp
510tstVMM-HM_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
511
512#
513# VMM host process fork test case (memory ++).
514#
515tstVMMFork_TEMPLATE = VBOXR3EXE
516tstVMMFork_SOURCES = tstVMMFork.cpp
517tstVMMFork_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
518
519#
520# Raw-mode micro benchmark.
521#
522 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
523tstMicroHardened_TEMPLATE = VBOXR3HARDENEDEXE
524tstMicroHardened_NAME = tstMicro
525 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
526tstMicroHardened_DEFS = PROGRAM_NAME_STR="tstMicro"
527 else
528tstMicroHardened_DEFS = PROGRAM_NAME_STR=\"tstMicro\"
529 endif
530tstMicroHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
531tstMicro_TEMPLATE = VBOXR3
532 else
533tstMicro_TEMPLATE = VBOXR3EXE
534 endif
535tstMicro_SOURCES = tstMicro.cpp
536tstMicro_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
537tstMicro_DEFS = $(if $(VBOX_WITH_RAW_MODE),VBOX_WITH_RAW_MODE,)
538
539tstMicroRC_TEMPLATE = VBoxRc
540tstMicroRC_SOURCES = tstMicroRC.cpp tstMicroRCA.asm
541tstMicroRC_DEFS = $(if $(VBOX_WITH_RAW_MODE),VBOX_WITH_RAW_MODE,)
542tstMicroRC_INCS = $(VBOX_PATH_VMM_SRC)/testcase
543 ifeq ($(VBOX_LDR_FMT32),pe)
544tstMicroRC_LDFLAGS = -Entry:tstMicroRC
545 endif
546tstMicroRC_SYSSUFF = .gc
547tstMicroRC_LIBS = \
548 $(PATH_STAGE_LIB)/DisasmRC$(VBOX_SUFF_LIB) \
549 $(PATH_STAGE_LIB)/RuntimeRC$(VBOX_SUFF_LIB)
550 ifeq ($(filter-out pe lx,$(VBOX_LDR_FMT32)),)
551tstMicroRC_LIBS += \
552 $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
553 $(LIB_VMMRC)
554 endif
555tstMicroRC_SOURCES.win = tstMicroRC.def
556
557endif # VBOX_WITH_RAW_MODE
558
559
560if !defined(VBOX_ONLY_EXTPACKS_USE_IMPLIBS)
561#
562# Special NEM host testcase.
563#
564 if ("$(KBUILD_TARGET_ARCH).$(KBUILD_TARGET_ARCH)" == "darwin.amd64" && (defined(VBOX_WITH_NATIVE_NEM) || "$(USERNAME)" == "bird")) \
565 || ("$(KBUILD_TARGET_ARCH).$(KBUILD_TARGET_ARCH)" == "linux.amd64" && (defined(VBOX_WITH_NATIVE_NEM) || "$(USERNAME)" == "bird")) \
566 || ("$(KBUILD_TARGET_ARCH).$(KBUILD_TARGET_ARCH)" == "win.amd64" && defined(VBOX_WITH_NATIVE_NEM))
567PROGRAMS += NemRawBench-1
568NemRawBench-1_TEMPLATE = VBoxR3Static
569NemRawBench-1_SOURCES = NemRawBench-1.cpp
570NemRawBench-1_BLD_TYPE = release
571NemRawBench-1_INCS.win = \
572 $(KBUILD_DEVTOOLS)/win.x86/sdk/v10.0.17134.0/include/10.0.17134.0/um \
573 $(KBUILD_DEVTOOLS)/win.x86/sdk/v10.0.17134.0/include/10.0.17134.0/shared
574NemRawBench-1_CXXFLAGS.darwin = \
575 -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform//Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks
576#NemRawBench-1_LDFLAGS.darwin = \
577# -F/System/Library/Frameworks \
578# -framework Hypervisor
579NemRawBench-1_LDFLAGS.darwin = \
580 /System/Library/Frameworks/Hypervisor.framework/Hypervisor
581 endif
582endif
583
584#
585# PDM Queue tests.
586#
587tstPDMQueue_TEMPLATE := VBOXR3EXE
588tstPDMQueue_DEFS = $(VMM_COMMON_DEFS)
589tstPDMQueue_SOURCES := tstPDMQueue.cpp
590tstPDMQueue_LIBS := $(LIB_VMM) $(LIB_RUNTIME)
591
592
593ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
594#
595# PDM asynchronous completation test.
596#
597 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
598tstPDMAsyncCompletionHardened_TEMPLATE = VBOXR3HARDENEDEXE
599tstPDMAsyncCompletionHardened_NAME = tstPDMAsyncCompletion
600 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
601tstPDMAsyncCompletionHardened_DEFS = PROGRAM_NAME_STR="tstPDMAsyncCompletion"
602 else
603tstPDMAsyncCompletionHardened_DEFS = PROGRAM_NAME_STR=\"tstPDMAsyncCompletion\"
604 endif
605tstPDMAsyncCompletionHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
606tstPDMAsyncCompletion_TEMPLATE = VBOXR3
607 else
608tstPDMAsyncCompletion_TEMPLATE = VBOXR3EXE
609 endif
610tstPDMAsyncCompletion_DEFS = $(VMM_COMMON_DEFS)
611tstPDMAsyncCompletion_INCS = $(VBOX_PATH_VMM_SRC)/include
612tstPDMAsyncCompletion_SOURCES = tstPDMAsyncCompletion.cpp
613tstPDMAsyncCompletion_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
614
615#
616# PDM asynchronous completation stress test.
617#
618 if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
619tstPDMAsyncCompletionStressHardened_TEMPLATE = VBOXR3HARDENEDEXE
620tstPDMAsyncCompletionStressHardened_NAME = tstPDMAsyncCompletionStress
621 ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
622tstPDMAsyncCompletionStressHardened_DEFS = PROGRAM_NAME_STR="tstPDMAsyncCompletionStress"
623 else
624tstPDMAsyncCompletionStressHardened_DEFS = PROGRAM_NAME_STR=\"tstPDMAsyncCompletionStress\"
625 endif
626tstPDMAsyncCompletionStressHardened_SOURCES = ../../HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
627tstPDMAsyncCompletionStress_TEMPLATE = VBOXR3
628 else
629tstPDMAsyncCompletionStress_TEMPLATE = VBOXR3EXE
630 endif
631tstPDMAsyncCompletionStress_DEFS = $(VMM_COMMON_DEFS)
632tstPDMAsyncCompletionStress_INCS = $(VBOX_PATH_VMM_SRC)/include
633tstPDMAsyncCompletionStress_SOURCES = tstPDMAsyncCompletionStress.cpp
634tstPDMAsyncCompletionStress_LIBS = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
635endif
636
637ifndef VBOX_ONLY_EXTPACKS
638PROGRAMS += tstSSM-2
639tstSSM-2_TEMPLATE = VBOXR3TSTEXE
640tstSSM-2_DEFS = IN_VMM_STATIC
641tstSSM-2_SOURCES = tstSSM-2.cpp
642tstSSM-2_LIBS = $(PATH_STAGE_LIB)/SSMStandalone$(VBOX_SUFF_LIB)
643endif
644
645#
646# Generate VM structure tests.
647#
648if !defined(VBOX_ONLY_EXTPACKS) \
649 && ( defined(VBOX_WITH_DTRACE_R3) \
650 || defined(VBOX_WITH_DTRACE_R0) \
651 || defined(VBOX_WITH_DTRACE_RC))
652tstVMStructDTrace_TEMPLATE = VBOXR3AUTOTST
653tstVMStructDTrace_DEFS = VBOX_IN_VMM IN_VMM_R3 IN_DIS $(VMM_COMMON_DEFS)
654 ifdef VBOX_WITH_RAW_MODE
655tstVMStructDTrace_DEFS += VBOX_WITH_RAW_MODE
656 endif
657tstVMStructDTrace_INCS = \
658 $(VBOX_PATH_VMM_SRC)/include \
659 $(VBOX_PATH_VMM_SRC)/PATM \
660 $(VBOX_VMM_TESTCASE_OUT_DIR)
661tstVMStructDTrace_SOURCES = tstVMStructDTrace.cpp
662 ifdef VBOX_WITH_R0_LOGGING
663tstVMStructDTrace_DEFS += VBOX_WITH_R0_LOGGING
664 endif
665
666
667VMMLibDTraceStructTest_INST = $(VBOX_INST_DTRACE_TST)$(KBUILD_TARGET_ARCH)/
668VMMLibDTraceStructTest_SOURCES = \
669 $(tstVMStructDTrace_0_OUTDIR)/vbox-vm-struct-test.d
670VMMLibDTraceStructTest_CLEAN = \
671 $(tstVMStructDTrace_0_OUTDIR)/vbox-vm-struct-test.d
672
673$$(tstVMStructDTrace_0_OUTDIR)/vbox-vm-struct-test.d: \
674 $$(tstVMStructDTrace_1_STAGE_TARGET) | $$(dir $$@)
675 $(QUIET)$(RM) -f $@
676 $< > $@
677
678endif
679
680
681include $(FILE_KBUILD_SUB_FOOTER)
682
683
684#
685# Some handcrafted support targets for tstAsmStructs.
686#
687MY_ASA_ASM_STUFF = \
688 $(addprefix -D, \
689 $(DEFS) \
690 $(DEFS.$(KBUILD_TYPE)) \
691 $(DEFS.$(KBUILD_TARGET)) \
692 IN_RING3 $(ARCH_BITS_DEFS) \
693 $(DEFS.$(KBUILD_TARGET_ARCH)) \
694 $(DEFS.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) \
695 $(VMM_COMMON_DEFS) \
696 ) \
697 -f $(if $(eq $(KBUILD_TARGET),darwin),macho,elf) \
698 $(foreach inc,$(INCS) $(VBOX_PATH_VMM_SRC)/testcase $(VBOX_PATH_VMM_SRC)/include $(VBOX_VMM_TESTCASE_OUT_DIR)\
699 ,-I$(inc)/)
700
701# 1a. make a header file which makes all the structures+members globals.
702$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac: \
703 $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm.asm \
704 $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm-lst.sed \
705 $(DEPTH)/include/iprt/asmdefs.mac \
706 $(DEPTH)/include/VBox/vmm/cpum.mac \
707 $(DEPTH)/include/VBox/vmm/vm.mac \
708 $(DEPTH)/include/VBox/vmm/gvm.mac \
709 $(DEPTH)/include/VBox/sup.mac \
710 $(DEPTH)/include/iprt/x86.mac \
711 $(VBOX_PATH_VMM_SRC)/include/CPUMInternal.mac \
712 $(VBOX_PATH_VMM_SRC)/include/HMInternal.mac \
713 $(VBOX_PATH_VMM_SRC)/include/VMMInternal.mac \
714 $(VBOX_PATH_VMM_SRC)/testcase/Makefile.kmk \
715 $(PATH_ROOT)/Config.kmk $(LOCALCFG) $(AUTOCFG) \
716 | $$(dir $$@)
717 $(call MSG_GENERATE,tstVMStructSize,$@,$<)
718ifndef DONT_USE_YASM
719 $(QUIET)$(TOOL_YASM_AS) $(MY_ASA_ASM_STUFF) -o [email protected] -l [email protected] $<
720 $(SED) -f $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm-lst.sed --output $@ [email protected]
721else
722 $(QUIET)$(TOOL_NASM_AS) -g $(MY_ASA_ASM_STUFF) -o [email protected] -l [email protected] $<
723 $(VBOX_NM) [email protected] | $(SED) \
724 -e '/[0-9a-fA-F][0-9a-fA-F]* [^a] /d' \
725 -e 's/[0-9a-fA-F][0-9a-fA-F]* a \([^ ]*\)/global \1/' \
726 > $@
727endif
728
729# 1b. make an elf/macho object containing the offsets.
730includedep $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o.dep
731$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o: \
732 $(VBOX_PATH_VMM_SRC)/testcase/tstAsmStructsAsm.asm \
733 $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.mac \
734 $(DEPTH)/include/iprt/asmdefs.mac \
735 $(DEPTH)/include/VBox/vmm/cpum.mac \
736 $(DEPTH)/include/VBox/vmm/hm_vmx.mac \
737 $(DEPTH)/include/VBox/vmm/stam.mac \
738 $(DEPTH)/include/VBox/vmm/vm.mac \
739 $(DEPTH)/include/VBox/sup.mac \
740 $(DEPTH)/include/iprt/x86.mac \
741 $(VBOX_PATH_VMM_SRC)/include/CPUMInternal.mac \
742 $(VBOX_PATH_VMM_SRC)/include/HMInternal.mac \
743 $(VBOX_PATH_VMM_SRC)/include/VMMInternal.mac \
744 $(VBOX_PATH_VMM_SRC)/testcase/Makefile.kmk \
745 $$(if $$(eq $$(tstAsmStructsAsmDep_STUFF),$$(MY_ASA_ASM_STUFF)),,FORCE) \
746 | $$(dir $$@)
747 $(call MSG_COMPILE,tstAsmStructsasm,$<,$@,AS)
748ifndef DONT_USE_YASM
749 $(QUIET)$(TOOL_YASM_AS) $(MY_ASA_ASM_STUFF) -DDO_GLOBALS -o $@ $<
750else
751 $(QUIET)$(TOOL_NASM_AS) $(MY_ASA_ASM_STUFF) -DDO_GLOBALS -o $@ $<
752endif
753 %$(QUIET2)$(RM) -f -- $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o.dep
754 %$(QUIET2)$(APPEND) '$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o.dep' 'tstAsmStructsAsmDep_STUFF=$(MY_ASA_ASM_STUFF)'
755
756# 2. use nm and sed to transform this into the header we want.
757$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsHC.h: $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructsAsm.o
758 $(call MSG_GENERATE,tstVMStructSize,$@,$<)
759 $(QUIET)$(RM) -f $@ [email protected] [email protected]
760 $(QUIET)$(REDIRECT) -wo [email protected] -- $(VBOX_NM) $<
761 $(QUIET)$(SED) \
762 -e '/STAMPROFILEADV/d' \
763 \
764 -e '/^\(0x\)\{0,1\}00[0-9a-fA-F]* [aAnN] [^_.]*\./!d' \
765 -e 's/^\(0x\)\{0,1\}\(00[0-9a-fA-F]*\) [aAnN] \([^.]*\)\.\(.*$$\)/ CHECK_OFF(\3, 0x0\2, \4);/' \
766 --output [email protected] [email protected]
767 $(QUIET)$(SED) \
768 -e '/VM_size$$/d' \
769 -e '/VMCPU_size$$/d' \
770 -e '/VMMCPU_size$$/d' \
771 -e '/SUPDRVTRACERUSRCTX32_size$$/d' \
772 -e '/HMCPU_size$$/d' \
773 \
774 -e '/^\(0x\)\{0,1\}00[0-9a-fA-F]* [aAnN] [^_.]*_size$$/!d' \
775 -e 's/^\(0x\)\{0,1\}\(00[0-9a-fA-F]*\) [aAnN] \([^_.]*\)_size/ CHECK_SIZE(\3, 0x0\2);/' \
776 --append [email protected] [email protected]
777 $(QUIET)$(MV) -f [email protected] $@
778 $(QUIET)$(RM) -f [email protected]
779
780# 3. run it.
781$(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run: \
782 $$(tstAsmStructs_1_STAGE_TARGET) \
783 $(if-expr defined(VBOX_WITH_RAW_MODE),$$(tstAsmStructsRC_1_STAGE_TARGET),)
784 $(QUIET)$(RM) -f $@
785 $(tstAsmStructs_1_STAGE_TARGET)
786ifdef VBOX_WITH_RAW_MODE
787 $(tstAsmStructsRC_1_STAGE_TARGET)
788endif
789 $(QUIET)$(APPEND) "$@" "done"
790
791
792
793#
794# Run rule for tstVMStructSize.
795#
796
797ifdef VBOX_WITH_RAW_MODE
798# 1. Manually dump selected structures and members.
799$(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructRC.h: $$(tstVMStructRC_1_STAGE_TARGET) | $$(dir $$@)
800 $(call MSG_GENERATE,tstVMStructSize,$@)
801 $(QUIET)$(REDIRECT) -wo $@ -- $<
802endif # VBOX_WITH_RAW_MODE
803
804# 2. run it.
805$(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run: $$(tstVMStructSize_1_STAGE_TARGET) | $$(dir $$@)
806 $(QUIET)$(RM) -f $@
807 $<
808 $(QUIET)$(APPEND) "$@" "done"
809
810# alias for the two struct tests.
811run-struct-tests: $(VBOX_VMM_TESTCASE_OUT_DIR)/tstAsmStructs.run $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructSize.run
812
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