From 0fdb97fbe463ec478a88f53d12033331030802ec Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 8 Jun 2021 20:34:54 +0800 Subject: [PATCH 01/35] 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 87a0070ae..538dc79e7 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; -- GitLab From 17928a69a9eb7ed22b4b12969e0eff1b5d2c3d51 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Wed, 9 Jun 2021 10:13:18 +0800 Subject: [PATCH 02/35] 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 538dc79e7..2dc334024 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))); -- GitLab From c3fdf002ce53625ff6ffab32464ee6fead9af33b Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Wed, 9 Jun 2021 13:30:09 +0800 Subject: [PATCH 03/35] 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 23549bc41..050c81871 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 2aeb7c0ec..5fbea3439 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 998e8ae7d..801c23ed8 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 <string.h> /* 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); -- GitLab From e6fbd30023edb4075be456fb52182a76321b567c Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 10 Jun 2021 12:21:13 +0800 Subject: [PATCH 04/35] 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 801c23ed8..b66cf0ce0 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; } -- GitLab From 71c9950d09653d41f6fbb3cdfcb4947ee5f6cd01 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 10 Jun 2021 23:22:52 +0800 Subject: [PATCH 05/35] 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 5fbea3439..36b47eb4e 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() -- GitLab From e6db5dbd7abb5c5a46ffa8c2ad5c5ac58baeefd8 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 10 Jun 2021 23:42:49 +0800 Subject: [PATCH 06/35] 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 b66cf0ce0..c73646a3c 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"); -- GitLab From 1c423ae32a915e338896ac2cff85225f0eecf527 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 10 Jun 2021 23:52:07 +0800 Subject: [PATCH 07/35] 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 c73646a3c..55e34f38e 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; } -- GitLab From 816ee64b5583d7b121716aab735961397f259c93 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Fri, 11 Jun 2021 00:11:46 +0800 Subject: [PATCH 08/35] 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 55e34f38e..2cf841ccc 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"); -- GitLab From dc01bcc3cecf4bf0f35a9e806794463b47a0d20c Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 15 Jun 2021 13:56:35 +0800 Subject: [PATCH 09/35] 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 f8ef6f182..41750b643 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 960efb31d..600646551 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) -- GitLab From 2906920959f071e3ce9a4b07b5faca3be42c2ad7 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Wed, 16 Jun 2021 15:01:03 +0800 Subject: [PATCH 10/35] 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 41750b643..36ee4c042 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' -- GitLab From 7577dc1cefdcd7e02b43c322ff11c4fc67c20dfa Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 17 Jun 2021 14:26:01 +0800 Subject: [PATCH 11/35] 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 36ee4c042..a91999731 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' -- GitLab From 60fe1a77e74a0b44a811f5b84cc2957836dfee47 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 21 Jun 2021 15:44:01 +0800 Subject: [PATCH 12/35] 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 e14c4e6e6..61b85f222 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() -- GitLab From 49e297cf33b32bec07c4f6153a5ef6167681effb Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 8 Jul 2021 11:16:55 +0800 Subject: [PATCH 13/35] 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 70e5e1441..8c63365fb 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; } /*************************************************************************** -- GitLab From a22d098026eb258034d548f5346ecfd8d4319128 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 8 Jul 2021 11:20:26 +0800 Subject: [PATCH 14/35] 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 8c63365fb..01c2bbced 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; -- GitLab From 114fd305b5988e043e8ea39c64a661e46dd02b8d Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Fri, 9 Jul 2021 10:32:22 +0800 Subject: [PATCH 15/35] 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 a91999731..36ee4c042 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' -- GitLab From 85080f48d7301ae78a91e1e4fb40149e2821abe9 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Fri, 9 Jul 2021 10:32:26 +0800 Subject: [PATCH 16/35] 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 36ee4c042..41750b643 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' -- GitLab From 90a117bcb2186838e0823147cf34683e543fbfcc Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Fri, 9 Jul 2021 10:32:31 +0800 Subject: [PATCH 17/35] 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 41750b643..f8ef6f182 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 600646551..960efb31d 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) -- GitLab From 7cc24ac029501f627a0ee3b0d8edf47e16b71171 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 13 Jul 2021 11:25:55 +0800 Subject: [PATCH 18/35] 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 01c2bbced..199236411 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; } -- GitLab From 63be997fca11c3d775f70fbc74c9daaa9f2556c6 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 13 Jul 2021 11:47:41 +0800 Subject: [PATCH 19/35] 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 199236411..0939c23cd 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; } -- GitLab From a0ac11672a59276d87d609d5b599fa89ddd3a32e Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 13 Jul 2021 11:49:57 +0800 Subject: [PATCH 20/35] 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 8067cee39..5701df010 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; } -- GitLab From 89362194b67023fb5803c539ff4d34d437d64c29 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Wed, 14 Jul 2021 11:27:24 +0800 Subject: [PATCH 21/35] 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 60886b41d..4713f9fae 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); -- GitLab From df7a6f4bd0424dec07c7ac4de8d36d35733df12c Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Thu, 15 Jul 2021 11:47:24 +0800 Subject: [PATCH 22/35] 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 4713f9fae..e3a23e67a 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(); } -- GitLab From 398da3c46eac9c28e7f290cec475f294c931d9b9 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 06:17:35 +0000 Subject: [PATCH 23/35] fix lacked reg encoding info for aarch64 --- core/ir/aarch64/encode.c | 2 +- core/ir/opnd_shared.c | 5 +++++ suite/tests/CMakeLists.txt | 3 +++ .../client-interface/reg_size_test.dll.c | 21 +++++++++++++++++++ .../client-interface/reg_size_test.expect | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 suite/tests/client-interface/reg_size_test.dll.c create mode 100644 suite/tests/client-interface/reg_size_test.expect diff --git a/core/ir/aarch64/encode.c b/core/ir/aarch64/encode.c index adeed88be..221fb4ca0 100644 --- a/core/ir/aarch64/encode.c +++ b/core/ir/aarch64/encode.c @@ -79,7 +79,7 @@ const char *const reg_names[] = { "z23", "z24", "z25", "z26", "z27", "z28", "z29", "z30", "z31", "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", - "p15", + "p15", "cntvct_el0", }; /* Maps sub-registers to their containing register. */ diff --git a/core/ir/opnd_shared.c b/core/ir/opnd_shared.c index 24f7f8e86..0c62645e5 100644 --- a/core/ir/opnd_shared.c +++ b/core/ir/opnd_shared.c @@ -2531,10 +2531,15 @@ reg_get_size(reg_id_t reg) return OPSZ_SCALABLE; if (reg >= DR_REG_P0 && reg <= DR_REG_P15) return OPSZ_SCALABLE_PRED; + if (reg == DR_REG_CNTVCT_EL0) + return OPSZ_8; + if (reg >= DR_REG_NZCV && reg <= DR_REG_FPSR) + return OPSZ_8; # endif if (reg == DR_REG_TPIDRURW || reg == DR_REG_TPIDRURO) return OPSZ_PTR; #endif + LOG(GLOBAL, LOG_ANNOTATIONS, 2, "reg=%d, %s, last reg=%d\n", reg, get_register_name(reg), DR_REG_LAST_ENUM); CLIENT_ASSERT(false, "reg_get_size: invalid register"); return OPSZ_NA; } diff --git a/suite/tests/CMakeLists.txt b/suite/tests/CMakeLists.txt index c80afe464..f6fa43a29 100644 --- a/suite/tests/CMakeLists.txt +++ b/suite/tests/CMakeLists.txt @@ -2522,6 +2522,8 @@ tobuild_ci(client.option_parse client-interface/option_parse.cpp use_DynamoRIO_extension(client.option_parse.dll droption) set(client.option_parse_client_ops_islist ON) +tobuild_ci(client.reg_size_test client-interface/reg_size_test.c "" "" "") + tobuild_ci(client.thread_exit_xl8 client-interface/thread_exit_xl8.c "" "" "") if (UNIX) # The test uses signals. @@ -4830,6 +4832,7 @@ if (NOT ANDROID AND AARCHXX) code_api|client.modules code_api|client.null_instrument code_api|client.option_parse + code_api|client.reg_size_test code_api|client.partial_module_map code_api|client.stack-overflow code_api|client.thread_exit_xl8 diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c new file mode 100644 index 000000000..e3a940a73 --- /dev/null +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -0,0 +1,21 @@ +#include "dr_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DR_EXPORT void +dr_client_main(client_id_t id, int argc, const char *argv[]) +{ + dr_set_client_name("DynamoRIO Sample Client 'test_reg_size'", "http://dynamorio.org/issues"); + + opnd_size_t res; + for(int i=DR_REG_NULL+1; i<DR_REG_LAST_VALID_ENUM; ++i) { + if(i==DR_REG_INVALID) continue; + res = reg_get_size(i); + } +} + +#ifdef __cplusplus +} +#endif diff --git a/suite/tests/client-interface/reg_size_test.expect b/suite/tests/client-interface/reg_size_test.expect new file mode 100644 index 000000000..af5626b4a --- /dev/null +++ b/suite/tests/client-interface/reg_size_test.expect @@ -0,0 +1 @@ +Hello, world! -- GitLab From 1d9169c20b0d7ee320ce635cbf1063ce976f2791 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 06:40:59 +0000 Subject: [PATCH 24/35] fix clang-format error --- core/ir/opnd_shared.c | 3 ++- suite/tests/client-interface/reg_size_test.dll.c | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/ir/opnd_shared.c b/core/ir/opnd_shared.c index 0c62645e5..a756ac6e6 100644 --- a/core/ir/opnd_shared.c +++ b/core/ir/opnd_shared.c @@ -2539,7 +2539,8 @@ reg_get_size(reg_id_t reg) if (reg == DR_REG_TPIDRURW || reg == DR_REG_TPIDRURO) return OPSZ_PTR; #endif - LOG(GLOBAL, LOG_ANNOTATIONS, 2, "reg=%d, %s, last reg=%d\n", reg, get_register_name(reg), DR_REG_LAST_ENUM); + LOG(GLOBAL, LOG_ANNOTATIONS, 2, "reg=%d, %s, last reg=%d\n", reg, + get_register_name(reg), DR_REG_LAST_ENUM); CLIENT_ASSERT(false, "reg_get_size: invalid register"); return OPSZ_NA; } diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index e3a940a73..a7b617b14 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -7,11 +7,13 @@ extern "C" { DR_EXPORT void dr_client_main(client_id_t id, int argc, const char *argv[]) { - dr_set_client_name("DynamoRIO Sample Client 'test_reg_size'", "http://dynamorio.org/issues"); + dr_set_client_name("DynamoRIO Sample Client 'test_reg_size'", + "http://dynamorio.org/issues"); opnd_size_t res; - for(int i=DR_REG_NULL+1; i<DR_REG_LAST_VALID_ENUM; ++i) { - if(i==DR_REG_INVALID) continue; + for (int i = DR_REG_NULL + 1; i < DR_REG_LAST_VALID_ENUM; ++i) { + if (i == DR_REG_INVALID) + continue; res = reg_get_size(i); } } -- GitLab From a0ef8b964392da4dd8de7379842f7472f731bc42 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 06:43:57 +0000 Subject: [PATCH 25/35] fix clang-format error --- core/ir/aarch64/encode.c | 72 ++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/core/ir/aarch64/encode.c b/core/ir/aarch64/encode.c index 221fb4ca0..a94ed6a56 100644 --- a/core/ir/aarch64/encode.c +++ b/core/ir/aarch64/encode.c @@ -44,42 +44,42 @@ /* Order corresponds to DR_REG_ enum. */ const char *const reg_names[] = { - "<NULL>", "<invalid>", "x0", "x1", "x2", "x3", "x4", "x5", - "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", - "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", - "x22", "x23", "x24", "x25", "x26", "x27", "x28", "x29", - "x30", "sp", "xzr", "w0", "w1", "w2", "w3", "w4", - "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", - "w13", "w14", "w15", "w16", "w17", "w18", "w19", "w20", - "w21", "w22", "w23", "w24", "w25", "w26", "w27", "w28", - "w29", "w30", "wsp", "wzr", "q0", "q1", "q2", "q3", - "q4", "q5", "q6", "q7", "q8", "q9", "q10", "q11", - "q12", "q13", "q14", "q15", "q16", "q17", "q18", "q19", - "q20", "q21", "q22", "q23", "q24", "q25", "q26", "q27", - "q28", "q29", "q30", "q31", "d0", "d1", "d2", "d3", - "d4", "d5", "d6", "d7", "d8", "d9", "d10", "d11", - "d12", "d13", "d14", "d15", "d16", "d17", "d18", "d19", - "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27", - "d28", "d29", "d30", "d31", "s0", "s1", "s2", "s3", - "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", - "s12", "s13", "s14", "s15", "s16", "s17", "s18", "s19", - "s20", "s21", "s22", "s23", "s24", "s25", "s26", "s27", - "s28", "s29", "s30", "s31", "h0", "h1", "h2", "h3", - "h4", "h5", "h6", "h7", "h8", "h9", "h10", "h11", - "h12", "h13", "h14", "h15", "h16", "h17", "h18", "h19", - "h20", "h21", "h22", "h23", "h24", "h25", "h26", "h27", - "h28", "h29", "h30", "h31", "b0", "b1", "b2", "b3", - "b4", "b5", "b6", "b7", "b8", "b9", "b10", "b11", - "b12", "b13", "b14", "b15", "b16", "b17", "b18", "b19", - "b20", "b21", "b22", "b23", "b24", "b25", "b26", "b27", - "b28", "b29", "b30", "b31", "nzcv", "fpcr", "fpsr", "tpidr_el0", - "tpidrro_el0", "z0", "z1", "z2", "q3", "z4", "z5", "z6", - "z7", "z8", "z9", "z10", "z11", "z12", "z13", "z14", - "z15", "z16", "z17", "z18", "z19", "z20", "z21", "z22", - "z23", "z24", "z25", "z26", "z27", "z28", "z29", "z30", - "z31", "p0", "p1", "p2", "p3", "p4", "p5", "p6", - "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", - "p15", "cntvct_el0", + "<NULL>", "<invalid>", "x0", "x1", "x2", "x3", "x4", "x5", + "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", + "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", + "x22", "x23", "x24", "x25", "x26", "x27", "x28", "x29", + "x30", "sp", "xzr", "w0", "w1", "w2", "w3", "w4", + "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", + "w13", "w14", "w15", "w16", "w17", "w18", "w19", "w20", + "w21", "w22", "w23", "w24", "w25", "w26", "w27", "w28", + "w29", "w30", "wsp", "wzr", "q0", "q1", "q2", "q3", + "q4", "q5", "q6", "q7", "q8", "q9", "q10", "q11", + "q12", "q13", "q14", "q15", "q16", "q17", "q18", "q19", + "q20", "q21", "q22", "q23", "q24", "q25", "q26", "q27", + "q28", "q29", "q30", "q31", "d0", "d1", "d2", "d3", + "d4", "d5", "d6", "d7", "d8", "d9", "d10", "d11", + "d12", "d13", "d14", "d15", "d16", "d17", "d18", "d19", + "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27", + "d28", "d29", "d30", "d31", "s0", "s1", "s2", "s3", + "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", + "s12", "s13", "s14", "s15", "s16", "s17", "s18", "s19", + "s20", "s21", "s22", "s23", "s24", "s25", "s26", "s27", + "s28", "s29", "s30", "s31", "h0", "h1", "h2", "h3", + "h4", "h5", "h6", "h7", "h8", "h9", "h10", "h11", + "h12", "h13", "h14", "h15", "h16", "h17", "h18", "h19", + "h20", "h21", "h22", "h23", "h24", "h25", "h26", "h27", + "h28", "h29", "h30", "h31", "b0", "b1", "b2", "b3", + "b4", "b5", "b6", "b7", "b8", "b9", "b10", "b11", + "b12", "b13", "b14", "b15", "b16", "b17", "b18", "b19", + "b20", "b21", "b22", "b23", "b24", "b25", "b26", "b27", + "b28", "b29", "b30", "b31", "nzcv", "fpcr", "fpsr", "tpidr_el0", + "tpidrro_el0", "z0", "z1", "z2", "q3", "z4", "z5", "z6", + "z7", "z8", "z9", "z10", "z11", "z12", "z13", "z14", + "z15", "z16", "z17", "z18", "z19", "z20", "z21", "z22", + "z23", "z24", "z25", "z26", "z27", "z28", "z29", "z30", + "z31", "p0", "p1", "p2", "p3", "p4", "p5", "p6", + "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", + "p15", "cntvct_el0", }; /* Maps sub-registers to their containing register. */ -- GitLab From 7f0d5ac686387c4cd55f5c0407f9aba7765d5c53 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 07:18:48 +0000 Subject: [PATCH 26/35] filter out x86 reserved registers in ci test --- suite/tests/client-interface/reg_size_test.dll.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index a7b617b14..020aa2977 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -14,6 +14,9 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) for (int i = DR_REG_NULL + 1; i < DR_REG_LAST_VALID_ENUM; ++i) { if (i == DR_REG_INVALID) continue; + if (get_register_name(i)[0] == '\0') { + continue; + } res = reg_get_size(i); } } -- GitLab From d4c40d9a333ff54b8181d67c9357769c66f8f656 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 07:56:12 +0000 Subject: [PATCH 27/35] avoid X86-32 reg size test failure --- suite/tests/client-interface/reg_size_test.dll.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index 020aa2977..354cb3fa8 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -17,6 +17,10 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) if (get_register_name(i)[0] == '\0') { continue; } +#if defined(X86) && !defined(X64) + if (i >= REG_START_64 && i <= REG_STOP_64) + continue; +#endif res = reg_get_size(i); } } -- GitLab From 47bdeb564bdb5f369174689dcb6f10186e756822 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 09:03:15 +0000 Subject: [PATCH 28/35] avoid x86_32 test error --- suite/tests/client-interface/reg_size_test.dll.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index 354cb3fa8..b6130fdf7 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -20,6 +20,8 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) #if defined(X86) && !defined(X64) if (i >= REG_START_64 && i <= REG_STOP_64) continue; + if (i >= REG_START_x64_8 && i <= REG_STOP_x64_8) + continue; #endif res = reg_get_size(i); } -- GitLab From f450017cd0ebf927474f3487954446a0940a4eb9 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 09:28:40 +0000 Subject: [PATCH 29/35] try debugging x86-32 reg size test with tmate --- .github/workflows/ci-x86.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci-x86.yml b/.github/workflows/ci-x86.yml index 92e344244..f6262075d 100644 --- a/.github/workflows/ci-x86.yml +++ b/.github/workflows/ci-x86.yml @@ -107,6 +107,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 -- GitLab From 8fd4947dfa3c7985d33c34b7a3c81301bb876e55 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 09:56:59 +0000 Subject: [PATCH 30/35] avoid wrong reg size test in x86-32 --- suite/tests/client-interface/reg_size_test.dll.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index b6130fdf7..01c121b24 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -22,6 +22,12 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) continue; if (i >= REG_START_x64_8 && i <= REG_STOP_x64_8) continue; + if (i >= DR_REG_STOP_XMM && i <= DR_REG_START_YMM) + continue; + if (i >= DR_REG_STOP_YMM && i <= DR_REG_START_ZMM) + continue; + if (i >= DR_REG_STOP_ZMM && i <= RESERVED_ZMM) + continue; #endif res = reg_get_size(i); } -- GitLab From 06c89d90774f6b636ee2b563fd05e5bb0f499ec0 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Mon, 15 Nov 2021 10:44:03 +0000 Subject: [PATCH 31/35] delete tmate debugging session --- .github/workflows/ci-x86.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci-x86.yml b/.github/workflows/ci-x86.yml index f6262075d..92e344244 100644 --- a/.github/workflows/ci-x86.yml +++ b/.github/workflows/ci-x86.yml @@ -107,10 +107,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 -- GitLab From 884518365414cd7b4da83b1eec9b439930bced5e Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 16 Nov 2021 02:11:16 +0000 Subject: [PATCH 32/35] add register name test --- .../client-interface/reg_size_test.dll.c | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index 01c121b24..50116562a 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -1,8 +1,13 @@ #include "dr_api.h" +#include "string.h" -#ifdef __cplusplus -extern "C" { -#endif +#define CHECK(x, msg) \ + do { \ + if (!(x)) { \ + dr_fprintf(STDERR, "CHECK failed %s:%d: %s\n", __FILE__, __LINE__, msg); \ + dr_abort(); \ + } \ + } while (0); DR_EXPORT void dr_client_main(client_id_t id, int argc, const char *argv[]) @@ -11,28 +16,39 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) "http://dynamorio.org/issues"); opnd_size_t res; - for (int i = DR_REG_NULL + 1; i < DR_REG_LAST_VALID_ENUM; ++i) { + const char *reg; + for (int i = DR_REG_NULL + 1; i <= DR_REG_LAST_VALID_ENUM; ++i) { if (i == DR_REG_INVALID) continue; - if (get_register_name(i)[0] == '\0') { - continue; - } -#if defined(X86) && !defined(X64) +#ifdef X86 +# ifndef X64 if (i >= REG_START_64 && i <= REG_STOP_64) continue; if (i >= REG_START_x64_8 && i <= REG_STOP_x64_8) continue; - if (i >= DR_REG_STOP_XMM && i <= DR_REG_START_YMM) +# endif + // Filter out reserved register enum + if (i >= DR_REG_STOP_XMM && i <= RESERVED_XMM) continue; - if (i >= DR_REG_STOP_YMM && i <= DR_REG_START_ZMM) + if (i >= DR_REG_STOP_YMM && i <= RESERVED_YMM) continue; if (i >= DR_REG_STOP_ZMM && i <= RESERVED_ZMM) continue; + if (i >= DR_REG_STOP_OPMASK && i <= RESERVED_OPMASK) + continue; #endif + // checking register name by its length + reg = get_register_name(i); + res = strlen(reg); + CHECK(res != 0, "register name should not be empty!"); + for (int j = 0; j < res; ++j) { + if (!((reg[j] >= 'a' && reg[j] <= 'z') || (reg[j] >= '0' && reg[j] <= '9') || + reg[j] == '_')) { + dr_fprintf(STDERR, "register name is invalid: %s\n", reg); + CHECK(false, "register should be named with a-z/0-9/_"); + } + } res = reg_get_size(i); + CHECK(res != OPSZ_NA, "reg_get_size return OPSZ_NA!"); } } - -#ifdef __cplusplus -} -#endif -- GitLab From 25babb09072ddc276e102279e16e82a29e1e4467 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 16 Nov 2021 02:20:18 +0000 Subject: [PATCH 33/35] fix compile warning --- suite/tests/client-interface/reg_size_test.dll.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index 50116562a..095ff3b42 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -15,6 +15,7 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) dr_set_client_name("DynamoRIO Sample Client 'test_reg_size'", "http://dynamorio.org/issues"); + int n; opnd_size_t res; const char *reg; for (int i = DR_REG_NULL + 1; i <= DR_REG_LAST_VALID_ENUM; ++i) { @@ -39,9 +40,9 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) #endif // checking register name by its length reg = get_register_name(i); - res = strlen(reg); - CHECK(res != 0, "register name should not be empty!"); - for (int j = 0; j < res; ++j) { + n = strlen(reg); + CHECK(n != 0, "register name should not be empty!"); + for (int j = 0; j < n; ++j) { if (!((reg[j] >= 'a' && reg[j] <= 'z') || (reg[j] >= '0' && reg[j] <= '9') || reg[j] == '_')) { dr_fprintf(STDERR, "register name is invalid: %s\n", reg); -- GitLab From 6f418a759e1a92787af9913799e432256c979f5e Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 16 Nov 2021 02:32:26 +0000 Subject: [PATCH 34/35] fix compiler warning --- suite/tests/client-interface/reg_size_test.dll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index 095ff3b42..e60c63db2 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -15,7 +15,7 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) dr_set_client_name("DynamoRIO Sample Client 'test_reg_size'", "http://dynamorio.org/issues"); - int n; + size_t n; opnd_size_t res; const char *reg; for (int i = DR_REG_NULL + 1; i <= DR_REG_LAST_VALID_ENUM; ++i) { @@ -42,7 +42,7 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) reg = get_register_name(i); n = strlen(reg); CHECK(n != 0, "register name should not be empty!"); - for (int j = 0; j < n; ++j) { + for (size_t j = 0; j < n; ++j) { if (!((reg[j] >= 'a' && reg[j] <= 'z') || (reg[j] >= '0' && reg[j] <= '9') || reg[j] == '_')) { dr_fprintf(STDERR, "register name is invalid: %s\n", reg); -- GitLab From 05eaef9487dd7dd0a35d506c2d9a0d7341a24cf7 Mon Sep 17 00:00:00 2001 From: JerryYouxin <youxin2015@outlook.com> Date: Tue, 16 Nov 2021 02:51:32 +0000 Subject: [PATCH 35/35] fix missing tests of DR_REG_STOP_xxx --- suite/tests/client-interface/reg_size_test.dll.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/suite/tests/client-interface/reg_size_test.dll.c b/suite/tests/client-interface/reg_size_test.dll.c index e60c63db2..19ddb1010 100644 --- a/suite/tests/client-interface/reg_size_test.dll.c +++ b/suite/tests/client-interface/reg_size_test.dll.c @@ -29,13 +29,13 @@ dr_client_main(client_id_t id, int argc, const char *argv[]) continue; # endif // Filter out reserved register enum - if (i >= DR_REG_STOP_XMM && i <= RESERVED_XMM) + if (i > DR_REG_STOP_XMM && i <= RESERVED_XMM) continue; - if (i >= DR_REG_STOP_YMM && i <= RESERVED_YMM) + if (i > DR_REG_STOP_YMM && i <= RESERVED_YMM) continue; - if (i >= DR_REG_STOP_ZMM && i <= RESERVED_ZMM) + if (i > DR_REG_STOP_ZMM && i <= RESERVED_ZMM) continue; - if (i >= DR_REG_STOP_OPMASK && i <= RESERVED_OPMASK) + if (i > DR_REG_STOP_OPMASK && i <= RESERVED_OPMASK) continue; #endif // checking register name by its length -- GitLab