From 55fac6e0501298d3140968078e31a1b1a85bd4d0 Mon Sep 17 00:00:00 2001 From: Marcus Shawcroft Date: Thu, 7 Feb 2013 10:47:40 +0000 Subject: [PATCH] Switch AArch64 gdbserver ps_get_thread_area to PTRACE_GETREGSET. 2013-02-06 Marcus Shawcroft * linux-aarch64-low.c (ps_get_thread_area): Replace PTRACE_GET_THREAD_AREA with PTRACE_GETREGSET. --- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/linux-aarch64-low.c | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 4de39a296c..f26620baff 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2013-02-07 Marcus Shawcroft + + * linux-aarch64-low.c (ps_get_thread_area): Replace + PTRACE_GET_THREAD_AREA with PTRACE_GETREGSET. + 2013-02-04 Jim MacArthur Marcus Shawcroft Nigel Stephens diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index 7f99887c34..883277c3a4 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; + uint64_t reg; + + iovec.iov_base = ® + iovec.iov_len = sizeof (reg); + + 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; }