[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH] winedbg: Distinguish -0 from 0
From:       Qijia Liu <liumeo () pku ! edu ! cn>
Date:       2020-12-30 22:33:21
Message-ID: 86DAA651-D5B4-44B2-91F7-589A4AD2BBF7 () pku ! edu ! cn
[Download RAW message or body]


--Apple-Mail=_3DCD7A40-0F8A-48FE-B282-AAF7735A6DF5
Content-Disposition: attachment;
	filename01-winedbg-Distinguish-0-from-0.patch
Content-Type: application/octet-stream;
	x-unix-mode44;
	name="0001-winedbg-Distinguish-0-from-0.patch"
Content-Transfer-Encoding: quoted-printable

From 2d153b05aff379b1f68113a3fd661a1d4cdaf3f1 Mon Sep 17 00:00:00 2001
From: Qijia Liu <liumeo@pku.edu.cn>
Date: Wed, 30 Dec 2020 22:28:20 +0000
Subject: [PATCH] winedbg: Distinguish -0 from 0

According to A8.8.56, A8.8.64 and A8.8.81 of ARM DDI 0406C.d,
0 and -0 generate different instructions.
Manually add "-".

Signed-off-by: Qijia Liu <liumeo@pku.edu.cn>
---
 programs/winedbg/be_arm.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/programs/winedbg/be_arm.c b/programs/winedbg/be_arm.c
index be4b310032c..b09bc5319b7 100644
--- a/programs/winedbg/be_arm.c
+++ b/programs/winedbg/be_arm.c
@@ -192,22 +192,20 @@ static UINT arm_disasm_halfwordtrans(UINT inst, ADDRESS64 \
*addr)  short indexing  = (inst >> 24) & 0x01;
     short offset    = ((inst >> 4) & 0xf0) + (inst & 0x0f);
 
-    if (!direction) offset *= -1;
-
     dbg_printf("\n\t%s%s%s%s%s", load ? "ldr" : "str", sign ? "s" : "",
                halfword ? "h" : (sign ? "b" : ""), writeback ? "t" : "", \
get_cond(inst));  dbg_printf("\t%s, ", tbl_regs[get_nibble(inst, 3)]);
     if (indexing)
     {
         if (immediate)
-            dbg_printf("[%s, #%d]", tbl_regs[get_nibble(inst, 4)], offset);
+            dbg_printf("[%s, #%s%d]", tbl_regs[get_nibble(inst, 4)], direction ? "" \
: "-", offset);  else
             dbg_printf("[%s, %s]", tbl_regs[get_nibble(inst, 4)], \
tbl_regs[get_nibble(inst, 0)]);  }
     else
     {
         if (immediate)
-            dbg_printf("[%s], #%d", tbl_regs[get_nibble(inst, 4)], offset);
+            dbg_printf("[%s], #%s%d", tbl_regs[get_nibble(inst, 4)], direction ? "" \
: "-", offset);  else
             dbg_printf("[%s], %s", tbl_regs[get_nibble(inst, 4)], \
tbl_regs[get_nibble(inst, 0)]);  }
@@ -310,15 +308,13 @@ static UINT arm_disasm_singletrans(UINT inst, ADDRESS64 *addr)
     short immediate = !((inst >> 25) & 0x01);
     short offset    = inst & 0x0fff;
 
-    if (!direction) offset *= -1;
-
     dbg_printf("\n\t%s%s%s%s", load ? "ldr" : "str", byte ? "b" : "", writeback ? \
"t" : "",  get_cond(inst));
     dbg_printf("\t%s, ", tbl_regs[get_nibble(inst, 3)]);
     if (indexing)
     {
         if (immediate)
-            dbg_printf("[%s, #%d]", tbl_regs[get_nibble(inst, 4)], offset);
+            dbg_printf("[%s, #%s%d]", tbl_regs[get_nibble(inst, 4)], direction ? "" \
: "-", offset);  else if (((inst >> 4) & 0xff) == 0x00) /* no shift */
             dbg_printf("[%s, %s]", tbl_regs[get_nibble(inst, 4)], \
                tbl_regs[get_nibble(inst, 0)]);
         else if (((inst >> 4) & 0x01) == 0x00) /* immediate shift (there's no \
register shift) */ @@ -330,7 +326,7 @@ static UINT arm_disasm_singletrans(UINT inst, \
ADDRESS64 *addr)  else
     {
         if (immediate)
-            dbg_printf("[%s], #%d", tbl_regs[get_nibble(inst, 4)], offset);
+            dbg_printf("[%s], #%s%d", tbl_regs[get_nibble(inst, 4)], direction ? "" \
: "-", offset);  else if (((inst >> 4) & 0xff) == 0x00) /* no shift */
             dbg_printf("[%s], %s", tbl_regs[get_nibble(inst, 4)], \
                tbl_regs[get_nibble(inst, 0)]);
         else if (((inst >> 4) & 0x01) == 0x00) /* immediate shift (there's no \
register shift) */ @@ -414,13 +410,11 @@ static UINT arm_disasm_coprocdatatrans(UINT \
inst, ADDRESS64 *addr)  WORD indexing  = (inst >> 24) & 0x01;
     short offset    = (inst & 0xff) << 2;
 
-    if (!direction) offset *= -1;
-
     dbg_printf("\n\t%s%s%s", load ? "ldc" : "stc", translen ? "l" : "", \
get_cond(inst));  if (indexing)
-        dbg_printf("\t%u, cr%u, [%s, #%d]%s", CPnum, CRd, tbl_regs[get_nibble(inst, \
4)], offset, writeback?"!":""); +        dbg_printf("\t%u, cr%u, [%s, #%s%d]%s", \
CPnum, CRd, tbl_regs[get_nibble(inst, 4)], direction ? "" : "-", offset, \
writeback?"!":"");  else
-        dbg_printf("\t%u, cr%u, [%s], #%d", CPnum, CRd, tbl_regs[get_nibble(inst, \
4)], offset); +        dbg_printf("\t%u, cr%u, [%s], #%s%d", CPnum, CRd, \
tbl_regs[get_nibble(inst, 4)], direction ? "" : "-", offset);  return 0;
 }
 
-- 
2.27.0


--Apple-Mail=_3DCD7A40-0F8A-48FE-B282-AAF7735A6DF5--


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic