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.

3182 lines
195 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 := args args_err args_lineno checkerrorfile check_legal_callbacks control_init str2int str2flt mt_tool \
line earlymalloc jitmalloctrace malmalloc realloc fini leave knob_writeonce knob_duplicate_name sse-ref \
sse-unaligned-class sse-unaligned-class2 memalign posix_memalign stackalign align_access thenpredicated \
nops returnreg returnflags returnflags_and_ref replace_free emu_stack emu_jumps syscall operandtool \
rtn_insert_call1 rtn_insert_call2 insert_if_then_call insert_if_then_call1 insert_if_then_call2 xmmtest \
checkinline partialinline inlined-stack-arg inlined-stack-arg1 inscount2_fornoinline safecopy_mxcsr \
safecopy write_user_error write_debugger_error executeat_callback reg_inst_gx reg_value_xmm \
reg_value_x87 reg_value_ymm reg_value_fp_st reg_ref_fp_st reg_ref_x87 context set_fp_context_xmm_regs \
reg_context_x87 reg_context_fp_st reg_context_xmm reg_context_ymm reg_context_set_x87 check_fpstate \
reg_context_set_fp_st reg_context_set_xmm reg_context_set_ymm reg_context_set_const_context claim_regs \
fp_context_set_const_context stress_const_context stress_const_context2 rewritememop1 iarg_tsc_probed1 \
iarg_tsc1 iarg_tsc2 iarg_tsc3 iarg_tsc4 iarg_tsc5 inlined-stack-arg-noopt inlined-stack-arg1-noopt \
illegal_instrumentation test_iarg_preserve_probe isret
# This defines the tests to be run that were not already defined in TEST_TOOL_ROOTS.
TEST_ROOTS := knob_help knob_version resize mtstatic kthread htab callapp_nested internal_thread badpath badfile \
reg_context_fp_st_const_context reg_context_x87_const_context reg_context_xmm_const_context callapp_perf \
inscount2_jit_recursion partialinline2 reg_context_ymm_const_context error_log_jit mt_tool_safe_start \
tool_full_path_$(OS_TYPE) error_log_probe
# This defines the tools which will be run during the the tests, and were not already defined in
# TEST_TOOL_ROOTS.
TOOL_ROOTS := callapp_perf_tool callapp_nested_tool error_log tool_full_path
# 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 := insert_if_then_call_app xmmapp stress_const_context_app set_fp_context_xmm_regs_app kthread check_fpstate_app \
align_access_app callapp_perf_$(OS_TYPE) callapp_nested little_malloc mt_app \
threadtest_$(OS_TYPE) htab sse thread simplefoo1_$(OS_TYPE) simplefoo2_$(OS_TYPE) thread_static error_log_app \
simplefoo3_$(OS_TYPE) simplefoo4_$(OS_TYPE) simplefoo6 simplefoo7 simplefoo8_$(OS_TYPE) simplefoo9_$(OS_TYPE) \
simplefoo10_$(OS_TYPE) simplefoo12_$(OS_TYPE) simplefoo13_$(OS_TYPE) simplefoo14 factorial \
test_iarg_preserve_probe_app isret_app
# This defines any additional object files that need to be compiled.
OBJECT_ROOTS := sse-ref_asm mxcsr_asm thread_pool sys_memory simplebar simplebar64 test_iarg_preserve_asm iret_$(TARGET)
# 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 :=
###### Place architecture-specific definitions here ######
# Place ia32-specific definitions here if they apply to all supported operating systems.
ifeq ($(TARGET),ia32)
TEST_TOOL_ROOTS += rewritememop inlinecall repcmpsz_tool checkreps toolfetch_sub ins_check_fetcher create_rtn incebx
TEST_ROOTS += pusha_popa rwm_pushapopa rwm_pushapopa1 rwm_pushapopa2 create_rtn_probed
APP_ROOTS += stringtest tstcmpxchg8b oneprog create_rtn_app_$(TARGET_OS) tool_fetch_app repcmpsz_$(TARGET_OS) pusha_popa
OBJECT_ROOTS += cmpxchg8b_asm
endif
# Place intel64-specific definitions here if they apply to all supported operating systems.
ifeq ($(TARGET),intel64)
TEST_TOOL_ROOTS += str2int64 spalign code_cache_block_overflow1 code_cache_block_overflow2
TEST_ROOTS += nosahflahf
OBJECT_ROOTS += spalign_asm
endif
###### Place OS-specific definitions here ######
# Linux
ifeq ($(TARGET_OS),linux)
TEST_TOOL_ROOTS += soload soloadrange mmap tool_malloc change_syscall intrin swizzle_seg checkexecuting ea_verifier_bt \
elf_symbols elf_symsize int3del undecorate swizzle2 swizzle3 branch_target_addr inline_opt_test \
callapp1 callapp1i callapp2 callapp5 callapp6 callapp7 callapp8 callapp9 callapp10 callapp10i \
callapp12 callapp14 callapp15 replace_malloc_inst thread_callback earlyout multimem deepbind \
test_iarg_preserve reptool short_name test_iarg_preserve2 test_iarg_preserve_mxcsr \
test_iarg_preserve_mxcsr1 x87_regs_in_context test_iarg_partial_context exceptionAddress_lin \
executeat_lock flag_ac_tool fp_args fp_insert fp_replace funcarg_ep popea_verifier spawntool \
strace_ia32 check_env internal_exception_handler_lin
TEST_ROOTS += statica_locktest rwm_iret iret smallpush rwm_smallpush rwm_smallpush1 rwm_smallpush2 check_env_probe \
pipe waitpidbug cancel thread_usestack reppredicate set_fp_context_xmm_regs_const_context \
test_iarg_preserve1 test_iarg_preserve3 int3 checkinline_nocmov callapp9_const_context sigmask callsp \
sigmaskstatic reservemem flag_ac_inline move_then_test_inline_exception rwm_bitops \
move_then_test_noinline_exception move_then_test_noinline loader move_then_test_noinline_bridge_exception \
move_then_test_inline move_then_test_noinline_bridge smallpush_iarg_branch_target_addr undecorateOperator \
flag_ac_noinline_bridge flag_ac_noinline
TOOL_ROOTS += move_then_test indirect_call_branch_target_addr
SA_TOOL_ROOTS += statica_locktest
APP_ROOTS += change_syscall_app internal_exception_handler_app_lin cmovstest btc_app exceptionAddress_lin_app pipeapp \
deepbind_app symsize_app undecorate_app undecorateOperator_app swizzlealloc inline_opt_test_app \
iret waitpidbug cancel thread_usestack x87_regs_in_context_app test_iarg_preserve_app \
test_iarg_preserve_mxcsr_app test_iarg_preserve_app2 test_iarg_partial_context_app dltest dltest2 callsp \
int3test funcarg_ep_app flag_ac_app rep spawntool_app swizzle_seg_app inner \
fp_args_app fp_replace_app smallpush check_env_app doint_ia32 sigmask sigmaskstatic
OBJECT_ROOTS += inline_opt_test_asm exception_tool_asm exception_tool_asm deepbind_syscalls one two \
inline_opt_test_app_asm btc_asm doint_ia32_asm
DLL_ROOTS += check_env_dll one two
ifeq ($(TARGET),ia32)
TEST_TOOL_ROOTS += swizzle5 aoti_mutation_tool context_state_apis insfetch_tool callapp0 callapp0i dlclose check_acall_inline_opt
TEST_ROOTS += far_ret rwm_farret rwm_pushtest rwm1_str rwm_farret1 rwm_pushtest1 rwm1_str1 \
rwm1_str_const_context rwm_farret2 rwm_pushtest2 rwm1_str2
APP_ROOTS += aoti_mutation_target simplefoo pushtest far dlclose_app
OBJECT_ROOTS += simplesp
DLL_ROOTS += close1 close2
endif
ifeq ($(TARGET),intel64)
TEST_TOOL_ROOTS += callapp3 callapp4 callapp13 clobber insertand xlat_ea
TEST_ROOTS += addr32_override reservemem64 clobber_xmm big_bss unsup_syscall spalign_no_inline_bridge \
memory_displacement_int64 memory_displacement_uint64 memory_displacement_int32 \
rip_relative_prefix_67
TOOL_ROOTS += memory_displacement
APP_ROOTS += addr32_override_app memory_displacement_app reserve_memory lpd big_bss unsup_syscall_app \
rip_relative_prefix_67_app_intel64 xlat_app
OBJECT_ROOTS += and clobber_asm rip_relative_prefix_67_asm_intel64
endif
ifeq ($(ATTACH),1)
TEST_TOOL_ROOTS += attach
APP_ROOTS += attach_app
endif
endif
# macOS*
ifeq ($(TARGET_OS),mac)
TEST_TOOL_ROOTS += soload change_syscall branch_target_addr strace_ia32 mmap spawntool attach undecorate
TEST_ROOTS += statica_locktest sigmask-mac undecorateOperator
SA_TOOL_ROOTS += statica_locktest
APP_ROOTS += change_syscall_app dltest sigmask doint_ia32 spawntool_app attach_app undecorate_app undecorateOperator_app
OBJECT_ROOTS += one two doint_ia32_asm
DLL_ROOTS += one two
ifeq ($(TARGET),intel64)
TEST_ROOTS += big_bss
APP_ROOTS += big_bss
endif
endif
# Windows
ifeq ($(TARGET_OS),windows)
TEST_TOOL_ROOTS += thread_count thread_count2 stracewin_ia32 exception_monitor debugservice_monitor \
segmented_ea_verifier internal_exception_handler image_load datasym win_syscallenum \
sp_argument data_in_code_win app_inspects_internal_thread_win inline_opt_test callapp1 callapp2 \
callapp10 callapp1i callapp10i callapp5 callapp6 callapp7 callapp8 callapp9 callapp14 callapp12 \
replace_malloc_inst thread_callback funreplace_alert syscall_std teb jcx_addr16_tool \
passthru_context_xmm_regs_callapp passthru_context_xmm_regs_executeat suspend_win guard_page \
raise_exception sw_interrupt win_callback rebase_dll_tool exports_only_tool flag_ac_win_tool \
reg_operands_test_tool x87_regs_in_context test_iarg_preserve test_iarg_preserve2 \
test_iarg_preserve_mxcsr test_iarg_preserve_mxcsr1 test_iarg_partial_context import_forwarder_error \
security_w_pin_dll_load
TEST_ROOTS += win_knob_help secname suspend_context_win raise_exception_const_context internal_thread_early_exit \
test_iarg_preserve1 set_fp_context_xmm_regs_const_context test_iarg_preserve3 callapp9_const_context \
checkinline_nocmov move_then_test_noinline illegal_call_app move_then_test_noinline_exception \
move_then_test_noinline_bridge move_then_test_noinline_bridge_exception move_then_test_inline_exception \
move_then_test_inline rebase_dll rebase_dll_probe passthru_context_xmm_regs_callapp_const_context \
passthru_context_xmm_regs_executeat_const_context exports_only exports_only_probe sympath symserv_lowmem \
flag_ac_win_noinline_bridge flag_ac_win_noinline flag_ac_win_inline thread_creation_late_injection \
thread_count_thread_creation win_code_on_reused_memory win_cpp_exception win_debug_service \
win_divide_by_zero_exception win_early_injection1 win_early_injection2 win_early_injection1_probed \
win_early_injection2_probed win_exception_context win_load_library win_queue_apc \
win_multi_dll_pintool win_multi_dll_pintool_enumerate win_multi_dll_pintool_no_dll \
win_multi_dll_pintool_bad_dll image_entry_jit image_entry_probe image_entry_probe_pseudofini \
mt_tool_early_exit mt_tool_safe_start_early_exit load_resource_probe reserve_mem_win
TOOL_ROOTS += secname_tool move_then_test main_dll main_dll2 main_dll3 exception_context_monitor apc_monitor image_entry \
static_secondary_dll dynamic_secondary_dll
APP_ROOTS += illegal_call_app inline_opt_test_app test_iarg_preserve_app test_iarg_preserve_mxcsr_app secname_app \
test_iarg_preserve_app2 x87_regs_in_context_app win_code_on_reused_memory test_iarg_partial_context_app \
win_cpp_exception win_debug_service win_divide_by_zero_exception inner thread_segmented_ea rebase_dll \
win_thread_create_apc internal_exception_handler_app datasym_app sp_argument_app socket_app teb_app \
data_in_code_win_app passthru_context_xmm_regs_app syscall_std_app suspend_app_win guard_page_app \
raise_exception_app sw_interrupt_app win_callback_app suspend_context_app_win \
flag_ac_win_app win_early_thread win_no_dependencies win_load_library winapp_exception_context \
win_queue_apc app_inspects_internal_thread_win_app load_resource_app reserve_memory_win
OBJECT_ROOTS += flag_ac_app_asm inline_opt_test_asm inline_opt_test_app_asm dummy_dll rebase_dll \
import_forwarder_error
DLL_ROOTS += win_tls_dll win_early_thread_dll dummy_dll dummy_dll2
ifeq ($(TARGET),ia32)
TEST_TOOL_ROOTS += ea_verifier_addr16 inline_opt_test_df1 inline_opt_test_df3 baserel_in_probe_tool swizzle_seg \
df_test_tool1 df_test_tool2 df_test_tool3 df_test_tool4 df_test_tool5 inlined-stack-arg2 \
analysis_flag_overwrite_tool1 analysis_flag_overwrite_tool2 analysis_flag_overwrite_tool3 \
callappfast10 callappstd10
TEST_ROOTS += df_test1_inline df_test1_noinline df_test1_noinline_bridge df_test2_inline df_test2_noinline \
df_test2_noinline_bridge df_test3_inline df_test3_noinline df_test3_noinline_bridge df_test4_inline \
df_test4_noinline df_test4_noinline_bridge df_test5_inline df_test5_noinline inline_opt_test_df2 \
df_test5_noinline_bridge flags_at_analysis analysis_flag_overwrite_test1_inline seg_override_win1 \
analysis_flag_overwrite_test1_noinline analysis_flag_overwrite_test1_noinline_bridge \
analysis_flag_overwrite_test2_inline analysis_flag_overwrite_test2_noinline \
analysis_flag_overwrite_test2_noinline_bridge analysis_flag_overwrite_test3_inline \
analysis_flag_overwrite_test3_noinline analysis_flag_overwrite_test3_noinline_bridge \
flag_spill_fill_test1_inline flag_spill_fill_test1_noinline flag_spill_fill_test1_noinline_bridge \
tstcmpxchg8b_with_explicit_ebx reg_operands_test win_exception_detect failed_attach_with_error_file \
test_sysenter_win baserel_in_probe
TOOL_ROOTS += flag_spill_fill_tool1 flags_at_analysis_tool
APP_ROOTS += reg_operands_test_app analysis_flag_overwrite_app flag_spill_fill_app flags_at_analysis_app \
rebase_dll2 swizzle_seg_app df_test_app seg_override_app1 winfast10 winstd10 thread_ea_addr16 \
inline_opt_test_df_app tstcmpxchg8b_with_explicit_ebx win_exception_test test_sysenter_win
OBJECT_ROOTS += flag_spill_fill_tool1_asm inline_opt_test_df_asm inline_opt_test_df_app_asm seg_override_app1_win \
reg_operands_test_app_win analysis_flag_overwrite_app_win flag_spill_fill_app_win df_test_app_win \
flags_at_analysis_app_win cmpxchg8b_with_explicit_ebx_asm analysis_flag_overwrite_tool1_win \
analysis_flag_overwrite_tool2_win analysis_flag_overwrite_tool3_win df_test_tool1_win \
df_test_tool2_win df_test_tool3_win df_test_tool4_win df_test_tool5_win inlined-stack-arg2_win
endif
ifeq ($(TARGET),intel64)
TEST_TOOL_ROOTS += test_ip_access callapp_64bit_param_tool test_inlined_consts callapp3 callapp4 callapp13
TEST_ROOTS += suspend-mxcsr test_lea_rip spalign_no_inline_bridge win_divide_by_zero_exception_for_iretq_order
TOOL_ROOTS += exception_monitor_for_iret_order
APP_ROOTS += test_ip_access_app callapp_64bit_param_app test_lea_rip_app
OBJECT_ROOTS += test_inlined_consts_asm test_ip_access_app_asm
endif
ifeq ($(ICC),1)
TEST_ROOTS += win_mxcsr
endif
endif
###### Handle exceptions here ######
# Disable some tests when running with icc.
ifeq ($(ICC),1)
ifeq ($(TARGET_OS),windows)
TEST_TOOL_ROOTS := $(filter-out test_iarg_partial_context, $(TEST_TOOL_ROOTS))
# See Mantis 3047
ifeq ($(TARGET),ia32)
TEST_ROOTS := $(filter-out image_entry_jit image_entry_probe image_entry_probe_pseudofini, $(TEST_ROOTS))
endif
endif
ifeq ($(TARGET_OS),linux)
TEST_TOOL_ROOTS := $(filter-out test_iarg_partial_context, $(TEST_TOOL_ROOTS))
ifeq ($(TARGET),ia32)
TEST_TOOL_ROOTS := $(filter-out check_acall_inline_opt, $(TEST_TOOL_ROOTS))
endif
endif
ICC_VERSION_GE_19 := $(shell $(TOOLS_ROOT)/Utils/testToolVersion $(CCPATH) ge 19)
ifeq ($(ICC_VERSION_GE_19),1)
# See mantis 4699
ifeq ($(TARGET),ia32)
TEST_TOOL_ROOTS := $(filter-out aoti_mutation_tool, $(TEST_TOOL_ROOTS))
APP_ROOTS := $(filter-out aoti_mutation_target, $(APP_ROOTS))
endif
# See mantis 4700
TEST_ROOTS := $(filter-out undecorateOperator, $(TEST_ROOTS))
APP_ROOTS := $(filter-out undecorateOperator_app, $(APP_ROOTS))
endif
endif
ifeq ($(TARGET_OS),linux)
ifeq ($(HOST_ARCH)-$(TARGET),intel64-ia32)
# The loader test doesn't run cross-architecture
TEST_ROOTS := $(filter-out loader, $(TEST_ROOTS))
endif
ifeq ($(shell $(TOOLS_ROOT)/Utils/testStaticLibs),1)
TEST_ROOTS := $(filter-out mtstatic, $(TEST_ROOTS))
APP_ROOTS := $(filter-out thread_static, $(APP_ROOTS))
endif
# Disable multimem for rhel7.5 and centos 7.8 - see mantis 4591
DIST_VER_GE_75 := $(shell $(TOOLS_ROOT)/Utils/testLinuxDistVersion ge 7.5)
DIST_VER_EQ_7 := $(shell $(TOOLS_ROOT)/Utils/testLinuxDistVersion eq 7)
ifeq ($(DIST_NAME_RHEL),1)
ifeq ($(DIST_VER_GE_75),1)
TEST_TOOL_ROOTS := $(filter-out multimem, $(TEST_TOOL_ROOTS))
endif
endif
ifeq ($(DIST_NAME_CENTOS),1)
ifeq ($(DIST_VER_EQ_7),1)
TEST_TOOL_ROOTS := $(filter-out multimem, $(TEST_TOOL_ROOTS))
endif
endif
# Disable multimem for ub16.04 - see mantis 4705
DIST_VER_1604 := $(shell $(TOOLS_ROOT)/Utils/testLinuxDistVersion eq 16.04)
ifeq ($(DIST_NAME_UBUNTU),1)
ifeq ($(DIST_VER_1604),1)
TEST_TOOL_ROOTS := $(filter-out multimem, $(TEST_TOOL_ROOTS))
endif
endif
endif
ifeq ($(TARGET_OS),mac)
# The set_fp_context_xmm_regs test cannot run on macOS*, because it sets the XMM registers on thread start. This interfers
# with system libraries that also use the XMM registers.
# The test_iarg_preserve_asm assembly file is not written as PIC, so it can't be built on macOS*.
TEST_TOOL_ROOTS := $(filter-out set_fp_context_xmm_regs test_iarg_preserve_probe, $(TEST_TOOL_ROOTS))
APP_ROOTS := $(filter-out test_iarg_preserve_probe_app, $(APP_ROOTS))
OBJECT_ROOTS := $(filter-out test_iarg_preserve_asm, $(OBJECT_ROOTS))
# mt_tool - Due to bug in macOS* older than Mavericks this test crashes the machine causing it to restart
MAVERICKS_OR_OLDER := $(shell /usr/bin/sw_vers | $(GREP) ProductVersion: | $(AWK) '{split($$2, a, "."); print (a[2] <= 9)}')
ifeq ($(MAVERICKS_OR_OLDER),1)
TEST_TOOL_ROOTS := $(filter-out mt_tool, $(TEST_TOOL_ROOTS))
TEST_ROOTS := $(filter-out internal_thread mt_tool_safe_start, $(TEST_ROOTS))
endif
# See mantis 4670
MACOS_VERSION_GE_1014 := $(shell $(TOOLS_ROOT)/Utils/testMacOsVersion ge 10.14.0)
ifeq ($(MACOS_VERSION_GE_1014), 1)
TEST_ROOTS := $(filter-out statica_locktest, $(TEST_ROOTS))
endif
endif
# These tests fail - fix and remove the following:
ifeq ($(TARGET_OS),windows)
TEST_TOOL_ROOTS := $(filter-out callappfast10 callappstd10 jcx_addr16_tool sse-ref, $(TEST_TOOL_ROOTS))
TEST_ROOTS := $(filter-out seg_override_win1 symserv_lowmem sympath exports_only_probe exports_only \
suspend-mxcsr image_entry_jit, $(TEST_ROOTS))
ifeq ($(ICC),1)
TEST_TOOL_ROOTS := $(filter-out internal_exception_handler, $(TEST_TOOL_ROOTS))
APP_ROOTS := $(filter-out internal_exception_handler_app, $(APP_ROOTS))
endif
endif
ifeq ($(TARGET_OS),windows)
ifeq ($(HOST_ARCH),ia32)
# Skip the XMM test case of the suspend_context_app_win.exe test application. See Mantis 3510.
SKIP_XMM_TEST_CASE := /DSKIP_XMM_TEST_CASE
endif
ifeq ($(HOST_ARCH),intel64)
# This test passes when running on a native 32 bit Windows system but fails when running on WOW64.
TEST_ROOTS := $(filter-out test_sysenter_win, $(TEST_ROOTS))
endif
endif
# TODO: These tests did not run before the changes - fix and remove the following:
TEST_ROOTS := $(filter-out sigmaskstatic sigmask, $(TEST_ROOTS))
APP_ROOTS := $(filter-out sigmaskstatic sigmask, $(APP_ROOTS))
###### 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)
ifeq ($(TARGET_OS),windows)
# Disable suspend_win from sanity only since it runs for too long (no mantis)
SANITY_SUBSET := $(filter-out suspend_win, $(SANITY_SUBSET))
endif
##############################################################
#
# 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
# -dwarf_file is not supported on Windows.
ifneq ($(TARGET_OS),windows)
DWARF_FILE_KNOB := -dwarf_file $(HELLO_APP_DBG_INFO)
endif
line.test: $(OBJDIR)line$(PINTOOL_SUFFIX) $(HELLO_APP)
$(PIN) -t $(OBJDIR)line$(PINTOOL_SUFFIX) $(DWARF_FILE_KNOB) -o $(OBJDIR)line_tool.out \
-- $(HELLO_APP) > $(OBJDIR)line.out 2>&1
$(DIFF) $(OBJDIR)line_tool.out line.reference
$(RM) $(OBJDIR)line_tool.out $(OBJDIR)line.out
symserv_lowmem.test: $(OBJDIR)line$(PINTOOL_SUFFIX) $(HELLO_APP)
# Enforce debug info garbage collection in symbol server
$(PIN) -logfile $(OBJDIR)symserv.log -xyzzy -log_server 1 \
-t $(OBJDIR)line$(PINTOOL_SUFFIX) -logfile $(OBJDIR)symserv.log -xyzzy -log_server 1 -debug_info_max_size 0 \
-- $(HELLO_APP)
$(DIFF) line.output line.reference
$(QGREP) "SM:: Unloaded" $(OBJDIR)symserv.log.server*
$(RM) $(OBJDIR)symserv.log.server* line.output
sympath.test: $(OBJDIR)line$(PINTOOL_SUFFIX) $(HELLO_APP)
mkdir -p sympath$(OBJDIR)
cp $(HELLO_APP) $(OBJDIR)line$(PINTOOL_SUFFIX) sympath$(OBJDIR)
# Debug info file resides in parent directory and is not searched by dbghelp.dll
# No line info output is expected
cd sympath$(OBJDIR); ../$(PIN) -t line$(PINTOOL_SUFFIX) -- $(HELLO_APP)
$(CGREP) -i "line" sympath$(OBJDIR)line.output | $(QGREP) "0"
$(RM) sympath$(OBJDIR)line.output
# Parent directory is searched due to -symbol_path knob.
# Regular line info output is expected
cd sympath$(OBJDIR); ../$(PIN) -t line$(PINTOOL_SUFFIX) -symbol_path .. -- $(HELLO_APP))
$(DIFF) sympath$(OBJDIR)line.output line.reference
$(RM) -rf sympath$(OBJDIR)
htab.test: $(OBJDIR)htab$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)htab$(EXE_SUFFIX)
thread_usestack.test: $(OBJDIR)thread_usestack$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)thread_usestack$(EXE_SUFFIX) > $(OBJDIR)thread_usestack.out 2>&1
$(RM) $(OBJDIR)thread_usestack.out
checkexecuting.test: $(OBJDIR)checkexecuting$(PINTOOL_SUFFIX) $(OBJDIR)cmovstest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)checkexecuting$(PINTOOL_SUFFIX) -o $(OBJDIR)checkexecuting.out \
-- $(OBJDIR)cmovstest$(EXE_SUFFIX) > $(OBJDIR)cmovstest.out 2>&1
$(DIFF) $(OBJDIR)checkexecuting.out $(OBJDIR)cmovstest.out
$(RM) $(OBJDIR)checkexecuting.out $(OBJDIR)cmovstest.out
ea_verifier_bt.test: $(OBJDIR)ea_verifier_bt$(PINTOOL_SUFFIX) $(OBJDIR)btc_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)ea_verifier_bt$(PINTOOL_SUFFIX) -o $(OBJDIR)ea_verifier_bt.out \
-- $(OBJDIR)btc_app$(EXE_SUFFIX) > $(OBJDIR)ea_verifier_bt.app.out 2>&1
$(RM) $(OBJDIR)ea_verifier_bt.out $(OBJDIR)ea_verifier_bt.app.out
kthread.test: $(OBJDIR)kthread$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)kthread$(EXE_SUFFIX) > $(OBJDIR)kthread.out 2>&1
$(DIFF) $(OBJDIR)kthread.out kthread.reference
$(RM) $(OBJDIR)kthread.out
callsp.test: $(OBJDIR)callsp$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)callsp$(EXE_SUFFIX)
mtstatic.test: $(OBJDIR)thread_static$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)thread_static$(EXE_SUFFIX) > $(OBJDIR)mtstatic.out 2>&1
$(DIFF) $(OBJDIR)mtstatic.out mtstatic.reference
$(RM) $(OBJDIR)mtstatic.out
sigmask-mac.test: $(OBJDIR)sigmask$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)sigmask$(EXE_SUFFIX) > $(OBJDIR)sigmask-mac.out 2>&1
$(DIFF) $(OBJDIR)sigmask-mac.out sigmask-mac.reference
$(DIFF) $(OBJDIR)sigmask-mac.out sigmask-mac.reference
$(RM) $(OBJDIR)sigmask-mac.out
sigmask.test: $(OBJDIR)sigmask$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)sigmask$(EXE_SUFFIX) > $(OBJDIR)sigmask.out 2>&1
$(DIFF) $(OBJDIR)sigmask.out sigmask.reference
$(RM) $(OBJDIR)sigmask.out
sigmaskstatic.test: $(OBJDIR)sigmaskstatic$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)sigmaskstatic$(EXE_SUFFIX) > $(OBJDIR)sigmaskstatic.out 2>&1
$(DIFF) $(OBJDIR)sigmaskstatic.out sigmask.reference
$(RM) $(OBJDIR)sigmaskstatic.out
checkinline_nocmov.test: $(OBJDIR)checkinline$(PINTOOL_SUFFIX) $(TESTAPP)
$(RM) -f $(OBJDIR)checkinline_nocmov.makefile.copy
$(PIN) -xyzzy -nocmov 1 -t $(OBJDIR)checkinline$(PINTOOL_SUFFIX) -o $(OBJDIR)checkinline_nocmov.out \
-- $(TESTAPP) makefile $(OBJDIR)checkinline_nocmov.makefile.copy
$(CMP) makefile $(OBJDIR)checkinline_nocmov.makefile.copy
$(RM) $(OBJDIR)checkinline_nocmov.makefile.copy $(OBJDIR)checkinline_nocmov.out
inscount2_fornoinline.test: $(OBJDIR)inscount2_fornoinline$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)inscount2_fornoinline$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)inscount2_fornoinline.makefile.copy
$(DIFF) makefile $(OBJDIR)inscount2_fornoinline.makefile.copy
$(RM) $(OBJDIR)inscount2_fornoinline.makefile.copy
inscount2_jit_recursion.test: $(OBJDIR)inscount2_fornoinline$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -max_jit_recursion_level 5 -jit_all_exits 1 -t $(OBJDIR)inscount2_fornoinline$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)inscount2_jit_recursion.makefile.copy
$(DIFF) makefile $(OBJDIR)inscount2_jit_recursion.makefile.copy
$(RM) $(OBJDIR)inscount2_jit_recursion.makefile.copy
inline_opt_test.test: $(OBJDIR)inline_opt_test$(PINTOOL_SUFFIX) $(OBJDIR)inline_opt_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline_maxlen 1 -log_inline -logfile $(OBJDIR)inline_opt_test.log \
-t $(OBJDIR)inline_opt_test$(PINTOOL_SUFFIX) \
-- $(OBJDIR)inline_opt_test_app$(EXE_SUFFIX) > $(OBJDIR)inline_opt_test.out 2>&1
$(QGREP) "is too long to inline - is recorded as writing registers" $(OBJDIR)inline_opt_test.log
$(RM) $(OBJDIR)inline_opt_test.out $(OBJDIR)inline_opt_test.log
inline_opt_test_df1.test: $(OBJDIR)inline_opt_test_df1$(PINTOOL_SUFFIX) $(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline_maxlen 1 -log_inline -logfile $(OBJDIR)inline_opt_test_df1.log \
-t $(OBJDIR)inline_opt_test_df1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX) > $(OBJDIR)inline_opt_test_df1.out 2>&1
$(QGREP) "is too long to inline - is recorded as writing registers" $(OBJDIR)inline_opt_test_df1.log
$(RM) $(OBJDIR)inline_opt_test_df1.out $(OBJDIR)inline_opt_test_df1.log
inline_opt_test_df2.test: $(OBJDIR)inline_opt_test_df1$(PINTOOL_SUFFIX) $(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX)
$(PIN) -xyzzy -use_sahf 0 -inline_maxlen 1 -log_inline -logfile $(OBJDIR)inline_opt_test_df2.log \
-t $(OBJDIR)inline_opt_test_df1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX) > $(OBJDIR)inline_opt_test_df2.out 2>&1
$(QGREP) "is too long to inline - is recorded as writing registers" $(OBJDIR)inline_opt_test_df2.log
$(RM) $(OBJDIR)inline_opt_test_df2.out $(OBJDIR)inline_opt_test_df2.log
inline_opt_test_df3.test: $(OBJDIR)inline_opt_test_df3$(PINTOOL_SUFFIX) $(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline_maxlen 1 -txrep 0 -log_inline -logfile $(OBJDIR)inline_opt_test_df3.log \
-t $(OBJDIR)inline_opt_test_df3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX) > $(OBJDIR)inline_opt_test_df3.out 2>&1
$(QGREP) "is too long to inline - is recorded as writing registers" $(OBJDIR)inline_opt_test_df3.log
$(RM) $(OBJDIR)inline_opt_test_df3.out $(OBJDIR)inline_opt_test_df3.log
reg_operands_test.test: $(OBJDIR)reg_operands_test_tool$(PINTOOL_SUFFIX) $(OBJDIR)reg_operands_test_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)reg_operands_test_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)reg_operands_test_app$(EXE_SUFFIX) > $(OBJDIR)reg_operands_test.out 2>&1
$(DIFF) $(OBJDIR)reg_operands_test.out reg_operands_test.reference
$(RM) $(OBJDIR)reg_operands_test.out
align_access.test: $(OBJDIR)align_access$(PINTOOL_SUFFIX) $(OBJDIR)align_access_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)align_access$(PINTOOL_SUFFIX) \
-- $(OBJDIR)align_access_app$(EXE_SUFFIX) > $(OBJDIR)align_access.out 2>&1
$(RM) $(OBJDIR)align_access.out
isret.test: $(OBJDIR)isret$(PINTOOL_SUFFIX) $(OBJDIR)isret_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)isret$(PINTOOL_SUFFIX) \
-- $(OBJDIR)isret_app$(EXE_SUFFIX) > $(OBJDIR)isret.out 2>&1
$(RM) $(OBJDIR)isret.out
df_test1_inline.test: $(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test1_inline.out 2>&1
$(DIFF) $(OBJDIR)df_test1_inline.out df_test1_inline.reference
$(RM) $(OBJDIR)df_test1_inline.out
df_test1_noinline.test: $(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test1_noinline.out 2>&1
$(DIFF) $(OBJDIR)df_test1_noinline.out df_test1_noinline.reference
$(RM) $(OBJDIR)df_test1_noinline.out
df_test1_noinline_bridge.test: $(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test1_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)df_test1_noinline_bridge.out df_test1_noinline_bridge.reference
$(RM) $(OBJDIR)df_test1_noinline_bridge.out
df_test2_inline.test: $(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test2_inline.out 2>&1
$(DIFF) $(OBJDIR)df_test2_inline.out df_test2_inline.reference
$(RM) $(OBJDIR)df_test2_inline.out
move_then_test_inline.test: $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -region_max_bbls 1 -inline 1 -inline_bridge 1 -t $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) \
-exception 0 -- $(TESTAPP) makefile $(OBJDIR)move_then_test_inline.makefile.copy
$(CMP) makefile $(OBJDIR)move_then_test_inline.makefile.copy
$(RM) $(OBJDIR)move_then_test_inline.makefile.copy
move_then_test_noinline.test: $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -region_max_bbls 1 -inline 0 -t $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) \
-exception 0 -- $(TESTAPP) makefile $(OBJDIR)move_then_test_noinline.makefile.copy
$(CMP) makefile $(OBJDIR)move_then_test_noinline.makefile.copy
$(RM) $(OBJDIR)move_then_test_noinline.makefile.copy
move_then_test_noinline_bridge.test: $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -region_max_bbls 1 -inline 0 -inline_bridge 0 -t $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) \
-exception 0 -- $(TESTAPP) makefile $(OBJDIR)move_then_test_noinline_bridge.makefile.copy
$(CMP) makefile $(OBJDIR)move_then_test_noinline_bridge.makefile.copy
$(RM) $(OBJDIR)move_then_test_noinline_bridge.makefile.copy
move_then_test_inline_exception.test: $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -region_max_bbls 1 -inline 1 -inline_bridge 1 -generate_then_code_exception 1 \
-mesgon warning -logfile $(OBJDIR)move_then_test_inline_exception.log -t $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) \
-exception 1 -- $(TESTAPP) makefile $(OBJDIR)move_then_test_inline_exception.makefile.copy \
> $(OBJDIR)move_then_test_inline_exception.out 2>&1
echo "move_then_test_inline_exception.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Exception occurred in the code-cache but NOT in any code section" $(OBJDIR)move_then_test_inline_exception.log
$(RM) $(OBJDIR)move_then_test_inline_exception.log $(OBJDIR)move_then_test_inline_exception.out
move_then_test_noinline_exception.test: $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -region_max_bbls 1 -inline 0 -inline_bridge 1 -generate_then_code_exception 1 \
-mesgon warning -logfile $(OBJDIR)move_then_test_noinline_exception.log -t $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) \
-exception 1 -- $(TESTAPP) makefile $(OBJDIR)move_then_test_noinline_exception.makefile.copy \
> $(OBJDIR)move_then_test_noinline_exception.out 2>&1
echo "move_then_test_noinline_exception.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Exception occurred in the code-cache but NOT in any code section" $(OBJDIR)move_then_test_noinline_exception.log
$(RM) $(OBJDIR)move_then_test_noinline_exception.log $(OBJDIR)move_then_test_noinline_exception.out
move_then_test_noinline_bridge_exception.test: $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -region_max_bbls 1 -inline 0 -inline_bridge 0 -generate_then_code_exception 1 \
-mesgon warning -logfile $(OBJDIR)move_then_test_noinline_bridge_exception.log \
-t $(OBJDIR)move_then_test$(PINTOOL_SUFFIX) \
-exception 1 -- $(TESTAPP) makefile $(OBJDIR)move_then_test_noinline_bridge_exception.makefile.copy \
> $(OBJDIR)move_then_test_noinline_bridge_exception.out 2>&1
echo "move_then_test_noinline_bridge_exception.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Exception occurred in the code-cache but NOT in any code section" $(OBJDIR)move_then_test_noinline_bridge_exception.log
$(RM) $(OBJDIR)move_then_test_noinline_bridge_exception.log $(OBJDIR)move_then_test_noinline_bridge_exception.out
set_fp_context_xmm_regs.test: $(OBJDIR)set_fp_context_xmm_regs$(PINTOOL_SUFFIX) $(OBJDIR)set_fp_context_xmm_regs_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)set_fp_context_xmm_regs$(PINTOOL_SUFFIX) \
-- $(OBJDIR)set_fp_context_xmm_regs_app$(EXE_SUFFIX) > $(OBJDIR)set_fp_context_xmm_regs.out 2>&1
$(DIFF) $(OBJDIR)set_fp_context_xmm_regs.out set_fp_context_xmm_regs_$(TARGET).reference
$(RM) $(OBJDIR)set_fp_context_xmm_regs.out
set_fp_context_xmm_regs_const_context.test: $(OBJDIR)set_fp_context_xmm_regs$(PINTOOL_SUFFIX) $(OBJDIR)set_fp_context_xmm_regs_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)set_fp_context_xmm_regs$(PINTOOL_SUFFIX) -const_context 1 \
-- $(OBJDIR)set_fp_context_xmm_regs_app$(EXE_SUFFIX) > $(OBJDIR)set_fp_context_xmm_regs_const_context.out 2>&1
$(DIFF) $(OBJDIR)set_fp_context_xmm_regs_const_context.out set_fp_context_xmm_regs_$(TARGET).reference
$(RM) $(OBJDIR)set_fp_context_xmm_regs_const_context.out
df_test2_noinline.test: $(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test2_noinline.out 2>&1
$(DIFF) $(OBJDIR)df_test2_noinline.out df_test2_noinline.reference
$(RM) $(OBJDIR)df_test2_noinline.out
df_test2_noinline_bridge.test: $(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test2_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)df_test2_noinline_bridge.out df_test2_noinline_bridge.reference
$(RM) $(OBJDIR)df_test2_noinline_bridge.out
df_test3_inline.test: $(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test3_inline.out 2>&1
$(DIFF) $(OBJDIR)df_test3_inline.out df_test3_inline.reference
$(RM) $(OBJDIR)df_test3_inline.out
df_test3_noinline.test: $(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test3_noinline.out 2>&1
$(DIFF) $(OBJDIR)df_test3_noinline.out df_test3_noinline.reference
$(RM) $(OBJDIR)df_test3_noinline.out
df_test3_noinline_bridge.test: $(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test3_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)df_test3_noinline_bridge.out df_test3_noinline_bridge.reference
$(RM) $(OBJDIR)df_test3_noinline_bridge.out
df_test4_inline.test: $(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test4_inline.out 2>&1
$(DIFF) $(OBJDIR)df_test4_inline.out df_test4_inline.reference
$(RM) $(OBJDIR)df_test4_inline.out
df_test4_noinline.test: $(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test4_noinline.out 2>&1
$(DIFF) $(OBJDIR)df_test4_noinline.out df_test4_noinline.reference
$(RM) $(OBJDIR)df_test4_noinline.out
df_test4_noinline_bridge.test: $(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test4_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)df_test4_noinline_bridge.out df_test4_noinline_bridge.reference
$(RM) $(OBJDIR)df_test4_noinline_bridge.out
df_test5_inline.test: $(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test5_inline.out 2>&1
$(DIFF) $(OBJDIR)df_test5_inline.out df_test5_inline.reference
$(RM) $(OBJDIR)df_test5_inline.out
df_test5_noinline.test: $(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test5_noinline.out 2>&1
$(DIFF) $(OBJDIR)df_test5_noinline.out df_test5_noinline.reference
$(RM) $(OBJDIR)df_test5_noinline.out
df_test5_noinline_bridge.test: $(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX) $(OBJDIR)df_test_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX) \
-- $(OBJDIR)df_test_app$(EXE_SUFFIX) > $(OBJDIR)df_test5_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)df_test5_noinline_bridge.out df_test5_noinline_bridge.reference
$(RM) $(OBJDIR)df_test5_noinline_bridge.out
error_log_probe.test: $(OBJDIR)error_log$(PINTOOL_SUFFIX) $(OBJDIR)error_log_app$(EXE_SUFFIX)
-$(PIN) -probe 1 -error_file $(OBJDIR)error_log_probe_output -t $(OBJDIR)error_log$(PINTOOL_SUFFIX) \
-- $(OBJDIR)error_log_app$(EXE_SUFFIX)
echo "error_log.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "1001" $(OBJDIR)error_log_probe_output
$(QGREP) "ERROR" $(OBJDIR)error_log_probe_output
$(QGREP) "firstArg" $(OBJDIR)error_log_probe_output
$(QGREP) "secondArg" $(OBJDIR)error_log_probe_output
$(RM) $(OBJDIR)error_log_probe_output
error_log_jit.test: $(OBJDIR)error_log$(PINTOOL_SUFFIX) $(OBJDIR)error_log_app$(EXE_SUFFIX)
-$(PIN) -error_file $(OBJDIR)error_log_jit_output -t $(OBJDIR)error_log$(PINTOOL_SUFFIX) \
-- $(OBJDIR)error_log_app$(EXE_SUFFIX)
echo "error_log.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "1001" $(OBJDIR)error_log_jit_output
$(QGREP) "ERROR" $(OBJDIR)error_log_jit_output
$(QGREP) "firstArg" $(OBJDIR)error_log_jit_output
$(QGREP) "secondArg" $(OBJDIR)error_log_jit_output
$(RM) $(OBJDIR)error_log_jit_output
insert_if_then_call.test: $(OBJDIR)insert_if_then_call$(PINTOOL_SUFFIX) $(OBJDIR)insert_if_then_call_app$(EXE_SUFFIX)
-$(PIN) -error_file $(OBJDIR)error_log_output0 -t $(OBJDIR)insert_if_then_call$(PINTOOL_SUFFIX) \
-- $(OBJDIR)insert_if_then_call_app$(EXE_SUFFIX)
echo "insert_if_then_call.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Inserting IPOINT_ANYWHERE is not a valid action for INS_InsertIfCall API" $(OBJDIR)error_log_output0
$(RM) $(OBJDIR)error_log_output0
insert_if_then_call1.test: $(OBJDIR)insert_if_then_call1$(PINTOOL_SUFFIX) $(OBJDIR)insert_if_then_call_app$(EXE_SUFFIX)
-$(PIN) -error_file $(OBJDIR)error_log_output1 -t $(OBJDIR)insert_if_then_call1 \
-- $(OBJDIR)insert_if_then_call_app$(EXE_SUFFIX)
echo "insert_if_then_call1.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Inserting IPOINT_ANYWHERE is not a valid action for INS_InsertThenCall API" $(OBJDIR)error_log_output1
$(RM) $(OBJDIR)error_log_output1
insert_if_then_call2.test: $(OBJDIR)insert_if_then_call2$(PINTOOL_SUFFIX) $(OBJDIR)insert_if_then_call_app$(EXE_SUFFIX)
-$(PIN) -error_file $(OBJDIR)error_log_output2 -t $(OBJDIR)insert_if_then_call2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)insert_if_then_call_app$(EXE_SUFFIX)
echo "insert_if_then_call2.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Inserting IPOINT_AFTER with invalid instruction" $(OBJDIR)error_log_output2
$(RM) $(OBJDIR)error_log_output2
memory_displacement_int64.test: $(OBJDIR)memory_displacement$(PINTOOL_SUFFIX) $(OBJDIR)memory_displacement_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)memory_displacement$(PINTOOL_SUFFIX) \
-- $(OBJDIR)memory_displacement_app$(EXE_SUFFIX) 0 > $(OBJDIR)memory_displacement_int64.out
$(QGREP) "\-24" $(OBJDIR)memory_displacement_int64.out
$(RM) $(OBJDIR)memory_displacement_int64.out
$(PIN) \
-- $(OBJDIR)memory_displacement_app$(EXE_SUFFIX) 0 > $(OBJDIR)memory_displacement_int64.out
$(QGREP) "7" $(OBJDIR)memory_displacement_int64.out
$(RM) $(OBJDIR)memory_displacement_int64.out
memory_displacement_uint64.test: $(OBJDIR)memory_displacement$(PINTOOL_SUFFIX) $(OBJDIR)memory_displacement_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)memory_displacement$(PINTOOL_SUFFIX) \
-- $(OBJDIR)memory_displacement_app$(EXE_SUFFIX) 1 > $(OBJDIR)memory_displacement_uint64.out
$(QGREP) "\-24" $(OBJDIR)memory_displacement_uint64.out
$(RM) $(OBJDIR)memory_displacement_uint64.out
$(PIN) \
-- $(OBJDIR)memory_displacement_app$(EXE_SUFFIX) 1 > $(OBJDIR)memory_displacement_uint64.out
$(QGREP) "7" $(OBJDIR)memory_displacement_uint64.out
$(RM) $(OBJDIR)memory_displacement_uint64.out
memory_displacement_int32.test: $(OBJDIR)memory_displacement$(PINTOOL_SUFFIX) $(OBJDIR)memory_displacement_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)memory_displacement$(PINTOOL_SUFFIX) \
-- $(OBJDIR)memory_displacement_app$(EXE_SUFFIX) 2 > $(OBJDIR)memory_displacement_int32.out
$(QGREP) "\-24" $(OBJDIR)memory_displacement_int32.out
$(RM) $(OBJDIR)memory_displacement_int32.out
$(PIN) \
-- $(OBJDIR)memory_displacement_app$(EXE_SUFFIX) 2 > $(OBJDIR)memory_displacement_int32.out
$(QGREP) "4" $(OBJDIR)memory_displacement_int32.out
$(RM) $(OBJDIR)memory_displacement_int32.out
flags_at_analysis.test: $(OBJDIR)flags_at_analysis_tool$(PINTOOL_SUFFIX) $(OBJDIR)flags_at_analysis_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline_bridge 0 -liveness 1 -t $(OBJDIR)flags_at_analysis_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flags_at_analysis_app$(EXE_SUFFIX) > $(OBJDIR)flags_at_analysis.out 2>&1
$(RM) $(OBJDIR)flags_at_analysis.out
flag_spill_fill_test1_inline.test: $(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX) $(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX) > $(OBJDIR)flag_spill_fill_test1_inline.out 2>&1
$(DIFF) $(OBJDIR)flag_spill_fill_test1_inline.out flag_spill_fill_test1_inline.reference
$(RM) $(OBJDIR)flag_spill_fill_test1_inline.out
flag_spill_fill_test1_noinline.test: $(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX) $(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX) > $(OBJDIR)flag_spill_fill_test1_noinline.out 2>&1
$(DIFF) $(OBJDIR)flag_spill_fill_test1_noinline.out flag_spill_fill_test1_noinline.reference
$(RM) $(OBJDIR)flag_spill_fill_test1_noinline.out
flag_spill_fill_test1_noinline_bridge.test: $(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX) $(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX) > $(OBJDIR)flag_spill_fill_test1_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)flag_spill_fill_test1_noinline_bridge.out flag_spill_fill_test1_noinline_bridge.reference
$(RM) $(OBJDIR)flag_spill_fill_test1_noinline_bridge.out
analysis_flag_overwrite_test1_inline.test: $(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test1_inline.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test1_inline.out analysis_flag_overwrite_test1_inline.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test1_inline.out
analysis_flag_overwrite_test1_noinline.test: $(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test1_noinline.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test1_noinline.out analysis_flag_overwrite_test1_noinline.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test1_noinline.out
analysis_flag_overwrite_test1_noinline_bridge.test: $(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test1_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test1_noinline_bridge.out analysis_flag_overwrite_test1_noinline_bridge.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test1_noinline_bridge.out
analysis_flag_overwrite_test2_inline.test: $(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test2_inline.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test2_inline.out analysis_flag_overwrite_test2_inline.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test2_inline.out
analysis_flag_overwrite_test2_noinline.test: $(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test2_noinline.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test2_noinline.out analysis_flag_overwrite_test2_noinline.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test2_noinline.out
analysis_flag_overwrite_test2_noinline_bridge.test: $(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test2_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test2_noinline_bridge.out analysis_flag_overwrite_test2_noinline_bridge.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test2_noinline_bridge.out
analysis_flag_overwrite_test3_inline.test: $(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test3_inline.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test3_inline.out analysis_flag_overwrite_test3_inline.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test3_inline.out
analysis_flag_overwrite_test3_noinline.test: $(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test3_noinline.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test3_noinline.out analysis_flag_overwrite_test3_noinline.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test3_noinline.out
analysis_flag_overwrite_test3_noinline_bridge.test: $(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX) $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX) \
-- $(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX) > $(OBJDIR)analysis_flag_overwrite_test3_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)analysis_flag_overwrite_test3_noinline_bridge.out analysis_flag_overwrite_test3_noinline_bridge.reference
$(RM) $(OBJDIR)analysis_flag_overwrite_test3_noinline_bridge.out
flag_ac_noinline_bridge.test: $(OBJDIR)flag_ac_tool$(PINTOOL_SUFFIX) $(OBJDIR)flag_ac_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)flag_ac_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_ac_app$(EXE_SUFFIX) > $(OBJDIR)flag_ac_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)flag_ac_noinline_bridge.out flag_ac_noinline_bridge.reference
$(RM) $(OBJDIR)flag_ac_noinline_bridge.out
flag_ac_noinline.test: $(OBJDIR)flag_ac_tool$(PINTOOL_SUFFIX) $(OBJDIR)flag_ac_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)flag_ac_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_ac_app$(EXE_SUFFIX) > $(OBJDIR)flag_ac_noinline.out 2>&1
$(DIFF) $(OBJDIR)flag_ac_noinline.out flag_ac_noinline.reference
$(RM) $(OBJDIR)flag_ac_noinline.out
flag_ac_inline.test: $(OBJDIR)flag_ac_tool$(PINTOOL_SUFFIX) $(OBJDIR)flag_ac_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)flag_ac_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_ac_app$(EXE_SUFFIX) > $(OBJDIR)flag_ac_inline.out 2>&1
$(DIFF) $(OBJDIR)flag_ac_inline.out flag_ac_inline.reference
$(RM) $(OBJDIR)flag_ac_inline.out
flag_ac_win_noinline_bridge.test: $(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX) $(OBJDIR)flag_ac_win_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_ac_win_app$(EXE_SUFFIX) > $(OBJDIR)flag_ac_win_noinline_bridge.out 2>&1
$(DIFF) $(OBJDIR)flag_ac_win_noinline_bridge.out flag_ac_win_noinline_bridge.reference
$(RM) $(OBJDIR)flag_ac_win_noinline_bridge.out
flag_ac_win_noinline.test: $(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX) $(OBJDIR)flag_ac_win_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_ac_win_app$(EXE_SUFFIX) > $(OBJDIR)flag_ac_win_noinline.out 2>&1
$(DIFF) $(OBJDIR)flag_ac_win_noinline.out flag_ac_win_noinline.reference
$(RM) $(OBJDIR)flag_ac_win_noinline.out
flag_ac_win_inline.test: $(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX) $(OBJDIR)flag_ac_win_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)flag_ac_win_app$(EXE_SUFFIX) > $(OBJDIR)flag_ac_win_inline.out 2>&1
$(DIFF) $(OBJDIR)flag_ac_win_inline.out flag_ac_win_inline.reference
$(RM) $(OBJDIR)flag_ac_win_inline.out
swizzle2.test: $(OBJDIR)swizzle2$(PINTOOL_SUFFIX) $(OBJDIR)swizzlealloc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)swizzle2$(PINTOOL_SUFFIX) -- $(OBJDIR)swizzlealloc$(EXE_SUFFIX) > $(OBJDIR)swizzle2.out 2>&1
$(DIFF) $(OBJDIR)swizzle2.out swizzle2.reference
$(RM) $(OBJDIR)swizzle2.out
swizzle3.test: $(OBJDIR)swizzle3$(PINTOOL_SUFFIX) $(OBJDIR)swizzlealloc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)swizzle3$(PINTOOL_SUFFIX) -- $(OBJDIR)swizzlealloc$(EXE_SUFFIX) > $(OBJDIR)swizzle3.out 2>&1
$(DIFF) $(OBJDIR)swizzle3.out swizzle2.reference
$(RM) $(OBJDIR)swizzle3.out
swizzle5.test: $(OBJDIR)swizzle5$(PINTOOL_SUFFIX) $(OBJDIR)swizzlealloc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)swizzle5$(PINTOOL_SUFFIX) -- $(OBJDIR)swizzlealloc$(EXE_SUFFIX) > $(OBJDIR)swizzle5.out 2>&1
$(DIFF) $(OBJDIR)swizzle5.out swizzle5.reference
$(RM) $(OBJDIR)swizzle5.out
reg_value_xmm.test: $(OBJDIR)reg_value_xmm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_value_xmm.log -t $(OBJDIR)reg_value_xmm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_value_xmm.makefile.copy > $(OBJDIR)reg_value_xmm.out 2>&1
echo "reg_value_xmm.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Invalid REG for" $(OBJDIR)reg_value_xmm.log
$(RM) $(OBJDIR)reg_value_xmm.log $(OBJDIR)reg_value_xmm.out
reg_value_ymm.test: $(OBJDIR)reg_value_ymm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_value_ymm.log -t $(OBJDIR)reg_value_ymm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_value_ymm.makefile.copy > $(OBJDIR)reg_value_ymm.out 2>&1
echo "reg_value_ymm.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Invalid REG for" $(OBJDIR)reg_value_ymm.log
$(RM) $(OBJDIR)reg_value_ymm.log $(OBJDIR)reg_value_ymm.out
reg_value_fp_st.test: $(OBJDIR)reg_value_fp_st$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_value_fp_st.log -t $(OBJDIR)reg_value_fp_st$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_value_fp_st.makefile.copy > $(OBJDIR)reg_value_fp_st.out 2>&1
echo "reg_value_fp_st.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Invalid REG for" $(OBJDIR)reg_value_fp_st.log
$(RM) $(OBJDIR)reg_value_fp_st.log $(OBJDIR)reg_value_fp_st.out
reg_ref_fp_st.test: $(OBJDIR)reg_ref_fp_st$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_ref_fp_st.log -t $(OBJDIR)reg_ref_fp_st$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_ref_fp_st.makefile.copy > $(OBJDIR)reg_ref_fp_st.out 2>&1
echo "reg_ref_fp_st.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Can not pass st0 via ref param" $(OBJDIR)reg_ref_fp_st.log
$(RM) $(OBJDIR)reg_ref_fp_st.log $(OBJDIR)reg_ref_fp_st.out
reg_value_x87.test: $(OBJDIR)reg_value_x87$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_value_x87.log -t $(OBJDIR)reg_value_x87$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_value_x87.makefile.copy > $(OBJDIR)reg_value_x87.out 2>&1
echo "reg_value_x87.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Invalid REG for" $(OBJDIR)reg_value_x87.log
$(RM) $(OBJDIR)reg_value_x87.log $(OBJDIR)reg_value_x87.out
reg_ref_x87.test: $(OBJDIR)reg_ref_x87$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_ref_x87.log -t $(OBJDIR)reg_ref_x87$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_ref_x87.makefile.copy > $(OBJDIR)reg_ref_x87.out 2>&1
echo "reg_ref_x87.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "Invalid REG for" $(OBJDIR)reg_ref_x87.log
$(RM) $(OBJDIR)reg_ref_x87.log $(OBJDIR)reg_ref_x87.out
reg_context_x87.test: $(OBJDIR)reg_context_x87$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_x87.log -t $(OBJDIR)reg_context_x87$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_x87.makefile.copy > $(OBJDIR)reg_context_x87.out 2>&1
echo "reg_context_x87.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_x87.log
$(RM) $(OBJDIR)reg_context_x87.log $(OBJDIR)reg_context_x87.out
reg_context_x87_const_context.test: $(OBJDIR)reg_context_x87$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_x87_const_context.log \
-t $(OBJDIR)reg_context_x87$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_x87_const_context.makefile.copy \
> $(OBJDIR)reg_context_x87_const_context.out 2>&1
echo "reg_context_x87_const_context.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_x87_const_context.log
$(RM) $(OBJDIR)reg_context_x87_const_context.log $(OBJDIR)reg_context_x87_const_context.out
reg_context_set_x87.test: $(OBJDIR)reg_context_set_x87$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_set_x87.log -t $(OBJDIR)reg_context_set_x87$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_set_x87.makefile.copy > $(OBJDIR)reg_context_set_x87.out 2>&1
echo "reg_context_set_x87.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_set_x87.log
$(RM) $(OBJDIR)reg_context_set_x87.log $(OBJDIR)reg_context_set_x87.out
reg_context_fp_st.test: $(OBJDIR)reg_context_fp_st$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_fp_st.log -t $(OBJDIR)reg_context_fp_st$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_fp_st.makefile.copy > $(OBJDIR)reg_context_fp_st.out 2>&1
echo "reg_context_fp_st.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_fp_st.log
$(RM) $(OBJDIR)reg_context_fp_st.log $(OBJDIR)reg_context_fp_st.out
reg_context_fp_st_const_context.test: $(OBJDIR)reg_context_fp_st$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_fp_st_const_context.log \
-t $(OBJDIR)reg_context_fp_st$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_fp_st_const_context.makefile.copy \
> $(OBJDIR)reg_context_fp_st_const_context.out 2>&1
echo "reg_context_fp_st_const_context.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_fp_st_const_context.log
$(RM) $(OBJDIR)reg_context_fp_st_const_context.log $(OBJDIR)reg_context_fp_st_const_context.out
reg_context_set_fp_st.test: $(OBJDIR)reg_context_set_fp_st$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_set_fp_st.log -t $(OBJDIR)reg_context_set_fp_st$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_set_fp_st.makefile.copy > $(OBJDIR)reg_context_set_fp_st.out 2>&1
echo "reg_context_set_fp_st.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_set_fp_st.log
$(RM) $(OBJDIR)reg_context_set_fp_st.log $(OBJDIR)reg_context_set_fp_st.out
reg_context_xmm.test: $(OBJDIR)reg_context_xmm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_xmm.log -t $(OBJDIR)reg_context_xmm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_xmm.makefile.copy > $(OBJDIR)reg_context_xmm.out 2>&1
echo "reg_context_xmm.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_xmm.log
$(RM) $(OBJDIR)reg_context_xmm.log $(OBJDIR)reg_context_xmm.out
reg_context_xmm_const_context.test: $(OBJDIR)reg_context_xmm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_xmm_const_context.log \
-t $(OBJDIR)reg_context_xmm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_xmm_const_context.makefile.copy \
> $(OBJDIR)reg_context_xmm_const_context.out 2>&1
echo "reg_context_xmm_const_context.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_xmm_const_context.log
$(RM) $(OBJDIR)reg_context_xmm_const_context.log $(OBJDIR)reg_context_xmm_const_context.out
reg_context_set_xmm.test: $(OBJDIR)reg_context_set_xmm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_set_xmm.log -t $(OBJDIR)reg_context_set_xmm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_set_xmm.makefile.copy > $(OBJDIR)reg_context_set_xmm.out 2>&1
echo "reg_context_set_xmm.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_set_xmm.log
$(RM) $(OBJDIR)reg_context_set_xmm.log $(OBJDIR)reg_context_set_xmm.out
reg_context_ymm_const_context.test: $(OBJDIR)reg_context_ymm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_ymm_const_context.log \
-t $(OBJDIR)reg_context_ymm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_ymm_const_context.makefile.copy \
> $(OBJDIR)reg_context_ymm_const_context.out 2>&1
echo "reg_context_ymm_const_context.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_ymm_const_context.log
$(RM) $(OBJDIR)reg_context_ymm_const_context.log $(OBJDIR)reg_context_ymm_const_context.out
reg_context_ymm.test: $(OBJDIR)reg_context_ymm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_ymm.log -t $(OBJDIR)reg_context_ymm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_ymm.makefile.copy > $(OBJDIR)reg_context_ymm.out 2>&1
echo "reg_context_ymm.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_ymm.log
$(RM) $(OBJDIR)reg_context_ymm.log $(OBJDIR)reg_context_ymm.out
reg_context_set_ymm.test: $(OBJDIR)reg_context_set_ymm$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_set_ymm.log -t $(OBJDIR)reg_context_set_ymm$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_set_ymm.makefile.copy > $(OBJDIR)reg_context_set_ymm.out 2>&1
echo "reg_context_set_ymm.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "NOT supported for PIN_GetContextReg/PIN_SetContextReg" $(OBJDIR)reg_context_set_ymm.log
$(RM) $(OBJDIR)reg_context_set_ymm.log $(OBJDIR)reg_context_set_ymm.out
reg_context_set_const_context.test: $(OBJDIR)reg_context_set_const_context$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)reg_context_set_const_context.log -t $(OBJDIR)reg_context_set_const_context$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)reg_context_set_const_context.makefile.copy \
> $(OBJDIR)reg_context_set_const_context.out 2>&1
echo "reg_context_set_const_context.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "PIN_SetContextReg is NOT supported for IARG_CONST_CONTEXT" $(OBJDIR)reg_context_set_const_context.log
$(RM) $(OBJDIR)reg_context_set_const_context.log $(OBJDIR)reg_context_set_const_context.out
fp_context_set_const_context.test: $(OBJDIR)fp_context_set_const_context$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -logfile $(OBJDIR)fp_context_set_const_context.log \
-t $(OBJDIR)fp_context_set_const_context$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)fp_context_set_const_context.makefile.copy \
> $(OBJDIR)fp_context_set_const_context.out 2>&1
echo "fp_context_set_const_context.test pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "SetContextFPState is NOT supported for IARG_CONST_CONTEXT" $(OBJDIR)fp_context_set_const_context.log
$(RM) $(OBJDIR)fp_context_set_const_context.log $(OBJDIR)fp_context_set_const_context.out
smallpush.test: $(OBJDIR)smallpush$(EXE_SUFFIX)
# This test should exit with status zero. Any other exit code tells you which
# test failed.
$(PIN) -- $(OBJDIR)smallpush$(EXE_SUFFIX)
smallpush_iarg_branch_target_addr.test: $(OBJDIR)indirect_call_branch_target_addr$(PINTOOL_SUFFIX) $(OBJDIR)smallpush$(EXE_SUFFIX)
# This test should exit with status zero
$(PIN) -t $(OBJDIR)indirect_call_branch_target_addr$(PINTOOL_SUFFIX) -o $(OBJDIR)smallpush_iarg_branch_target_addr.out \
-- $(OBJDIR)smallpush$(EXE_SUFFIX)
$(RM) $(OBJDIR)smallpush_iarg_branch_target_addr.out
popea_verifier.test: $(OBJDIR)popea_verifier$(PINTOOL_SUFFIX) $(OBJDIR)smallpush$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)popea_verifier$(PINTOOL_SUFFIX) -o $(OBJDIR)popea_verifier_tool.out \
-- $(OBJDIR)smallpush$(EXE_SUFFIX) > $(OBJDIR)popea_verifier.out 2>&1
$(RM) $(OBJDIR)popea_verifier.out $(OBJDIR)popea_verifier_tool.out
# Memory address rewriting tests which use the new memory rewriting interface
rewritememop.test: $(OBJDIR)rewritememop$(PINTOOL_SUFFIX) $(OBJDIR)tstcmpxchg8b$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop$(PINTOOL_SUFFIX) -- $(OBJDIR)tstcmpxchg8b$(EXE_SUFFIX) > $(OBJDIR)rewritememop.out 2>&1
$(RM) rewritememtrace.out $(OBJDIR)rewritememop.out
# Tests rewriting both memory operands
rwm1_str.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)stringtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o rwm_str.out \
-- $(OBJDIR)stringtest$(EXE_SUFFIX) > $(OBJDIR)str.out 2>&1
$(RM) rwm_str.out $(OBJDIR)str.out
rwm1_str_const_context.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)stringtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -const_context -o $(OBJDIR)rwm_str_const_context.out \
-- $(OBJDIR)stringtest$(EXE_SUFFIX) > $(OBJDIR)str_const_context.out 2>&1
$(RM) $(OBJDIR)rwm_str_const_context.out $(OBJDIR)str_const_context.out
rwm_farret.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)far$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o $(OBJDIR)rwm_farret_tool.out \
-- $(OBJDIR)far$(EXE_SUFFIX) > $(OBJDIR)farret.out 2>&1
$(RM) $(OBJDIR)rwm_farret_tool.out $(OBJDIR)farret.out
rwm_iret.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)iret$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o $(OBJDIR)rwm_iret.out \
-- $(OBJDIR)iret$(EXE_SUFFIX) > $(OBJDIR)iret.out 2>&1
$(RM) $(OBJDIR)rwm_iret.out $(OBJDIR)iret.out
rwm_pushapopa.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)pusha_popa$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o $(OBJDIR)rwm_pushapopa_tool.out \
-- $(OBJDIR)pusha_popa$(EXE_SUFFIX) > $(OBJDIR)pushapopa.out 2>&1
$(RM) $(OBJDIR)rwm_pushapopa_tool.out $(OBJDIR)pushapopa.out
rwm_pushtest.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)pushtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o $(OBJDIR)rwm_pushtest_tool.out \
-- $(OBJDIR)pushtest$(EXE_SUFFIX) > $(OBJDIR)rwm_pushtest.out 2>&1
$(RM) $(OBJDIR)rwm_pushtest.out $(OBJDIR)rwm_pushtest_tool.out
rwm_smallpush.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)smallpush$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o $(OBJDIR)rwm_smallpush_tool.out \
-- $(OBJDIR)smallpush$(EXE_SUFFIX) > $(OBJDIR)rwm_smallpush.out 2>&1
$(RM) $(OBJDIR)rwm_smallpush_tool.out $(OBJDIR)rwm_smallpush.out
# Tests rewriting only the first memory operand
rwm1_str1.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)stringtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -2 -o $(OBJDIR)rwm1_str1.out \
-- $(OBJDIR)stringtest$(EXE_SUFFIX) > $(OBJDIR)str1.out 2>&1
$(RM) $(OBJDIR)rwm1_str1.out $(OBJDIR)str1.out
rwm_farret1.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)far$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -2 -o $(OBJDIR)rwm_farret1.out \
-- $(OBJDIR)far$(EXE_SUFFIX) > $(OBJDIR)farret1.out 2>&1
$(RM) $(OBJDIR)rwm_farret1.out $(OBJDIR)farret1.out
rwm_pushapopa1.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)pusha_popa$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -2 -o $(OBJDIR)rwm_pushapopa1.out \
-- $(OBJDIR)pusha_popa$(EXE_SUFFIX) > $(OBJDIR)pushapopa1.out 2>&1
$(RM) $(OBJDIR)rwm_pushapopa1.out $(OBJDIR)pushapopa1.out
rwm_pushtest1.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)pushtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -2 -o $(OBJDIR)rwm_pushtest1.out \
-- $(OBJDIR)pushtest$(EXE_SUFFIX) > $(OBJDIR)pushtest1.out 2>&1
$(RM) $(OBJDIR)rwm_pushtest1.out $(OBJDIR)pushtest1.out
rwm_smallpush1.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)smallpush$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -2 -o $(OBJDIR)rwm_smallpush1_tool.out \
-- $(OBJDIR)smallpush$(EXE_SUFFIX) > $(OBJDIR)rwm_smallpush1.out 2>&1
$(RM) $(OBJDIR)rwm_smallpush1_tool.out $(OBJDIR)rwm_smallpush1.out
rwm_bitops.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)btc_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -2 -o $(OBJDIR)rwm_bitops.out \
-- $(OBJDIR)btc_app$(EXE_SUFFIX) > $(OBJDIR)rwm_bitops.app.out 2>&1
$(RM) $(OBJDIR)rwm_bitops.out $(OBJDIR)rwm_bitops.app.out
addr32_override.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)addr32_override_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -o $(OBJDIR)addr32_override_tool.out \
-- $(OBJDIR)addr32_override_app$(EXE_SUFFIX) > $(OBJDIR)addr32_override.out 2>&1
$(RM) $(OBJDIR)addr32_override_tool.out $(OBJDIR)addr32_override.out
# Tests rewriting only the second memory operand
rwm1_str2.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)stringtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -1 -o $(OBJDIR)rwm1_str2.out \
-- $(OBJDIR)stringtest$(EXE_SUFFIX) > $(OBJDIR)str2.out 2>&1
$(RM) $(OBJDIR)rwm1_str2.out $(OBJDIR)str2.out
rwm_farret2.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)far$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -1 -o $(OBJDIR)rwm_farret2.out \
-- $(OBJDIR)far$(EXE_SUFFIX) > $(OBJDIR)farret2.out 2>&1
$(RM) $(OBJDIR)rwm_farret2.out $(OBJDIR)farret2.out
rwm_pushapopa2.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)pusha_popa$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -1 -o $(OBJDIR)rwm_pushapopa2.out \
-- $(OBJDIR)pusha_popa$(EXE_SUFFIX) > $(OBJDIR)pushapopa2.out 2>&1
$(RM) $(OBJDIR)rwm_pushapopa2.out $(OBJDIR)pushapopa2.out
rwm_pushtest2.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)pushtest$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -1 -o $(OBJDIR)rwm_pushtest2.out \
-- $(OBJDIR)pushtest$(EXE_SUFFIX) > $(OBJDIR)pushtest2.out 2>&1
$(RM) $(OBJDIR)rwm_pushtest2.out $(OBJDIR)pushtest2.out
rwm_smallpush2.test: $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) $(OBJDIR)smallpush$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rewritememop1$(PINTOOL_SUFFIX) -1 -o $(OBJDIR)rwm_smallpush2_tool.out \
-- $(OBJDIR)smallpush$(EXE_SUFFIX) > $(OBJDIR)rwm_smallpush2.out 2>&1
$(RM) $(OBJDIR)rwm_smallpush2_tool.out $(OBJDIR)rwm_smallpush2.out
tstcmpxchg8b_with_explicit_ebx.test: $(OBJDIR)tstcmpxchg8b_with_explicit_ebx$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)tstcmpxchg8b_with_explicit_ebx$(EXE_SUFFIX) > $(OBJDIR)tstcmpxchg8b_with_explicit_ebx.out 2>&1
$(DIFF) $(OBJDIR)tstcmpxchg8b_with_explicit_ebx.out tstcmpxchg8b_with_explicit_ebx.reference
$(RM) $(OBJDIR)tstcmpxchg8b_with_explicit_ebx.out
safecopy.test: $(OBJDIR)safecopy$(PINTOOL_SUFFIX)
$(PIN) -t $(OBJDIR)safecopy$(PINTOOL_SUFFIX) -o $(OBJDIR)safecopy.out \
-- $(TESTAPP) makefile $(OBJDIR)safecopy.makefile.copy
$(CMP) makefile $(OBJDIR)safecopy.makefile.copy
$(RM) $(OBJDIR)safecopy.out $(OBJDIR)safecopy.makefile.copy
create_rtn.test: $(OBJDIR)create_rtn$(PINTOOL_SUFFIX) $(OBJDIR)create_rtn_app_$(TARGET_OS)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)create_rtn$(PINTOOL_SUFFIX) \
-- $(OBJDIR)create_rtn_app_$(TARGET_OS)$(EXE_SUFFIX) > $(OBJDIR)create_rtn.out 2>&1
$(QGREP) "replaced successfully" $(OBJDIR)create_rtn.out
$(QGREP) "call was inserted successfully" $(OBJDIR)create_rtn.out
$(RM) $(OBJDIR)create_rtn.out
create_rtn_probed.test: $(OBJDIR)create_rtn$(PINTOOL_SUFFIX) $(OBJDIR)create_rtn_app_$(TARGET_OS)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)create_rtn$(PINTOOL_SUFFIX) -probe_mode 1 \
-- $(OBJDIR)create_rtn_app_$(TARGET_OS)$(EXE_SUFFIX) > $(OBJDIR)create_rtn_probed.out 2>&1
$(QGREP) "replaced successfully" $(OBJDIR)create_rtn_probed.out
$(QGREP) "call was inserted successfully" $(OBJDIR)create_rtn_probed.out
$(RM) $(OBJDIR)create_rtn_probed.out
claim_regs.test: $(OBJDIR)claim_regs$(PINTOOL_SUFFIX)
$(PIN) -t $(OBJDIR)claim_regs$(PINTOOL_SUFFIX) -- $(TESTAPP) > $(OBJDIR)claim_regs.out 2>&1
$(QGREP) "Passed" $(OBJDIR)claim_regs.out
$(RM) $(OBJDIR)claim_regs.out
checkerrorfile.test: $(OBJDIR)checkerrorfile$(PINTOOL_SUFFIX)
- $(PIN) -t $(OBJDIR)checkerrorfile$(PINTOOL_SUFFIX) -- $(TESTAPP) > $(OBJDIR)checkerrorfile.out 2>&1
echo "checkerrorfile pin execution should fail. Ignore the error (above, but not one below!)."
$(QGREP) "checkerrorfile.cpp:28" $(OBJDIR)checkerrorfile.out
$(RM) $(OBJDIR)checkerrorfile.out
soload.test: $(OBJDIR)soload$(PINTOOL_SUFFIX) $(OBJDIR)dltest$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)one$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)two$(DLL_SUFFIX)
$(SET_DLL_PATH) $(PIN) -t $(OBJDIR)soload$(PINTOOL_SUFFIX) -- $(OBJDIR)dltest$(EXE_SUFFIX)
$(DIFF) soload.out soload.reference
$(RM) soload.out
soloadrange.test: $(OBJDIR)soloadrange$(PINTOOL_SUFFIX) $(OBJDIR)dltest2$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)one$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)two$(DLL_SUFFIX)
touch $(OBJDIR)soloadrange.reference
$(SET_DLL_PATH) $(PIN) -t $(OBJDIR)soloadrange$(PINTOOL_SUFFIX) \
-- $(OBJDIR)dltest2$(EXE_SUFFIX) > /dev/null 2>&1
$(CMP) soloadrange.out $(OBJDIR)soloadrange.reference
$(RM) soloadrange.out $(OBJDIR)soloadrange.reference
# Test the automatic resizing of stripes
resize.test: $(TESTAPP)
$(PIN) -xyzzy -max_rtn 1024 -recycle_rtn 0 -- $(TESTAPP) makefile $(OBJDIR)resize.makefile.copy
$(CMP) makefile $(OBJDIR)resize.makefile.copy
$(RM) $(OBJDIR)resize.makefile.copy
# Test the small secondary stack
nosahflahf.test: $(TESTAPP)
$(PIN) -xyzzy -use_sahf 0 -- $(TESTAPP) makefile $(OBJDIR)nosahflahf.makefile.copy
$(DIFF) makefile $(OBJDIR)nosahflahf.makefile.copy
$(RM) $(OBJDIR)nosahflahf.makefile.copy
# Test reserve memory
reservemem.test: $(TESTAPP)
$(PIN) -xyzzy -reserve_memory large.address -- $(TESTAPP) makefile $(OBJDIR)reservemem.makefile.copy
$(CMP) makefile $(OBJDIR)reservemem.makefile.copy
$(RM) $(OBJDIR)reservemem.makefile.copy
reservemem64.test: $(OBJDIR)reserve_memory$(EXE_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -reserve_memory large.address -- $(TESTAPP) makefile $(OBJDIR)reservemem.makefile.copy
$(CMP) makefile $(OBJDIR)reservemem.makefile.copy
$(RM) $(OBJDIR)reservemem.makefile.copy
$(OBJDIR)reserve_memory$(EXE_SUFFIX) bigrange.address 0 > $(OBJDIR)reservemem64.native.out
$(PIN) -xyzzy -reserve_memory bigrange.address \
-- $(OBJDIR)reserve_memory$(EXE_SUFFIX) bigrange.address 1 > $(OBJDIR)reservemem64.pin.out
$(CMP) $(OBJDIR)reservemem64.native.out $(OBJDIR)reservemem64.pin.out
$(RM) $(OBJDIR)reservemem64.native.out $(OBJDIR)reservemem64.pin.out
reserve_mem_win.test: $(OBJDIR)reserve_memory_win$(EXE_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -unique-logfile -mesgon log_winloader -logfile $(OBJDIR)reserve_mem_win.log \
-reserve_memory winrange.address -- $(OBJDIR)reserve_memory_win$(EXE_SUFFIX) winrange.address 1 \
> $(OBJDIR)reserve_mem_win_app.log 2>&1
$(QGREP) "winloader: PROCESS_ACCESSOR: Failed to allocate the range: 0x57010000:0x57020000" \
$(OBJDIR)reserve_mem_win.log*
$(QGREP) "RESERVE MEMORY: Attempt to reserve memory at 0x68000000:0x68050000 - FAILED" \
$(OBJDIR)reserve_mem_win.log*
$(QGREP) "PROCESS_ACCESSOR: Failed to allocate the range: 0x39080000:0x39090000" \
$(OBJDIR)reserve_mem_win.log*
$(QGREP) "PROCESS_ACCESSOR: Base Address misaligned, rounding down to: 0x40010000" \
$(OBJDIR)reserve_mem_win.log*
$(QGREP) "PROCESS_ACCESSOR: End Address misaligned, rounding up to: 0x40030000" \
$(OBJDIR)reserve_mem_win.log*
$(RM) $(OBJDIR)reserve_mem_win*.log*
-$(PIN) -xyzzy -unique-logfile -mesgon log_winloader \
-logfile $(OBJDIR)reserve_mem_win.log -reserve_memory winillegalrange.address -- \
$(OBJDIR)reserve_memory_win$(EXE_SUFFIX) winrange.address 1 > $(OBJDIR)reserve_mem_win_app.log 2>&1
$(QGREP) "RESERVE MEMORY: Illegal range 0x40010000:0x40000000" $(OBJDIR)reserve_mem_win.log*
$(RM) $(OBJDIR)reserve_mem_win*.log*
rip_relative_prefix_67.test: $(OBJDIR)rip_relative_prefix_67_app_intel64$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)rip_relative_prefix_67_app_intel64$(EXE_SUFFIX)
partialinline2.test: $(OBJDIR)partialinline$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 0 -t $(OBJDIR)partialinline$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)partialinline2.makefile.copy
$(CMP) makefile $(OBJDIR)partialinline2.makefile.copy
$(RM) $(OBJDIR)partialinline2.makefile.copy
inlinecall.test: $(OBJDIR)inlinecall$(PINTOOL_SUFFIX) $(OBJDIR)oneprog$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)inlinecall$(PINTOOL_SUFFIX) -- $(OBJDIR)oneprog$(EXE_SUFFIX) > $(OBJDIR)inlinecall.out 2>&1
$(DIFF) $(OBJDIR)inlinecall.out inlinecall.reference
$(RM) $(OBJDIR)inlinecall.out
strace_ia32.test: $(OBJDIR)strace_ia32$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)strace_ia32$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)strace_ia32.makefile.copy > $(OBJDIR)strace_ia32.out 2>&1
$(QGREP) "Success" strace.out
$(QGREP) -v "Failure" strace.out
$(QGREP) "eof" strace.out
$(RM) strace.out $(OBJDIR)strace_ia32.out $(OBJDIR)strace_ia32.makefile.copy
dlclose.test: $(OBJDIR)dlclose$(PINTOOL_SUFFIX) $(OBJDIR)dlclose_app$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)close1$(DLL_SUFFIX)
$(SET_DLL_PATH) $(PIN) -t $(OBJDIR)dlclose$(PINTOOL_SUFFIX) \
-- $(OBJDIR)dlclose_app$(EXE_SUFFIX) > $(OBJDIR)dlclose.out 2>&1
$(BASHTEST) `$(GREP) "Unloaded" $(OBJDIR)dlclose.out | $(CGREP) $(OBJDIR)$(DLL_PREFIX)close` -eq "2"
$(RM) $(OBJDIR)dlclose.out
stracewin_ia32$(PINTOOL_SUFFIX).test: $(OBJDIR)stracewin_ia32$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)stracewin_ia32$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)stracewin_ia32.makefile.copy > $(OBJDIR)stracewin_ia32.out 2>&1
$(QGREP) "Success" stracewin.out
$(QGREP) -v "Failure" stracewin.out
$(QGREP) "eof" stracewin.out
$(RM) stracewin.out $(OBJDIR)stracewin_ia32.out
context.test: $(OBJDIR)context$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)context$(PINTOOL_SUFFIX) -o $(OBJDIR)context.out \
-- $(TESTAPP) makefile $(OBJDIR)context.makefile.copy
$(QGREP) -v "Failure" $(OBJDIR)context.out
$(QGREP) "Success" $(OBJDIR)context.out
$(RM) $(OBJDIR)context.out $(OBJDIR)context.makefile.copy
jitmalloctrace.test: $(OBJDIR)jitmalloctrace$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)jitmalloctrace$(PINTOOL_SUFFIX) -o $(OBJDIR)jitmalloctrace.outfile \
-- $(TESTAPP) makefile $(OBJDIR)jitmalloctrace.makefile.copy > $(OBJDIR)jitmalloctrace.out 2>&1
$(CMP) makefile $(OBJDIR)jitmalloctrace.makefile.copy
$(QGREP) "malloc" $(OBJDIR)jitmalloctrace.outfile
$(RM) $(OBJDIR)jitmalloctrace.out $(OBJDIR)jitmalloctrace.makefile.copy $(OBJDIR)jitmalloctrace.outfile
replace_free.test: $(OBJDIR)replace_free$(PINTOOL_SUFFIX) $(OBJDIR)little_malloc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)replace_free$(PINTOOL_SUFFIX) -- $(OBJDIR)little_malloc$(EXE_SUFFIX) > $(OBJDIR)replace_free.out 2>&1
$(QGREP) "free" $(OBJDIR)replace_free.out
$(RM) $(OBJDIR)replace_free.out
rtnreplace_free.test: $(OBJDIR)rtnreplace_free$(PINTOOL_SUFFIX) $(OBJDIR)little_malloc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)rtnreplace_free$(PINTOOL_SUFFIX) \
-- $(OBJDIR)little_malloc$(EXE_SUFFIX) > $(OBJDIR)rtnreplace_free.out 2>&1
$(QGREP) "free" $(OBJDIR)rtnreplace_free.out
$(RM) $(OBJDIR)rtnreplace_free.out
fp_replace.test: $(OBJDIR)fp_replace$(PINTOOL_SUFFIX) $(OBJDIR)fp_replace_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)fp_replace$(PINTOOL_SUFFIX) -- $(OBJDIR)fp_replace_app$(EXE_SUFFIX) > $(OBJDIR)fp_replace.out 2>&1
$(QGREP) "1.00335" $(OBJDIR)fp_replace.out
$(RM) $(OBJDIR)fp_replace.out
fp_insert.test: $(OBJDIR)fp_insert$(PINTOOL_SUFFIX) $(OBJDIR)fp_replace_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)fp_insert$(PINTOOL_SUFFIX) -- $(OBJDIR)fp_replace_app$(EXE_SUFFIX) > $(OBJDIR)fp_insert.out 2>&1
$(QGREP) "1.00335" $(OBJDIR)fp_insert.out
$(RM) $(OBJDIR)fp_insert.out
datasym.test: $(OBJDIR)datasym$(PINTOOL_SUFFIX) $(OBJDIR)datasym_app$(EXE_SUFFIX)
$(RM) -f symbolnames.outfile
-$(PIN) -t $(OBJDIR)datasym$(PINTOOL_SUFFIX) -- $(OBJDIR)datasym_app$(EXE_SUFFIX) > $(OBJDIR)datasym.out
$(CGREP) -i "exported_data1" symbolnames.outfile | $(QGREP) "0"
$(RM) symbolnames.outfile $(OBJDIR)datasym.out
short_name.test: $(OBJDIR)short_name$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)short_name$(PINTOOL_SUFFIX) -o $(OBJDIR)short_name.outfile \
-- $(TESTAPP) makefile $(OBJDIR)short_name.makefile.copy > $(OBJDIR)short_name.out 2>&1
$(QGREP) fopen $(OBJDIR)short_name.outfile
$(RM) $(OBJDIR)short_name.outfile $(OBJDIR)short_name.makefile.copy $(OBJDIR)short_name.out
$(PIN) -t $(OBJDIR)short_name$(PINTOOL_SUFFIX) -o $(OBJDIR)short_name.outfile -short_name \
-- $(TESTAPP) makefile $(OBJDIR)short_name.makefile.copy > $(OBJDIR)short_name.out 2>&1
$(QGREP) fopen $(OBJDIR)short_name.outfile
$(RM) $(OBJDIR)short_name.outfile $(OBJDIR)short_name.makefile.copy $(OBJDIR)short_name.out
replace_malloc_inst.test: $(OBJDIR)replace_malloc_inst$(PINTOOL_SUFFIX) $(OBJDIR)little_malloc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)replace_malloc_inst$(PINTOOL_SUFFIX) \
-- $(OBJDIR)little_malloc$(EXE_SUFFIX) > $(OBJDIR)replace_malloc_inst.out 2>&1
$(QGREP) "Test passed" $(OBJDIR)replace_malloc_inst.out
$(RM) $(OBJDIR)replace_malloc_inst.out
thread_callback.test: $(OBJDIR)thread_callback$(PINTOOL_SUFFIX) $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX)
-$(PIN) -t $(OBJDIR)thread_callback$(PINTOOL_SUFFIX) \
-- $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)thread_callback.out 2>&1
echo "thread_callback should fail. Ignore the error."
$(RM) $(OBJDIR)thread_callback.out
executeat_callback.test: $(OBJDIR)executeat_callback$(PINTOOL_SUFFIX) $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX)
-$(PIN) -t $(OBJDIR)executeat_callback$(PINTOOL_SUFFIX) \
-- $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)executeat_callback.out 2>&1
echo "executeat_callback should fail. Ignore the error."
$(QGREP) "PIN_ExecuteAt() cannot be called from a callback." $(OBJDIR)executeat_callback.out
$(RM) $(OBJDIR)executeat_callback.out
-$(PIN) -error_file $(OBJDIR)executeat_callback.xml -t $(OBJDIR)executeat_callback$(PINTOOL_SUFFIX) \
-- $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)executeat_callback.out 2>&1
$(QGREP) "PIN_ExecuteAt() cannot be called from a callback." $(OBJDIR)executeat_callback.xml
$(RM) $(OBJDIR)executeat_callback.out $(OBJDIR)executeat_callback.xml
failed_attach_with_error_file.test:
-$(PIN) -error_file $(OBJDIR)failed_attach_with_error_file.xml -pid 1 > $(OBJDIR)failed_attach_with_error_file.out 2>&1
echo "failed_attach_with_error_fileshould fail. Ignore the error."
$(QGREP) "Attach to pid" $(OBJDIR)failed_attach_with_error_file.xml
$(RM) $(OBJDIR)failed_attach_with_error_file.out $(OBJDIR)failed_attach_with_error_file.xml
executeat_lock.test: $(OBJDIR)executeat_lock$(PINTOOL_SUFFIX) $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX)
-$(PIN) -t $(OBJDIR)executeat_lock$(PINTOOL_SUFFIX) \
-- $(OBJDIR)threadtest_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)executeat_lock.out 2>&1
echo "executeat_lock should fail. Ignore the error."
$(QGREP) "Pin Client Lock" $(OBJDIR)executeat_lock.out
$(RM) $(OBJDIR)executeat_lock.out
str2int.test: $(OBJDIR)str2int$(PINTOOL_SUFFIX) $(TESTAPP)
echo "str2int should fail. Ignore the error."
-$(PIN) -t $(OBJDIR)str2int$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)str2int.makefile.copy > $(OBJDIR)str2int.out 2>&1
$(QGREP) "Error in string conversion" $(OBJDIR)str2int.out
$(RM) $(OBJDIR)str2int.out
-$(PIN) -error_file $(OBJDIR)str2int.xml -t $(OBJDIR)str2int$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)str2int.makefile.copy > $(OBJDIR)str2int.out 2>&1
$(QGREP) "Error in string conversion" $(OBJDIR)str2int.xml
$(RM) $(OBJDIR)str2int.out $(OBJDIR)str2int.xml
str2int64.test: $(OBJDIR)str2int64$(PINTOOL_SUFFIX) $(TESTAPP)
echo "str2int should fail. Ignore the error."
-$(PIN) -t $(OBJDIR)str2int64$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)str2int64.makefile.copy > $(OBJDIR)str2int64.out 2>&1
$(DIFF) $(OBJDIR)str2int64.out str2int64.reference
$(RM) $(OBJDIR)str2int64.out
-$(PIN) -error_file $(OBJDIR)str2int64.xml -t $(OBJDIR)str2int64$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)str2int64.makefile.copy > $(OBJDIR)str2int64.out 2>&1
$(QGREP) "Error in string conversion" $(OBJDIR)str2int64.xml
$(RM) $(OBJDIR)str2int64.out $(OBJDIR)str2int64.xml
str2flt.test: $(OBJDIR)str2flt$(PINTOOL_SUFFIX) $(TESTAPP)
echo "str2flt should fail. Ignore the error."
-$(PIN) -t $(OBJDIR)str2flt$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)str2flt.makefile.copy > $(OBJDIR)str2flt.out 2>&1
$(QGREP) "Non-numeric" $(OBJDIR)str2flt.out
$(RM) $(OBJDIR)str2flt.out
-$(PIN) -error_file $(OBJDIR)str2flt.xml -t $(OBJDIR)str2flt$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)str2flt.makefile.copy > $(OBJDIR)str2flt.out 2>&1
$(QGREP) "Non-numeric" $(OBJDIR)str2flt.xml
$(RM) $(OBJDIR)str2flt.out $(OBJDIR)str2flt.xml
toolfetch_sub.test: $(OBJDIR)toolfetch_sub$(PINTOOL_SUFFIX) $(OBJDIR)tool_fetch_app$(EXE_SUFFIX)
-$(PIN) -t $(OBJDIR)toolfetch_sub$(PINTOOL_SUFFIX) \
-- $(OBJDIR)tool_fetch_app$(EXE_SUFFIX) > $(OBJDIR)toolfetch_sub.out 2>&1
$(DIFF) $(OBJDIR)toolfetch_sub.out toolfetch_sub.reference
$(RM) $(OBJDIR)toolfetch_sub.out
args_err.test: $(OBJDIR)args_err$(PINTOOL_SUFFIX)
echo "args_err should fail. Ignore the error."
-$(PIN) -error_file $(OBJDIR)args_err.xml -xyzzy -error -logfile $(OBJDIR)args_err.log \
-t $(OBJDIR)args_err$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)args_err.makefile.copy > $(OBJDIR)args_err.out 2>&1
$(QGREP) "Testing errors" $(OBJDIR)args_err.xml
$(RM) $(OBJDIR)args_err.xml $(OBJDIR)args_err.log $(OBJDIR)args_err.out
echo "args_err should fail. Ignore the error."
-$(PIN) -error_file $(OBJDIR)args_err.xml -xyzzy -fatal -logfile $(OBJDIR)args_err.log \
-t $(OBJDIR)args_err$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)args_err.makefile.copy > $(OBJDIR)args_err.out 2>&1
$(QGREP) "Testing errors" $(OBJDIR)args_err.xml
$(RM) $(OBJDIR)args_err.xml $(OBJDIR)args_err.log $(OBJDIR)args_err.out
echo "args_err should fail. Ignore the error."
-$(PIN) -error_file $(OBJDIR)args_err.xml -xyzzy -assert -logfile $(OBJDIR)args_err.log \
-t $(OBJDIR)args_err$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)args_err.makefile.copy > $(OBJDIR)args_err.out 2>&1
$(QGREP) "Testing assertions" $(OBJDIR)args_err.xml
$(RM) $(OBJDIR)args_err.xml $(OBJDIR)args_err.log $(OBJDIR)args_err.out
echo "args_err should fail. Ignore the error."
-$(PIN) -error_file $(OBJDIR)args_err.xml -falafel -logfile $(OBJDIR)args_err.log \
-t $(OBJDIR)args_err$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)args_err.makefile.copy > $(OBJDIR)args_err.out 2>&1
$(QGREP) "unknown option" $(OBJDIR)args_err.xml
$(RM) $(OBJDIR)args_err.xml $(OBJDIR)args_err.log $(OBJDIR)args_err.out
echo "args_err should fail. Ignore the error."
-$(PIN) -error_file $(OBJDIR)args_err.xml -logfile $(OBJDIR)args_err.log \
-t $(OBJDIR)args_err$(PINTOOL_SUFFIX) > $(OBJDIR)args_err.out 2>&1
$(QGREP) "Missing application name" $(OBJDIR)args_err.xml
$(RM) $(OBJDIR)args_err.xml $(OBJDIR)args_err.log $(OBJDIR)args_err.out
echo "args_err should fail. Ignore the error."
-$(PIN) -error_file $(OBJDIR)args_err.xml -logfile $(OBJDIR)args_err.log \
-t $(OBJDIR)args_err$(PINTOOL_SUFFIX) \
-- no_file > $(OBJDIR)args_err.out 2>&1
$(QGREP) "no_file" $(OBJDIR)args_err.xml
$(RM) $(OBJDIR)args_err.xml $(OBJDIR)args_err.log $(OBJDIR)args_err.out
echo "args_err should fail. Ignore the error."
-$(PIN) -- no_file > $(OBJDIR)args_err.out 2>&1
$(QGREP) "no_file" $(OBJDIR)args_err.out
$(RM) $(OBJDIR)args_err.out
#write_user_error is a negative test.
write_user_error.test: $(OBJDIR)write_user_error$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX)
-$(PIN) -error_file $(OBJDIR)write_user_error.xml -t $(OBJDIR)write_user_error$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)write_user_error.out 2>&1
echo "write_user_error should fail. Ignore the error."
$(QGREP) "this is a non-fatal user specified error message" $(OBJDIR)write_user_error.xml
$(QGREP) "toolarg2" $(OBJDIR)write_user_error.xml
$(QGREP) "this is a fatal user specified error message" $(OBJDIR)write_user_error.xml
$(QGREP) "toolarg4" $(OBJDIR)write_user_error.xml
$(QGREP) "this is an error message containing &apos;quotes&apos;, &quot;double quotes&quot;, &lt;less &amp;&amp; greater than&gt;" $(OBJDIR)write_user_error.xml
$(RM) $(OBJDIR)write_user_error.out $(OBJDIR)write_user_error.xml
write_debugger_error.test: $(OBJDIR)write_debugger_error$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX)
-$(PIN) -error_file $(OBJDIR)write_debugger_error.xml -t $(OBJDIR)write_debugger_error$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)write_debugger_error.out 2>&1
echo "write_debugger_error should fail. Ignore the error."
$(QGREP) "Debugger error" $(OBJDIR)write_debugger_error.xml
$(QGREP) "<type>55</type>" $(OBJDIR)write_debugger_error.xml
$(RM) $(OBJDIR)write_debugger_error.out $(OBJDIR)write_debugger_error.xml
args_lineno.test: $(OBJDIR)args_lineno$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -logfile $(OBJDIR)args_lineno.log -xyzzy -mesgon log_instrument -t $(OBJDIR)args_lineno$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)args_lineno.makefile.copy > $(OBJDIR)args_lineno.out 2>&1
$(QGREP) "args_lineno.cpp" $(OBJDIR)args_lineno.log
$(RM) $(OBJDIR)args_lineno.out $(OBJDIR)args_lineno.log $(OBJDIR)args_lineno.makefile.copy
callapp0.test: $(OBJDIR)callapp0$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp0$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo$(EXE_SUFFIX) > $(OBJDIR)callapp0.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp0.out
$(QGREP) -v "Bar" $(OBJDIR)callapp0.out
$(RM) $(OBJDIR)callapp0.out
callapp0i.test: $(OBJDIR)callapp0i$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp0i$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo$(EXE_SUFFIX) > $(OBJDIR)callapp0i.out 2>&1
$(QGREP) "Hello from Bar" $(OBJDIR)callapp0i.out
$(RM) $(OBJDIR)callapp0i.out
callapp1.test: $(OBJDIR)callapp1$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo1_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp1$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo1_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp1.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp1.out
$(QGREP) -v "Bar" $(OBJDIR)callapp1.out
$(QGREP) "one = 1" $(OBJDIR)callapp1.out
$(RM) $(OBJDIR)callapp1.out
callapp_perf.test: $(OBJDIR)callapp_perf_tool$(PINTOOL_SUFFIX) $(OBJDIR)callapp_perf_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp_perf_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) \
-- $(OBJDIR)callapp_perf_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp_perf.out 2>&1
$(RM) $(OBJDIR)callapp_perf.out $(OBJDIR)$(@:test=tool.out)
callapp_nested.test: $(OBJDIR)callapp_nested_tool$(PINTOOL_SUFFIX) $(OBJDIR)callapp_nested$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp_nested_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) \
-- $(OBJDIR)callapp_nested$(EXE_SUFFIX) > $(OBJDIR)callapp_nested.out 2>&1
$(RM) $(OBJDIR)callapp_nested.out $(OBJDIR)$(@:test=tool.out)
callapp1i.test: $(OBJDIR)callapp1i$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo1_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp1i$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo1_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp1i.out 2>&1
$(QGREP) "Hello from Bar" $(OBJDIR)callapp1i.out
$(QGREP) "one = 1" $(OBJDIR)callapp1i.out
$(RM) $(OBJDIR)callapp1i.out
callapp2.test: $(OBJDIR)callapp2$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp2$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp2.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp2.out
$(QGREP) -v "Bar" $(OBJDIR)callapp2.out
$(QGREP) "res = 3" $(OBJDIR)callapp2.out
$(RM) $(OBJDIR)callapp2.out
callapp3.test: $(OBJDIR)callapp3$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo3_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp3$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo3_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp3.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp3.out
$(QGREP) -v "Bar" $(OBJDIR)callapp3.out
$(QGREP) "res = 3" $(OBJDIR)callapp3.out
$(RM) $(OBJDIR)callapp3.out
callapp4.test: $(OBJDIR)callapp4$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo4_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp4$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo4_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp4.out 2>&1
$(QGREP) "Bar" $(OBJDIR)callapp4.out
$(QGREP) "cafe00" $(OBJDIR)callapp4.out
$(RM) $(OBJDIR)callapp4.out
callapp5.test: $(OBJDIR)callapp5$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp5$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo2_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp5.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp5.out
$(QGREP) -v "Bar" $(OBJDIR)callapp5.out
$(QGREP) "res = 3" $(OBJDIR)callapp5.out
$(RM) $(OBJDIR)callapp5.out
callapp6.test: $(OBJDIR)callapp6$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo6$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp6$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo6$(EXE_SUFFIX) > $(OBJDIR)callapp6.out 2>&1
$(QGREP) "Blue6" $(OBJDIR)callapp6.out
$(QGREP) "Bar6" $(OBJDIR)callapp6.out
$(QGREP) "myBar" $(OBJDIR)callapp6.out
$(QGREP) "myBlue" $(OBJDIR)callapp6.out
$(QGREP) "res = 3" $(OBJDIR)callapp6.out
$(RM) $(OBJDIR)callapp6.out
callapp7.test: $(OBJDIR)callapp7$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo7$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp7$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo7$(EXE_SUFFIX) > $(OBJDIR)callapp7.out 2>&1
$(QGREP) "Blue7: twice" $(OBJDIR)callapp7.out
$(QGREP) "Bar7: twice" $(OBJDIR)callapp7.out
$(QGREP) "myBar" $(OBJDIR)callapp7.out
$(QGREP) "myBlue" $(OBJDIR)callapp7.out
$(QGREP) "res = 3" $(OBJDIR)callapp7.out
$(RM) $(OBJDIR)callapp7.out
callapp8.test: $(OBJDIR)callapp8$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo8_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp8$(PINTOOL_SUFFIX) -- $(OBJDIR)simplefoo8_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp8.out 2>&1
$(QGREP) "Bar8: thrice" $(OBJDIR)callapp8.out
$(QGREP) "myBar" $(OBJDIR)callapp8.out
$(QGREP) "res = 3" $(OBJDIR)callapp8.out
$(RM) $(OBJDIR)callapp8.out
callapp9.test: $(OBJDIR)callapp9$(PINTOOL_SUFFIX) $(OBJDIR)inner$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp9$(PINTOOL_SUFFIX) -- $(OBJDIR)inner$(EXE_SUFFIX) > $(OBJDIR)callapp9.out 2>&1
$(BASHTEST) `$(CGREP) "Inner G0=0" $(OBJDIR)callapp9.out` -eq "2"
$(RM) $(OBJDIR)callapp9.out
callapp9_const_context.test: $(OBJDIR)callapp9$(PINTOOL_SUFFIX) $(OBJDIR)inner$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp9$(PINTOOL_SUFFIX) -const_context \
-- $(OBJDIR)inner$(EXE_SUFFIX) > $(OBJDIR)callapp9_const_context.out 2>&1
$(BASHTEST) `$(CGREP) "Inner G0=0" $(OBJDIR)callapp9_const_context.out` -eq "2"
$(RM) $(OBJDIR)callapp9_const_context.out
callapp10.test: $(OBJDIR)callapp10$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo10_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp10$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo10_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp10.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp10.out
$(QGREP) -v "Bar" $(OBJDIR)callapp10.out
$(QGREP) "one = 1" $(OBJDIR)callapp10.out
$(QGREP) "ret = 45" $(OBJDIR)callapp10.out
$(RM) $(OBJDIR)callapp10.out
$(PIN) $(MT) -t $(OBJDIR)callapp10$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo10_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp10.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callapp10.out
$(QGREP) -v "Bar" $(OBJDIR)callapp10.out
$(QGREP) "one = 1" $(OBJDIR)callapp10.out
$(QGREP) "ret = 45" $(OBJDIR)callapp10.out
$(RM) $(OBJDIR)callapp10.out
callapp10i.test: $(OBJDIR)callapp10i$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo10_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp10i$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo10_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp10i.out 2>&1
$(QGREP) "Hello from Bar" $(OBJDIR)callapp10i.out
$(QGREP) "one = 1" $(OBJDIR)callapp10i.out
$(QGREP) "ret = 45" $(OBJDIR)callapp10i.out
$(RM) $(OBJDIR)callapp10i.out
callappfast10.test: $(OBJDIR)callappfast10$(PINTOOL_SUFFIX) $(OBJDIR)winfast10$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callappfast10$(PINTOOL_SUFFIX) -- $(OBJDIR)winfast10$(EXE_SUFFIX) > $(OBJDIR)callappfast10.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callappfast10.out
$(QGREP) -v "Bar" $(OBJDIR)callappfast10.out
$(QGREP) "one = 1" $(OBJDIR)callappfast10.out
$(QGREP) "ret = 45" $(OBJDIR)callappfast10.out
$(RM) $(OBJDIR)callappfast10.out
callappstd10.test: $(OBJDIR)callappstd10$(PINTOOL_SUFFIX) $(OBJDIR)winstd10$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callappstd10$(PINTOOL_SUFFIX) -- $(OBJDIR)winstd10$(EXE_SUFFIX) > $(OBJDIR)callappstd10.out 2>&1
$(QGREP) "Blue" $(OBJDIR)callappstd10.out
$(QGREP) -v "Bar" $(OBJDIR)callappstd10.out
$(QGREP) "one = 1" $(OBJDIR)callappstd10.out
$(QGREP) "ret = 45" $(OBJDIR)callappstd10.out
$(RM) $(OBJDIR)callappstd10.out
callapp12.test: $(OBJDIR)callapp12$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo12_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp12$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo12_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp12.out 2>&1
$(QGREP) "passed" $(OBJDIR)callapp12.out
$(QGREP) "Correct" $(OBJDIR)callapp12.out
$(RM) $(OBJDIR)callapp12.out
callapp13.test: $(OBJDIR)callapp13$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo13_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp13$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo13_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp13.out 2>&1
$(QGREP) "passed" $(OBJDIR)callapp13.out
$(QGREP) "Correct" $(OBJDIR)callapp13.out
$(RM) $(OBJDIR)callapp13.out
callapp14.test: $(OBJDIR)callapp14$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo14$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp14$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) \
-- $(OBJDIR)simplefoo14$(EXE_SUFFIX) > $(OBJDIR)callapp14.out 2>&1
$(RM) $(OBJDIR)callapp14.out $(OBJDIR)$(@:test=tool.out)
# on windows, you must have the correct version of dbghelp.dll in $PIN_HOME\intel64\bin
# for this test to replace the functions. sanity doesn't, so this is not tested on windows.
callapp15.test: $(OBJDIR)callapp15$(PINTOOL_SUFFIX) $(OBJDIR)simplefoo9_$(OS_TYPE)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp15$(PINTOOL_SUFFIX) \
-- $(OBJDIR)simplefoo9_$(OS_TYPE)$(EXE_SUFFIX) > $(OBJDIR)callapp15.out 2>&1
$(QGREP) "Blue6" $(OBJDIR)callapp15.out
$(QGREP) "Bar6" $(OBJDIR)callapp15.out
$(QGREP) "myBlue" $(OBJDIR)callapp15.out
$(QGREP) "res = 3" $(OBJDIR)callapp15.out
$(RM) $(OBJDIR)callapp15.out
callapp_64bit_param_tool.test: $(OBJDIR)callapp_64bit_param_tool$(PINTOOL_SUFFIX) $(OBJDIR)callapp_64bit_param_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)callapp_64bit_param_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)callapp_64bit_param_app$(EXE_SUFFIX) > $(OBJDIR)callapp_64bit_param_tool.out 2>&1
$(RM) $(OBJDIR)callapp_64bit_param_tool.out
change_syscall.test: $(OBJDIR)change_syscall$(PINTOOL_SUFFIX) $(OBJDIR)change_syscall_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)change_syscall$(PINTOOL_SUFFIX) -- $(OBJDIR)change_syscall_app$(EXE_SUFFIX)
spawntool.test: $(OBJDIR)spawntool$(PINTOOL_SUFFIX) $(OBJDIR)spawntool_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)spawntool$(PINTOOL_SUFFIX) -v -- $(OBJDIR)spawntool_app$(EXE_SUFFIX) > $(OBJDIR)spawntool.out 2>&1
$(PIN) -t $(OBJDIR)spawntool$(PINTOOL_SUFFIX) -v -c \
-- $(OBJDIR)spawntool_app$(EXE_SUFFIX) > $(OBJDIR)spawntool-c.out 2>&1
$(RM) $(OBJDIR)spawntool.out $(OBJDIR)spawntool-c.out
sse-ref.test: $(OBJDIR)sse-ref$(PINTOOL_SUFFIX) $(OBJDIR)sse$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)sse-ref$(PINTOOL_SUFFIX) -- $(OBJDIR)sse$(EXE_SUFFIX) 5 > $(OBJDIR)sse-ref.out
$(DIFF) --ignore-space-change sse-ref.reference $(OBJDIR)sse-ref.out
$(RM) $(OBJDIR)sse-ref.out
test_ip_access.test: $(OBJDIR)test_ip_access$(PINTOOL_SUFFIX) $(OBJDIR)test_ip_access_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)test_ip_access$(PINTOOL_SUFFIX) \
-- $(OBJDIR)test_ip_access_app$(EXE_SUFFIX) > $(OBJDIR)test_ip_access.out
$(QGREP) "SUCCESS" $(OBJDIR)test_ip_access.out
$(RM) $(OBJDIR)test_ip_access.out
int3.test: $(OBJDIR)int3del$(PINTOOL_SUFFIX) $(OBJDIR)int3test$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)int3del$(PINTOOL_SUFFIX) -- $(OBJDIR)int3test$(EXE_SUFFIX) > $(OBJDIR)int3.out
$(RM) $(OBJDIR)int3.out
xmmtest.test: $(OBJDIR)xmmtest$(PINTOOL_SUFFIX) $(OBJDIR)xmmapp$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)xmmtest$(PINTOOL_SUFFIX) -- $(OBJDIR)xmmapp$(EXE_SUFFIX) 9 > $(OBJDIR)xmmtest.out
$(OBJDIR)xmmapp$(EXE_SUFFIX) 9 > $(OBJDIR)xmmapp.out
$(DIFF) --ignore-space-change $(OBJDIR)xmmapp.out $(OBJDIR)xmmtest.out
$(RM) $(OBJDIR)xmmapp.out $(OBJDIR)xmmtest.out
stress_const_context.test: $(OBJDIR)stress_const_context$(PINTOOL_SUFFIX) $(OBJDIR)stress_const_context_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)stress_const_context$(PINTOOL_SUFFIX) -- $(OBJDIR)stress_const_context_app$(EXE_SUFFIX)
branch_target_addr.test: $(OBJDIR)branch_target_addr$(PINTOOL_SUFFIX) $(OBJDIR)doint_ia32$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)branch_target_addr$(PINTOOL_SUFFIX) -- $(OBJDIR)doint_ia32$(EXE_SUFFIX) \
> $(OBJDIR)branch_target_addr.out
$(RM) $(OBJDIR)branch_target_addr.out
pipe.test: $(OBJDIR)pipeapp$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)pipeapp$(EXE_SUFFIX)
attach.test: $(OBJDIR)attach_app$(EXE_SUFFIX) $(OBJDIR)attach$(PINTOOL_SUFFIX)
$(OBJDIR)attach_app$(EXE_SUFFIX) -pin $(PIN) -pinarg -t $(OBJDIR)attach$(PINTOOL_SUFFIX) -o $(OBJDIR)attach_tool.out \
> $(OBJDIR)attach.err 2>&1
$(DIFF) $(OBJDIR)attach_tool.out attach_tool.reference || $(QGREP) "THREAD_AREA" $(OBJDIR)attach.err
$(RM) $(OBJDIR)attach_tool.out $(OBJDIR)attach.err
spalign_no_inline_bridge.test: $(OBJDIR)spalign$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline_bridge 0 -t $(OBJDIR)spalign$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)spalign_no_inline_bridge.makefile.copy
$(RM) $(OBJDIR)spalign_no_inline_bridge.makefile.copy
clobber_xmm.test: $(OBJDIR)clobber$(PINTOOL_SUFFIX) $(OBJDIR)lpd$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)clobber$(PINTOOL_SUFFIX) -- $(OBJDIR)lpd$(EXE_SUFFIX)
badpath.test: | dir
-$(PIN) -- $(OBJDIR)BadAPPpAth > $(OBJDIR)badpath.out 2>&1
$(EGREP) "No such file|The system cannot find the file specified" $(OBJDIR)badpath.out
$(RM) $(OBJDIR)badpath.out
-$(PIN) -error_file $(OBJDIR)badpath.xml -logfile $(OBJDIR)badpath.log -- $(OBJDIR)BadAPPpAth > $(OBJDIR)badpath.out 2>&1
$(EGREP) "No such file|The system cannot find the file specified" $(OBJDIR)badpath.xml
$(RM) $(OBJDIR)badpath.out $(OBJDIR)badpath.xml $(OBJDIR)badpath.log
badfile.test: | dir
-$(PIN) -error_file $(OBJDIR)badfile.xml -logfile $(OBJDIR)badfile.log \
-- ./makefile > $(OBJDIR)badfile.out 2>&1 || echo "non-zero status" >> $(OBJDIR)badfile.log
$(EGREP) "Permission denied|not a valid Win32 application" $(OBJDIR)badfile.log
$(QGREP) non-zero $(OBJDIR)badfile.log
$(RM) $(OBJDIR)badfile.out $(OBJDIR)badfile.log $(OBJDIR)badfile.xml
cancel.test: $(OBJDIR)cancel$(EXE_SUFFIX)
-$(OBJDIR)cancel$(EXE_SUFFIX) > $(OBJDIR)cancel.native.out 2>&1
-$(PIN) -- $(OBJDIR)cancel$(EXE_SUFFIX) > $(OBJDIR)cancel.pin.out 2>&1
$(CMP) $(OBJDIR)cancel.native.out $(OBJDIR)cancel.pin.out
$(RM) $(OBJDIR)cancel.native.out $(OBJDIR)cancel.pin.out
thread_count.test: $(OBJDIR)thread_count$(PINTOOL_SUFFIX) $(HELLO_APP)
$(PIN) -t $(OBJDIR)thread_count$(PINTOOL_SUFFIX) -o $(OBJDIR)thread_count.tool.out -- $(HELLO_APP) > $(OBJDIR)thread_count.out 2>&1
$(DIFF) $(OBJDIR)thread_count.out hello.reference
$(DIFF) $(OBJDIR)thread_count.tool.out thread_count.reference
$(RM) $(OBJDIR)thread_count.tool.out $(OBJDIR)thread_count.out
illegal_instrumentation.test: $(OBJDIR)illegal_instrumentation$(PINTOOL_SUFFIX) $(HELLO_APP)
-$(PIN) -xyzzy -mesgon log_final -comment -logfile $(OBJDIR)illegal_instrumentation.log -t $(OBJDIR)illegal_instrumentation$(PINTOOL_SUFFIX) -- $(HELLO_APP) > $(OBJDIR)illegal_instrumentation.out 2>&1
$(QGREP) "Direct-Call to analysis routine" $(OBJDIR)illegal_instrumentation.log || $(QGREP) "During exception handling, an inconsistent instrumentation had been found." $(OBJDIR)illegal_instrumentation.log
$(RM) $(OBJDIR)illegal_instrumentation.log $(OBJDIR)illegal_instrumentation.out
internal_exception_handler.test: $(OBJDIR)internal_exception_handler$(PINTOOL_SUFFIX) $(OBJDIR)internal_exception_handler_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)internal_exception_handler$(PINTOOL_SUFFIX) \
-- $(OBJDIR)internal_exception_handler_app$(EXE_SUFFIX) > $(OBJDIR)internal_exception_handler.out
$(BASHTEST) `$(CGREP) "GlobalHandler2: Caught exception. Exception Code: RECEIVED_ACCESS_FAULT." $(OBJDIR)internal_exception_handler.out` -eq "3"
$(BASHTEST) `$(CGREP) "GlobalHandler1: Caught exception. Exception Code: RECEIVED_ACCESS_FAULT." $(OBJDIR)internal_exception_handler.out` -eq "3"
$(BASHTEST) `$(CGREP) "GlobalHandler1: Fixing exception and continuing execution" $(OBJDIR)internal_exception_handler.out` -eq "3"
$(BASHTEST) `$(CGREP) "AnalysisHandler2: Caught exception. Exception Code: INT_DIVIDE_BY_ZERO." $(OBJDIR)internal_exception_handler.out` -eq "1"
$(BASHTEST) `$(CGREP) "AnalysisHandler2: Matching exception address. Continue search" $(OBJDIR)internal_exception_handler.out` -eq "1"
$(BASHTEST) `$(CGREP) "AnalysisHandler1: Caught exception. Exception Code: INT_DIVIDE_BY_ZERO." $(OBJDIR)internal_exception_handler.out` -eq "1"
$(BASHTEST) `$(CGREP) "AnalysisHandler1: Raising exception on behalf of the application" $(OBJDIR)internal_exception_handler.out` -eq "2"
$(BASHTEST) `$(CGREP) "AnalysisHandler1: Caught exception. Exception Code: X87_DIVIDE_BY_ZERO." $(OBJDIR)internal_exception_handler.out` -eq "1" -o `$(CGREP) "AnalysisHandler1: Caught exception. Exception Code: WINDOWS. Exception Address = .*\. System exception code = 0xc00002b5" $(OBJDIR)internal_exception_handler.out` -eq "1"
$(BASHTEST) `$(CGREP) "internal_exception_handler : Completed successfully" $(OBJDIR)internal_exception_handler.out` -eq "1"
$(RM) $(OBJDIR)internal_exception_handler.out
internal_exception_handler_lin.test: $(OBJDIR)internal_exception_handler_lin$(PINTOOL_SUFFIX) $(OBJDIR)internal_exception_handler_app_lin$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)internal_exception_handler_lin$(PINTOOL_SUFFIX) \
-- $(OBJDIR)internal_exception_handler_app_lin$(EXE_SUFFIX) > $(OBJDIR)internal_exception_handler_lin.out
$(BASHTEST) `$(CGREP) "Fixing ACCESS_DENIED" $(OBJDIR)internal_exception_handler_lin.out` -eq "3"
$(BASHTEST) `$(GREP) "DIVIDE_BY_ZERO" $(OBJDIR)internal_exception_handler_lin.out | $(CGREP) "Fixing"` -eq "2"
$(BASHTEST) `$(CGREP) "Fixing ACCESS_INVALID_ADDRESS" $(OBJDIR)internal_exception_handler_lin.out` -eq "1"
$(RM) $(OBJDIR)internal_exception_handler_lin.out
exceptionAddress_lin.test: $(OBJDIR)exceptionAddress_lin$(PINTOOL_SUFFIX) $(OBJDIR)exceptionAddress_lin_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)exceptionAddress_lin$(PINTOOL_SUFFIX) -- $(OBJDIR)exceptionAddress_lin_app$(EXE_SUFFIX)
deepbind.test: $(OBJDIR)deepbind$(PINTOOL_SUFFIX) $(OBJDIR)deepbind_app$(EXE_SUFFIX)
$(PIN) -tool_load_option deepbind -t $(OBJDIR)deepbind$(PINTOOL_SUFFIX) -- $(OBJDIR)deepbind_app$(EXE_SUFFIX)
thread_count_thread_creation.test: $(OBJDIR)thread_count$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
mkdir -p $(OBJDIR)"I Need My Space"
$(PIN) -xyzzy -logfile $(OBJDIR)"I Need My Space"/pin.log -mesgon log_win \
-t $(OBJDIR)thread_count$(PINTOOL_SUFFIX) -o $(OBJDIR)thread_count_thread_creation.tool.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc.out 2>&1
$(DIFF) $(OBJDIR)win_thread_create_apc.out win_thread_create_apc.reference
$(DIFF) $(OBJDIR)thread_count_thread_creation.tool.out thread_count_thread_creation.reference
$(RM) $(OBJDIR)thread_count_thread_creation.tool.out $(OBJDIR)win_thread_create_apc.out $(OBJDIR)"I Need My Space"/pin.log*
rmdir $(OBJDIR)"I Need My Space"
win_multi_dll_pintool.test: $(OBJDIR)main_dll$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll$(PINTOOL_SUFFIX) $(OBJDIR)dynamic_secondary_dll$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)main_dll$(PINTOOL_SUFFIX) \
-o1 $(OBJDIR)static_secondary_dll.out -o2 $(OBJDIR)dynamic_secondary_dll.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_multi.out 2>&1
$(QGREP) -F -i -f win_thread_create_apc.reference $(OBJDIR)win_thread_create_apc_multi.out
$(DIFF) $(OBJDIR)static_secondary_dll.out $(OBJDIR)dynamic_secondary_dll.out
-$(RM) $(OBJDIR)static_secondary_dll.out $(OBJDIR)dynamic_secondary_dll.out $(OBJDIR)win_thread_create_apc_multi.out
# Check that the same Pin loader instance is available in any Pin tool DLL.
win_multi_dll_pintool_enumerate.test: $(OBJDIR)main_dll$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll$(PINTOOL_SUFFIX) $(OBJDIR)dynamic_secondary_dll$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)main_dll$(PINTOOL_SUFFIX) -enumerate \
-o1 $(OBJDIR)static_secondary_dll_enum.out -o2 $(OBJDIR)dynamic_secondary_dll_enum.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_enumerate.out 2>&1
$(QGREP) -F -i -f win_thread_create_apc.reference $(OBJDIR)win_thread_create_apc_enumerate.out
$(DIFF) $(OBJDIR)static_secondary_dll_enum.out $(OBJDIR)dynamic_secondary_dll_enum.out
-$(RM) $(OBJDIR)static_secondary_dll_enum.out $(OBJDIR)dynamic_secondary_dll_enum.out $(OBJDIR)win_thread_create_apc_enumerate.out
# Check that name of missing secondary tool DLL appears in Pin error message
win_multi_dll_pintool_no_dll.test: $(OBJDIR)main_dll2$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll2$(PINTOOL_SUFFIX) $(OBJDIR)dynamic_secondary_dll$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
-($(MV) $(OBJDIR)static_secondary_dll2$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll_temp$(PINTOOL_SUFFIX) && \
$(PIN) -t $(OBJDIR)main_dll2$(PINTOOL_SUFFIX) \
-o1 $(OBJDIR)static_secondary_dll_no.out -o2 $(OBJDIR)dynamic_secondary_dll_no.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_no_dll.out 2>&1 ; \
$(MV) $(OBJDIR)static_secondary_dll_temp$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll2$(PINTOOL_SUFFIX))
@# Check for load failure of secondary DLL
$(GREP) -i static_secondary_dll2$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc_no_dll.out
@# Check for "file not found" system error
$(GREP) -i "System error 2 " $(OBJDIR)win_thread_create_apc_no_dll.out
@# Check that the failure was propagated to and reported for main DLL
$(GREP) -i main_dll2$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc_no_dll.out
-$(RM) $(OBJDIR)static_secondary_dll_no.out $(OBJDIR)dynamic_secondary_dll_no.out $(OBJDIR)win_thread_create_apc_no_dll.out
# Check that secondary tool DLL has no proper export
win_multi_dll_pintool_bad_dll.test: $(OBJDIR)main_dll3$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll3$(PINTOOL_SUFFIX) $(OBJDIR)dynamic_secondary_dll$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
-($(MV) $(OBJDIR)static_secondary_dll3$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll_temp$(PINTOOL_SUFFIX) && \
$(CP) $(OBJDIR)main_dll$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll3$(PINTOOL_SUFFIX) && \
$(PIN) -t $(OBJDIR)main_dll3$(PINTOOL_SUFFIX) \
-o1 $(OBJDIR)static_secondary_dll_bad.out -o2 $(OBJDIR)dynamic_secondary_dll_bad.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_bad_dll.out 2>&1 ; \
$(MV) $(OBJDIR)static_secondary_dll_temp$(PINTOOL_SUFFIX) $(OBJDIR)static_secondary_dll3$(PINTOOL_SUFFIX))
@# Check for initialization failure of secondary DLL
$(GREP) -i static_secondary_dll3$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc_bad_dll.out
@# Check for "Bad ordinal" system error (e.g. secondary DLL lacks proper export)
$(GREP) -i "System error 182" $(OBJDIR)win_thread_create_apc_bad_dll.out
-$(RM) $(OBJDIR)static_secondary_dll_bad.out $(OBJDIR)dynamic_secondary_dll_bad.out $(OBJDIR)win_thread_create_apc_bad_dll.out
thread_creation_late_injection.test: $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
$(PIN) -xyzzy -late_injection -- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
reg_inst_gx.test: $(OBJDIR)reg_inst_gx$(PINTOOL_SUFFIX) $(OBJDIR)thread$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)reg_inst_gx$(PINTOOL_SUFFIX) -o $(OBJDIR)reg_inst_gx.tool.out \
-- $(OBJDIR)thread$(EXE_SUFFIX) > $(OBJDIR)reg_inst_gx.out 2>&1
$(DIFF) $(OBJDIR)reg_inst_gx.out reg_inst_gx.reference
$(DIFF) $(OBJDIR)reg_inst_gx.tool.out reg_inst_gx.tool.reference
$(RM) $(OBJDIR)reg_inst_gx.out $(OBJDIR)reg_inst_gx.tool.out
win_queue_apc.test: $(OBJDIR)apc_monitor$(PINTOOL_SUFFIX) $(OBJDIR)win_queue_apc$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)apc_monitor$(PINTOOL_SUFFIX) -o $(OBJDIR)apc_monitor.out \
-- $(OBJDIR)win_queue_apc$(EXE_SUFFIX) > $(OBJDIR)win_queue_apc.out 2>&1
$(DIFF) $(OBJDIR)win_queue_apc.out win_queue_apc.reference
$(DIFF) $(OBJDIR)apc_monitor.out apc_monitor.reference
$(RM) $(OBJDIR)apc_monitor.out $(OBJDIR)win_queue_apc.out
win_divide_by_zero_exception.test: $(OBJDIR)exception_monitor$(PINTOOL_SUFFIX) $(OBJDIR)win_divide_by_zero_exception$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)exception_monitor$(PINTOOL_SUFFIX) -o $(@:%.test=$(OBJDIR)%.tool.out) \
-- $(OBJDIR)win_divide_by_zero_exception$(EXE_SUFFIX) > $(OBJDIR)win_divide_by_zero_exception.out 2>&1
$(DIFF) $(OBJDIR)win_divide_by_zero_exception.out win_divide_by_zero_exception.reference
$(DIFF) $(@:%.test=$(OBJDIR)%.tool.out) exception_monitor_for_divide_by_zero_test.reference
$(RM) $(@:%.test=$(OBJDIR)%.tool.out) $(OBJDIR)win_divide_by_zero_exception.out
win_divide_by_zero_exception_for_iretq_order.test: $(OBJDIR)exception_monitor_for_iret_order$(PINTOOL_SUFFIX) $(OBJDIR)win_divide_by_zero_exception$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)exception_monitor_for_iret_order$(PINTOOL_SUFFIX) -o $(@:%.test=$(OBJDIR)%.tool.out) \
-- $(OBJDIR)win_divide_by_zero_exception$(EXE_SUFFIX) > $(OBJDIR)win_divide_by_zero_exception_for_iretq_order.out 2>&1
$(RM) $(@:%.test=$(OBJDIR)%.tool.out) $(OBJDIR)win_divide_by_zero_exception_for_iretq_order.out
win_cpp_exception.test: $(OBJDIR)exception_monitor$(PINTOOL_SUFFIX) $(OBJDIR)win_cpp_exception$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)exception_monitor$(PINTOOL_SUFFIX) -o $(@:%.test=$(OBJDIR)%.tool.out) \
-- $(OBJDIR)win_cpp_exception$(EXE_SUFFIX) > $(OBJDIR)win_cpp_exception.out 2>&1
$(DIFF) $(OBJDIR)win_cpp_exception.out win_cpp_exception.reference
$(DIFF) $(@:%.test=$(OBJDIR)%.tool.out) exception_monitor_for_cpp_exception_test.reference
$(RM) $(@:%.test=$(OBJDIR)%.tool.out) $(OBJDIR)win_cpp_exception.out
win_debug_service.test: $(OBJDIR)debugservice_monitor$(PINTOOL_SUFFIX) $(OBJDIR)win_debug_service$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)debugservice_monitor$(PINTOOL_SUFFIX) -o $(OBJDIR)debugservice_monitor.out \
-- $(OBJDIR)win_debug_service$(EXE_SUFFIX) > $(OBJDIR)win_debug_service.out 2>&1
$(DIFF) $(OBJDIR)win_debug_service.out win_debug_service.reference
$(DIFF) $(OBJDIR)debugservice_monitor.out debugservice_monitor.reference
$(RM) $(OBJDIR)win_debug_service.out $(OBJDIR)debugservice_monitor.out
win_load_library.test: $(OBJDIR)thread_count$(PINTOOL_SUFFIX) $(OBJDIR)win_load_library$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)thread_count$(PINTOOL_SUFFIX) -o $(OBJDIR)win_load_library.tool.out \
-- $(OBJDIR)win_load_library$(EXE_SUFFIX) > $(OBJDIR)win_load_library.out 2>&1
$(DIFF) $(OBJDIR)win_load_library.out win_load_library.reference
$(DIFF) $(OBJDIR)win_load_library.tool.out thread_count_load_library.reference
$(RM) $(OBJDIR)win_load_library.tool.out $(OBJDIR)win_load_library.out
win_code_on_reused_memory.test: $(OBJDIR)win_code_on_reused_memory$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)win_code_on_reused_memory$(EXE_SUFFIX) > $(OBJDIR)win_code_on_reused_memory.out 2>&1
$(DIFF) $(OBJDIR)win_code_on_reused_memory.out win_code_on_reused_memory.reference
$(RM) $(OBJDIR)win_code_on_reused_memory.out
win_exception_context.test: $(OBJDIR)winapp_exception_context$(EXE_SUFFIX) $(OBJDIR)exception_context_monitor$(PINTOOL_SUFFIX)
$(PIN) -t $(OBJDIR)exception_context_monitor$(PINTOOL_SUFFIX) -checkfp 1 -o $(OBJDIR)exception_context_monitor.out\
-- $(OBJDIR)winapp_exception_context$(EXE_SUFFIX)
$(RM) $(OBJDIR)exception_context_monitor.out
win_exception_detect.test: $(OBJDIR)win_exception_test$(EXE_SUFFIX) $(OBJDIR)exception_context_monitor$(PINTOOL_SUFFIX)
$(PIN) -t $(OBJDIR)exception_context_monitor$(PINTOOL_SUFFIX) -checkfp 0 -o $(OBJDIR)exception_context_monitor.out\
-- $(OBJDIR)win_exception_test$(EXE_SUFFIX)
$(RM) $(OBJDIR)exception_context_monitor.out
win_mxcsr.test: $(OBJDIR)thread_count$(PINTOOL_SUFFIX) $(OBJDIR)win_mxcsr_app$(EXE_SUFFIX)
$(OBJDIR)win_mxcsr_app$(EXE_SUFFIX) > $(OBJDIR)win_mxcsr_app.out 2>&1
$(PIN) -t $(OBJDIR)thread_count$(PINTOOL_SUFFIX) -o $(OBJDIR)win_mxcsr.tool.out \
-- $(OBJDIR)win_mxcsr_app$(EXE_SUFFIX) > $(OBJDIR)win_mxcsr_app_with_pin.out 2>&1
$(DIFF) $(OBJDIR)win_mxcsr_app.out $(OBJDIR)win_mxcsr_app_with_pin.out
$(RM) $(OBJDIR)win_mxcsr.tool.out $(OBJDIR)win_mxcsr_app.out $(OBJDIR)win_mxcsr_app_with_pin.out
win_early_injection1.test: $(OBJDIR)image_load$(PINTOOL_SUFFIX) $(OBJDIR)win_early_thread$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) \
-- $(OBJDIR)win_early_thread$(EXE_SUFFIX) > $(OBJDIR)win_early_injection1.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 0" $(OBJDIR)win_early_injection1.out` -eq "1"
$(QGREP) "Creating thread in DllMain(PROCESS_ATTACH)" $(OBJDIR)win_early_injection1.out
$(BASHTEST) `$(CGREP) "Got thread start notification" $(OBJDIR)win_early_injection1.out` -eq "2"
$(RM) $(OBJDIR)win_early_injection1.out
$(PIN) -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) -load_system_dlls 1 \
-- $(OBJDIR)win_early_thread > $(OBJDIR)win_early_injection1.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 0" $(OBJDIR)win_early_injection1.out` -eq "1"
$(QGREP) "Creating thread in DllMain(PROCESS_ATTACH)" $(OBJDIR)win_early_injection1.out
$(BASHTEST) `$(CGREP) "Got thread start notification" $(OBJDIR)win_early_injection1.out` -eq "2"
$(RM) $(OBJDIR)win_early_injection1.out
win_early_injection1_probed.test: $(OBJDIR)image_load$(PINTOOL_SUFFIX) $(OBJDIR)win_early_thread$(EXE_SUFFIX)
$(PIN) -probe -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) \
-- $(OBJDIR)win_early_thread$(EXE_SUFFIX) > $(OBJDIR)win_early_injection1_probed.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 1" $(OBJDIR)win_early_injection1_probed.out` -eq "1"
$(QGREP) "Creating thread in DllMain(PROCESS_ATTACH)" $(OBJDIR)win_early_injection1_probed.out
$(RM) $(OBJDIR)win_early_injection1_probed.out
$(PIN) -probe -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) -load_system_dlls 1 \
-- $(OBJDIR)win_early_thread$(EXE_SUFFIX) > $(OBJDIR)win_early_injection1_probed.out 2>&1
test `$(CGREP) "In tool's main, probed = 1" $(OBJDIR)win_early_injection1_probed.out` -eq "1"
$(QGREP) "Creating thread in DllMain(PROCESS_ATTACH)" $(OBJDIR)win_early_injection1_probed.out
$(RM) $(OBJDIR)win_early_injection1_probed.out
win_early_injection2.test: $(OBJDIR)image_load$(PINTOOL_SUFFIX) $(OBJDIR)win_no_dependencies$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) \
-- $(OBJDIR)win_no_dependencies$(EXE_SUFFIX) > $(OBJDIR)win_early_injection2.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 0" $(OBJDIR)win_early_injection2.out` -eq "1"
$(RM) $(OBJDIR)win_early_injection2.out
$(PIN) -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) -load_system_dlls 1 \
-- $(OBJDIR)win_no_dependencies$(EXE_SUFFIX) > $(OBJDIR)win_early_injection2.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 0" $(OBJDIR)win_early_injection2.out` -eq "1"
$(RM) $(OBJDIR)win_early_injection2.out
win_early_injection2_probed.test: $(OBJDIR)image_load$(PINTOOL_SUFFIX) $(OBJDIR)win_no_dependencies$(EXE_SUFFIX)
$(PIN) -probe -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) \
-- $(OBJDIR)win_no_dependencies$(EXE_SUFFIX) > $(OBJDIR)win_early_injection2_probed.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 1" $(OBJDIR)win_early_injection2_probed.out` -eq "1"
$(RM) $(OBJDIR)win_early_injection2_probed.out
$(PIN) -probe -t $(OBJDIR)image_load$(PINTOOL_SUFFIX) -load_system_dlls 1 \
-- $(OBJDIR)win_no_dependencies$(EXE_SUFFIX) > $(OBJDIR)win_early_injection2_probed.out 2>&1
$(BASHTEST) `$(CGREP) "In tool's main, probed = 1" $(OBJDIR)win_early_injection2_probed.out` -eq "1"
$(RM) $(OBJDIR)win_early_injection2_probed.out
load_resource_probe.test: $(OBJDIR)image_entry$(PINTOOL_SUFFIX) $(OBJDIR)load_resource_app$(EXE_SUFFIX)
$(PIN) -probe -t $(OBJDIR)image_entry$(PINTOOL_SUFFIX) -out_file $(OBJDIR)image_entry_probe.out -dll_name garbage -verbose \
-- $(OBJDIR)load_resource_app$(EXE_SUFFIX) > $(OBJDIR)load_resource_probe.out 2>&1
$(RM) $(OBJDIR)load_resource_probe.out $(OBJDIR)image_entry_probe.out
image_entry_probe.test: $(OBJDIR)image_entry$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
$(PIN) -probe -t $(OBJDIR)image_entry$(PINTOOL_SUFFIX) -out_file $(OBJDIR)image_entry_probe.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_probe.out 2>&1
$(DIFF) $(OBJDIR)win_thread_create_apc_probe.out win_thread_create_apc.reference
$(DIFF) $(OBJDIR)image_entry_probe.out image_entry.reference
$(RM) $(OBJDIR)win_thread_create_apc_probe.out $(OBJDIR)image_entry_probe.out
image_entry_probe_pseudofini.test: $(OBJDIR)image_entry$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
$(PIN) -probe -t $(OBJDIR)image_entry$(PINTOOL_SUFFIX) -out_file $(OBJDIR)image_entry_probe_pseudofini.out -pseudofini 1 \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_probe1.out 2>&1
$(DIFF) $(OBJDIR)win_thread_create_apc_probe1.out win_thread_create_apc.reference
$(DIFF) $(OBJDIR)image_entry_probe_pseudofini.out image_entry.reference
$(RM) $(OBJDIR)win_thread_create_apc_probe1.out $(OBJDIR)image_entry_probe_pseudofini.out
# Check that all ThreadExit events are delivered at late exit regardless of exit mode
image_entry_jit.test: $(OBJDIR)image_entry$(PINTOOL_SUFFIX) $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX)
$(PIN) -xyzzy -at_exit 1 -t $(OBJDIR)image_entry$(PINTOOL_SUFFIX) -out_file $(OBJDIR)image_entry_jit.out \
-- $(OBJDIR)win_thread_create_apc$(EXE_SUFFIX) > $(OBJDIR)win_thread_create_apc_jit.out 2>&1
$(DIFF) $(OBJDIR)win_thread_create_apc_jit.out win_thread_create_apc.reference
$(DIFF) $(OBJDIR)image_entry_jit.out image_entry.reference
$(RM) $(OBJDIR)win_thread_create_apc_jit.out $(OBJDIR)image_entry_jit.out
mt_tool.test: $(OBJDIR) $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) -- $(TESTAPP) makefile \
$(OBJDIR)$(@:.test=.makefile.copy)
$(CMP) makefile $(OBJDIR)$(@:.test=.makefile.copy)
$(RM) $(OBJDIR)$(@:.test=.makefile.copy)
-$(RM) $(OBJDIR)$(@:.test=.tool.out)
# The test checks graceful exit of internal threads with late exit disabled
mt_tool_early_exit.test: $(OBJDIR) $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -at_exit 0 -t $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) -- \
$(TESTAPP) makefile $(OBJDIR)$(@:.test=.makefile.copy)
$(CMP) makefile $(OBJDIR)$(@:.test=.makefile.copy)
$(RM) $(OBJDIR)$(@:.test=.makefile.copy)
-$(RM) $(OBJDIR)$(@:.test=.tool.out)
# The tool safely starts all internal threads prior to application exit
mt_tool_safe_start.test: $(OBJDIR) $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) $(OBJDIR)mt_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) -safestart 1 \
-- $(OBJDIR)mt_app$(EXE_SUFFIX) > $(OBJDIR)$(@:.test=.out) 2>&1
$(RM) $(OBJDIR)$(@:.test=.out)
-$(RM) $(OBJDIR)$(@:.test=.tool.out)
# The tool safely starts all internal threads prior to application exit
# The test checks graceful exit of internal threads with late exit disabled
mt_tool_safe_start_early_exit.test: $(OBJDIR) $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) $(OBJDIR)mt_app$(EXE_SUFFIX)
$(PIN) -xyzzy -at_exit 0 -t $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) -safestart 1 \
-- $(OBJDIR)mt_app$(EXE_SUFFIX)
-$(RM) $(OBJDIR)$(@:.test=.tool.out)
funreplace_alert.test: $(OBJDIR)funreplace_alert$(PINTOOL_SUFFIX) $(OBJDIR)socket_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)funreplace_alert$(PINTOOL_SUFFIX) \
-- $(OBJDIR)socket_app$(EXE_SUFFIX) > $(OBJDIR)funreplace_alert.out 2>&1
$(DIFF) $(OBJDIR)funreplace_alert.out funreplace_alert.reference
$(RM) $(OBJDIR)funreplace_alert.out
syscall_std.test: $(OBJDIR)syscall_std$(PINTOOL_SUFFIX) $(OBJDIR)syscall_std_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)syscall_std$(PINTOOL_SUFFIX) -- $(OBJDIR)syscall_std_app$(EXE_SUFFIX) > $(OBJDIR)syscall_std.out 2>&1
$(DIFF) $(OBJDIR)syscall_std.out syscall_std.reference
$(RM) $(OBJDIR)syscall_std.out
teb.test: $(OBJDIR)teb$(PINTOOL_SUFFIX) $(OBJDIR)teb_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)teb$(PINTOOL_SUFFIX) -- $(OBJDIR)teb_app$(EXE_SUFFIX) > $(OBJDIR)teb.out 2>&1
$(DIFF) $(OBJDIR)teb.out teb.reference
$(RM) $(OBJDIR)teb.out
earlyout.test: $(OBJDIR)earlyout$(PINTOOL_SUFFIX) $(HELLO_APP)
$(PIN) -t $(OBJDIR)earlyout$(PINTOOL_SUFFIX) -- $(HELLO_APP)
guard_page.test: $(OBJDIR)guard_page$(PINTOOL_SUFFIX) $(OBJDIR)guard_page_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)guard_page$(PINTOOL_SUFFIX) -- $(OBJDIR)guard_page_app$(EXE_SUFFIX)
suspend_win.test: $(OBJDIR)suspend_win$(PINTOOL_SUFFIX) $(OBJDIR)suspend_app_win$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)suspend_win$(PINTOOL_SUFFIX) -- $(OBJDIR)suspend_app_win$(EXE_SUFFIX)
suspend_context_win.test: $(OBJDIR)suspend_context_app_win$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)suspend_context_app_win$(EXE_SUFFIX)
raise_exception.test: $(OBJDIR)raise_exception$(PINTOOL_SUFFIX) $(OBJDIR)raise_exception_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)raise_exception$(PINTOOL_SUFFIX) -- $(OBJDIR)raise_exception_app$(EXE_SUFFIX)
raise_exception_const_context.test: $(OBJDIR)raise_exception$(PINTOOL_SUFFIX) $(OBJDIR)raise_exception_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)raise_exception$(PINTOOL_SUFFIX) -const_context -- $(OBJDIR)raise_exception_app$(EXE_SUFFIX)
sw_interrupt.test: $(OBJDIR)sw_interrupt$(PINTOOL_SUFFIX) $(OBJDIR)sw_interrupt_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)sw_interrupt$(PINTOOL_SUFFIX) -- $(OBJDIR)sw_interrupt_app$(EXE_SUFFIX)
internal_thread.test: $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) $(OBJDIR)mt_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) -- $(OBJDIR)mt_app$(EXE_SUFFIX)
-$(RM) $(OBJDIR)$(@:.test=.tool.out)
# Test does not support graceful exit of internal thread, thus late exit is disabled
internal_thread_early_exit.test: $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) $(OBJDIR)mt_app$(EXE_SUFFIX)
$(PIN) -xyzzy -at_exit 0 -t $(OBJDIR)mt_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)$(@:test=tool.out) \
-- $(OBJDIR)mt_app$(EXE_SUFFIX)
-$(RM) $(OBJDIR)$(@:.test=.tool.out)
win_callback.test: $(OBJDIR)win_callback$(PINTOOL_SUFFIX) $(OBJDIR)win_callback_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)win_callback$(PINTOOL_SUFFIX) -- $(OBJDIR)win_callback_app$(EXE_SUFFIX)
test_lea_rip.test: $(OBJDIR)test_lea_rip_app$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)test_lea_rip_app$(EXE_SUFFIX)
sp_argument.test: $(OBJDIR)sp_argument$(PINTOOL_SUFFIX) $(OBJDIR)sp_argument_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)sp_argument$(PINTOOL_SUFFIX) -- $(OBJDIR)sp_argument_app$(EXE_SUFFIX)
$(PIN) -probe -t $(OBJDIR)sp_argument$(PINTOOL_SUFFIX) -- $(OBJDIR)sp_argument_app$(EXE_SUFFIX)
reptool.test: $(OBJDIR)reptool$(PINTOOL_SUFFIX) $(OBJDIR)rep$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)reptool$(PINTOOL_SUFFIX) -o $(OBJDIR)reptool.out -- $(OBJDIR)rep$(EXE_SUFFIX)
$(DIFF) $(OBJDIR)reptool.out reptool_$(TARGET).reference
$(RM) $(OBJDIR)reptool.out
multimem.test: $(OBJDIR)multimem$(PINTOOL_SUFFIX) $(OBJDIR)rep$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)multimem$(PINTOOL_SUFFIX) -- $(OBJDIR)rep$(EXE_SUFFIX)
reppredicate.test: $(OBJDIR)checkexecuting$(PINTOOL_SUFFIX) $(OBJDIR)rep$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)checkexecuting$(PINTOOL_SUFFIX) -o $(OBJDIR)reppredicate.out -- $(OBJDIR)rep$(EXE_SUFFIX)
$(DIFF) $(OBJDIR)reppredicate.out reppredicate_$(TARGET).reference
$(RM) $(OBJDIR)reppredicate.out
repcmpsz_tool.test: $(OBJDIR)repcmpsz_tool$(PINTOOL_SUFFIX) $(OBJDIR)repcmpsz_$(TARGET_OS)$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)repcmpsz_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)repcmpsz_tool.out \
-- $(OBJDIR)repcmpsz_$(TARGET_OS)$(EXE_SUFFIX)
$(DIFF) $(OBJDIR)repcmpsz_tool.out repcmpsz_tool.reference
$(RM) $(OBJDIR)repcmpsz_tool.out
waitpidbug.test: $(OBJDIR)waitpidbug$(EXE_SUFFIX) $(TESTAPP)
$(OBJDIR)waitpidbug$(EXE_SUFFIX) $(PIN) -- $(TESTAPP) makefile $(OBJDIR)waitpidbug.makefile.copy
$(DIFF) makefile $(OBJDIR)waitpidbug.makefile.copy
$(RM) $(OBJDIR)waitpidbug.makefile.copy
big_bss.test: $(OBJDIR)big_bss$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)big_bss$(EXE_SUFFIX)
statica_locktest.test: $(OBJDIR)statica_locktest$(SATOOL_SUFFIX)
$(SET_DLL_PATH) $(OBJDIR)statica_locktest$(SATOOL_SUFFIX) -i $(OBJDIR)statica_locktest$(SATOOL_SUFFIX)
win_syscallenum.test: $(OBJDIR)win_syscallenum$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)win_syscallenum$(PINTOOL_SUFFIX) -- $(TESTAPP)
segmented_ea_verifier.test: $(OBJDIR)segmented_ea_verifier$(PINTOOL_SUFFIX) $(OBJDIR)thread_segmented_ea$(EXE_SUFFIX)
$(PIN) -xyzzy -virtual_segments 0 -t $(OBJDIR)segmented_ea_verifier$(PINTOOL_SUFFIX) \
-- $(OBJDIR)thread_segmented_ea$(EXE_SUFFIX) > $(OBJDIR)segmented_ea_verifier.out 2>&1
$(QGREP) "SUCCESS" $(OBJDIR)segmented_ea_verifier.out
$(RM) $(OBJDIR)segmented_ea_verifier.out
$(PIN) -xyzzy -virtual_segments 1 -t $(OBJDIR)segmented_ea_verifier$(PINTOOL_SUFFIX) \
-- $(OBJDIR)thread_segmented_ea$(EXE_SUFFIX) > $(OBJDIR)segmented_ea_verifier.out 2>&1
$(QGREP) "SUCCESS" $(OBJDIR)segmented_ea_verifier.out
$(RM) $(OBJDIR)segmented_ea_verifier.out
ea_verifier_addr16.test: $(OBJDIR)ea_verifier_addr16$(PINTOOL_SUFFIX) $(OBJDIR)thread_ea_addr16$(EXE_SUFFIX)
$(PIN) -xyzzy -virtual_segments 0 -t $(OBJDIR)ea_verifier_addr16$(PINTOOL_SUFFIX) \
-- $(OBJDIR)thread_ea_addr16$(EXE_SUFFIX) > $(OBJDIR)ea_verifier_addr16.out 2>&1
$(QGREP) "SUCCESS" $(OBJDIR)ea_verifier_addr16.out
$(RM) $(OBJDIR)ea_verifier_addr16.out
$(PIN) -xyzzy -virtual_segments 1 -t $(OBJDIR)ea_verifier_addr16$(PINTOOL_SUFFIX) \
-- $(OBJDIR)thread_ea_addr16$(EXE_SUFFIX) > $(OBJDIR)ea_verifier_addr16.out 2>&1
$(QGREP) "SUCCESS" $(OBJDIR)ea_verifier_addr16.out
$(RM) $(OBJDIR)ea_verifier_addr16.out
seg_override_win1.test: $(OBJDIR)segmented_ea_verifier$(PINTOOL_SUFFIX) $(OBJDIR)seg_override_app1$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)segmented_ea_verifier$(PINTOOL_SUFFIX) \
-- $(OBJDIR)seg_override_app1$(EXE_SUFFIX) > $(OBJDIR)seg_override_win1.out 2>&1
$(QGREP) "SUCCESS" $(OBJDIR)seg_override_win1.out
$(RM) $(OBJDIR)seg_override_win1.out
# Tests proper delivery of symbols for rebased dll in JIT mode
rebase_dll.test: $(OBJDIR)rebase_dll_tool$(PINTOOL_SUFFIX) $(OBJDIR)rebase_dll$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll2$(DLL_SUFFIX)
$(PIN) -t $(OBJDIR)rebase_dll_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)rebase_dll.out -- $(OBJDIR)rebase_dll$(EXE_SUFFIX)
$(CGREP) -i "nothing" $(OBJDIR)rebase_dll.out | $(QGREP) "2"
$(RM) $(OBJDIR)rebase_dll.out
# Tests proper delivery of symbols for rebased dll in probe mode
rebase_dll_probe.test: $(OBJDIR)rebase_dll_tool$(PINTOOL_SUFFIX) $(OBJDIR)rebase_dll$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll2$(DLL_SUFFIX)
$(PIN) -probe -t $(OBJDIR)rebase_dll_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)rebase_dll_probe.out -- $(OBJDIR)rebase_dll$(EXE_SUFFIX)
$(CGREP) -i "nothing" $(OBJDIR)rebase_dll_probe.out | $(QGREP) "2"
$(RM) $(OBJDIR)rebase_dll_probe.out
# Tests that known data ranges in code section are not overlapped with RTNs
data_in_code_win.test: $(OBJDIR)data_in_code_win$(PINTOOL_SUFFIX) $(OBJDIR)data_in_code_win_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)data_in_code_win$(PINTOOL_SUFFIX) \
-- $(OBJDIR)data_in_code_win_app$(EXE_SUFFIX) > $(OBJDIR)data_in_code_win.out
$(RM) $(OBJDIR)data_in_code_win.out
# Tests that application cannot manage Pin internal threads
app_inspects_internal_thread_win.test: $(OBJDIR)app_inspects_internal_thread_win$(PINTOOL_SUFFIX) $(OBJDIR)app_inspects_internal_thread_win_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)app_inspects_internal_thread_win$(PINTOOL_SUFFIX) \
-- $(OBJDIR)app_inspects_internal_thread_win_app$(EXE_SUFFIX) > $(OBJDIR)app_inspects_internal_thread_win.out 2>&1
$(RM) $(OBJDIR)app_inspects_internal_thread_win.out
# Tests setting probe if base relocation is in probed bytes
baserel_in_probe.test: $(OBJDIR)baserel_in_probe_tool$(PINTOOL_SUFFIX) $(OBJDIR)rebase_dll2$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll2$(DLL_SUFFIX)
$(PIN) -probe -t $(OBJDIR)baserel_in_probe_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)rebase_dll2$(EXE_SUFFIX) > $(OBJDIR)baserel_in_probe.out
$(CGREP) -i "fixup is handled properly" $(OBJDIR)baserel_in_probe.out | $(QGREP) "4"
$(RM) $(OBJDIR)baserel_in_probe.out
# Tests PIN_InitSymbolsAlt(EXPORT_SYMBOLS) API and exports only support without external symbol server
exports_only.test: $(OBJDIR)exports_only_tool$(PINTOOL_SUFFIX) $(OBJDIR)rebase_dll$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll2$(DLL_SUFFIX)
$(PIN) -xyzzy -log_server 1 -logfile $(OBJDIR)exports_only.log \
-t $(OBJDIR)exports_only_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)exports_only_tool.out -xyzzy -log_server 1 -logfile $(OBJDIR)exports_only.log \
-- $(OBJDIR)rebase_dll$(EXE_SUFFIX)
$(CGREP) -i "nothing" $(OBJDIR)exports_only_tool.out | $(QGREP) "2"
$(BASHTEST) `$(RM) -vf $(OBJDIR)exports_only.log.* | $(LINECOUNT)` -eq "0"
$(RM) $(OBJDIR)exports_only_tool.out
# Tests PIN_InitSymbolsAlt(EXPORT_SYMBOLS) API and exports only support without external symbol server in probe mode
exports_only_probe.test: $(OBJDIR)exports_only_tool$(PINTOOL_SUFFIX) $(OBJDIR)rebase_dll$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX) $(OBJDIR)$(DLL_PREFIX)dummy_dll2$(DLL_SUFFIX)
$(PIN) -probe -xyzzy -log_server 1 -logfile $(OBJDIR)exports_only_probe.log \
-t $(OBJDIR)exports_only_tool$(PINTOOL_SUFFIX) -o $(OBJDIR)exports_only_probe_tool.out -xyzzy -log_server 1 -logfile $(OBJDIR)exports_only_probe.log \
-- $(OBJDIR)rebase_dll$(EXE_SUFFIX)
$(CGREP) -i "nothing" $(OBJDIR)exports_only_probe_tool.out | $(QGREP) "2"
$(BASHTEST) `$(RM) -vf $(OBJDIR)exports_only_probe.log.* | $(LINECOUNT)` -eq "0"
$(RM) $(OBJDIR)exports_only_probe_tool.out
# Tests correct retrieval of section name from PE section header
# Ensure section name does not contain trailing null symbols
secname.test: $(OBJDIR)secname_tool$(PINTOOL_SUFFIX) $(OBJDIR)secname_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)secname_tool$(PINTOOL_SUFFIX) -- $(OBJDIR)secname_app$(EXE_SUFFIX)
$(QGREP) " dsec found" secname.out
$(QGREP) " asection found" secname.out
$(RM) secname.out
elf_symbols.test: $(OBJDIR)elf_symbols$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)elf_symbols$(PINTOOL_SUFFIX) -o $(OBJDIR)elf_symbols.out \
-- $(TESTAPP) makefile $(OBJDIR)elf_symbols.makefile.copy
$(QGREP) "passed successfully" $(OBJDIR)elf_symbols.out
$(RM) $(OBJDIR)elf_symbols.out $(OBJDIR)elf_symbols.makefile.copy
elf_symsize.test: $(OBJDIR)elf_symsize$(PINTOOL_SUFFIX) $(OBJDIR)symsize_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)elf_symsize$(PINTOOL_SUFFIX) -o $(OBJDIR)elf_symsize.out -- $(OBJDIR)symsize_app$(EXE_SUFFIX)
$(QGREP) "very_big" $(OBJDIR)elf_symsize.out
$(RM) $(OBJDIR)elf_symsize.out
pusha_popa.test: $(OBJDIR)pusha_popa$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)pusha_popa$(EXE_SUFFIX)
jcx_addr16_tool.test: $(OBJDIR)jcx_addr16_tool$(PINTOOL_SUFFIX) $(OBJDIR)jcx_addr16_app$(EXE_SUFFIX)
$(PIN) -xyzzy -late_injection 1 -t $(OBJDIR)jcx_addr16_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)jcx_addr16_app$(EXE_SUFFIX) > $(OBJDIR)jcx_addr16_tool.out 2>&1
$(DIFF) $(OBJDIR)jcx_addr16_tool.out jcx_addr16_tool.reference
$(RM) $(OBJDIR)jcx_addr16_tool.out
# opt_stack_param_failure_assert is causing an assert on DEBUG
ifneq ($(DEBUG),1)
OPT_STACK_PARAM_FAILURE_ASSERT := -opt_stack_param_failure_assert 1
endif
inlined-stack-arg.test: $(OBJDIR)inlined-stack-arg$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg.out inlined-stack-arg.reference
$(RM) $(OBJDIR)inlined-stack-arg.makefile.copy $(OBJDIR)inlined-stack-arg.out
$(PIN) -xyzzy -inline 1 -liveness 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg.out inlined-stack-arg.reference
$(RM) $(OBJDIR)inlined-stack-arg.makefile.copy $(OBJDIR)inlined-stack-arg.out
inlined-stack-arg-noopt.test: $(OBJDIR)inlined-stack-arg-noopt$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 1 -t $(OBJDIR)inlined-stack-arg-noopt$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg-noopt.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg-noopt.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg-noopt.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg-noopt.out inlined-stack-arg.reference
$(RM) $(OBJDIR)inlined-stack-arg-noopt.makefile.copy $(OBJDIR)inlined-stack-arg-noopt.out
$(PIN) -xyzzy -inline 1 -liveness 1 \
-t $(OBJDIR)inlined-stack-arg-noopt$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg-noopt.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg-noopt.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg-noopt.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg-noopt.out inlined-stack-arg.reference
$(RM) $(OBJDIR)inlined-stack-arg-noopt.makefile.copy $(OBJDIR)inlined-stack-arg-noopt.out
inlined-stack-arg1.test: $(OBJDIR)inlined-stack-arg1$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg1$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg1.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg1.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg1.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg1.out inlined-stack-arg1.reference
$(RM) $(OBJDIR)inlined-stack-arg1.makefile.copy $(OBJDIR)inlined-stack-arg1.out
$(PIN) -log_inline -logfile $(OBJDIR)inlined-stack-arg1.log -xyzzy -inline 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg1$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg1.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg1.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg1.makefile.copy
$(RM) $(OBJDIR)inlined-stack-arg1.makefile.copy $(OBJDIR)inlined-stack-arg1.out
$(PIN) -xyzzy -inline 1 -liveness 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg1$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg1.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg1.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg1.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg1.out inlined-stack-arg1.reference
$(QGREP) IARG_CONTEXT $(OBJDIR)inlined-stack-arg1.log
$(RM) $(OBJDIR)inlined-stack-arg1.makefile.copy $(OBJDIR)inlined-stack-arg1.out $(OBJDIR)inlined-stack-arg1.log
inlined-stack-arg1-noopt.test: $(OBJDIR)inlined-stack-arg1-noopt$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 1 -region-max-bbls 1 \
-t $(OBJDIR)inlined-stack-arg1-noopt$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg1-noopt.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg1-noopt.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg1-noopt.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg1-noopt.out inlined-stack-arg1.reference
$(RM) $(OBJDIR)inlined-stack-arg1-noopt.makefile.copy $(OBJDIR)inlined-stack-arg1-noopt.out
$(PIN) -xyzzy -inline 1 -liveness 1 -region-max-bbls 1 \
-t $(OBJDIR)inlined-stack-arg1-noopt$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg1-noopt.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg1-noopt.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg1-noopt.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg1-noopt.out inlined-stack-arg1.reference
$(RM) $(OBJDIR)inlined-stack-arg1-noopt.makefile.copy $(OBJDIR)inlined-stack-arg1-noopt.out
check_acall_inline_opt.test: $(OBJDIR)check_acall_inline_opt$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -mesgon log_inline -logfile $(OBJDIR)$(@:.test=.pin.log) \
-t $(OBJDIR)check_acall_inline_opt$(PINTOOL_SUFFIX) -o $(OBJDIR)check_acall_inline_opt.out \
-- $(TESTAPP) makefile $(OBJDIR)check_acall_inline_opt.makefile.copy
$(CMP) makefile $(OBJDIR)check_acall_inline_opt.makefile.copy
$(QGREP) "Analyze Analysis function from check_acall_inline_opt" $(OBJDIR)$(@:.test=.pin.log)
$(QGREP) "INSERT_BEFORE_INSTRUCTION" $(OBJDIR)$(@:.test=.pin.log)
$(RM) $(OBJDIR)check_acall_inline_opt.makefile.copy $(OBJDIR)check_acall_inline_opt.out $(OBJDIR)$(@:.test=.pin.log)
inlined-stack-arg2.test: $(OBJDIR)inlined-stack-arg2$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg2$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg2.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg2.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg2.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg2.out inlined-stack-arg2.reference
$(RM) $(OBJDIR)inlined-stack-arg2.makefile.copy $(OBJDIR)inlined-stack-arg2.out
$(PIN) -xyzzy -inline 1 -liveness 1 $(OPT_STACK_PARAM_FAILURE_ASSERT) \
-t $(OBJDIR)inlined-stack-arg2$(PINTOOL_SUFFIX) -o $(OBJDIR)inlined-stack-arg2.out \
-- $(TESTAPP) makefile $(OBJDIR)inlined-stack-arg2.makefile.copy
$(CMP) makefile $(OBJDIR)inlined-stack-arg2.makefile.copy
$(DIFF) $(OBJDIR)inlined-stack-arg2.out inlined-stack-arg2.reference
$(RM) $(OBJDIR)inlined-stack-arg2.makefile.copy $(OBJDIR)inlined-stack-arg2.out
# The "NOT INLINED" check below is used to check that analysis functions that request IARG_REG_REFERENCE can be inlined
# (it is in addition to what this test actually test). The number of "NOT INLINED" can be changed from one platform to another.
# Pin itself may insert different number of analysis calls (may depand on platform) for its own use. Using 4 as upper bound for now.
emu_stack.test: $(OBJDIR)emu_stack$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -log_inline -xyzzy -logfile $(OBJDIR)emu_stack.log -inline_maxlen 50 -t $(OBJDIR)emu_stack$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)emu_stack.makefile.copy
$(BASHTEST) `$(CGREP) "NOT INLINED" $(OBJDIR)emu_stack.log ` -le "4"
$(GREP) "INLINED" $(OBJDIR)emu_stack.log > $(OBJDIR)emu_stack_grep.txt
$(RM) $(OBJDIR)emu_stack.makefile.copy $(OBJDIR)emu_stack.log $(OBJDIR)emu_stack_grep.txt
passthru_context_xmm_regs_callapp.test: $(OBJDIR)passthru_context_xmm_regs_callapp$(PINTOOL_SUFFIX) $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)passthru_context_xmm_regs_callapp$(PINTOOL_SUFFIX) \
-- $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
passthru_context_xmm_regs_callapp_const_context.test: $(OBJDIR)passthru_context_xmm_regs_callapp$(PINTOOL_SUFFIX) $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)passthru_context_xmm_regs_callapp$(PINTOOL_SUFFIX) -const_context 1 \
-- $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
passthru_context_xmm_regs_executeat.test: $(OBJDIR)passthru_context_xmm_regs_executeat$(PINTOOL_SUFFIX) $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)passthru_context_xmm_regs_executeat$(PINTOOL_SUFFIX) \
-- $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
passthru_context_xmm_regs_executeat_const_context.test: $(OBJDIR)passthru_context_xmm_regs_executeat$(PINTOOL_SUFFIX) $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)passthru_context_xmm_regs_executeat$(PINTOOL_SUFFIX) \
-- $(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX)
swizzle_seg.test: $(OBJDIR)swizzle_seg$(PINTOOL_SUFFIX) $(OBJDIR)swizzle_seg_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)swizzle_seg$(PINTOOL_SUFFIX) \
-- $(OBJDIR)swizzle_seg_app$(EXE_SUFFIX) > $(OBJDIR)swizzle_seg.out
$(DIFF) $(OBJDIR)swizzle_seg.out swizzle_seg.reference
$(RM) $(OBJDIR)swizzle_seg.out
far_ret.test: $(OBJDIR)far$(EXE_SUFFIX)
$(OBJDIR)far$(EXE_SUFFIX) > $(OBJDIR)far_ret.ref
$(PIN) -- $(OBJDIR)far$(EXE_SUFFIX) > $(OBJDIR)far_ret.out
$(DIFF) $(OBJDIR)far_ret.out $(OBJDIR)far_ret.ref
$(RM) $(OBJDIR)far_ret.out $(OBJDIR)far_ret.ref
insfetch_tool.test: $(OBJDIR)insfetch_tool$(PINTOOL_SUFFIX) $(OBJDIR)rep$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)insfetch_tool$(PINTOOL_SUFFIX) -- $(OBJDIR)rep$(EXE_SUFFIX)
test_iarg_preserve.test: $(OBJDIR)test_iarg_preserve$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)test_iarg_preserve$(PINTOOL_SUFFIX) -- $(OBJDIR)test_iarg_preserve_app$(EXE_SUFFIX)
test_iarg_preserve1.test: $(OBJDIR)test_iarg_preserve$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_app$(EXE_SUFFIX)
$(PIN) -xyzzy -inline 0 -inline_bridge 0 -t $(OBJDIR)test_iarg_preserve$(PINTOOL_SUFFIX) \
-- $(OBJDIR)test_iarg_preserve_app$(EXE_SUFFIX)
test_iarg_preserve2.test: $(OBJDIR)test_iarg_preserve2$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_app2$(EXE_SUFFIX)
$(PIN) -xyzzy -bridge_save_x87 0 -t $(OBJDIR)test_iarg_preserve2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)test_iarg_preserve_app2$(EXE_SUFFIX)
test_iarg_preserve3.test: $(OBJDIR)test_iarg_preserve2$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_app2$(EXE_SUFFIX)
$(PIN) -xyzzy -bridge_save_x87 0 -inline 0 -inline_bridge 0 -t $(OBJDIR)test_iarg_preserve2$(PINTOOL_SUFFIX) \
-- $(OBJDIR)test_iarg_preserve_app2$(EXE_SUFFIX)
test_iarg_preserve_mxcsr.test: $(OBJDIR)test_iarg_preserve_mxcsr$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_mxcsr_app$(EXE_SUFFIX)
$(PIN) -xyzzy -bridge_save_mxcsr 0 -bridge_save_x87 0 -t $(OBJDIR)test_iarg_preserve_mxcsr$(PINTOOL_SUFFIX) \
-- $(OBJDIR)test_iarg_preserve_mxcsr_app$(EXE_SUFFIX)
test_iarg_preserve_mxcsr1.test: $(OBJDIR)test_iarg_preserve_mxcsr1$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_mxcsr_app$(EXE_SUFFIX)
$(PIN) -xyzzy -bridge_set_mxcsr 1 -bridge_save_x87 1 -t $(OBJDIR)test_iarg_preserve_mxcsr1$(PINTOOL_SUFFIX) \
-- $(OBJDIR)test_iarg_preserve_mxcsr_app$(EXE_SUFFIX)
test_iarg_preserve_probe.test: $(OBJDIR)test_iarg_preserve_probe$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_preserve_probe_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)test_iarg_preserve_probe$(PINTOOL_SUFFIX) -- $(OBJDIR)test_iarg_preserve_probe_app$(EXE_SUFFIX)
test_iarg_partial_context.test: $(OBJDIR)test_iarg_partial_context$(PINTOOL_SUFFIX) $(OBJDIR)test_iarg_partial_context_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)test_iarg_partial_context$(PINTOOL_SUFFIX) -- $(OBJDIR)test_iarg_partial_context_app$(EXE_SUFFIX)
x87_regs_in_context.test: $(OBJDIR)x87_regs_in_context$(PINTOOL_SUFFIX) $(OBJDIR)x87_regs_in_context_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)x87_regs_in_context$(PINTOOL_SUFFIX) -- $(OBJDIR)x87_regs_in_context_app$(EXE_SUFFIX)
test_sysenter_win.test: $(OBJDIR)test_sysenter_win$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)test_sysenter_win$(EXE_SUFFIX)
tool_malloc.test: $(OBJDIR)tool_malloc$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $(OBJDIR)tool_malloc$(PINTOOL_SUFFIX) -o $(OBJDIR)tool_malloc.out -xyzzy -statistic \
-- $(TESTAPP) makefile $(OBJDIR)tool_malloc.makefile.copy
$(SH) ./check_tool_malloc.sh $(OBJDIR)tool_malloc.out pintool.log
$(RM) $(OBJDIR)tool_malloc.out pintool.log $(OBJDIR)tool_malloc.makefile.copy
iret.test: $(OBJDIR)iret$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)iret$(EXE_SUFFIX)
# The loader test can't run on machines with apparmor protection for ldd and ld-linux.so.
loader.test: $(OBJDIR)fini$(PINTOOL_SUFFIX) $(TESTAPP)
if ! $(BASHTEST) -f /etc/apparmor.d/usr.bin.ldd; then \
$(PIN) -follow_execv -t $(OBJDIR)fini$(PINTOOL_SUFFIX) -- ldd $(TESTAPP); fi
check_legal_callbacks.test: $(OBJDIR)check_legal_callbacks$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -t $(OBJDIR)check_legal_callbacks$(PINTOOL_SUFFIX) -logfile $(OBJDIR)check_legal_callbacks.out \
-- $(TESTAPP) makefile $(OBJDIR)check_legal_callbacks.makefile.copy
$(QGREP) "Probe mode callback can be used only with PIN_StartProgramProbed" $(OBJDIR)check_legal_callbacks.out
$(RM) $(OBJDIR)check_legal_callbacks.out
-$(PIN) -probe -t $(OBJDIR)check_legal_callbacks$(PINTOOL_SUFFIX) -logfile $(OBJDIR)check_legal_callbacks.out \
-- $(TESTAPP) makefile $(OBJDIR)check_legal_callbacks.makefile.copy
$(QGREP) "JIT mode callback can be used only with PIN_StartProgram" $(OBJDIR)check_legal_callbacks.out
$(RM) $(OBJDIR)check_legal_callbacks.out
undecorate.test: $(OBJDIR)undecorate$(PINTOOL_SUFFIX) $(OBJDIR)undecorate_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)undecorate$(PINTOOL_SUFFIX) -o $(OBJDIR)undecorate.out -- $(OBJDIR)undecorate_app$(EXE_SUFFIX)
# These greps print the relevant demangled names, useful for debugging
# $(GREP) method $(OBJDIR)undecorate.out
# $(GREP) foo $(OBJDIR)undecorate.out
$(RM) $(OBJDIR)undecorate.out
undecorateOperator.test: $(OBJDIR)undecorate$(PINTOOL_SUFFIX) $(OBJDIR)undecorateOperator_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)undecorate$(PINTOOL_SUFFIX) -o $(OBJDIR)undecorateOperator.out \
-- $(OBJDIR)undecorateOperator_app$(EXE_SUFFIX)
$(BASHTEST) `$(CGREP) "my_operator<int>" $(OBJDIR)undecorateOperator.out` -eq "2"
$(RM) $(OBJDIR)undecorateOperator.out
knob_writeonce.test: $(OBJDIR)knob_writeonce$(PINTOOL_SUFFIX) $(HELLO_APP)
@echo "This 'knob_writeonce' run should not fail"
$(PIN) -t $(OBJDIR)knob_writeonce$(PINTOOL_SUFFIX) -test value1 -test value1 \
-- $(HELLO_APP) > $(OBJDIR)knob_writeonce1.out
$(CGREP) "trying to overwrite write-once knob" $(OBJDIR)knob_writeonce1.out | $(QGREP) 0
$(RM) $(OBJDIR)knob_writeonce1.out
@echo "This 'knob_writeonce' run is expected to fail and to dump core file"
-$(PIN) -t $(OBJDIR)knob_writeonce$(PINTOOL_SUFFIX) -test value1 -test value2 \
-- $(HELLO_APP) > $(OBJDIR)knob_writeonce2.out
$(QGREP) "trying to overwrite write-once knob" $(OBJDIR)knob_writeonce2.out
$(RM) $(OBJDIR)knob_writeonce2.out
knob_duplicate_name.test: $(OBJDIR)knob_duplicate_name$(PINTOOL_SUFFIX) $(HELLO_APP)
@echo "This 'knob_duplicate_name' run is expected to fail and to dump core file"
-$(PIN) -t $(OBJDIR)knob_duplicate_name$(PINTOOL_SUFFIX) -- $(HELLO_APP) > $(OBJDIR)knob_duplicate_name.out
$(GREP) "duplicate option" $(OBJDIR)knob_duplicate_name.out | $(QGREP) "CheckAllKnobs"
$(RM) $(OBJDIR)knob_duplicate_name.out
knob_help.test:
$(PIN) -help > $(OBJDIR)knob_help.out
$(CGREP) "General switches" $(OBJDIR)knob_help.out | $(QGREP) -v "0"
$(CGREP) "E: Missing application name" $(OBJDIR)knob_help.out | $(QGREP) "0"
$(RM) $(OBJDIR)knob_help.out
win_knob_help.test:
$(PINBIN) -help > $(OBJDIR)win_knob_help.out
$(CGREP) "General switches" $(OBJDIR)win_knob_help.out | $(QGREP) -v "0"
$(CGREP) "E: Missing application name" $(OBJDIR)win_knob_help.out | $(QGREP) "0"
$(RM) $(OBJDIR)win_knob_help.out
knob_version.test:
$(PIN) -version > $(OBJDIR)knob_version.out
$(QGREP) "pin-" $(OBJDIR)knob_version.out
$(QGREP) "Copyright" $(OBJDIR)knob_version.out
$(CGREP) "Usage" $(OBJDIR)knob_version.out | $(QGREP) "0"
$(CGREP) "E: Missing application name" $(OBJDIR)knob_version.out | $(QGREP) "0"
$(RM) $(OBJDIR)knob_version.out
funcarg_ep.test: $(OBJDIR)funcarg_ep$(PINTOOL_SUFFIX) $(OBJDIR)funcarg_ep_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)funcarg_ep$(PINTOOL_SUFFIX) -o $(OBJDIR)funcarg_ep.out -- $(OBJDIR)funcarg_ep_app$(EXE_SUFFIX)
$(DIFF) $(OBJDIR)funcarg_ep.out funcarg_ep_$(TARGET).reference
$(RM) $(OBJDIR)funcarg_ep.out
fp_args.test: $(OBJDIR)fp_args$(PINTOOL_SUFFIX) $(OBJDIR)fp_args_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)fp_args$(PINTOOL_SUFFIX) -- $(OBJDIR)fp_args_app$(EXE_SUFFIX) > $(OBJDIR)fp_args.out
$(DIFF) $(OBJDIR)fp_args.out fp_args.reference
$(RM) $(OBJDIR)fp_args.out
aoti_mutation_tool.test: $(OBJDIR)aoti_mutation_tool$(PINTOOL_SUFFIX) $(OBJDIR)aoti_mutation_target$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)aoti_mutation_tool$(PINTOOL_SUFFIX) \
-- $(OBJDIR)aoti_mutation_target$(EXE_SUFFIX) > $(OBJDIR)aoti_mutation_tool.out
$(RM) $(OBJDIR)aoti_mutation_tool.out
#Intel64 application with IA-32 system call
unsup_syscall.test: $(OBJDIR)unsup_syscall_app$(EXE_SUFFIX)
$(PIN) -logfile $(OBJDIR)unsup_syscall.log -- $(OBJDIR)unsup_syscall_app$(EXE_SUFFIX) \
|| $(QGREP) "Pin does not support" $(OBJDIR)unsup_syscall.log
$(RM) $(OBJDIR)unsup_syscall.log
check_env.test: $(OBJDIR)check_env$(PINTOOL_SUFFIX) $(OBJDIR)check_env_app$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX)
export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:.; \
export LD_ASSUME_KERNEL=`$(UNAME) -r`; \
export LD_BIND_NOW=1; \
export LD_PRELOAD=$(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX); \
$(PIN) -follow_execv -t $(OBJDIR)check_env$(PINTOOL_SUFFIX) \
-- $(OBJDIR)check_env_app$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX)
check_env_probe.test: $(OBJDIR)check_env$(PINTOOL_SUFFIX) $(OBJDIR)check_env_app$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX)
export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:.; \
export LD_ASSUME_KERNEL=`$(UNAME) -r`; \
export LD_BIND_NOW=1; \
export LD_PRELOAD=$(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX); \
$(PIN) -probe -follow_execv -t $(OBJDIR)check_env$(PINTOOL_SUFFIX) \
-- $(OBJDIR)check_env_app$(EXE_SUFFIX) $(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX)
illegal_call_app.test: $(OBJDIR)illegal_call_app$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)illegal_call_app$(EXE_SUFFIX)
check_fpstate.test: $(OBJDIR)check_fpstate$(PINTOOL_SUFFIX) $(OBJDIR)check_fpstate_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)check_fpstate$(PINTOOL_SUFFIX) -o $(OBJDIR)check_fpstate.out \
-- $(OBJDIR)check_fpstate_app$(EXE_SUFFIX)
$(RM) $(OBJDIR)check_fpstate.out
code_cache_block_overflow1.test: $(OBJDIR)code_cache_block_overflow1$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -xyzzy -inline 0 -mesgon log_final -logfile $(OBJDIR)pin.code_cache_block_overflow1.log \
-t $(OBJDIR)code_cache_block_overflow1$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)code_cache_block_overflow1.makefile.copy
$(QGREP) "Make the region smaller: maxbbl=1 maxins=0" $(OBJDIR)pin.code_cache_block_overflow1.log
$(QGREP) "increase the code-cache-block-size" $(OBJDIR)pin.code_cache_block_overflow1.log
$(RM) $(OBJDIR)pin.code_cache_block_overflow1.log
code_cache_block_overflow2.test: $(OBJDIR)code_cache_block_overflow2$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -xyzzy -inline 0 -mesgon log_final -logfile $(OBJDIR)pin.code_cache_block_overflow2.log \
-t $(OBJDIR)code_cache_block_overflow2$(PINTOOL_SUFFIX) \
-- $(TESTAPP) makefile $(OBJDIR)code_cache_block_overflow2.makefile.copy
$(QGREP) "Make the region smaller: maxbbl=1 maxins=1" $(OBJDIR)pin.code_cache_block_overflow2.log
$(RM) $(OBJDIR)code_cache_block_overflow2.makefile.copy $(OBJDIR)pin.code_cache_block_overflow2.log
# Test emulation of GetThreadContext() / SetThreadContext() when using CONTEXT_FLOATING_POINT to access
# the MXCSR value on Intel64. Since the CONTEXT.MxCsr field is not well documented by Microsoft, we
# run the test natively too to make sure Pin is emulating the same behavior as a native application.
#
suspend-mxcsr.test: $(OBJDIR)suspend-mxcsr$(EXE_SUFFIX)
$(OBJDIR)suspend-mxcsr$(EXE_SUFFIX)
$(PIN) -- $(OBJDIR)suspend-mxcsr$(EXE_SUFFIX)
tool_full_path_win.test: $(OBJDIR)tool_full_path$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -probe -logfile $(OBJDIR)tool_full_path.log -xyzzy -mesgon log_win -t $< \
-- $(TESTAPP) makefile $(OBJDIR)tool_full_path.makefile.copy > $(OBJDIR)tool_full_path.out 2>&1
$(QGREP) -F -i -f $(OBJDIR)tool_full_path.out $(OBJDIR)tool_full_path.log
$(RM) $(OBJDIR)tool_full_path.makefile.copy $(OBJDIR)tool_full_path.out $(OBJDIR)tool_full_path.log
tool_full_path_unix.test: $(OBJDIR)tool_full_path$(PINTOOL_SUFFIX) $(TESTAPP)
$(PIN) -t $< -- $(TESTAPP) makefile $(OBJDIR)tool_full_path.makefile.copy > $(OBJDIR)tool_full_path.out 2>&1
$(QGREP) `$(READLINK) -f .`/$(OBJDIR)tool_full_path$(PINTOOL_SUFFIX) $(OBJDIR)tool_full_path.out
$(RM) $(OBJDIR)tool_full_path.makefile.copy $(OBJDIR)tool_full_path.out
import_forwarder_error.test: $(OBJDIR)import_forwarder_error$(PINTOOL_SUFFIX) $(TESTAPP)
-$(PIN) -logfile $(OBJDIR)import_forwarder_error.log -t $< \
-- $(TESTAPP) makefile $(OBJDIR)import_forwarder_error.makefile.copy > $(OBJDIR)import_forwarder_error.out 2>&1
$(QGREP) -i "Export foo" $(OBJDIR)import_forwarder_error.log
-$(RM) $(OBJDIR)import_forwarder_error.log $(OBJDIR)import_forwarder_error.out
security_w_pin_dll_load.test: $(OBJDIR)security_w_pin_dll_load$(PINTOOL_SUFFIX) $(OBJDIR)w_chdir_app$(EXE_SUFFIX) $(OBJDIR)dynamic_secondary_dll$(PINTOOL_SUFFIX)
$(PIN) -t $< -- $(OBJDIR)w_chdir_app$(EXE_SUFFIX) > $(OBJDIR)security_w_pin_dll_load.out 2>&1
$(RM) $(OBJDIR)security_w_pin_dll_load.out
$(PIN) -probe -t $< -- $(OBJDIR)w_chdir_app$(EXE_SUFFIX) > $(OBJDIR)security_w_pin_dll_load.out 2>&1
$(RM) $(OBJDIR)security_w_pin_dll_load.out
iarg_tsc_probed1.test: $(OBJDIR)iarg_tsc_probed1$(PINTOOL_SUFFIX) $(OBJDIR)factorial$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)iarg_tsc_probed1$(PINTOOL_SUFFIX) -o $(OBJDIR)iarg_tsc_probed1.out \
-- $(OBJDIR)factorial$(EXE_SUFFIX) 14 > $(OBJDIR)iarg_tsc_probed1.log 2>&1
$(QGREP) "factorial(14)" $(OBJDIR)iarg_tsc_probed1.out
$(RM) $(OBJDIR)iarg_tsc_probed1.out $(OBJDIR)iarg_tsc_probed1.log
xlat_ea.test: $(OBJDIR)xlat_ea$(PINTOOL_SUFFIX) $(OBJDIR)xlat_app$(EXE_SUFFIX)
$(PIN) -t $(OBJDIR)xlat_ea$(PINTOOL_SUFFIX) -- $(OBJDIR)xlat_app$(EXE_SUFFIX) > $(OBJDIR)xlat_ea.out 2>&1
$(RM) $(OBJDIR)xlat_ea.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.
###### Special tools' build rules ######
$(OBJDIR)control_init$(PINTOOL_SUFFIX): $(OBJDIR)control_init$(OBJ_SUFFIX) $(CONTROLLERLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)passthru_context_xmm_regs_callapp$(PINTOOL_SUFFIX): $(OBJDIR)passthru_context_xmm_regs_callapp$(OBJ_SUFFIX) $(SET_XMM_SCRATCHES_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)passthru_context_xmm_regs_executeat$(PINTOOL_SUFFIX): $(OBJDIR)passthru_context_xmm_regs_executeat$(OBJ_SUFFIX) $(SET_XMM_SCRATCHES_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)spalign$(PINTOOL_SUFFIX): $(OBJDIR)spalign$(OBJ_SUFFIX) $(OBJDIR)spalign_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)insertand$(PINTOOL_SUFFIX): $(OBJDIR)insertand$(OBJ_SUFFIX) $(OBJDIR)and$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)clobber$(PINTOOL_SUFFIX): $(OBJDIR)clobber$(OBJ_SUFFIX) $(OBJDIR)clobber_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)mt_tool$(PINTOOL_SUFFIX): $(OBJDIR)mt_tool$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)main_dll$(PINTOOL_SUFFIX): $(OBJDIR)main_dll$(OBJ_SUFFIX) $(OBJDIR)static_secondary_dll$(PINTOOL_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS) $(OBJDIR)static_secondary_dll$(LIB_SUFFIX)
$(OBJDIR)main_dll2$(PINTOOL_SUFFIX): $(OBJDIR)main_dll2$(OBJ_SUFFIX) $(OBJDIR)static_secondary_dll2$(PINTOOL_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS) $(OBJDIR)static_secondary_dll2$(LIB_SUFFIX)
$(OBJDIR)main_dll3$(PINTOOL_SUFFIX): $(OBJDIR)main_dll3$(OBJ_SUFFIX) $(OBJDIR)static_secondary_dll3$(PINTOOL_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS) $(OBJDIR)static_secondary_dll3$(LIB_SUFFIX)
$(OBJDIR)sse-ref$(PINTOOL_SUFFIX): $(OBJDIR)sse-ref$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_iarg_preserve$(PINTOOL_SUFFIX): $(OBJDIR)test_iarg_preserve$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(SUPPORTS_AVX_OBJ) $(SUPPORTS_AVX512F_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_iarg_preserve_probe$(PINTOOL_SUFFIX): $(OBJDIR)test_iarg_preserve_probe$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(SUPPORTS_AVX_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_iarg_preserve2$(PINTOOL_SUFFIX): $(OBJDIR)test_iarg_preserve2$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_iarg_preserve_mxcsr$(PINTOOL_SUFFIX): $(OBJDIR)test_iarg_preserve_mxcsr$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(SUPPORTS_AVX_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_iarg_preserve_mxcsr1$(PINTOOL_SUFFIX): $(OBJDIR)test_iarg_preserve_mxcsr1$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(SUPPORTS_AVX_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_iarg_partial_context$(PINTOOL_SUFFIX): $(OBJDIR)test_iarg_partial_context$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(SUPPORTS_AVX_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)flag_spill_fill_tool1$(PINTOOL_SUFFIX): $(OBJDIR)flag_spill_fill_tool1$(OBJ_SUFFIX) $(OBJDIR)flag_spill_fill_tool1_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)analysis_flag_overwrite_tool1$(PINTOOL_SUFFIX): $(OBJDIR)analysis_flag_overwrite_tool1$(OBJ_SUFFIX) $(OBJDIR)analysis_flag_overwrite_tool1_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)analysis_flag_overwrite_tool2$(PINTOOL_SUFFIX): $(OBJDIR)analysis_flag_overwrite_tool2$(OBJ_SUFFIX) $(OBJDIR)analysis_flag_overwrite_tool2_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)analysis_flag_overwrite_tool3$(PINTOOL_SUFFIX): $(OBJDIR)analysis_flag_overwrite_tool3$(OBJ_SUFFIX) $(OBJDIR)analysis_flag_overwrite_tool3_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)df_test_tool1$(PINTOOL_SUFFIX): $(OBJDIR)df_test_tool1$(OBJ_SUFFIX) $(OBJDIR)df_test_tool1_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)df_test_tool2$(PINTOOL_SUFFIX): $(OBJDIR)df_test_tool2$(OBJ_SUFFIX) $(OBJDIR)df_test_tool2_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)df_test_tool3$(PINTOOL_SUFFIX): $(OBJDIR)df_test_tool3$(OBJ_SUFFIX) $(OBJDIR)df_test_tool3_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)df_test_tool4$(PINTOOL_SUFFIX): $(OBJDIR)df_test_tool4$(OBJ_SUFFIX) $(OBJDIR)df_test_tool4_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)df_test_tool5$(PINTOOL_SUFFIX): $(OBJDIR)df_test_tool5$(OBJ_SUFFIX) $(OBJDIR)df_test_tool5_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inline_opt_test$(PINTOOL_SUFFIX): $(OBJDIR)inline_opt_test$(OBJ_SUFFIX) $(OBJDIR)inline_opt_test_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)test_inlined_consts$(PINTOOL_SUFFIX): $(OBJDIR)test_inlined_consts$(OBJ_SUFFIX) $(OBJDIR)test_inlined_consts_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inline_opt_test_df1$(PINTOOL_SUFFIX): $(OBJDIR)inline_opt_test_df1$(OBJ_SUFFIX) $(OBJDIR)inline_opt_test_df_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inline_opt_test_df2$(PINTOOL_SUFFIX): $(OBJDIR)inline_opt_test_df2$(OBJ_SUFFIX) $(OBJDIR)inline_opt_test_df_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inline_opt_test_df3$(PINTOOL_SUFFIX): $(OBJDIR)inline_opt_test_df3$(OBJ_SUFFIX) $(OBJDIR)inline_opt_test_df_app_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)x87_regs_in_context$(PINTOOL_SUFFIX): $(OBJDIR)x87_regs_in_context$(OBJ_SUFFIX) $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)flag_ac_win_tool$(PINTOOL_SUFFIX): $(OBJDIR)flag_ac_win_tool$(OBJ_SUFFIX) $(OBJDIR)flag_ac_app_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inlined-stack-arg-noopt$(PINTOOL_SUFFIX): $(OBJDIR)inlined-stack-arg-noopt$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS_NOOPT) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inlined-stack-arg1$(PINTOOL_SUFFIX): $(OBJDIR)inlined-stack-arg1$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inlined-stack-arg1-noopt$(PINTOOL_SUFFIX): $(OBJDIR)inlined-stack-arg1-noopt$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS_NOOPT) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)check_acall_inline_opt$(PINTOOL_SUFFIX): $(OBJDIR)check_acall_inline_opt$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS_NOOPT) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)inlined-stack-arg2$(PINTOOL_SUFFIX): $(OBJDIR)inlined-stack-arg2$(OBJ_SUFFIX) $(OBJDIR)inlined-stack-arg2_win$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)safecopy_mxcsr$(PINTOOL_SUFFIX): $(OBJDIR)safecopy_mxcsr$(OBJ_SUFFIX) $(OBJDIR)mxcsr_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)import_forwarder_error$(PINTOOL_SUFFIX): $(OBJDIR)import_forwarder_error$(OBJ_SUFFIX)
$(ARCHIVER)$(OBJDIR)import_forwarder_error$(LIB_SUFFIX) /def /EXPORT:main $(OBJDIR)import_forwarder_error$(OBJ_SUFFIX) $(TOOL_LPATHS) $(TOOL_LIBS)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(OBJDIR)import_forwarder_error.exp $(TOOL_LPATHS) $(TOOL_LIBS) $(OBJDIR)import_forwarder_error$(LIB_SUFFIX)
ifeq ($(TARGET_OS),windows)
# On Windows this tool requires the set_xmm_scratches_asm object.
# On other platforms, it is built with the default rule.
$(OBJDIR)xmmtest$(PINTOOL_SUFFIX): $(OBJDIR)xmmtest$(OBJ_SUFFIX) $(SET_XMM_SCRATCHES_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
endif
$(OBJDIR)internal_exception_handler_lin$(PINTOOL_SUFFIX): $(OBJDIR)internal_exception_handler_lin$(OBJ_SUFFIX) $(OBJDIR)exception_tool_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)exceptionAddress_lin$(PINTOOL_SUFFIX): $(OBJDIR)exceptionAddress_lin$(OBJ_SUFFIX) $(OBJDIR)exception_tool_asm$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)deepbind$(PINTOOL_SUFFIX): $(OBJDIR)deepbind$(OBJ_SUFFIX) $(OBJDIR)deepbind_syscalls$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ -Wl,--version-script=deepbind.ver $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)context_state_apis$(PINTOOL_SUFFIX): $(OBJDIR)context_state_apis$(OBJ_SUFFIX) $(SUPPORTS_AVX_OBJ)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)check_fpstate$(PINTOOL_SUFFIX): $(OBJDIR)check_fpstate$(OBJ_SUFFIX) $(REGVALLIB)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $^ $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)static_secondary_dll2$(PINTOOL_SUFFIX): $(OBJDIR)static_secondary_dll2$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS)
$(OBJDIR)static_secondary_dll3$(PINTOOL_SUFFIX): $(OBJDIR)static_secondary_dll3$(OBJ_SUFFIX)
$(LINKER) $(TOOL_LDFLAGS) $(LINK_EXE)$@ $< $(TOOL_LPATHS) $(TOOL_LIBS)
###### Special applications' build rules ######
$(OBJDIR)htab$(EXE_SUFFIX): htab.c $(THREADLIB)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)align_access_app$(EXE_SUFFIX): align_access_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)swizzlealloc$(EXE_SUFFIX): swizzlealloc.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)tool_fetch_app$(EXE_SUFFIX): tool_fetch_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(NO_PIC) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)df_test_app$(EXE_SUFFIX): df_test_app.c $(OBJDIR)df_test_app_win$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)reg_operands_test_app$(EXE_SUFFIX): reg_operands_test_app.c $(OBJDIR)reg_operands_test_app_win$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)seg_override_app1$(EXE_SUFFIX): seg_override_app1.c $(OBJDIR)seg_override_app1_win$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)analysis_flag_overwrite_app$(EXE_SUFFIX): analysis_flag_overwrite_app.c $(OBJDIR)analysis_flag_overwrite_app_win$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)test_iarg_preserve_app$(EXE_SUFFIX): test_iarg_preserve_app.cpp $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)passthru_context_xmm_regs_app$(EXE_SUFFIX): passthru_context_xmm_regs_app.cpp $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)test_iarg_preserve_mxcsr_app$(EXE_SUFFIX): test_iarg_preserve_mxcsr_app.cpp $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)test_iarg_preserve_probe_app$(EXE_SUFFIX): test_iarg_preserve_probe_app.cpp $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)test_iarg_preserve_app2$(EXE_SUFFIX): test_iarg_preserve_app2.cpp $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)test_iarg_partial_context_app$(EXE_SUFFIX): test_iarg_partial_context_app.cpp $(OBJDIR)test_iarg_preserve_asm$(OBJ_SUFFIX) $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(NO_PIC) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)x87_regs_in_context_app$(EXE_SUFFIX): x87_regs_in_context_app.cpp $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)flag_spill_fill_app$(EXE_SUFFIX): flag_spill_fill_app.c $(OBJDIR)flag_spill_fill_app_win$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)flags_at_analysis_app$(EXE_SUFFIX): flags_at_analysis_app.c $(OBJDIR)flags_at_analysis_app_win$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)flag_ac_app$(EXE_SUFFIX): flag_ac_app.c $(OBJDIR)flag_ac_app_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)flag_ac_win_app$(EXE_SUFFIX): flag_ac_win_app.c $(OBJDIR)flag_ac_app_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)jcx_addr16_app$(EXE_SUFFIX): jcx_addr16_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)tstcmpxchg8b$(EXE_SUFFIX): tstcmpxchg8b.c $(OBJDIR)cmpxchg8b_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(NO_PIC) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)tstcmpxchg8b_with_explicit_ebx$(EXE_SUFFIX): tstcmpxchg8b_with_explicit_ebx.c $(OBJDIR)cmpxchg8b_with_explicit_ebx_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
# This application is written completely in asm, it has no main and we don't want it to be linked
# to any library, just use the bare asm file. So we add the NO_STDLIBS flag
$(OBJDIR)smallpush$(EXE_SUFFIX): smallpush_$(TARGET)$(ASM_SUFFIX)
$(ASMBLR) $(ASM_FLAGS) $(NO_STDLIBS) $(LDFLAGS_DEFAULT_NO_PIE) $(COMP_EXE)$@ $<
$(OBJDIR)kthread$(EXE_SUFFIX): kthread.c $(THREADLIB)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)thread$(EXE_SUFFIX): $(OBJDIR)thread$(OBJ_SUFFIX) $(THREADLIB)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)thread_static$(EXE_SUFFIX): $(OBJDIR)thread$(OBJ_SUFFIX) $(THREADLIB)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(STATIC) $(APP_LIBS)
$(OBJDIR)thread_segmented_ea$(EXE_SUFFIX): thread_segmented_ea.c $(THREADLIB) $(OBJDIR)segmented_ea_verifier_win1_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)thread_ea_addr16$(EXE_SUFFIX): thread_ea_addr16.c $(THREADLIB) $(OBJDIR)ea_verifier_addr16_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)callsp$(EXE_SUFFIX): callsp_$(TARGET)$(ASM_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)sigmask$(EXE_SUFFIX): sigmask.c
$(APP_CC) $(APP_CXXFLAGS) ${COMP_EXE}$@ $<
$(OBJDIR)sigmaskstatic$(EXE_SUFFIX): sigmask.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(STATIC) $(APP_LIBS)
$(OBJDIR)create_rtn_app_linux$(EXE_SUFFIX): create_rtn_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) -Wl,--strip-all $(APP_LIBS) \
$(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)create_rtn_app_mac$(EXE_SUFFIX): create_rtn_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) -Wl,-non_global_symbols_strip_list,create_rtn.strip $(APP_LIBS) \
$(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)create_rtn_app_windows$(EXE_SUFFIX): create_rtn_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)reserve_memory$(EXE_SUFFIX): reserve_memory.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)reserve_memory_win$(EXE_SUFFIX): reserve_memory_win.cpp
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)inner$(EXE_SUFFIX): inner.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)set_fp_context_xmm_regs_app$(EXE_SUFFIX): set_fp_context_xmm_regs_app.cpp $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX) $(THREADLIB)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)callapp_perf_unix$(EXE_SUFFIX): callapp_perf_app.c callapp_perf_app1.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)callapp_perf_win$(EXE_SUFFIX): callapp_perf_app.c callapp_perf_app1.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)callapp_nested$(EXE_SUFFIX): callapp_nested_app.c callapp_nested_app1.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo$(EXE_SUFFIX): simplefoo.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplesp$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo1_unix$(EXE_SUFFIX): simplefoo1.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo1_win$(EXE_SUFFIX): simplefoo1.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo2_unix$(EXE_SUFFIX): simplefoo2.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo2_win$(EXE_SUFFIX): simplefoo2.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo3_unix$(EXE_SUFFIX): simplefoo3.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplebar64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo3_win$(EXE_SUFFIX): simplefoo3.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplebar64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo4_unix$(EXE_SUFFIX): simplefoo4.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplebar64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo4_win$(EXE_SUFFIX): simplefoo4.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplebar64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo6$(EXE_SUFFIX): simplefoo6.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo7$(EXE_SUFFIX): simplefoo7.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo8_unix$(EXE_SUFFIX): simplefoo8.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo8_win$(EXE_SUFFIX): simplefoo8.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo9_unix$(EXE_SUFFIX): simplefoo9.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo9_win$(EXE_SUFFIX): simplefoo9.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo10_unix$(EXE_SUFFIX): simplefoo10.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo10_win$(EXE_SUFFIX): simplefoo10.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo12_unix$(EXE_SUFFIX): simplefoo12.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo12_win$(EXE_SUFFIX): simplefoo12.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo13_unix$(EXE_SUFFIX): simplefoo13.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplebar64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)simplefoo13_win$(EXE_SUFFIX): simplefoo13.c $(OBJDIR)simplebar$(OBJ_SUFFIX) $(OBJDIR)simplebar64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)simplefoo14$(EXE_SUFFIX): simplefoo14.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)winfast10$(EXE_SUFFIX): simplefast10.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)winstd10$(EXE_SUFFIX): simplestd10.c $(OBJDIR)simplebar$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)callapp_64bit_param_app$(EXE_SUFFIX): callapp_64bit_param_app_1.c callapp_64bit_param_app_2.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)threadtest_unix$(EXE_SUFFIX): thread_wait.c addit.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)threadtest_win$(EXE_SUFFIX): threadtestwin.c addit.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)little_malloc$(EXE_SUFFIX): little_malloc.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)factorial$(EXE_SUFFIX): factorial.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)datasym_app$(EXE_SUFFIX): datasym_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)sse$(EXE_SUFFIX): sse.cpp $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)test_ip_access_app$(EXE_SUFFIX): test_ip_access_app.cpp $(OBJDIR)test_ip_access_app_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)xmmapp$(EXE_SUFFIX): xmmapp.cpp $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)stress_const_context_app$(EXE_SUFFIX): stress_const_context_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)addr32_override_app$(EXE_SUFFIX): addr32_override_app.cpp addr32_override_app_asm$(ASM_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)inline_opt_test_app$(EXE_SUFFIX): inline_opt_test_app.cpp $(OBJDIR)sse-ref_asm$(OBJ_SUFFIX) $(OBJDIR)inline_opt_test_asm$(OBJ_SUFFIX) $(OBJDIR)inline_opt_test_app_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)inline_opt_test_df_app$(EXE_SUFFIX): inline_opt_test_df_app.cpp $(OBJDIR)inline_opt_test_df_app_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SSE2) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)doint_ia32$(EXE_SUFFIX): doint.c $(OBJDIR)doint_ia32_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)attach_app$(EXE_SUFFIX): attach_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)win_callback_app$(EXE_SUFFIX): win_callback_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) user32.lib
$(OBJDIR)mt_app$(EXE_SUFFIX): mt_app.cpp $(THREADLIB)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)sw_interrupt_app$(EXE_SUFFIX): sw_interrupt_app.cpp $(OBJDIR)sys_memory$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)raise_exception_app$(EXE_SUFFIX): raise_exception_app.cpp $(OBJDIR)sys_memory$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)suspend_context_app_win$(EXE_SUFFIX): suspend_context_app_win.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(SKIP_XMM_TEST_CASE) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)suspend_app_win$(EXE_SUFFIX): suspend_app_win.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)guard_page_app$(EXE_SUFFIX): guard_page_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)socket_app$(EXE_SUFFIX): socket_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) ws2_32.lib
$(OBJDIR)syscall_std_app$(EXE_SUFFIX): syscall_std_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)teb_app$(EXE_SUFFIX): teb_app.cpp
#use big stack in application
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) /STACK:0x800000,0x1000 $(APP_LIBS)
$(OBJDIR)internal_exception_handler_app$(EXE_SUFFIX): internal_exception_handler_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)internal_exception_handler_app_lin$(EXE_SUFFIX): internal_exception_handler_app_lin.cpp exception_app_$(TARGET)$(ASM_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)exceptionAddress_lin_app$(EXE_SUFFIX): exceptionAddress_lin_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)undecorateOperator_app$(EXE_SUFFIX): undecorateOperator_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)fp_replace_app$(EXE_SUFFIX): fp_replace_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)funcarg_ep_app$(EXE_SUFFIX): funcarg_ep_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)win_thread_create_apc$(EXE_SUFFIX): win_thread_create_apc.cpp $(OBJDIR)$(DLL_PREFIX)win_tls_dll$(DLL_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(OBJDIR)win_tls_dll$(LIB_SUFFIX)
$(OBJDIR)win_cpp_exception$(EXE_SUFFIX): win_cpp_exception.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
## adding debug always so main could be detected
$(OBJDIR)winapp_exception_context$(EXE_SUFFIX): winapp_exception_context.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(DBG_INFO_CXX_ALWAYS) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(DBG_INFO_LD_ALWAYS)
## adding debug always so main could be detected
$(OBJDIR)win_exception_test$(EXE_SUFFIX): win_exception_test.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(DBG_INFO_CXX_ALWAYS) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(DBG_INFO_LD_ALWAYS)
$(OBJDIR)win_mxcsr_app$(EXE_SUFFIX): win_mxcsr_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)win_early_thread$(EXE_SUFFIX): win_early_thread.cpp $(OBJDIR)$(DLL_PREFIX)win_early_thread_dll$(DLL_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS) Advapi32.lib Dbghelp.lib \
$(OBJDIR)win_early_thread_dll$(LIB_SUFFIX)
$(OBJDIR)win_no_dependencies$(EXE_SUFFIX): win_no_dependencies.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(NO_STDLIBS) /ENTRY:main $(NO_ASLR)
$(OBJDIR)rep$(EXE_SUFFIX): rep_$(TARGET)$(ASM_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)sp_argument_app$(EXE_SUFFIX): sp_argument_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)test_lea_rip_app$(EXE_SUFFIX): test_lea_rip_app.cpp $(OBJDIR)test_lea_rip_$(TARGET)$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)btc_app$(EXE_SUFFIX): btc_app.c $(OBJDIR)btc_asm$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
# This application is written in asm and already defines the _start routine so it can't be linked
# to the default _start routine. Therefore compile with -nostartfiles flag.
$(OBJDIR)repcmpsz_linux$(EXE_SUFFIX): repcmpsz$(ASM_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) -nostartfiles $(APP_LIBS)
# This application is written in asm and already defines the _start routine so it can't be linked
# to the default _start routine. Also on macOS*, binaries that have their own start routine cannot
# be dynamically linked.
$(OBJDIR)repcmpsz_mac$(EXE_SUFFIX): repcmpsz$(ASM_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) -Wl,-e,_start -static -nostdlib
$(OBJDIR)repcmpsz_windows$(EXE_SUFFIX): repcmpsz.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)oneprog$(EXE_SUFFIX): oneprog.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)pusha_popa$(EXE_SUFFIX): pusha_popa.cpp $(OBJDIR)pusha_popa_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)rebase_dll$(EXE_SUFFIX): $(OBJDIR)rebase_dll$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)rebase_dll2$(EXE_SUFFIX): $(OBJDIR)rebase_dll$(OBJ_SUFFIX) $(OBJDIR)dummy_dll$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) /FIXED:NO /BASE:0 /DYNAMICBASE $(APP_LIBS)
$(OBJDIR)data_in_code_win_app$(EXE_SUFFIX): data_in_code_win_app.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) /MERGE:.edata=.text /MAP $(APP_LIBS)
$(OBJDIR)pushtest$(EXE_SUFFIX): pushtest.c pushw$(ASM_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
ifeq ($(TARGET_OS),windows)
$(OBJDIR)swizzle_seg_app$(EXE_SUFFIX): swizzle_seg_app.cpp swizzle_seg_app.def $(OBJDIR)swizzle_seg_app_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $< $(OBJDIR)swizzle_seg_app_asm$(OBJ_SUFFIX) $(APP_LDFLAGS) \
/DEF:swizzle_seg_app.def $(APP_LIBS)
else
$(OBJDIR)swizzle_seg_app$(EXE_SUFFIX): swizzle_seg_app.cpp $(OBJDIR)swizzle_seg_app_asm$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
endif
$(OBJDIR)far$(EXE_SUFFIX): farmain.cpp far$(ASM_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)iret$(EXE_SUFFIX): iretmain.c $(OBJDIR)iret_$(TARGET)$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)isret_app$(EXE_SUFFIX): isret_app.cpp $(OBJDIR)iret_$(TARGET)$(OBJ_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)fp_args_app$(EXE_SUFFIX): fp_args_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
$(OBJDIR)memory_displacement_app$(EXE_SUFFIX): memory_displacement_app.cpp memory_displacement_app$(ASM_SUFFIX)
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)unsup_syscall_app$(EXE_SUFFIX): unsup_syscall$(ASM_SUFFIX)
$(APP_CC) -nostdlib $(COMP_EXE)$@ $<
$(OBJDIR)suspend-mxcsr$(EXE_SUFFIX): suspend-mxcsr.cpp $(OBJDIR)suspend-mxcsr-asm$(OBJ_SUFFIX)
$(CXX) $(CXXFLAGS) $(PIN_CXXFLAGS) $(OUTEXE)$@ $< $(APP_CXXLINK_FLAGS)
$(OBJDIR)symsize_app$(EXE_SUFFIX): symsize.c symsize_asm$(ASM_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS)
$(OBJDIR)stringtest$(EXE_SUFFIX): stringtest.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)secname_app$(EXE_SUFFIX): secname_app.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)win_code_on_reused_memory$(EXE_SUFFIX): win_code_on_reused_memory.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)win_divide_by_zero_exception$(EXE_SUFFIX): win_divide_by_zero_exception.cpp
$(APP_CXX) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
# use -mfpmath=387 to make sure the fpstate has no-null values
$(OBJDIR)check_fpstate_app$(EXE_SUFFIX): check_fpstate_app.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(FP387) $(COMP_EXE)$@ $< $(APP_LDFLAGS_NOOPT) $(APP_LIBS)
$(OBJDIR)xlat_app$(EXE_SUFFIX): xlat_app.cpp xlat_app_asm_$(TARGET).s
$(APP_CXX) $(APP_CXXFLAGS) $(COMP_EXE)$@ $^ $(APP_LDFLAGS) $(APP_LIBS) $(CXX_LPATHS) $(CXX_LIBS)
###### Special objects' build rules ######
$(OBJDIR)incebx$(OBJ_SUFFIX): incebx.cpp
$(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)sys_memory$(OBJ_SUFFIX): sys_memory_$(OS_TYPE).c sys_memory.h
$(APP_CC) $(APP_CXXFLAGS) $(COMP_OBJ)$@ $< $(CXX_LPATHS) $(CXX_LIBS)
# must manually enable sse2 for older gcc verions used in sanity
$(OBJDIR)intrin$(OBJ_SUFFIX): intrin.cpp
$(CXX) $(TOOL_CXXFLAGS) $(SSE2) $(COMP_OBJ)$@ $<
$(OBJDIR)xmmtest$(OBJ_SUFFIX): xmmtest.cpp
$(CXX) $(TOOL_CXXFLAGS) $(SSE2) $(COMP_OBJ)$@ $<
$(OBJDIR)safecopy_mxcsr$(OBJ_SUFFIX): safecopy_mxcsr.cpp
$(CXX) $(TOOL_CXXFLAGS) $(SSE2) $(COMP_OBJ)$@ $<
$(OBJDIR)context_state_apis$(OBJ_SUFFIX): context_state_apis.cpp
$(CXX) $(TOOL_CXXFLAGS) $(SSE2) $(COMP_OBJ)$@ $<
$(OBJDIR)inlined-stack-arg-noopt$(OBJ_SUFFIX): inlined-stack-arg.cpp
$(CXX) $(TOOL_CXXFLAGS_NOOPT) $(COMP_OBJ)$@ $<
$(OBJDIR)inlined-stack-arg1-noopt$(OBJ_SUFFIX): inlined-stack-arg1.cpp
$(CXX) $(TOOL_CXXFLAGS_NOOPT) $(COMP_OBJ)$@ $<
$(OBJDIR)check_acall_inline_opt$(OBJ_SUFFIX): check_acall_inline_opt.cpp
$(CXX) $(TOOL_CXXFLAGS_NOOPT) -fPIC $(COMP_OBJ)$@ $<
$(OBJDIR)main_dll$(OBJ_SUFFIX): main_dll.cpp
$(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)main_dll2$(OBJ_SUFFIX): main_dll.cpp
$(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)main_dll3$(OBJ_SUFFIX): main_dll.cpp
$(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)simplebar$(OBJ_SUFFIX): simplebar.c
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_OBJ)$@ $<
$(OBJDIR)simplebar64$(OBJ_SUFFIX): simplebar64.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)thread$(OBJ_SUFFIX): thread.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)dummy_dll$(OBJ_SUFFIX): dummy_dll.c
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)rebase_dll$(OBJ_SUFFIX): rebase_dll.c
$(APP_CC) $(APP_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)one$(OBJ_SUFFIX): one.c
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)two$(OBJ_SUFFIX): two.c
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)rip_relative_prefix_67_app_intel64$(EXE_SUFFIX): rip_relative_prefix_67_app_intel64.c $(OBJDIR)rip_relative_prefix_67_asm_intel64$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS_NOOPT) $(COMP_EXE)$@ $^ $(APP_LDFLAGS_NOOPT)
$(OBJDIR)static_secondary_dll2$(OBJ_SUFFIX): static_secondary_dll.cpp
$(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<
$(OBJDIR)static_secondary_dll3$(OBJ_SUFFIX): static_secondary_dll.cpp
$(CXX) $(TOOL_CXXFLAGS) $(COMP_OBJ)$@ $<
###### Special dlls' build rules ######
$(OBJDIR)$(DLL_PREFIX)win_tls_dll$(DLL_SUFFIX): win_tls_dll.cpp
$(APP_CXX) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) $(APP_LIBS)
$(OBJDIR)$(DLL_PREFIX)win_early_thread_dll$(DLL_SUFFIX): win_early_thread_dll.cpp
$(APP_CXX) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) $(APP_LIBS)
$(OBJDIR)$(DLL_PREFIX)one$(DLL_SUFFIX): $(OBJDIR)one$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) $(APP_LIBS)
$(OBJDIR)$(DLL_PREFIX)two$(DLL_SUFFIX): $(OBJDIR)two$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) $(APP_LIBS)
$(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX): $(OBJDIR)dummy_dll$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) \
/NOENTRY /BASE:0x10000000 $(APP_LIBS)
$(OBJDIR)$(DLL_PREFIX)dummy_dll2$(DLL_SUFFIX): $(OBJDIR)$(DLL_PREFIX)dummy_dll$(DLL_SUFFIX)
cp $< $@
$(OBJDIR)$(DLL_PREFIX)check_env_dll$(DLL_SUFFIX): $(OBJDIR)one$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) $(APP_LIBS)
# This library is linked with the --no-as-needed flag because we want libclose2 to be a dependency
# (and eventually loaded at runtime) even though it is not used.
$(OBJDIR)$(DLL_PREFIX)close1$(DLL_SUFFIX): $(OBJDIR)one$(OBJ_SUFFIX) $(OBJDIR)$(DLL_PREFIX)close2$(DLL_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) -Wl,-L$(OBJDIR) \
$(APP_LIBS) -Wl,--no-as-needed -Wl,-lclose2
$(OBJDIR)$(DLL_PREFIX)close2$(DLL_SUFFIX): $(OBJDIR)two$(OBJ_SUFFIX)
$(APP_CC) $(APP_CXXFLAGS) $(DLL_CXXFLAGS) $(COMP_EXE)$@ $< $(APP_LDFLAGS) $(DLL_LDFLAGS) $(APP_LIBS)