From a18fdfc07eeed55fe3d3d157cc3beaa0c38684d3 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Thu, 15 Apr 2010 22:17:04 +0200 Subject: [PATCH] winedbg: Fix minidump support on 64bit OSes (don't clamp addresses out of 64bit minidumps). --- programs/winedbg/tgt_minidump.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/programs/winedbg/tgt_minidump.c b/programs/winedbg/tgt_minidump.c index 41b6f67fed0..f099b4e8b67 100644 --- a/programs/winedbg/tgt_minidump.c +++ b/programs/winedbg/tgt_minidump.c @@ -40,9 +40,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(winedbg); static struct be_process_io be_process_minidump_io; -static DWORD64 get_addr64(DWORD64 addr) +/* we need this function on 32bit hosts to ensure we zero out the higher DWORD + * stored in the minidump file (sometimes it's not cleared, or the conversion from + * 32bit to 64bit wide integers is done as signed, which is wrong) + * So we clamp on 32bit CPUs (as stored in minidump information) all addresses to + * keep only the lower 32 bits. + * FIXME: as of today, since we don't support a backend CPU which is different from + * CPU this process is running on, casting to (DWORD_PTR) will do just fine. + */ +static inline DWORD64 get_addr64(DWORD64 addr) { - return addr & 0xFFFFFFFF; + return (DWORD_PTR)addr; } void minidump_write(const char* file, const EXCEPTION_RECORD* rec)