You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

390 lines
22 KiB

##############################################################
#
# This file includes all the test targets as well as all the
# non-default build rules and test recipes.
#
##############################################################
##############################################################
#
# Test targets
#
##############################################################
###### Place all generic definitions here ######
# This defines tests which run tools of the same name. This is simply for convenience to avoid
# defining the test name twice (once in TOOL_ROOTS and again in TEST_ROOTS).
# Tests defined here should not be defined in TOOL_ROOTS and TEST_ROOTS.
TEST_TOOL_ROOTS := context_regvalue change_context_regvalue change_context_rflags emu_context_regvalue context_perf \
iarg_reg_reference iarg_reg_reference_flags
# This defines the tests to be run that were not already defined in TEST_TOOL_ROOTS.
TEST_ROOTS := const_context_regvalue partial_context_regvalue change_partial_context_regvalue \
change_partial_context_rflags iarg_reg_const_reference \
xstateComponentX87_context xstateComponentX87_partial \
xstateComponentSSE_context xstateComponentSSE_partial xstateComponentSSE_reference \
xstateComponentAVX_context xstateComponentAVX_partial xstateComponentAVX_reference \
xsave_memorywrite_ea xsave_memoryXXX_size_IPBEFORE xsave_memoryXXX_size_IPAFTER\
xsave_memoryXXX_size_IPBEFORE_ifthen xsave_memoryXXX_size_IPAFTER_ifthen
# This defines the tools which will be run during the the tests, and were not already defined in
# TEST_TOOL_ROOTS.
TOOL_ROOTS := checkXStateBV_tool xsave_iarg_mem
# This defines the static analysis tools which will be run during the the tests. They should not
# be defined in TEST_TOOL_ROOTS. If a test with the same name exists, it should be defined in
# TEST_ROOTS.
# Note: Static analysis tools are in fact executables linked with the Pin Static Analysis Library.
# This library provides a subset of the Pin APIs which allows the tool to perform static analysis
# of an application or dll. Pin itself is not used when this tool runs.
SA_TOOL_ROOTS :=
# This defines all the applications that will be run during the tests.
APP_ROOTS := regvalue_app checkXStateBV_app xsave_iarg_mem_app print_flags
# This defines any additional object files that need to be compiled.
OBJECT_ROOTS := regvalues changeRegs regvalue_test_utils context_utils register_modification_utils doXsave print_flags_asm
# This defines any additional dlls (shared objects), other than the pintools, that need to be compiled.
DLL_ROOTS :=
# This defines any static libraries (archives), that need to be built.
LIB_ROOTS :=
###### Handle exceptions here ######
# First, see if the specified targets require avx support. "clean" for example does not,
# so there is no need for making that check.
ifeq ($(MAKECMDGOALS),) # If no target was specified, "all" is assumed.
AVX_DEPENDENTS := all
else
AVX_DEPENDENTS := $(filter test sanity install all objects libs dlls apps tools %.test %.wrap $(OBJDIR)%, \
$(MAKECMDGOALS))
endif
# Now, if there are avx-dependent targets, make sure that the isa check programs exist.
ifneq ($(AVX_DEPENDENTS),)
ifeq ($(wildcard $(CHECKAVX)),)
$(error Unable to proceed. Run "make avxcheck", then try again)
endif
ifeq ($(wildcard $(CHECKAVX512F)),)
$(error Unable to proceed. Run "make avx512fcheck", then try again)
endif
MACHINE_SUPPORTS_AVX_INSTRUCTIONS := $(shell $(CHECKAVX) | $(GREP) Yes)
MACHINE_SUPPORTS_AVX512F_INSTRUCTIONS := $(shell $(CHECKAVX512F) | $(GREP) Yes)
ifneq ($(MACHINE_SUPPORTS_AVX_INSTRUCTIONS),Yes)
TEST_ROOTS := $(filter-out xstateComponentX87_context xstateComponentX87_partial xstateComponentSSE_context \
xstateComponentSSE_partial xstateComponentSSE_reference xstateComponentAVX_context \
xstateComponentAVX_partial xstateComponentAVX_reference xsave_memorywrite_ea \
xsave_memoryXXX_size_IPBEFORE xsave_memoryXXX_size_IPAFTER \
xsavec_memoryXXX_size_IPBEFORE xsavec_memoryXXX_size_IPAFTER \
xsave_memoryXXX_size_IPBEFORE_ifthen xsave_memoryXXX_size_IPAFTER_ifthen, $(TEST_ROOTS))
TOOL_ROOTS := $(filter-out checkXStateBV_tool xsave_iarg_mem, $(TOOL_ROOTS))
APP_ROOTS := $(filter-out checkXStateBV_app xsave_iarg_mem_app, $(APP_ROOTS))
OBJECT_ROOTS := $(filter-out doXsave, $(OBJECT_ROOTS))
endif
endif
# binutils older than 2.21 does not support avx512, disable these tests.
ifeq ($(MACHINE_SUPPORTS_AVX_INSTRUCTIONS),Yes)
COMPILER_SUPPORTS_AVX = 1
ifeq ($(TARGET_OS),linux)
ASSEMBLER_LT_2_21 := $(shell $(TOOLS_ROOT)/Utils/testToolVersion `which as` lt 2.21)
ifeq ($(ASSEMBLER_LT_2_21),1)
COMPILER_SUPPORTS_AVX = 0
endif
endif
ifeq ($(COMPILER_SUPPORTS_AVX), 0)
TEST_TOOL_ROOTS := $(filter-out context_regvalue change_context_regvalue change_context_rflags context_perf \
emu_context_regvalue iarg_reg_reference , $(TEST_TOOL_ROOTS))
TEST_ROOTS := $(filter-out const_context_regvalue partial_context_regvalue change_partial_context_regvalue \
change_partial_context_rflags iarg_reg_const_reference, $(TEST_ROOTS))
APP_ROOTS := $(filter-out regvalue_app, $(APP_ROOTS))
OBJECT_ROOTS := $(filter-out changeRegs, $(OBJECT_ROOTS))
endif
endif
# See Mantis 4788 for change_context_rflags
ifeq ($(TARGET_OS),windows)
TEST_TOOL_ROOTS := $(filter-out change_context_rflags, $(TEST_TOOL_ROOTS))
endif
ifeq ($(TARGET_OS),mac)
TEST_TOOL_ROOTS := $(filter-out change_context_rflags, $(TEST_TOOL_ROOTS))
endif
###### Define the sanity subset ######
# This defines the list of tests that should run in sanity. It should include all the tests listed in
# TEST_TOOL_ROOTS and TEST_ROOTS excluding only unstable tests.
SANITY_SUBSET := $(TEST_TOOL_ROOTS) $(TEST_ROOTS)
##############################################################
#
# Test recipes
#
##############################################################
# This section contains recipes for tests other than the default.
# See makefile.default.rules for the default test rules.
# All tests in this section should adhere to the naming convention: <testname>.test
context_regvalue.test: $(OBJDIR)context_regvalue$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
const_context_regvalue.test: $(OBJDIR)context_regvalue$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testcontext const -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
partial_context_regvalue.test: $(OBJDIR)context_regvalue$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testcontext partial -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
change_context_regvalue.test: $(OBJDIR)change_context_regvalue$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -test_partial 0 -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
change_partial_context_regvalue.test: $(OBJDIR)change_context_regvalue$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testcontext partial -test_partial 0 -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
# checking change of parity, Oveflow and direction flag
# 2 are disabled to avoid timeouts see mantis 3938
change_context_rflags.test: $(OBJDIR)change_context_rflags$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -o $(OBJDIR)$(@:%.test=%.out) -cf 2 -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
# $(PIN) -t $< -o $(OBJDIR)$(@:%.test=%.out) -cf 10 -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
# $(PIN) -t $< -o $(OBJDIR)$(@:%.test=%.out) -cf 11 -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
# checking change of parity, Oveflow and direction flag
change_partial_context_rflags.test: $(OBJDIR)change_context_rflags$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testcontext partial -o $(OBJDIR)$(@:%.test=%.out) -cf 2 -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testcontext partial -o $(OBJDIR)$(@:%.test=%.out) -cf 10 -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testcontext partial -o $(OBJDIR)$(@:%.test=%.out) -cf 11 -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
#for performance get times (redirect to time file) and compare them
context_perf.test: $(OBJDIR)context_perf$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)context_perf$(PINTOOL_SUFFIX) -c 0 -o $(OBJDIR)context_perf.out -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)context_perf$(PINTOOL_SUFFIX) -c 1 -o $(OBJDIR)context_perf.out -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)context_perf$(PINTOOL_SUFFIX) -c 2 -o $(OBJDIR)context_perf.out -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)context_perf$(PINTOOL_SUFFIX) -c 3 -o $(OBJDIR)context_perf.out -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)context_perf$(PINTOOL_SUFFIX) -c 4 -o $(OBJDIR)context_perf.out -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)context_perf.out
emu_context_regvalue.test: $(OBJDIR)emu_context_regvalue$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -test_partial 0 -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
iarg_reg_reference.test: $(OBJDIR)iarg_reg_reference$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -test_st 0 -test_partial 0 -o $(OBJDIR)$(@:%.test=%.out) -- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
iarg_reg_const_reference.test: $(OBJDIR)iarg_reg_reference$(PINTOOL_SUFFIX) $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(PIN) -t $< -testreference const -test_st 0 -test_partial 0 -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)regvalue_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentX87_context.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass x87 -method context -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) x87
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentX87_partial.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass x87 -method partial -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) x87
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentSSE_context.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass SSE -method context -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) SSE
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentSSE_partial.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass SSE -method partial -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) SSE
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentSSE_reference.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass SSE -method reference -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) SSE
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentAVX_context.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass AVX -method context -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) AVX
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentAVX_partial.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass AVX -method partial -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) AVX
$(RM) $(OBJDIR)$(@:%.test=%.out)
xstateComponentAVX_reference.test: $(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX) $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX)
$(PIN) -t $< -stateClass AVX -method reference -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)checkXStateBV_app$(EXE_SUFFIX) AVX
$(RM) $(OBJDIR)$(@:%.test=%.out)
xsave_memorywrite_ea.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX)
$(RM) -f $(OBJDIR)$(@:%.test=%.out)
$(PIN) -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 0 -- $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsave_memorywrite_ea_app.out
$(PYCOMPARE) -q -p $(OBJDIR)xsave_memorywrite_ea_app.out -c $(OBJDIR)$(@:%.test=%.out)
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsave_memorywrite_ea_app.out
xsave_memoryXXX_size_IPBEFORE.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX)
$(RM) -f $(OBJDIR)$(@:%.test=%.out)
$(PIN) -error_file $(OBJDIR)xsave_memoryXXX_size_IPBEFORE.err -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 1 -- $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsave_memoryXXX_size_IPBEFORE_app.out
$(PYCOMPARE) -q -p $(@:%.test=%.compare) -c $(OBJDIR)xsave_memoryXXX_size_IPBEFORE.out
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsave_memoryXXX_size_IPBEFORE_app.out
xsave_memoryXXX_size_IPAFTER.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX)
$(PIN) -error_file $(OBJDIR)xsave_memoryXXX_size_IPAFTER.err -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 1 -i 1 -- $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsave_memoryXXX_size_IPAFTER_app.out
$(PYCOMPARE) -q -p $(@:%.test=%.compare) -c $(OBJDIR)xsave_memoryXXX_size_IPAFTER.out
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsave_memoryXXX_size_IPAFTER_app.out
xsavec_memoryXXX_size_IPBEFORE.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsavec_iarg_mem_app$(EXE_SUFFIX)
$(RM) -f $(OBJDIR)$(@:%.test=%.out)
$(PIN) -error_file $(OBJDIR)xsavec_memoryXXX_size_IPBEFORE.err -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 1 -- $(OBJDIR)xsavec_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsavec_memoryXXX_size_IPBEFORE_app.out
$(PYCOMPARE) -q -p $(@:%.test=%.compare) -c $(OBJDIR)xsavec_memoryXXX_size_IPBEFORE.out
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsavec_memoryXXX_size_IPBEFORE_app.out
xsavec_memoryXXX_size_IPAFTER.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsavec_iarg_mem_app$(EXE_SUFFIX)
$(PIN) -error_file $(OBJDIR)xsavec_memoryXXX_size_IPAFTER.err -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 1 -i 1 -- $(OBJDIR)xsavec_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsavec_memoryXXX_size_IPAFTER_app.out
$(PYCOMPARE) -q -p $(@:%.test=%.compare) -c $(OBJDIR)xsavec_memoryXXX_size_IPAFTER.out
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsavec_memoryXXX_size_IPAFTER_app.out
xsave_memoryXXX_size_IPBEFORE_ifthen.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX)
$(RM) -f $(OBJDIR)$(@:%.test=%.out)
$(PIN) -error_file $(OBJDIR)xsave_memoryXXX_size_IPBEFORE.err -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 1 -f 1 -- $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsave_memoryXXX_size_IPBEFORE_app_ifthen.out
$(PYCOMPARE) -q -p $(@:%_ifthen.test=%.compare) -c $(OBJDIR)$(@:%.test=%.out)
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsave_memoryXXX_size_IPBEFORE_app_ifthen.out
xsave_memoryXXX_size_IPAFTER_ifthen.test: $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX)
$(PIN) -error_file $(OBJDIR)xsave_memoryXXX_size_IPAFTER.err -t $(OBJDIR)xsave_iarg_mem$(PINTOOL_SUFFIX) \
-o $(OBJDIR)$(@:%.test=%.out) -c 1 -i 1 -f 1 -- $(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX) > $(OBJDIR)xsave_memoryXXX_size_IPAFTER_app_ifthen.out
$(PYCOMPARE) -q -p $(@:%_ifthen.test=%.compare) -c $(OBJDIR)$(@:%.test=%.out)
$(RM) $(OBJDIR)$(@:%.test=%.out) $(OBJDIR)xsave_memoryXXX_size_IPAFTER_app_ifthen.out
iarg_reg_reference_flags.test: $(OBJDIR)iarg_reg_reference_flags$(PINTOOL_SUFFIX) $(OBJDIR)print_flags$(EXE_SUFFIX)
$(RM) -f $(OBJDIR)$(@:%.test=%.out)
$(PIN) -t $(OBJDIR)iarg_reg_reference_flags$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:%.test=%.out) -testreference const \
-- $(OBJDIR)print_flags$(EXE_SUFFIX) > $(OBJDIR)print_flags.out
$(QGREP) "Flags: 207" $(OBJDIR)$(@:%.test=%.out)
$(QGREP) "Flags: 207" $(OBJDIR)print_flags.out
$(PIN) -t $(OBJDIR)iarg_reg_reference_flags$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)print_flags$(EXE_SUFFIX) > $(OBJDIR)print_flags.out
$(QGREP) "Flags: 207" $(OBJDIR)$(@:%.test=%.out)
$(QGREP) "Flags: ed2" $(OBJDIR)print_flags.out
# Now check with -use_sahf 0
$(PIN) -xyzzy -use_sahf 0 -t $(OBJDIR)iarg_reg_reference_flags$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:%.test=%.out) \
-testreference const -- $(OBJDIR)print_flags$(EXE_SUFFIX) > $(OBJDIR)print_flags.out
$(QGREP) "Flags: 207" $(OBJDIR)$(@:%.test=%.out)
$(QGREP) "Flags: 207" $(OBJDIR)print_flags.out
$(PIN) -xyzzy -use_sahf 0 -t $(OBJDIR)iarg_reg_reference_flags$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:%.test=%.out) \
-- $(OBJDIR)print_flags$(EXE_SUFFIX) > $(OBJDIR)print_flags.out
$(QGREP) "Flags: 207" $(OBJDIR)$(@:%.test=%.out)
$(QGREP) "Flags: ed2" $(OBJDIR)print_flags.out
##############################################################
#
# Build rules
#
##############################################################
# This section contains the build rules for all binaries that have special build rules.
# See makefile.default.rules for the default build rules.
ifeq ($(MACHINE_SUPPORTS_AVX_INSTRUCTIONS),Yes)
ifeq ($(TARGET_OS),windows)
DEFINE_USING_AVX := /DCONTEXT_USING_AVX
else
DEFINE_USING_AVX := -DCONTEXT_USING_AVX
endif
endif
ifeq ($(MACHINE_SUPPORTS_AVX512F_INSTRUCTIONS),Yes)
ifeq ($(TARGET_OS),windows)
DEFINE_USING_AVX512F := /DCONTEXT_USING_AVX512F
else
DEFINE_USING_AVX512F := -DCONTEXT_USING_AVX512F
endif
endif
DEFINE_ARCH_EXTENSIONS := $(DEFINE_USING_AVX) $(DEFINE_USING_AVX512F)
ifeq ($(TARGET_OS),windows)
REGVALUE_APP_EXPORTS := /EXPORT:ChangeRegs /EXPORT:ExecuteAt /EXPORT:SaveRegsToMem
CHECKXSTATEBV_APP_EXPORTS := /EXPORT:ChangeRegisterValue /EXPORT:ExecuteAt
endif
###### Special tools' build rules ######
$(OBJDIR)context_regvalue$(PINTOOL_SUFFIX): $(OBJDIR)context_regvalue$(OBJ_SUFFIX) $(OBJDIR)regvalues$(OBJ_SUFFIX) $(OBJDIR)regvalue_test_utils$(OBJ_SUFFIX) $(OBJDIR)context_utils$(OBJ_SUFFIX) $(REGVALLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)change_context_regvalue$(PINTOOL_SUFFIX): $(OBJDIR)change_context_regvalue$(OBJ_SUFFIX) $(OBJDIR)regvalues$(OBJ_SUFFIX) $(OBJDIR)regvalue_test_utils$(OBJ_SUFFIX) $(OBJDIR)context_utils$(OBJ_SUFFIX) $(OBJDIR)register_modification_utils$(OBJ_SUFFIX) $(REGVALLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)emu_context_regvalue$(PINTOOL_SUFFIX): $(OBJDIR)emu_context_regvalue$(OBJ_SUFFIX) $(OBJDIR)regvalues$(OBJ_SUFFIX) $(OBJDIR)regvalue_test_utils$(OBJ_SUFFIX) $(OBJDIR)context_utils$(OBJ_SUFFIX) $(REGVALLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)iarg_reg_reference$(PINTOOL_SUFFIX): $(OBJDIR)iarg_reg_reference$(OBJ_SUFFIX) $(OBJDIR)regvalues$(OBJ_SUFFIX) $(OBJDIR)regvalue_test_utils$(OBJ_SUFFIX) $(OBJDIR)context_utils$(OBJ_SUFFIX) $(OBJDIR)register_modification_utils$(OBJ_SUFFIX) $(REGVALLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)checkXStateBV_tool$(PINTOOL_SUFFIX): $(OBJDIR)checkXStateBV_tool$(OBJ_SUFFIX) $(OBJDIR)xstateBVUtils$(OBJ_SUFFIX) $(REGVALLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
###### Special applications' build rules ######
$(OBJDIR)regvalue_app$(EXE_SUFFIX): regvalue_app.cpp $(OBJDIR)changeRegs$(OBJ_SUFFIX) $(OBJDIR)regvalues$(OBJ_SUFFIX) regvalues.h
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $(^:%.h=) $(APP_LDFLAGS_NOOPT) $(REGVALUE_APP_EXPORTS) $(APP_LIBS) \
$(CXX_LPATHS) $(CXX_LIBS)
# The xstateBVUtils is used by both the tool and the application. On Windows, it is compiled with /MT, but the application
# is compiled with /MD and this mismatch causes a link error. So instead of linking the xstateBVUtils object, the source is
# used directly when building the application.
$(OBJDIR)checkXStateBV_app$(EXE_SUFFIX): checkXStateBV_app.cpp xstateBVUtils.cpp xstateBVUtils.h $(OBJDIR)doXsave$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $(^:%.h=) $(APP_LDFLAGS_NOOPT) $(CHECKXSTATEBV_APP_EXPORTS) $(APP_LIBS) \
$(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)xsave_iarg_mem_app$(EXE_SUFFIX): xsave_iarg_mem_app.cpp $(OBJDIR)doXsave$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)xsavec_iarg_mem_app$(EXE_SUFFIX): xsavec_iarg_mem_app.cpp $(OBJDIR)doXsavec$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)print_flags$(EXE_SUFFIX): print_flags.c $(OBJDIR)print_flags_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
###### Special objects' build rules ######
$(OBJDIR)regvalues$(OBJ_SUFFIX): regvalues.h
$(OBJDIR)regvalue_test_utils$(OBJ_SUFFIX): regvalue_test_utils.h regvalues.h
$(OBJDIR)context_utils$(OBJ_SUFFIX): context_utils.h
$(OBJDIR)register_modification_utils$(OBJ_SUFFIX): register_modification_utils.h
$(OBJDIR)context_regvalue$(OBJ_SUFFIX): context_utils.h
$(OBJDIR)change_context_regvalue$(OBJ_SUFFIX): context_utils.h register_modification_utils.h
$(OBJDIR)emu_context_regvalue$(OBJ_SUFFIX): context_utils.h
$(OBJDIR)iarg_reg_reference$(OBJ_SUFFIX): register_modification_utils.h
$(OBJDIR)checkXStateBV_tool$(OBJ_SUFFIX): xstateBVUtils.h
$(OBJDIR)changeRegs$(OBJ_SUFFIX): changeRegs_$(TARGET)$(ASM_SUFFIX)
$(ASMBLR) $(ASM_FLAGS) $(DEFINE_ARCH_EXTENSIONS) $(COMP_OBJ)$@ $<