[PATCH] Cast to uintptr_t when calling ptrace32 on aix

Joel Brobecker brobecker@adacore.com
Mon Jan 6 15:57:00 GMT 2014


> The machine I used is gcc111 in gcc compile farm.  Didn't run
> regression testing.  Is it OK?
> 
> gdb:
> 
> 2014-01-04  Yao Qi  <yao@codesourcery.com>
> 
> 	* aix-thread.c (pdc_read_regs): Cast parameter to uintptr_t
> 	first.
> 	(pdc_write_regs): Likewise.
> 	(fetch_regs_kernel_thread): Likewise.
> 	(store_regs_kernel_thread): Likewise.

Thank you, Yao. I tested your patch with AdaCore's gdb testsuite,
and found no regression.

Some of the lines are now exceeding the hard limit (80 characters),
and need to be folded. Apart from David's suggestion, which we can
look at independently, the patch looks OK to me.

> ---
>  gdb/aix-thread.c |   37 ++++++++++++++++++++++---------------
>  1 files changed, 22 insertions(+), 15 deletions(-)
> 
> diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
> index 79adef0..a6333f9 100644
> --- a/gdb/aix-thread.c
> +++ b/gdb/aix-thread.c
> @@ -363,7 +363,8 @@ pdc_read_regs (pthdb_user_t user,
>  	}
>        else
>  	{
> -	  if (!ptrace32 (PTT_READ_GPRS, tid, gprs32, 0, NULL))
> +	  if (!ptrace32 (PTT_READ_GPRS, tid, (addr_ptr) (uintptr_t) gprs32,
> +			 0, NULL))
>  	    memset (gprs32, 0, sizeof (gprs32));
>  	  memcpy (context->gpr, gprs32, sizeof(gprs32));
>  	}
> @@ -372,7 +373,7 @@ pdc_read_regs (pthdb_user_t user,
>    /* Floating-point registers.  */
>    if (flags & PTHDB_FLAG_FPRS)
>      {
> -      if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
> +      if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) (uintptr_t) fprs, 0, NULL))
>  	memset (fprs, 0, sizeof (fprs));
>        memcpy (context->fpr, fprs, sizeof(fprs));
>      }
> @@ -389,7 +390,7 @@ pdc_read_regs (pthdb_user_t user,
>  	}
>        else
>  	{
> -	  if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
> +	  if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) (uintptr_t) &sprs32, 0, NULL))
>  	    memset (&sprs32, 0, sizeof (sprs32));
>        	  memcpy (&context->msr, &sprs32, sizeof(sprs32));
>  	}
> @@ -424,13 +425,13 @@ pdc_write_regs (pthdb_user_t user,
>  	ptrace64aix (PTT_WRITE_GPRS, tid, 
>  		     (unsigned long) context->gpr, 0, NULL);
>        else
> -	ptrace32 (PTT_WRITE_GPRS, tid, (addr_ptr) context->gpr, 0, NULL);
> +	ptrace32 (PTT_WRITE_GPRS, tid, (addr_ptr) (uintptr_t) context->gpr, 0, NULL);
>      }
>  
>   /* Floating-point registers.  */
>    if (flags & PTHDB_FLAG_FPRS)
>      {
> -      ptrace32 (PTT_WRITE_FPRS, tid, (addr_ptr) context->fpr, 0, NULL);
> +      ptrace32 (PTT_WRITE_FPRS, tid, (addr_ptr) (uintptr_t) context->fpr, 0, NULL);
>      }
>  
>    /* Special-purpose registers.  */
> @@ -443,7 +444,7 @@ pdc_write_regs (pthdb_user_t user,
>  	}
>        else
>  	{
> -	  ptrace32 (PTT_WRITE_SPRS, tid, (addr_ptr) &context->msr, 0, NULL);
> +	  ptrace32 (PTT_WRITE_SPRS, tid, (addr_ptr) (uintptr_t) &context->msr, 0, NULL);
>  	}
>      }
>    return 0;
> @@ -1250,7 +1251,7 @@ fetch_regs_kernel_thread (struct regcache *regcache, int regno,
>  	}
>        else
>  	{
> -	  if (!ptrace32 (PTT_READ_GPRS, tid, (addr_ptr) gprs32, 0, NULL))
> +	  if (!ptrace32 (PTT_READ_GPRS, tid, (addr_ptr) (uintptr_t) gprs32, 0, NULL))
>  	    memset (gprs32, 0, sizeof (gprs32));
>  	  for (i = 0; i < ppc_num_gprs; i++)
>  	    supply_reg32 (regcache, tdep->ppc_gp0_regnum + i, gprs32[i]);
> @@ -1264,7 +1265,7 @@ fetch_regs_kernel_thread (struct regcache *regcache, int regno,
>            || (regno >= tdep->ppc_fp0_regnum
>                && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
>      {
> -      if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL))
> +      if (!ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) (uintptr_t) fprs, 0, NULL))
>  	memset (fprs, 0, sizeof (fprs));
>        supply_fprs (regcache, fprs);
>      }
> @@ -1286,7 +1287,8 @@ fetch_regs_kernel_thread (struct regcache *regcache, int regno,
>  	{
>  	  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
>  
> -	  if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL))
> +	  if (!ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) (uintptr_t) &sprs32,
> +			 0, NULL))
>  	    memset (&sprs32, 0, sizeof (sprs32));
>  	  supply_sprs32 (regcache, sprs32.pt_iar, sprs32.pt_msr, sprs32.pt_cr,
>  			 sprs32.pt_lr, sprs32.pt_ctr, sprs32.pt_xer,
> @@ -1581,9 +1583,11 @@ store_regs_kernel_thread (const struct regcache *regcache, int regno,
>        else
>  	{
>  	  /* Pre-fetch: some regs may not be in the cache.  */
> -	  ptrace32 (PTT_READ_GPRS, tid, (addr_ptr) gprs32, 0, NULL);
> +	  ptrace32 (PTT_READ_GPRS, tid, (addr_ptr) (uintptr_t) gprs32,
> +		    0, NULL);
>  	  fill_gprs32 (regcache, gprs32);
> -	  ptrace32 (PTT_WRITE_GPRS, tid, (addr_ptr) gprs32, 0, NULL);
> +	  ptrace32 (PTT_WRITE_GPRS, tid, (addr_ptr) (uintptr_t) gprs32,
> +		    0, NULL);
>  	}
>      }
>  
> @@ -1595,9 +1599,10 @@ store_regs_kernel_thread (const struct regcache *regcache, int regno,
>                && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
>      {
>        /* Pre-fetch: some regs may not be in the cache.  */
> -      ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) fprs, 0, NULL);
> +      ptrace32 (PTT_READ_FPRS, tid, (addr_ptr) (uintptr_t) fprs,
> +		0, NULL);
>        fill_fprs (regcache, fprs);
> -      ptrace32 (PTT_WRITE_FPRS, tid, (addr_ptr) fprs, 0, NULL);
> +      ptrace32 (PTT_WRITE_FPRS, tid, (addr_ptr) (uintptr_t) fprs, 0, NULL);
>      }
>  
>    /* Special-purpose registers.  */
> @@ -1629,7 +1634,8 @@ store_regs_kernel_thread (const struct regcache *regcache, int regno,
>  	  gdb_assert (sizeof (sprs32.pt_iar) == 4);
>  
>  	  /* Pre-fetch: some registers won't be in the cache.  */
> -	  ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) &sprs32, 0, NULL);
> +	  ptrace32 (PTT_READ_SPRS, tid, (addr_ptr) (uintptr_t) &sprs32,
> +		    0, NULL);
>  
>  	  fill_sprs32 (regcache, &tmp_iar, &tmp_msr, &tmp_cr, &tmp_lr,
>  		       &tmp_ctr, &tmp_xer, &tmp_fpscr);
> @@ -1648,7 +1654,8 @@ store_regs_kernel_thread (const struct regcache *regcache, int regno,
>  	      regcache_raw_collect (regcache, tdep->ppc_mq_regnum,
>  				    &sprs32.pt_mq);
>  
> -	  ptrace32 (PTT_WRITE_SPRS, tid, (addr_ptr) &sprs32, 0, NULL);
> +	  ptrace32 (PTT_WRITE_SPRS, tid, (addr_ptr) (uintptr_t) &sprs32,
> +		    0, NULL);
>  	}
>      }
>  }
> -- 
> 1.7.7.6

-- 
Joel



More information about the Gdb-patches mailing list