This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH obv/c++] Add/adjust casts in gdbserver's proc-service
- From: Simon Marchi <simon dot marchi at ericsson dot com>
- To: Pedro Alves <palves at redhat dot com>
- Cc: gdb-patches <gdb-patches at sourceware dot org>
- Date: Fri, 30 Oct 2015 11:51:21 -0400
- Subject: Re: [PATCH obv/c++] Add/adjust casts in gdbserver's proc-service
- Authentication-results: sourceware.org; auth=none
- References: <1446142796-22900-1-git-send-email-simon dot marchi at ericsson dot com> <56337019 dot 4060609 at ericsson dot com> <56338721 dot 4070306 at redhat dot com>
On 15-10-30 11:05 AM, Pedro Alves wrote:
> The original fix could have been just:
>
> - if (write_inferior_memory ((unsigned long) addr, buf, size) != 0)
> - if (write_inferior_memory ((unsigned long) addr, (const gdb_byte *) buf, size)
>
> As it was the pointer type difference that really was causing an issue.
Yeah I know, I didn't even need to touch that.
>
> So this:
>
> if (write_inferior_memory ((uintptr_pt) addr, (const gdb_byte *) buf, size)
>
> would also be fine, as then you get an implicit cast to CORE_ADDR anyway.
>
> Patch is OK, with or without double-cast.
I pushed without the double cast, because it's less code.
>From 7ea45d72f91e22cf6c9dfa23c79ec24a5118c6d3 Mon Sep 17 00:00:00 2001
From: Simon Marchi <simon.marchi@ericsson.com>
Date: Fri, 30 Oct 2015 11:50:00 -0400
Subject: [PATCH] gdbserver/proc-service.c: Change CORE_ADDR cast to uintptr_t
Fixes on i386:
../../../binutils-gdb/gdb/gdbserver/proc-service.c: In function ps_pdread:
../../../binutils-gdb/gdb/gdbserver/proc-service.c:83:25: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
../../../binutils-gdb/gdb/gdbserver/proc-service.c: In function ps_pdwrite:
../../../binutils-gdb/gdb/gdbserver/proc-service.c:93:30: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
I could have kept both casts:
(CORE_ADDR) (uintptr_t) addr
but it's cleaner this way. The uintptr_t implicitely gets promoted to a
CORE_ADDR, which is at least as long as uintptr_t.
gdb/gdbserver/ChangeLog:
* proc-service.c (ps_pdread): Change CORE_ADDR cast to uintptr_t.
(ps_pdwrite): Likewise.
---
gdb/gdbserver/ChangeLog | 5 +++++
gdb/gdbserver/proc-service.c | 4 ++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 52d6b50..dda226e 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-30 Simon Marchi <simon.marchi@ericsson.com>
+
+ * proc-service.c (ps_pdread): Change CORE_ADDR cast to uintptr_t.
+ (ps_pdwrite): Likewise.
+
2015-10-29 Henrik Wallin <henrik.wallin@windriver.com>
* linux-arm-low.c (arm_new_thread): Move pointer dereference
diff --git a/gdb/gdbserver/proc-service.c b/gdb/gdbserver/proc-service.c
index ae00086..f86a2c3 100644
--- a/gdb/gdbserver/proc-service.c
+++ b/gdb/gdbserver/proc-service.c
@@ -80,7 +80,7 @@ ps_err_e
ps_pdread (gdb_ps_prochandle_t ph, psaddr_t addr,
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
{
- read_inferior_memory ((CORE_ADDR) addr, (gdb_byte *) buf, size);
+ read_inferior_memory ((uintptr_t) addr, (gdb_byte *) buf, size);
return PS_OK;
}
@@ -90,7 +90,7 @@ ps_err_e
ps_pdwrite (gdb_ps_prochandle_t ph, psaddr_t addr,
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
{
- if (write_inferior_memory ((CORE_ADDR) addr, (const gdb_byte *) buf, size)
+ if (write_inferior_memory ((uintptr_t) addr, (const gdb_byte *) buf, size)
!= 0)
return PS_ERR;
return PS_OK;
--
2.5.1