[PATCH 01/13] tools/winedump/pdb: fix computation of signed integers in codeview symbol's annotations
Eric Pouech
eric.pouech at gmail.com
Mon Nov 8 07:57:18 CST 2021
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
---
tools/winedump/msc.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/winedump/msc.c b/tools/winedump/msc.c
index 79dd022a088..40daf4d50d5 100644
--- a/tools/winedump/msc.c
+++ b/tools/winedump/msc.c
@@ -1221,6 +1221,11 @@ static unsigned binannot_uncompress(const unsigned char** pptr)
return res;
}
+static inline int binannot_getsigned(unsigned i)
+{
+ return (i & 1) ? -(int)(i >> 1) : (i >> 1);
+}
+
static void dump_binannot(const unsigned char* ba, const char* last, const char* pfx)
{
while (ba < (const unsigned char*)last)
@@ -1248,7 +1253,7 @@ static void dump_binannot(const unsigned char* ba, const char* last, const char*
printf("%sChangeFile %u\n", pfx, binannot_uncompress(&ba));
break;
case BA_OP_ChangeLineOffset:
- printf("%sChangeLineOffset %d\n", pfx, binannot_uncompress(&ba));
+ printf("%sChangeLineOffset %d\n", pfx, binannot_getsigned(binannot_uncompress(&ba)));
break;
case BA_OP_ChangeLineEndDelta:
printf("%sChangeLineEndDelta %u\n", pfx, binannot_uncompress(&ba));
@@ -1265,7 +1270,7 @@ static void dump_binannot(const unsigned char* ba, const char* last, const char*
case BA_OP_ChangeCodeOffsetAndLineOffset:
{
unsigned p1 = binannot_uncompress(&ba);
- printf("%sChangeCodeOffsetAndLineOffset %u %u (0x%x)\n", pfx, p1 & 0xf, p1 >> 4, p1);
+ printf("%sChangeCodeOffsetAndLineOffset %u %u (0x%x)\n", pfx, p1 & 0xf, binannot_getsigned(p1 >> 4), p1);
}
break;
case BA_OP_ChangeCodeLengthAndCodeOffset:
More information about the wine-devel
mailing list