From 0fdb97fbe463ec478a88f53d12033331030802ec Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Tue, 8 Jun 2021 20:34:54 +0800 Subject: [PATCH 01/22] fix issue#4940 --- ext/drreg/drreg.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ext/drreg/drreg.c b/ext/drreg/drreg.c index 87a0070ae02..538dc79e7b2 100644 --- a/ext/drreg/drreg.c +++ b/ext/drreg/drreg.c @@ -828,6 +828,9 @@ drreg_forward_analysis(void *drcontext, instr_t *start) aflags_new = instr_get_arith_flags(inst, DR_QUERY_INCLUDE_COND_SRCS); /* reading and writing counts only as reading */ aflags_new &= (~(EFLAGS_READ_TO_WRITE(aflags_new))); + /* also checks aflags_cur to make sure the writes are + count only if there are no previously used aflags */ + aflags_new &= (~(EFLAGS_READ_TO_WRITE(aflags_cur))); /* reading doesn't count if already written */ aflags_new &= (~(EFLAGS_WRITE_TO_READ(aflags_cur))); aflags_cur |= aflags_new; From 17928a69a9eb7ed22b4b12969e0eff1b5d2c3d51 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Wed, 9 Jun 2021 10:13:18 +0800 Subject: [PATCH 02/22] summarize the comment --- ext/drreg/drreg.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ext/drreg/drreg.c b/ext/drreg/drreg.c index 538dc79e7b2..2dc33402469 100644 --- a/ext/drreg/drreg.c +++ b/ext/drreg/drreg.c @@ -828,8 +828,7 @@ drreg_forward_analysis(void *drcontext, instr_t *start) aflags_new = instr_get_arith_flags(inst, DR_QUERY_INCLUDE_COND_SRCS); /* reading and writing counts only as reading */ aflags_new &= (~(EFLAGS_READ_TO_WRITE(aflags_new))); - /* also checks aflags_cur to make sure the writes are - count only if there are no previously used aflags */ + /* writing doesn't count if already read */ aflags_new &= (~(EFLAGS_READ_TO_WRITE(aflags_cur))); /* reading doesn't count if already written */ aflags_new &= (~(EFLAGS_WRITE_TO_READ(aflags_cur))); From c3fdf002ce53625ff6ffab32464ee6fead9af33b Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Wed, 9 Jun 2021 13:30:09 +0800 Subject: [PATCH 03/22] add test for aflag reservation of analysis phase --- suite/tests/CMakeLists.txt | 1 + suite/tests/client-interface/drreg-test.c | 12 ++++++++- suite/tests/client-interface/drreg-test.dll.c | 25 +++++++++++++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/suite/tests/CMakeLists.txt b/suite/tests/CMakeLists.txt index 23549bc41d8..050c818715f 100644 --- a/suite/tests/CMakeLists.txt +++ b/suite/tests/CMakeLists.txt @@ -2562,6 +2562,7 @@ endif (UNIX) tobuild_ci(client.drreg-test client-interface/drreg-test.c "" "" "") use_DynamoRIO_extension(client.drreg-test.dll drmgr) use_DynamoRIO_extension(client.drreg-test.dll drreg) +use_DynamoRIO_extension(client.drreg-test.dll drx) target_include_directories(client.drreg-test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/client-interface) diff --git a/suite/tests/client-interface/drreg-test.c b/suite/tests/client-interface/drreg-test.c index 2aeb7c0ecfb..5fbea3439ab 100644 --- a/suite/tests/client-interface/drreg-test.c +++ b/suite/tests/client-interface/drreg-test.c @@ -384,7 +384,17 @@ GLOBAL_LABEL(FUNCNAME:) cmp TEST_REG_ASM, DRREG_TEST_13_ASM je epilog ud2 - + test15: + /* Test 14: drreg_aflags_are_dead */ + mov TEST_REG_ASM, MAKE_HEX_ASM(1) + sub TEST_REG_ASM, MAKE_HEX_ASM(2) + mov TEST_REG_ASM, MAKE_HEX_ASM(2) + sbb TEST_REG_ASM, MAKE_HEX_ASM(1) + test15_done: + /* Fail if aflags are not restored correctly */ + cmp TEST_REG_ASM, MAKE_HEX_ASM(0) + je epilog + ud2 epilog: add REG_XSP, FRAME_PADDING /* make a legal SEH64 epilog */ POP_CALLEE_SAVED_REGS() diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index 998e8ae7ddb..801c23ed8ab 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -35,6 +35,7 @@ #include "dr_api.h" #include "drmgr.h" #include "drreg.h" +#include "drx.h" #include "client_tools.h" #include "drreg-test-shared.h" #include /* memset */ @@ -149,6 +150,23 @@ static dr_emit_flags_t event_app_analysis(void *drcontext, void *tag, instrlist_t *bb, bool for_trace, bool translating, OUT void *user_data) { +#ifdef X86 + for (instr_t* instr = instrlist_first(bb); instr != NULL; instr = instr_get_next(instr)) { + reg_id_t r; + drreg_status_t res; + bool dead; + CHECK(drreg_are_aflags_dead(drcontext, instr, &dead)==DRREG_SUCCESS, "drreg_are_aflags_dead should always work"); + CHECK(drx_aflags_are_dead(instr)==dead, "aflag liveness estimation of drx and drreg should always consist"); + res = drreg_reserve_aflags(drcontext, bb, instr); + CHECK(res == DRREG_SUCCESS, "reserve of aflags should work"); + CHECK(drreg_reserve_register(drcontext, bb, instr, NULL, &r)==DRREG_SUCCESS, "default reserve should always work"); + /* clear the CF flag, it should not effect after aflags unreservation */ + instrlist_meta_preinsert(bb, instr, INSTR_CREATE_xor(drcontext, opnd_create_reg(IF_X64_ELSE(reg_64_to_32(r), r)), opnd_create_reg(IF_X64_ELSE(reg_64_to_32(r), r)))); + CHECK(drreg_unreserve_register(drcontext, bb, instr, r) == DRREG_SUCCESS, "default unreserve should always work"); + res = drreg_unreserve_aflags(drcontext, bb, instr); + CHECK(res == DRREG_SUCCESS, "unreserve of aflags should work"); + } +#endif return DR_EMIT_DEFAULT; } @@ -483,10 +501,13 @@ event_instru2instru(void *drcontext, void *tag, instrlist_t *bb, bool for_trace, static void event_exit(void) { - if (!drmgr_unregister_bb_insertion_event(event_app_instruction) || + if (!drmgr_unregister_bb_instrumentation_ex_event(event_app2app, event_app_analysis, + event_app_instruction, + event_instru2instru) || drreg_exit() != DRREG_SUCCESS) CHECK(false, "exit failed"); + drx_exit(); drmgr_exit(); } @@ -497,7 +518,7 @@ dr_init(client_id_t id) * a DR slot. */ drreg_options_t ops = { sizeof(ops), 2 /*max slots needed*/, false }; - if (!drmgr_init() || drreg_init(&ops) != DRREG_SUCCESS) + if (!drx_init() || !drmgr_init() || drreg_init(&ops) != DRREG_SUCCESS) CHECK(false, "init failed"); note_base = drmgr_reserve_note_range(DRREG_TEST_NOTE_COUNT); From e6fbd30023edb4075be456fb52182a76321b567c Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 10 Jun 2021 12:21:13 +0800 Subject: [PATCH 04/22] make the aflag test general --- suite/tests/client-interface/drreg-test.dll.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index 801c23ed8ab..b66cf0ce049 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -150,23 +150,13 @@ static dr_emit_flags_t event_app_analysis(void *drcontext, void *tag, instrlist_t *bb, bool for_trace, bool translating, OUT void *user_data) { -#ifdef X86 for (instr_t* instr = instrlist_first(bb); instr != NULL; instr = instr_get_next(instr)) { reg_id_t r; drreg_status_t res; bool dead; CHECK(drreg_are_aflags_dead(drcontext, instr, &dead)==DRREG_SUCCESS, "drreg_are_aflags_dead should always work"); CHECK(drx_aflags_are_dead(instr)==dead, "aflag liveness estimation of drx and drreg should always consist"); - res = drreg_reserve_aflags(drcontext, bb, instr); - CHECK(res == DRREG_SUCCESS, "reserve of aflags should work"); - CHECK(drreg_reserve_register(drcontext, bb, instr, NULL, &r)==DRREG_SUCCESS, "default reserve should always work"); - /* clear the CF flag, it should not effect after aflags unreservation */ - instrlist_meta_preinsert(bb, instr, INSTR_CREATE_xor(drcontext, opnd_create_reg(IF_X64_ELSE(reg_64_to_32(r), r)), opnd_create_reg(IF_X64_ELSE(reg_64_to_32(r), r)))); - CHECK(drreg_unreserve_register(drcontext, bb, instr, r) == DRREG_SUCCESS, "default unreserve should always work"); - res = drreg_unreserve_aflags(drcontext, bb, instr); - CHECK(res == DRREG_SUCCESS, "unreserve of aflags should work"); } -#endif return DR_EMIT_DEFAULT; } From 71c9950d09653d41f6fbb3cdfcb4947ee5f6cd01 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 10 Jun 2021 23:22:52 +0800 Subject: [PATCH 05/22] delete redundant test --- suite/tests/client-interface/drreg-test.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/suite/tests/client-interface/drreg-test.c b/suite/tests/client-interface/drreg-test.c index 5fbea3439ab..36b47eb4e98 100644 --- a/suite/tests/client-interface/drreg-test.c +++ b/suite/tests/client-interface/drreg-test.c @@ -384,17 +384,6 @@ GLOBAL_LABEL(FUNCNAME:) cmp TEST_REG_ASM, DRREG_TEST_13_ASM je epilog ud2 - test15: - /* Test 14: drreg_aflags_are_dead */ - mov TEST_REG_ASM, MAKE_HEX_ASM(1) - sub TEST_REG_ASM, MAKE_HEX_ASM(2) - mov TEST_REG_ASM, MAKE_HEX_ASM(2) - sbb TEST_REG_ASM, MAKE_HEX_ASM(1) - test15_done: - /* Fail if aflags are not restored correctly */ - cmp TEST_REG_ASM, MAKE_HEX_ASM(0) - je epilog - ud2 epilog: add REG_XSP, FRAME_PADDING /* make a legal SEH64 epilog */ POP_CALLEE_SAVED_REGS() From e6db5dbd7abb5c5a46ffa8c2ad5c5ac58baeefd8 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 10 Jun 2021 23:42:49 +0800 Subject: [PATCH 06/22] fix format with clang-format --- suite/tests/client-interface/drreg-test.dll.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index b66cf0ce049..c73646a3c56 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -150,12 +150,15 @@ static dr_emit_flags_t event_app_analysis(void *drcontext, void *tag, instrlist_t *bb, bool for_trace, bool translating, OUT void *user_data) { - for (instr_t* instr = instrlist_first(bb); instr != NULL; instr = instr_get_next(instr)) { + for (instr_t *instr = instrlist_first(bb); instr != NULL; + instr = instr_get_next(instr)) { reg_id_t r; drreg_status_t res; bool dead; - CHECK(drreg_are_aflags_dead(drcontext, instr, &dead)==DRREG_SUCCESS, "drreg_are_aflags_dead should always work"); - CHECK(drx_aflags_are_dead(instr)==dead, "aflag liveness estimation of drx and drreg should always consist"); + CHECK(drreg_are_aflags_dead(drcontext, instr, &dead) == DRREG_SUCCESS, + "drreg_are_aflags_dead should always work"); + CHECK(drx_aflags_are_dead(instr) == dead, + "aflag liveness estimation of drx and drreg should always consist"); } return DR_EMIT_DEFAULT; } @@ -492,8 +495,8 @@ static void event_exit(void) { if (!drmgr_unregister_bb_instrumentation_ex_event(event_app2app, event_app_analysis, - event_app_instruction, - event_instru2instru) || + event_app_instruction, + event_instru2instru) || drreg_exit() != DRREG_SUCCESS) CHECK(false, "exit failed"); From 1c423ae32a915e338896ac2cff85225f0eecf527 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 10 Jun 2021 23:52:07 +0800 Subject: [PATCH 07/22] update assertion message for aflag liveness test --- suite/tests/client-interface/drreg-test.dll.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index c73646a3c56..55e34f38ea4 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -158,7 +158,7 @@ event_app_analysis(void *drcontext, void *tag, instrlist_t *bb, bool for_trace, CHECK(drreg_are_aflags_dead(drcontext, instr, &dead) == DRREG_SUCCESS, "drreg_are_aflags_dead should always work"); CHECK(drx_aflags_are_dead(instr) == dead, - "aflag liveness estimation of drx and drreg should always consist"); + "aflags liveness estimation of drx and drreg should always be consistent"); } return DR_EMIT_DEFAULT; } From 816ee64b5583d7b121716aab735961397f259c93 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Fri, 11 Jun 2021 00:11:46 +0800 Subject: [PATCH 08/22] delete the unused variables --- suite/tests/client-interface/drreg-test.dll.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index 55e34f38ea4..2cf841cccca 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -152,8 +152,6 @@ event_app_analysis(void *drcontext, void *tag, instrlist_t *bb, bool for_trace, { for (instr_t *instr = instrlist_first(bb); instr != NULL; instr = instr_get_next(instr)) { - reg_id_t r; - drreg_status_t res; bool dead; CHECK(drreg_are_aflags_dead(drcontext, instr, &dead) == DRREG_SUCCESS, "drreg_are_aflags_dead should always work"); From dc01bcc3cecf4bf0f35a9e806794463b47a0d20c Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Tue, 15 Jun 2021 13:56:35 +0800 Subject: [PATCH 09/22] Attempt debugging failing test using tmate --- .github/workflows/ci-windows.yml | 8 ++++++++ make/cpp2asm_support.cmake | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index f8ef6f18223..41750b643e3 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -91,6 +91,10 @@ jobs: CI_TRIGGER: ${{ github.event_name }} CI_BRANCH: ${{ github.ref }} + - name: Setup tmate session + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 + - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' uses: dawidd6/action-send-mail@v2 @@ -156,6 +160,10 @@ jobs: CI_TRIGGER: ${{ github.event_name }} CI_BRANCH: ${{ github.ref }} + - name: Setup tmate session + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 + - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' uses: dawidd6/action-send-mail@v2 diff --git a/make/cpp2asm_support.cmake b/make/cpp2asm_support.cmake index 960efb31d51..6006465512a 100644 --- a/make/cpp2asm_support.cmake +++ b/make/cpp2asm_support.cmake @@ -232,11 +232,15 @@ else () find_program(CMAKE_ASM_COMPILER ml64.exe HINTS "${cl_path}" DOC "path to assembler") if ("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles") set(CMAKE_ASM_COMPILER "ml64.exe") + elseif ("${CMAKE_GENERATOR}" MATCHES "Ninja") + set(CMAKE_ASM_COMPILER "ml64.exe") endif() else (X64) find_program(CMAKE_ASM_COMPILER ml.exe HINTS "${cl_path}" DOC "path to assembler") if ("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles") set(CMAKE_ASM_COMPILER "ml.exe") + elseif ("${CMAKE_GENERATOR}" MATCHES "Ninja") + set(CMAKE_ASM_COMPILER "ml64.exe") endif() endif (X64) if (NOT CMAKE_ASM_COMPILER) From 2906920959f071e3ce9a4b07b5faca3be42c2ad7 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Wed, 16 Jun 2021 15:01:03 +0800 Subject: [PATCH 10/22] Update ci-windows.yml --- .github/workflows/ci-windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 41750b643e3..36ee4c0420a 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -161,8 +161,8 @@ jobs: CI_BRANCH: ${{ github.ref }} - name: Setup tmate session - if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' From 7577dc1cefdcd7e02b43c322ff11c4fc67c20dfa Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 17 Jun 2021 14:26:01 +0800 Subject: [PATCH 11/22] Update ci-windows.yml --- .github/workflows/ci-windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 36ee4c0420a..a919997317d 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -92,8 +92,8 @@ jobs: CI_BRANCH: ${{ github.ref }} - name: Setup tmate session - if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' From 60fe1a77e74a0b44a811f5b84cc2957836dfee47 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Mon, 21 Jun 2021 15:44:01 +0800 Subject: [PATCH 12/22] Update drreg-test.c --- suite/tests/client-interface/drreg-test.c | 1 + 1 file changed, 1 insertion(+) diff --git a/suite/tests/client-interface/drreg-test.c b/suite/tests/client-interface/drreg-test.c index e14c4e6e67d..61b85f222c1 100644 --- a/suite/tests/client-interface/drreg-test.c +++ b/suite/tests/client-interface/drreg-test.c @@ -532,6 +532,7 @@ GLOBAL_LABEL(FUNCNAME:) cmp TEST_REG_ASM, DRREG_TEST_13_ASM je epilog ud2 + epilog: add REG_XSP, FRAME_PADDING /* make a legal SEH64 epilog */ POP_CALLEE_SAVED_REGS() From 49e297cf33b32bec07c4f6153a5ef6167681effb Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 8 Jul 2021 11:16:55 +0800 Subject: [PATCH 13/22] fix aflags over-estimation of drx --- ext/drx/drx.c | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/ext/drx/drx.c b/ext/drx/drx.c index 70e5e1441ec..8c63365fb06 100644 --- a/ext/drx/drx.c +++ b/ext/drx/drx.c @@ -219,32 +219,13 @@ DR_EXPORT bool drx_aflags_are_dead(instr_t *where) { - instr_t *instr; - uint flags; - for (instr = where; instr != NULL; instr = instr_get_next(instr)) { - /* we treat syscall/interrupt as aflags read */ - if (instr_is_syscall(instr) || instr_is_interrupt(instr)) - return false; - flags = instr_get_arith_flags(instr, DR_QUERY_DEFAULT); - if (TESTANY(EFLAGS_READ_ARITH, flags)) - return false; - if (TESTALL(EFLAGS_WRITE_ARITH, flags)) - return true; - if (instr_is_cti(instr)) { - if (instr_is_app(instr) && - (instr_is_ubr(instr) || instr_is_call_direct(instr))) { - instr_t *next = instr_get_next(instr); - opnd_t tgt = instr_get_target(instr); - /* continue on elision */ - if (next != NULL && instr_is_app(next) && opnd_is_pc(tgt) && - opnd_get_pc(tgt) == instr_get_app_pc(next)) - continue; - } - /* unknown target, assume aflags is live */ - return false; - } + bool dead = false; + void *drcontext = dr_get_current_drcontext(); + drreg_status_t res = drreg_are_aflags_dead(drcontext, where, &dead); + if(res != DRREG_SUCCESS) { + ASSERT(false, "drreg_are_aflags_dead failed!"); } - return false; + return dead; } /*************************************************************************** From a22d098026eb258034d548f5346ecfd8d4319128 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 8 Jul 2021 11:20:26 +0800 Subject: [PATCH 14/22] fix format error --- ext/drx/drx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/drx/drx.c b/ext/drx/drx.c index 8c63365fb06..01c2bbced56 100644 --- a/ext/drx/drx.c +++ b/ext/drx/drx.c @@ -222,7 +222,7 @@ drx_aflags_are_dead(instr_t *where) bool dead = false; void *drcontext = dr_get_current_drcontext(); drreg_status_t res = drreg_are_aflags_dead(drcontext, where, &dead); - if(res != DRREG_SUCCESS) { + if (res != DRREG_SUCCESS) { ASSERT(false, "drreg_are_aflags_dead failed!"); } return dead; From 114fd305b5988e043e8ea39c64a661e46dd02b8d Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Fri, 9 Jul 2021 10:32:22 +0800 Subject: [PATCH 15/22] Revert "Update ci-windows.yml" This reverts commit 7577dc1cefdcd7e02b43c322ff11c4fc67c20dfa. --- .github/workflows/ci-windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index a919997317d..36ee4c0420a 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -92,8 +92,8 @@ jobs: CI_BRANCH: ${{ github.ref }} - name: Setup tmate session - if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' From 85080f48d7301ae78a91e1e4fb40149e2821abe9 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Fri, 9 Jul 2021 10:32:26 +0800 Subject: [PATCH 16/22] Revert "Update ci-windows.yml" This reverts commit 2906920959f071e3ce9a4b07b5faca3be42c2ad7. --- .github/workflows/ci-windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 36ee4c0420a..41750b643e3 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -161,8 +161,8 @@ jobs: CI_BRANCH: ${{ github.ref }} - name: Setup tmate session - if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 + if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' From 90a117bcb2186838e0823147cf34683e543fbfcc Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Fri, 9 Jul 2021 10:32:31 +0800 Subject: [PATCH 17/22] Revert "Attempt debugging failing test using tmate" This reverts commit dc01bcc3cecf4bf0f35a9e806794463b47a0d20c. --- .github/workflows/ci-windows.yml | 8 -------- make/cpp2asm_support.cmake | 4 ---- 2 files changed, 12 deletions(-) diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 41750b643e3..f8ef6f18223 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -91,10 +91,6 @@ jobs: CI_TRIGGER: ${{ github.event_name }} CI_BRANCH: ${{ github.ref }} - - name: Setup tmate session - if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 - - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' uses: dawidd6/action-send-mail@v2 @@ -160,10 +156,6 @@ jobs: CI_TRIGGER: ${{ github.event_name }} CI_BRANCH: ${{ github.ref }} - - name: Setup tmate session - if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 - - name: Send failure mail to dynamorio-devs if: failure() && github.ref == 'refs/heads/master' uses: dawidd6/action-send-mail@v2 diff --git a/make/cpp2asm_support.cmake b/make/cpp2asm_support.cmake index 6006465512a..960efb31d51 100644 --- a/make/cpp2asm_support.cmake +++ b/make/cpp2asm_support.cmake @@ -232,15 +232,11 @@ else () find_program(CMAKE_ASM_COMPILER ml64.exe HINTS "${cl_path}" DOC "path to assembler") if ("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles") set(CMAKE_ASM_COMPILER "ml64.exe") - elseif ("${CMAKE_GENERATOR}" MATCHES "Ninja") - set(CMAKE_ASM_COMPILER "ml64.exe") endif() else (X64) find_program(CMAKE_ASM_COMPILER ml.exe HINTS "${cl_path}" DOC "path to assembler") if ("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles") set(CMAKE_ASM_COMPILER "ml.exe") - elseif ("${CMAKE_GENERATOR}" MATCHES "Ninja") - set(CMAKE_ASM_COMPILER "ml64.exe") endif() endif (X64) if (NOT CMAKE_ASM_COMPILER) From 7cc24ac029501f627a0ee3b0d8edf47e16b71171 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Tue, 13 Jul 2021 11:25:55 +0800 Subject: [PATCH 18/22] simplify drx_aflags_are_dead --- ext/drx/drx.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ext/drx/drx.c b/ext/drx/drx.c index 01c2bbced56..1992364119c 100644 --- a/ext/drx/drx.c +++ b/ext/drx/drx.c @@ -220,11 +220,8 @@ bool drx_aflags_are_dead(instr_t *where) { bool dead = false; - void *drcontext = dr_get_current_drcontext(); - drreg_status_t res = drreg_are_aflags_dead(drcontext, where, &dead); - if (res != DRREG_SUCCESS) { - ASSERT(false, "drreg_are_aflags_dead failed!"); - } + drreg_status_t res = drreg_are_aflags_dead(dr_get_current_drcontext(), where, &dead); + ASSERT(res == DRREG_SUCCESS, "drreg_are_aflags_dead failed!"); return dead; } From 63be997fca11c3d775f70fbc74c9daaa9f2556c6 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Tue, 13 Jul 2021 11:47:41 +0800 Subject: [PATCH 19/22] use DR_ASSERT_MSG to avoid unused var error --- ext/drx/drx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/drx/drx.c b/ext/drx/drx.c index 1992364119c..0939c23cdff 100644 --- a/ext/drx/drx.c +++ b/ext/drx/drx.c @@ -221,7 +221,7 @@ drx_aflags_are_dead(instr_t *where) { bool dead = false; drreg_status_t res = drreg_are_aflags_dead(dr_get_current_drcontext(), where, &dead); - ASSERT(res == DRREG_SUCCESS, "drreg_are_aflags_dead failed!"); + DR_ASSERT_MSG(res == DRREG_SUCCESS, "drreg_are_aflags_dead failed!"); return dead; } From a0ac11672a59276d87d609d5b599fa89ddd3a32e Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Tue, 13 Jul 2021 11:49:57 +0800 Subject: [PATCH 20/22] use IF_DEBUG instead --- ext/drx/drx.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ext/drx/drx.c b/ext/drx/drx.c index 8067cee3959..5701df010ee 100644 --- a/ext/drx/drx.c +++ b/ext/drx/drx.c @@ -220,8 +220,9 @@ bool drx_aflags_are_dead(instr_t *where) { bool dead = false; - drreg_status_t res = drreg_are_aflags_dead(dr_get_current_drcontext(), where, &dead); - DR_ASSERT_MSG(res == DRREG_SUCCESS, "drreg_are_aflags_dead failed!"); + IF_DEBUG(drreg_status_t res =) + drreg_are_aflags_dead(dr_get_current_drcontext(), where, &dead); + ASSERT(res == DRREG_SUCCESS, "drreg_are_aflags_dead failed!"); return dead; } From 89362194b67023fb5803c539ff4d34d437d64c29 Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Wed, 14 Jul 2021 11:27:24 +0800 Subject: [PATCH 21/22] skip drx init and exit --- suite/tests/client-interface/drreg-test.dll.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index 60886b41d72..4713f9faeb8 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -1154,7 +1154,6 @@ event_exit(void) drreg_exit() != DRREG_SUCCESS) CHECK(false, "exit failed"); - drx_exit(); drmgr_exit(); } @@ -1165,7 +1164,7 @@ dr_init(client_id_t id) * a DR slot. */ drreg_options_t ops = { sizeof(ops), 2 /*max slots needed*/, false }; - if (!drx_init() || !drmgr_init() || drreg_init(&ops) != DRREG_SUCCESS) + if (!drmgr_init() || drreg_init(&ops) != DRREG_SUCCESS) CHECK(false, "init failed"); note_base = drmgr_reserve_note_range(DRREG_TEST_NOTE_COUNT); From df7a6f4bd0424dec07c7ac4de8d36d35733df12c Mon Sep 17 00:00:00 2001 From: JerryYouxin Date: Thu, 15 Jul 2021 11:47:24 +0800 Subject: [PATCH 22/22] add comment on drx init/exit --- suite/tests/client-interface/drreg-test.dll.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/suite/tests/client-interface/drreg-test.dll.c b/suite/tests/client-interface/drreg-test.dll.c index 4713f9faeb8..e3a23e67a93 100644 --- a/suite/tests/client-interface/drreg-test.dll.c +++ b/suite/tests/client-interface/drreg-test.dll.c @@ -1153,7 +1153,9 @@ event_exit(void) event_instru2instru) || drreg_exit() != DRREG_SUCCESS) CHECK(false, "exit failed"); - + /* We skip drx_init/drx_exit because that will change the number of total drreg spill + * slots available for the drreg tests. Skipping drx_init is okay because we use only + * drx_are_aflags_dead which doesn't need any drx state to be initialised. */ drmgr_exit(); }