This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RFA: fix warning building spu-tdep.c
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 04 Aug 2009 08:51:25 -0600
- Subject: RFA: fix warning building spu-tdep.c
- Reply-to: tromey at redhat dot com
I got this error while building gdb cvs on x86 F11 yesterday:
../../src/gdb/spu-tdep.c: In function âspu_gdbarch_idâ:
../../src/gdb/spu-tdep.c:362: error: overflow in implicit constant conversion
../../src/gdb/spu-tdep.c: In function âgdb_print_insn_spuâ:
../../src/gdb/spu-tdep.c:1597: error: overflow in implicit constant conversion
../../src/gdb/spu-tdep.c: In function âspu_overlay_update_osectâ:
../../src/gdb/spu-tdep.c:1739: error: large integer implicitly truncated to unsigned type
The problem is that CORE_ADDR is 4 bytes here, but LONGEST is 8.
The fix is to change SPUADDR_SPU to cast its result to CORE_ADDR. This
seems to be what is expected -- but, some places use int while others
use CORE_ADDR, so I did not want to commit this without review from
someone who knows the intent of this macro.
Tom
2009-08-04 Tom Tromey <tromey@redhat.com>
* spu-tdep.h (SPUADDR_SPU): Cast result to CORE_ADDR.
Index: spu-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/spu-tdep.h,v
retrieving revision 1.7
diff -u -r1.7 spu-tdep.h
--- spu-tdep.h 31 Jul 2009 15:28:27 -0000 1.7
+++ spu-tdep.h 4 Aug 2009 14:48:10 -0000
@@ -54,7 +54,9 @@
#define SPUADDR(spu, addr) \
((spu) != -1? (ULONGEST)1 << 63 | (ULONGEST)(spu) << 32 | (addr) : (addr))
#define SPUADDR_SPU(addr) \
- (((addr) & (ULONGEST)1 << 63)? (ULONGEST)(addr) >> 32 & 0x7fffffff : -1)
+ (((addr) & (ULONGEST)1 << 63) \
+ ? (CORE_ADDR) ((ULONGEST)(addr) >> 32 & 0x7fffffff) \
+ : -1)
#define SPUADDR_ADDR(addr) \
(((addr) & (ULONGEST)1 << 63)? (ULONGEST)(addr) & 0xffffffff : (addr))