aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/gdb_proc_service.h2
-rw-r--r--gdb/gdbserver/ChangeLog6
-rw-r--r--gdb/gdbserver/gdb_proc_service.h2
-rw-r--r--gdb/gdbserver/thread-db.c4
-rw-r--r--gdb/linux-thread-db.c11
6 files changed, 27 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 16759d3..16d3f66 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2009-12-18 Doug Evans <dje@google.com>
+
+ * gdb_proc_service.h (psaddr_t): Fix type.
+ * linux-thread-db.c (thread_db_info.td_thr_tls_get_addr_p): Fix
+ signature to match glibc.
+ (thread_db_get_thread_local_address): Use psaddr_t for type of
+ address to match parameter of td_thr_tls_get_addr_p.
+ Cast through psaddr_t instead of (void*) to match parameter of
+ td_thr_tls_get_addr_p.
+
2009-12-17 Stan Shebs <stan@codesourcery.com>
* breakpoint.c (bpstat_check_location): Check for tracepoints.
diff --git a/gdb/gdb_proc_service.h b/gdb/gdb_proc_service.h
index de62c9d..721f91c 100644
--- a/gdb/gdb_proc_service.h
+++ b/gdb/gdb_proc_service.h
@@ -47,7 +47,7 @@ typedef unsigned int lwpid_t;
#endif
#ifndef HAVE_PSADDR_T
-typedef unsigned long psaddr_t;
+typedef void *psaddr_t;
#endif
#ifndef HAVE_PRGREGSET_T
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 5a5c860..a0a8dd6 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-18 Doug Evans <dje@google.com>
+
+ * gdb_proc_service.h (psaddr_t): Fix type.
+ * thread-db.c (thread_db_info.td_thr_tls_get_addr_p): Fix
+ signature to match glibc.
+
2009-12-16 Doug Evans <dje@google.com>
* linux-low.c (linux_read_memory): Fix argument to read.
diff --git a/gdb/gdbserver/gdb_proc_service.h b/gdb/gdbserver/gdb_proc_service.h
index 4d153e6..ab02e9e 100644
--- a/gdb/gdbserver/gdb_proc_service.h
+++ b/gdb/gdbserver/gdb_proc_service.h
@@ -54,7 +54,7 @@ typedef unsigned int lwpid_t;
#endif
#ifndef HAVE_PSADDR_T
-typedef unsigned long psaddr_t;
+typedef void *psaddr_t;
#endif
#ifndef HAVE_PRGREGSET_T
diff --git a/gdb/gdbserver/thread-db.c b/gdb/gdbserver/thread-db.c
index ba6c668..f273082 100644
--- a/gdb/gdbserver/thread-db.c
+++ b/gdb/gdbserver/thread-db.c
@@ -71,8 +71,8 @@ struct thread_db
sigset_t *ti_sigmask_p,
unsigned int ti_user_flags);
td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
- void *map_address,
- size_t offset, void **address);
+ psaddr_t map_address,
+ size_t offset, psaddr_t *address);
const char ** (*td_symbol_list_p) (void);
};
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index c48b870..77ffa56 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -153,8 +153,8 @@ struct thread_db_info
int event);
td_err_e (*td_thr_tls_get_addr_p) (const td_thrhandle_t *th,
- void *map_address,
- size_t offset, void **address);
+ psaddr_t map_address,
+ size_t offset, psaddr_t *address);
};
/* List of known processes using thread_db, and the required
@@ -1530,7 +1530,7 @@ thread_db_get_thread_local_address (struct target_ops *ops,
if (thread_info != NULL && thread_info->private != NULL)
{
td_err_e err;
- void *address;
+ psaddr_t address;
struct thread_db_info *info;
info = get_thread_db_info (GET_PID (ptid));
@@ -1544,8 +1544,11 @@ thread_db_get_thread_local_address (struct target_ops *ops,
gdb_assert (lm != 0);
/* Finally, get the address of the variable. */
+ /* Note the cast through uintptr_t: this interface only works if
+ a target address fits in a psaddr_t, which is a host pointer.
+ So a 32-bit debugger can not access 64-bit TLS through this. */
err = info->td_thr_tls_get_addr_p (&thread_info->private->th,
- (void *)(size_t) lm,
+ (psaddr_t)(uintptr_t) lm,
offset, &address);
#ifdef THREAD_DB_HAS_TD_NOTALLOC