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