This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
gdb 7.6: Fix info mem command for 32 bits host/64 bits target
- From: Udma Catalin-Dan-B32721 <B32721 at freescale dot com>
- To: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Date: Wed, 26 Jun 2013 15:07:22 +0000
- Subject: gdb 7.6: Fix info mem command for 32 bits host/64 bits target
Hi,
I found an issue with the "info mem" command when running gdb on 32 bits host for 64 bits target architecture.
"info mem" command truncates the target address to 32 bits, like in the example below:
(gdb) set architecture powerpc:common64
The target architecture is assumed to be powerpc:common64
(gdb) mem 0x100000000 0x200000000 rw
(gdb) info mem
Using user-defined memory regions.
Num Enb Low Addr High Addr Attrs
1 y 0x0000000000000000 0x0000000000000000 rw nocache
Please find below the proposed patch. Please let me know your comments.
Regards,
Catalin
Subject: [PATCHH] Fix info mem command for 32 bits host/64 bits target
When running gdb on 32 bits host for 64 bits target, info mem command
truncates the target address to 32 bits, like in the example below
(gdb) set architecture powerpc:common64
(gdb) mem 0x100000000 0x200000000 rw
(gdb) info mem
1 y 0x0000000000000000 0x0000000000000000 rw nocache
Signed-off-by: Catalin Udma <catalin.udma@freescale.com>
---
--- gdb/memattr.c.orig 2013-06-27 17:28:20.000000000 +0300
+++ gdb/memattr.c 2013-06-27 17:29:16.000000000 +0300
@@ -447,9 +447,9 @@
m->number,
m->enabled_p ? 'y' : 'n');
if (gdbarch_addr_bit (target_gdbarch ()) <= 32)
- tmp = hex_string_custom ((unsigned long) m->lo, 8);
+ tmp = hex_string_custom ((LONGEST) m->lo, 8);
else
- tmp = hex_string_custom ((unsigned long) m->lo, 16);
+ tmp = hex_string_custom ( (LONGEST) m->lo, 16);
printf_filtered ("%s ", tmp);
@@ -458,14 +458,14 @@
if (m->hi == 0)
tmp = "0x100000000";
else
- tmp = hex_string_custom ((unsigned long) m->hi, 8);
+ tmp = hex_string_custom ((LONGEST) m->hi, 8);
}
else
{
if (m->hi == 0)
tmp = "0x10000000000000000";
else
- tmp = hex_string_custom ((unsigned long) m->hi, 16);
+ tmp = hex_string_custom ((LONGEST) m->hi, 16);
}
printf_filtered ("%s ", tmp);