VirtualBox

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

最後變更 在這個檔案從96395是 96395,由 vboxsync 提交於 3 年 前

VMM/testcase/tstIEMAImpl: Implement basic addpd2ps testcase, bugref:9898

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

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