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: gdb-patches <gdb-patches at sourceware dot org>
- Date: Fri, 30 Oct 2015 09:26:49 -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>
On 15-10-29 02:19 PM, Simon Marchi wrote:
> FYI, I just pushed this as obvious.
>
> The casts are required because ps_pd{read,write} must respect a fixed
> interface.
>
> gdb/gdbserver/ChangeLog:
>
> * proc-service.c (ps_pdread): Add/adjust casts.
> (ps_pdwrite): Add/adjust casts.
> ---
> gdb/gdbserver/ChangeLog | 5 +++++
> gdb/gdbserver/proc-service.c | 5 +++--
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
> index 4397ff9..70d832f 100644
> --- a/gdb/gdbserver/ChangeLog
> +++ b/gdb/gdbserver/ChangeLog
> @@ -1,3 +1,8 @@
> +2015-10-29 Simon Marchi <simon.marchi@ericsson.com>
> +
> + * proc-service.c (ps_pdread): Add/adjust casts.
> + (ps_pdwrite): Add/adjust casts.
> +
> 2015-10-29 Simon Marchi <simon.marchi@polymtl.ca>
>
> * server.c (handle_search_memory_1): Cast return value of
> diff --git a/gdb/gdbserver/proc-service.c b/gdb/gdbserver/proc-service.c
> index 128939d..ae00086 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 ((unsigned long) addr, buf, size);
> + read_inferior_memory ((CORE_ADDR) addr, (gdb_byte *) buf, size);
> return PS_OK;
> }
>
> @@ -90,7 +90,8 @@ 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 ((unsigned long) addr, buf, size) != 0)
> + if (write_inferior_memory ((CORE_ADDR) addr, (const gdb_byte *) buf, size)
> + != 0)
> return PS_ERR;
> return PS_OK;
> }
>
Turns out this wasn't obvious. Casting a psaddr_t to a CORE_ADDR on i386 gives:
../../../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 think the right fix would be to go through uintptr_t: (CORE_ADDR) (uintptr_t) addr.
It builds on 32 and 64 bits. Is it ok to apply?
>From 74f685a83ffe48ac811ea71fe18b84b78b07b0c5 Mon Sep 17 00:00:00 2001
From: Simon Marchi <simon.marchi@ericsson.com>
Date: Fri, 30 Oct 2015 09:24:00 -0400
Subject: [PATCH] gdbserver/proc-service.c: Add uintptr_t cast
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]
gdb/gdbserver/ChangeLog:
* proc-service.c (ps_pdread): Add uintptr_t cast.
(ps_pdwrite): Likewise.
---
gdb/gdbserver/proc-service.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/gdb/gdbserver/proc-service.c b/gdb/gdbserver/proc-service.c
index ae00086..ee2622f 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 ((CORE_ADDR) (uintptr_t) addr, (gdb_byte *) buf, size);
return PS_OK;
}
@@ -90,7 +90,8 @@ 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 ((CORE_ADDR) (uintptr_t) addr,
+ (const gdb_byte *) buf, size)
!= 0)
return PS_ERR;
return PS_OK;
--
2.5.1