From cdbf12a91a9b3ee26919dc8cc87b7ce2ee7a6fb5 Mon Sep 17 00:00:00 2001 From: marcel Date: Sun, 14 Sep 2008 16:52:42 +0000 Subject: Widen psaddr_t from uintptr_t to uint64_t. This results in an ABI change on ILP32 platforms and relating to events. However it's harmless on little-endian ILP32 platforms in the sense that it doesn't cause breakages. Old ILP32 thread libraries write a 32-bit th_p and new thread libraries write a 64-bit th_p. But due to the fact that we have an unused 32-bit data field right after th_p and that field is always initialized to zero, little-endian ILP32 machines effectively have a valid 64-bit th_p by accident. Likewise for new thread libraries and old libthread_db: little endian ILP32 is unaffected. At this time we don't support big-endian threaded applications in GDB, so the breakage for the ILP32 case goes unnoticed. --- gnu/usr.bin/gdb/libgdb/fbsd-threads.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'gnu') diff --git a/gnu/usr.bin/gdb/libgdb/fbsd-threads.c b/gnu/usr.bin/gdb/libgdb/fbsd-threads.c index 730d0f6..eb83f2e 100644 --- a/gnu/usr.bin/gdb/libgdb/fbsd-threads.c +++ b/gnu/usr.bin/gdb/libgdb/fbsd-threads.c @@ -710,7 +710,7 @@ check_event (ptid_t ptid) error ("Cannot get thread event message: %s", thread_db_err_str (err)); } - err = td_thr_get_info_p (msg.th_p, &ti); + err = td_thr_get_info_p ((void *)(uintptr_t)msg.th_p, &ti); if (err != TD_OK) error ("Cannot get thread info: %s", thread_db_err_str (err)); ptid = BUILD_THREAD (ti.ti_tid, GET_PID (ptid)); @@ -720,7 +720,7 @@ check_event (ptid_t ptid) /* We may already know about this thread, for instance when the user has issued the `info threads' command before the SIGTRAP for hitting the thread creation breakpoint was reported. */ - attach_thread (ptid, msg.th_p, &ti, 1); + attach_thread (ptid, (void *)(uintptr_t)msg.th_p, &ti, 1); break; case TD_DEATH: if (!in_thread_list (ptid)) @@ -1178,13 +1178,14 @@ fbsd_thread_pid_to_str (ptid_t ptid) if (ti.ti_lid != 0) { - snprintf (buf, sizeof (buf), "Thread %p (LWP %d)", - th.th_thread, ti.ti_lid); + snprintf (buf, sizeof (buf), "Thread %llx (LWP %d)", + (unsigned long long)th.th_thread, ti.ti_lid); } else { - snprintf (buf, sizeof (buf), "Thread %p (%s)", - th.th_thread, thread_db_state_str (ti.ti_state)); + snprintf (buf, sizeof (buf), "Thread %llx (%s)", + (unsigned long long)th.th_thread, + thread_db_state_str (ti.ti_state)); } return buf; -- cgit v1.1