This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gdbserver switch ps_get_thread_area to PTRACE_GETREGSET


On 02/06/2013 05:38 PM, Marcus Shawcroft wrote:
> 
> diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c
> index 7f99887..e56ea80 100644
> --- a/gdb/gdbserver/linux-aarch64-low.c
> +++ b/gdb/gdbserver/linux-aarch64-low.c
> @@ -1089,16 +1089,22 @@ aarch64_stopped_by_watchpoint (void)
>  /* Fetch the thread-local storage pointer for libthread_db.  */
>  
>  ps_err_e
> -ps_get_thread_area (const struct ps_prochandle * ph,
> +ps_get_thread_area (const struct ps_prochandle *ph,
>  		    lwpid_t lwpid, int idx, void **base)
>  {
> -  if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
> +  struct iovec iovec;
> +  CORE_ADDR reg;
> +
> +  iovec.iov_base = ®
> +  iovec.iov_len = sizeof (reg);

Something like 'uint64_t reg' would be better than assuming
gdb's own CORE_ADDR type is exactly 64-bit (although it
actually will be in practice).

OK with that change.

> +
> +  if (ptrace (PTRACE_GETREGSET, lwpid, NT_ARM_TLS, &iovec) != 0)
>      return PS_ERR;
>  
>    /* IDX is the bias from the thread pointer to the beginning of the
>       thread descriptor.  It has to be subtracted due to implementation
>       quirks in libthread_db.  */
> -  *base = (void *) ((char *) *base - idx);
> +  *base = (void *) (reg - idx);
>  
>    return PS_OK;
>  }

-- 
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]