############################################################## # # 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: .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 'quotes', "double quotes", <less && greater than>" $(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) "55" $(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" $(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)