[PATCH obv/c++] Add/adjust casts in gdbserver's proc-service

Simon Marchi simon.marchi@ericsson.com
Fri Oct 30 16:03:00 GMT 2015


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






More information about the Gdb-patches mailing list