mirror of
git://source.winehq.org/git/wine.git
synced 2024-08-31 07:04:06 +00:00
winedbg: Fixed the print_basic command when dealing with long long values.
This commit is contained in:
parent
98e2486820
commit
f7f9c08fc0
|
@ -417,7 +417,7 @@ extern void print_value(const struct dbg_lvalue* addr, char format,
|
|||
extern int types_print_type(const struct dbg_type*, BOOL details);
|
||||
extern int print_types(void);
|
||||
extern long int types_extract_as_integer(const struct dbg_lvalue*);
|
||||
extern LONGLONG types_extract_as_longlong(const struct dbg_lvalue*);
|
||||
extern LONGLONG types_extract_as_longlong(const struct dbg_lvalue*, unsigned* psize);
|
||||
extern void types_extract_as_address(const struct dbg_lvalue*, ADDRESS64*);
|
||||
extern BOOL types_deref(const struct dbg_lvalue* value, struct dbg_lvalue* result);
|
||||
extern BOOL types_udt_find_element(struct dbg_lvalue* value, const char* name, long int* tmpbuf);
|
||||
|
|
|
@ -474,14 +474,20 @@ void print_basic(const struct dbg_lvalue* lvalue, char format)
|
|||
|
||||
if (format != 0)
|
||||
{
|
||||
LONGLONG res = types_extract_as_longlong(lvalue);
|
||||
unsigned size;
|
||||
LONGLONG res = types_extract_as_longlong(lvalue, &size);
|
||||
DWORD hi;
|
||||
WCHAR wch;
|
||||
|
||||
/* FIXME: this implies i386 byte ordering */
|
||||
switch (format)
|
||||
{
|
||||
case 'x':
|
||||
dbg_printf("0x%x", (DWORD)(ULONG64)res);
|
||||
hi = (ULONG64)res >> 32;
|
||||
if (size == 8 && hi)
|
||||
dbg_printf("0x%x%08x", hi, (DWORD)res);
|
||||
else
|
||||
dbg_printf("0x%x", (DWORD)res);
|
||||
return;
|
||||
|
||||
case 'd':
|
||||
|
@ -509,7 +515,7 @@ void print_basic(const struct dbg_lvalue* lvalue, char format)
|
|||
}
|
||||
if (lvalue->type.id == dbg_itype_segptr)
|
||||
{
|
||||
dbg_print_longlong(types_extract_as_longlong(lvalue), TRUE);
|
||||
dbg_print_longlong(types_extract_as_longlong(lvalue, NULL), TRUE);
|
||||
dbg_printf("\n");
|
||||
}
|
||||
else print_typed_basic(lvalue);
|
||||
|
|
|
@ -53,7 +53,7 @@ BOOL types_get_real_type(struct dbg_type* type, DWORD* tag)
|
|||
* Given a lvalue, try to get an integral (or pointer/address) value
|
||||
* out of it
|
||||
*/
|
||||
LONGLONG types_extract_as_longlong(const struct dbg_lvalue* lvalue)
|
||||
LONGLONG types_extract_as_longlong(const struct dbg_lvalue* lvalue, unsigned* psize)
|
||||
{
|
||||
LONGLONG rtn;
|
||||
DWORD tag, bt;
|
||||
|
@ -68,6 +68,7 @@ LONGLONG types_extract_as_longlong(const struct dbg_lvalue* lvalue)
|
|||
return (long int)memory_to_linear_addr(&lvalue->addr);
|
||||
}
|
||||
|
||||
if (psize) *psize = 0;
|
||||
switch (tag)
|
||||
{
|
||||
case SymTagBaseType:
|
||||
|
@ -96,6 +97,7 @@ LONGLONG types_extract_as_longlong(const struct dbg_lvalue* lvalue)
|
|||
case btFloat:
|
||||
RaiseException(DEBUG_STATUS_NOT_AN_INTEGER, 0, 0, NULL);
|
||||
}
|
||||
if (psize) *psize = (unsigned)size;
|
||||
break;
|
||||
case SymTagPointerType:
|
||||
if (!be_cpu->fetch_integer(lvalue, sizeof(void*), FALSE, &rtn))
|
||||
|
@ -131,7 +133,7 @@ LONGLONG types_extract_as_longlong(const struct dbg_lvalue* lvalue)
|
|||
*/
|
||||
long int types_extract_as_integer(const struct dbg_lvalue* lvalue)
|
||||
{
|
||||
return types_extract_as_longlong(lvalue);
|
||||
return types_extract_as_longlong(lvalue, NULL);
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
|
@ -148,7 +150,7 @@ void types_extract_as_address(const struct dbg_lvalue* lvalue, ADDRESS64* addr)
|
|||
else
|
||||
{
|
||||
addr->Mode = AddrModeFlat;
|
||||
addr->Offset = types_extract_as_longlong( lvalue );
|
||||
addr->Offset = types_extract_as_longlong(lvalue, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue